authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-16 22:51:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-16 22:51:08-07:00
log2c710382a888e8f45b958bdf3e77213cc18c2733
treed6933afbfeb9d50434fb1bc5c0743c4e1a083e34
parent3df9389215b365a83b1a509e55086595105c1f58

fix crash when error evaluating target of for expr

closes #153

2 files changed, 12 insertions(+), 1 deletions(-)

src/analyze.cpp+1-1
...@@ -3953,7 +3953,7 @@ static TypeTableEntry *analyze_for_expr(CodeGen *g, ImportTableEntry *import, Bl...@@ -3953,7 +3953,7 @@ static TypeTableEntry *analyze_for_expr(CodeGen *g, ImportTableEntry *import, Bl
3953 }3953 }
39543954
3955 TypeTableEntry *var_type;3955 TypeTableEntry *var_type;
3956 if (node->data.for_expr.elem_is_ptr) {3956 if (child_type->id != TypeTableEntryIdInvalid && node->data.for_expr.elem_is_ptr) {
3957 var_type = get_pointer_to_type(g, child_type, false);3957 var_type = get_pointer_to_type(g, child_type, false);
3958 } else {3958 } else {
3959 var_type = child_type;3959 var_type = child_type;
test/run_tests.cpp+11
...@@ -1395,6 +1395,17 @@ fn something() -> %void { }...@@ -1395,6 +1395,17 @@ fn something() -> %void { }
1395pub fn main(args: [][]u8) { }1395pub fn main(args: [][]u8) { }
1396 )SOURCE", 1, ".tmp_source.zig:2:27: error: expected return type of main to be '%void', instead is 'void'");1396 )SOURCE", 1, ".tmp_source.zig:2:27: error: expected return type of main to be '%void', instead is 'void'");
13971397
1398
1399 add_compile_fail_case("invalid pointer for var type", R"SOURCE(
1400extern fn ext() -> isize;
1401var bytes: [ext()]u8 = undefined;
1402fn f() {
1403 for (bytes) |*b, i| {
1404 *b = u8(i);
1405 }
1406}
1407 )SOURCE", 1, ".tmp_source.zig:3:13: error: unable to evaluate constant expression");
1408
1398}1409}
13991410
1400//////////////////////////////////////////////////////////////////////////////1411//////////////////////////////////////////////////////////////////////////////