commit 84195467ad974f9b7201e4e1bbd6dccbd5e7ab90 (tree)
parent 2257660916a8c92d953a5a71da6c2d4f7cc031e6
Author: Andrew Kelley <superjoe30@gmail.com>
Date: Wed, 25 Jul 2018 17:08:55 -0400
add compile error for non-inline for loop on comptime type
Diffstat:
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/ir.cpp b/src/ir.cpp
@@ -12142,7 +12142,7 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc
result_type = ira->codegen->builtin_types.entry_invalid;
} else if (type_requires_comptime(result_type)) {
var_class_requires_const = true;
- if (!var->src_is_const && !is_comptime_var) {
+ if (!var->gen_is_const && !is_comptime_var) {
ir_add_error_node(ira, source_node,
buf_sprintf("variable of type '%s' must be const or comptime",
buf_ptr(&result_type->name)));
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
@@ -2,6 +2,20 @@ const tests = @import("tests.zig");
pub fn addCases(cases: *tests.CompileErrorContext) void {
cases.add(
+ "non-inline for loop on a type that requires comptime",
+ \\const Foo = struct {
+ \\ name: []const u8,
+ \\ T: type,
+ \\};
+ \\export fn entry() void {
+ \\ const xx: [2]Foo = undefined;
+ \\ for (xx) |f| {}
+ \\}
+ ,
+ ".tmp_source.zig:7:15: error: variable of type 'Foo' must be const or comptime",
+ );
+
+ cases.add(
"generic fn as parameter without comptime keyword",
\\fn f(_: fn (var) void) void {}
\\fn g(_: var) void {}