authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-01-08 21:32:53+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-08 17:25:00-05:00
log27b290f3125b2526200bad4a818f9f43ba58ee2e
tree58fd85562beb8abcfebfadff1e525028518c51f8
parent02ace4569ec52561f627ad3a33d7b90b7bdbb6f5

Propagate more failures upwards

Fixes #4112

2 files changed, 13 insertions(+), 3 deletions(-)

src/analyze.cpp+6-1
...@@ -4787,11 +4787,16 @@ static void analyze_fn_body(CodeGen *g, ZigFn *fn_table_entry) {...@@ -4787,11 +4787,16 @@ static void analyze_fn_body(CodeGen *g, ZigFn *fn_table_entry) {
4787 ZigType *fn_type = fn_table_entry->type_entry;4787 ZigType *fn_type = fn_table_entry->type_entry;
4788 assert(!fn_type->data.fn.is_generic);4788 assert(!fn_type->data.fn.is_generic);
47894789
4790 ir_gen_fn(g, fn_table_entry);4790 if (!ir_gen_fn(g, fn_table_entry)) {
4791 fn_table_entry->anal_state = FnAnalStateInvalid;
4792 return;
4793 }
4794
4791 if (fn_table_entry->ir_executable->first_err_trace_msg != nullptr) {4795 if (fn_table_entry->ir_executable->first_err_trace_msg != nullptr) {
4792 fn_table_entry->anal_state = FnAnalStateInvalid;4796 fn_table_entry->anal_state = FnAnalStateInvalid;
4793 return;4797 return;
4794 }4798 }
4799
4795 if (g->verbose_ir) {4800 if (g->verbose_ir) {
4796 fprintf(stderr, "\n");4801 fprintf(stderr, "\n");
4797 ast_render(stderr, fn_table_entry->body_node, 4);4802 ast_render(stderr, fn_table_entry->body_node, 4);
src/ir.cpp+7-2
...@@ -9164,7 +9164,10 @@ bool ir_gen(CodeGen *codegen, AstNode *node, Scope *scope, IrExecutable *ir_exec...@@ -9164,7 +9164,10 @@ bool ir_gen(CodeGen *codegen, AstNode *node, Scope *scope, IrExecutable *ir_exec
9164 ir_ref_bb(irb->current_basic_block);9164 ir_ref_bb(irb->current_basic_block);
91659165
9166 IrInstruction *result = ir_gen_node_extra(irb, node, scope, LValNone, nullptr);9166 IrInstruction *result = ir_gen_node_extra(irb, node, scope, LValNone, nullptr);
9167 assert(result);9167
9168 if (result == irb->codegen->invalid_instruction)
9169 return false;
9170
9168 if (irb->exec->first_err_trace_msg != nullptr) {9171 if (irb->exec->first_err_trace_msg != nullptr) {
9169 codegen->trace_err = irb->exec->first_err_trace_msg;9172 codegen->trace_err = irb->exec->first_err_trace_msg;
9170 return false;9173 return false;
...@@ -12029,7 +12032,9 @@ ZigValue *ir_eval_const_value(CodeGen *codegen, Scope *scope, AstNode *node,...@@ -12029,7 +12032,9 @@ ZigValue *ir_eval_const_value(CodeGen *codegen, Scope *scope, AstNode *node,
12029 ir_executable->fn_entry = fn_entry;12032 ir_executable->fn_entry = fn_entry;
12030 ir_executable->c_import_buf = c_import_buf;12033 ir_executable->c_import_buf = c_import_buf;
12031 ir_executable->begin_scope = scope;12034 ir_executable->begin_scope = scope;
12032 ir_gen(codegen, node, scope, ir_executable);12035
12036 if (!ir_gen(codegen, node, scope, ir_executable))
12037 return codegen->invalid_instruction->value;
1203312038
12034 if (ir_executable->first_err_trace_msg != nullptr) {12039 if (ir_executable->first_err_trace_msg != nullptr) {
12035 codegen->trace_err = ir_executable->first_err_trace_msg;12040 codegen->trace_err = ir_executable->first_err_trace_msg;