authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-12-03 21:07:01+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-12-03 23:31:35+01:00
log54706dd2294d998c6c6ad91c80a23a3471677c43
tree66d856c4c9715377385ac5c0abbe477eafae7991
parentecf7dfcd3a3e575ee525487687a0b7607a6a7481

Allow idx 0 err to be put into error_name_table

This way, in the very situation where a function has a return type an error union such as `anyerror!void` but doesn't have any erroneous paths, calling `@errorName` on the unpacked error (which will never be triggered) will not trip up the static analyzer.

1 files changed, 2 insertions(+), 6 deletions(-)

src/stage1/codegen.cpp+2-6
...@@ -5178,11 +5178,7 @@ static LLVMValueRef ir_render_ref(CodeGen *g, IrExecutableGen *executable, IrIns...@@ -5178,11 +5178,7 @@ static LLVMValueRef ir_render_ref(CodeGen *g, IrExecutableGen *executable, IrIns
51785178
5179static LLVMValueRef ir_render_err_name(CodeGen *g, IrExecutableGen *executable, IrInstGenErrName *instruction) {5179static LLVMValueRef ir_render_err_name(CodeGen *g, IrExecutableGen *executable, IrInstGenErrName *instruction) {
5180 assert(g->generate_error_name_table);5180 assert(g->generate_error_name_table);
51815181 assert(g->errors_by_index.length > 0);
5182 if (g->errors_by_index.length == 1) {
5183 LLVMBuildUnreachable(g->builder);
5184 return nullptr;
5185 }
51865182
5187 LLVMValueRef err_val = ir_llvm_value(g, instruction->value);5183 LLVMValueRef err_val = ir_llvm_value(g, instruction->value);
5188 if (ir_want_runtime_safety(g, &instruction->base)) {5184 if (ir_want_runtime_safety(g, &instruction->base)) {
...@@ -7890,7 +7886,7 @@ static void render_const_val_global(CodeGen *g, ZigValue *const_val, const char...@@ -7890,7 +7886,7 @@ static void render_const_val_global(CodeGen *g, ZigValue *const_val, const char
7890}7886}
78917887
7892static void generate_error_name_table(CodeGen *g) {7888static void generate_error_name_table(CodeGen *g) {
7893 if (g->err_name_table != nullptr || !g->generate_error_name_table || g->errors_by_index.length == 1) {7889 if (g->err_name_table != nullptr || !g->generate_error_name_table) {
7894 return;7890 return;
7895 }7891 }
78967892