Commit 9ec6a78f12

Andrew Kelley <superjoe30@gmail.com>
2016-09-23 17:53:05
fix compiler crash for misspelled type with pointer only reference
closes #196
1 parent 46eb77d
Changed files (2)
src/analyze.cpp
@@ -2468,6 +2468,10 @@ static TypeTableEntry *analyze_enum_value_expr(CodeGen *g, ImportTableEntry *imp
     assert(field_access_node->type == NodeTypeFieldAccessExpr);
 
     TypeEnumField *type_enum_field = get_enum_field(enum_type, field_name);
+    if (type_enum_field->type_entry->id == TypeTableEntryIdInvalid) {
+        return g->builtin_types.entry_invalid;
+    }
+
     field_access_node->data.field_access_expr.type_enum_field = type_enum_field;
 
     if (type_enum_field) {
test/run_tests.cpp
@@ -1501,6 +1501,39 @@ fn foo(blah: []u8) {
     for (blah) { }
 }
     )SOURCE", 1, ".tmp_source.zig:3:16: error: for loop expression missing element parameter");
+
+    add_compile_fail_case("misspelled type with pointer only reference", R"SOURCE(
+const JasonHM = u8;
+const JasonList = &JsonNode;
+
+enum JsonOA {
+    JSONArray: JsonList,
+    JSONObject: JasonHM,
+}
+
+enum JsonType {
+    JSONNull: void,
+    JSONInteger: isize,
+    JSONDouble: f64,
+    JSONBool: bool,
+    JSONString: []u8,
+    JSONArray,
+    JSONObject,
+}
+
+pub struct JsonNode {
+    kind: JsonType,
+    jobject: ?JsonOA,
+}
+
+fn foo() {
+    var jll: JasonList = undefined;
+    jll.init(&debug.global_allocator);
+    var jd = JsonNode {.kind = JsonType.JSONArray , .jobject = JsonOA.JSONArray {jll} };
+}
+    )SOURCE", 2,
+        ".tmp_source.zig:6:16: error: use of undeclared identifier 'JsonList'",
+        ".tmp_source.zig:27:8: error: no function named 'init' in 'JsonNode'");
 }
 
 //////////////////////////////////////////////////////////////////////////////