authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-25 17:08:55-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-25 17:08:55-04:00
log84195467ad974f9b7201e4e1bbd6dccbd5e7ab90
tree4f7f0a4c239b5fbbd85bb6be5588db8179898802
parent2257660916a8c92d953a5a71da6c2d4f7cc031e6

add compile error for non-inline for loop on comptime type


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

src/ir.cpp+1-1
......@@ -12142,7 +12142,7 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc
1214212142 result_type = ira->codegen->builtin_types.entry_invalid;
1214312143 } else if (type_requires_comptime(result_type)) {
1214412144 var_class_requires_const = true;
12145 if (!var->src_is_const && !is_comptime_var) {
12145 if (!var->gen_is_const && !is_comptime_var) {
1214612146 ir_add_error_node(ira, source_node,
1214712147 buf_sprintf("variable of type '%s' must be const or comptime",
1214812148 buf_ptr(&result_type->name)));
test/compile_errors.zig+14
......@@ -1,6 +1,20 @@
11const tests = @import("tests.zig");
22
33pub fn addCases(cases: *tests.CompileErrorContext) void {
4 cases.add(
5 "non-inline for loop on a type that requires comptime",
6 \\const Foo = struct {
7 \\ name: []const u8,
8 \\ T: type,
9 \\};
10 \\export fn entry() void {
11 \\ const xx: [2]Foo = undefined;
12 \\ for (xx) |f| {}
13 \\}
14 ,
15 ".tmp_source.zig:7:15: error: variable of type 'Foo' must be const or comptime",
16 );
17
418 cases.add(
519 "generic fn as parameter without comptime keyword",
620 \\fn f(_: fn (var) void) void {}