Commit 01d19a8d3c
Changed files (2)
src
test
cases
compile_errors
src/Sema.zig
@@ -8195,8 +8195,22 @@ fn zirParam(
.is_comptime = comptime_syntax,
.name = param_name,
});
- const result = try sema.addConstant(param_ty, Value.initTag(.generic_poison));
- try sema.inst_map.putNoClobber(sema.gpa, inst, result);
+
+ if (is_comptime) {
+ // If this is a comptime parameter we can add a constant generic_poison
+ // since this is also a generic parameter.
+ const result = try sema.addConstant(param_ty, Value.initTag(.generic_poison));
+ try sema.inst_map.putNoClobber(sema.gpa, inst, result);
+ } else {
+ // Otherwise we need a dummy runtime instruction.
+ const result_index = @intCast(Air.Inst.Index, sema.air_instructions.len);
+ try sema.air_instructions.append(sema.gpa, .{
+ .tag = .alloc,
+ .data = .{ .ty = param_ty },
+ });
+ const result = Air.indexToRef(result_index);
+ try sema.inst_map.putNoClobber(sema.gpa, inst, result);
+ }
}
fn zirParamAnytype(
test/cases/compile_errors/non-comptime-parameter-used-as-array-size.zig
@@ -0,0 +1,16 @@
+export fn entry() void {
+ const llamas1 = makeLlamas(5);
+ const llamas2 = makeLlamas(5);
+ _ = llamas1;
+ _ = llamas2;
+}
+
+fn makeLlamas(count: usize) [count]u8 {
+ _ = count;
+}
+
+// error
+// target=native
+//
+// :8:30: error: unable to resolve comptime value
+// :8:30: note: array length must be comptime known