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...@@ -9396,10 +9396,12 @@ static TypeTableEntry *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstru
9396 }9396 }
9397 }9397 }
9398 ScopeDecls *container_scope = get_container_scope(child_type);9398 ScopeDecls *container_scope = get_container_scope(child_type);
9399 auto entry = container_scope->decl_table.maybe_get(field_name);9399 if (container_scope != nullptr) {
9400 Tld *tld = entry ? entry->value : nullptr;9400 auto entry = container_scope->decl_table.maybe_get(field_name);
9401 if (tld) {9401 Tld *tld = entry ? entry->value : nullptr;
9402 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);9402 if (tld) {
9403 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);
9404 }
9403 }9405 }
9404 ir_add_error(ira, &field_ptr_instruction->base,9406 ir_add_error(ira, &field_ptr_instruction->base,
9405 buf_sprintf("container '%s' has no member called '%s'",9407 buf_sprintf("container '%s' has no member called '%s'",
test/run_tests.cpp+6
...@@ -1848,6 +1848,12 @@ fn doSomeAsm() {...@@ -1848,6 +1848,12 @@ fn doSomeAsm() {
1848 );1848 );
1849}1849}
1850 )SOURCE", 1, ".tmp_source.zig:7:5: error: unable to evaluate constant expression");1850 )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'");
1851}1857}
18521858
1853//////////////////////////////////////////////////////////////////////////////1859//////////////////////////////////////////////////////////////////////////////