authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-04-04 21:36:24-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-04-04 21:36:24-04:00
loga461ae6c1fd1f8a75126327f104c7c077d35f0a5
tree8f4346d387bf930e5e770985594aec4ab82074e0
parente30f713640be6590a81f23abe9571869469a5d35

fix crash when referencing invalid member of builtin enum

closes #304

2 files changed, 12 insertions(+), 4 deletions(-)

src/ir.cpp+6-4
......@@ -9396,10 +9396,12 @@ static TypeTableEntry *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstru
93969396 }
93979397 }
93989398 ScopeDecls *container_scope = get_container_scope(child_type);
9399 auto entry = container_scope->decl_table.maybe_get(field_name);
9400 Tld *tld = entry ? entry->value : nullptr;
9401 if (tld) {
9402 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);
9399 if (container_scope != nullptr) {
9400 auto entry = container_scope->decl_table.maybe_get(field_name);
9401 Tld *tld = entry ? entry->value : nullptr;
9402 if (tld) {
9403 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);
9404 }
94039405 }
94049406 ir_add_error(ira, &field_ptr_instruction->base,
94059407 buf_sprintf("container '%s' has no member called '%s'",
test/run_tests.cpp+6
......@@ -1848,6 +1848,12 @@ fn doSomeAsm() {
18481848 );
18491849}
18501850 )SOURCE", 1, ".tmp_source.zig:7:5: error: unable to evaluate constant expression");
1851
1852 add_compile_fail_case("invalid member of builtin enum", R"SOURCE(
1853export fn entry() {
1854 const foo = Arch.x86;
1855}
1856 )SOURCE", 1, ".tmp_source.zig:3:21: error: container 'Arch' has no member called 'x86'");
18511857}
18521858
18531859//////////////////////////////////////////////////////////////////////////////