zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit a461ae6c1fd1f8a75126327f104c7c077d35f0a5 (tree)
parent e30f713640be6590a81f23abe9571869469a5d35
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Tue,  4 Apr 2017 21:36:24 -0400

fix crash when referencing invalid member of builtin enum

closes #304

Diffstat:
Msrc/ir.cpp | 10++++++----
Mtest/run_tests.cpp | 6++++++
2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -9396,10 +9396,12 @@ static TypeTableEntry *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstru } } ScopeDecls *container_scope = get_container_scope(child_type); - auto entry = container_scope->decl_table.maybe_get(field_name); - Tld *tld = entry ? entry->value : nullptr; - if (tld) { - return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld); + if (container_scope != nullptr) { + auto entry = container_scope->decl_table.maybe_get(field_name); + Tld *tld = entry ? entry->value : nullptr; + if (tld) { + return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld); + } } ir_add_error(ira, &field_ptr_instruction->base, buf_sprintf("container '%s' has no member called '%s'", diff --git a/test/run_tests.cpp b/test/run_tests.cpp @@ -1848,6 +1848,12 @@ fn doSomeAsm() { ); } )SOURCE", 1, ".tmp_source.zig:7:5: error: unable to evaluate constant expression"); + + add_compile_fail_case("invalid member of builtin enum", R"SOURCE( +export fn entry() { + const foo = Arch.x86; +} + )SOURCE", 1, ".tmp_source.zig:3:21: error: container 'Arch' has no member called 'x86'"); } //////////////////////////////////////////////////////////////////////////////