Commit a461ae6c1f

Andrew Kelley <superjoe30@gmail.com>
2017-04-05 03:36:24
fix crash when referencing invalid member of builtin enum
closes #304
1 parent e30f713
Changed files (2)
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'",
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'");
 }
 
 //////////////////////////////////////////////////////////////////////////////