add compile error for non-inline for loop on comptime type
parent
2257660916
commit
84195467ad
|
@ -12142,7 +12142,7 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc
|
||||||
result_type = ira->codegen->builtin_types.entry_invalid;
|
result_type = ira->codegen->builtin_types.entry_invalid;
|
||||||
} else if (type_requires_comptime(result_type)) {
|
} else if (type_requires_comptime(result_type)) {
|
||||||
var_class_requires_const = true;
|
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,
|
ir_add_error_node(ira, source_node,
|
||||||
buf_sprintf("variable of type '%s' must be const or comptime",
|
buf_sprintf("variable of type '%s' must be const or comptime",
|
||||||
buf_ptr(&result_type->name)));
|
buf_ptr(&result_type->name)));
|
||||||
|
|
|
@ -1,6 +1,20 @@
|
||||||
const tests = @import("tests.zig");
|
const tests = @import("tests.zig");
|
||||||
|
|
||||||
pub fn addCases(cases: *tests.CompileErrorContext) void {
|
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(
|
cases.add(
|
||||||
"generic fn as parameter without comptime keyword",
|
"generic fn as parameter without comptime keyword",
|
||||||
\\fn f(_: fn (var) void) void {}
|
\\fn f(_: fn (var) void) void {}
|
||||||
|
|
Loading…
Reference in New Issue