Commit 2c710382a8

Andrew Kelley <superjoe30@gmail.com>
2016-05-17 07:51:08
fix crash when error evaluating target of for expr
closes #153
1 parent 3df9389
Changed files (2)
src/analyze.cpp
@@ -3953,7 +3953,7 @@ static TypeTableEntry *analyze_for_expr(CodeGen *g, ImportTableEntry *import, Bl
     }
 
     TypeTableEntry *var_type;
-    if (node->data.for_expr.elem_is_ptr) {
+    if (child_type->id != TypeTableEntryIdInvalid && node->data.for_expr.elem_is_ptr) {
         var_type = get_pointer_to_type(g, child_type, false);
     } else {
         var_type = child_type;
test/run_tests.cpp
@@ -1395,6 +1395,17 @@ fn something() -> %void { }
 pub fn main(args: [][]u8) { }
     )SOURCE", 1, ".tmp_source.zig:2:27: error: expected return type of main to be '%void', instead is 'void'");
 
+
+    add_compile_fail_case("invalid pointer for var type", R"SOURCE(
+extern fn ext() -> isize;
+var bytes: [ext()]u8 = undefined;
+fn f() {
+    for (bytes) |*b, i| {
+        *b = u8(i);
+    }
+}
+    )SOURCE", 1, ".tmp_source.zig:3:13: error: unable to evaluate constant expression");
+
 }
 
 //////////////////////////////////////////////////////////////////////////////