authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-08-30 14:40:48+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-08-30 12:22:07-07:00
log01d19a8d3cdd52ad50f45bfb8666b56ccf8d3a22
tree777dff34489b8bb15e25aed80ff802cb88018c3c
parent67a44211f7a442d33096cc0dfff059eee9315bc6

Sema: do not emit generic poison for non generic parameters

Closes #12679

2 files changed, 32 insertions(+), 2 deletions(-)

src/Sema.zig+16-2
......@@ -8195,8 +8195,22 @@ fn zirParam(
81958195 .is_comptime = comptime_syntax,
81968196 .name = param_name,
81978197 });
8198 const result = try sema.addConstant(param_ty, Value.initTag(.generic_poison));
8199 try sema.inst_map.putNoClobber(sema.gpa, inst, result);
8198
8199 if (is_comptime) {
8200 // If this is a comptime parameter we can add a constant generic_poison
8201 // since this is also a generic parameter.
8202 const result = try sema.addConstant(param_ty, Value.initTag(.generic_poison));
8203 try sema.inst_map.putNoClobber(sema.gpa, inst, result);
8204 } else {
8205 // Otherwise we need a dummy runtime instruction.
8206 const result_index = @intCast(Air.Inst.Index, sema.air_instructions.len);
8207 try sema.air_instructions.append(sema.gpa, .{
8208 .tag = .alloc,
8209 .data = .{ .ty = param_ty },
8210 });
8211 const result = Air.indexToRef(result_index);
8212 try sema.inst_map.putNoClobber(sema.gpa, inst, result);
8213 }
82008214}
82018215
82028216fn zirParamAnytype(
test/cases/compile_errors/non-comptime-parameter-used-as-array-size.zig created+16
......@@ -0,0 +1,16 @@
1export fn entry() void {
2 const llamas1 = makeLlamas(5);
3 const llamas2 = makeLlamas(5);
4 _ = llamas1;
5 _ = llamas2;
6}
7
8fn makeLlamas(count: usize) [count]u8 {
9 _ = count;
10}
11
12// error
13// target=native
14//
15// :8:30: error: unable to resolve comptime value
16// :8:30: note: array length must be comptime known