mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
Sema: fix issues passing an invalid type to a generic method
Closes #16601
This commit is contained in:
parent
fc6e575684
commit
a91a8df679
13
src/Sema.zig
13
src/Sema.zig
@ -7622,7 +7622,7 @@ fn instantiateGenericCall(
|
||||
else if (call_src == .node_offset) .{ .call_arg = .{
|
||||
.decl = block.src_decl,
|
||||
.call_node_offset = call_src.node_offset.x,
|
||||
.arg_index = @intCast(total_i),
|
||||
.arg_index = @intCast(total_i - @intFromBool(bound_arg_src != null)),
|
||||
} } else .unneeded;
|
||||
|
||||
const comptime_arg = callee.comptime_args.get(ip)[total_i];
|
||||
@ -9343,17 +9343,6 @@ fn zirParam(
|
||||
assert(sema.inst_map.remove(inst));
|
||||
}
|
||||
|
||||
if (sema.generic_owner != .none) {
|
||||
if (try sema.typeHasOnePossibleValue(param_ty)) |opv| {
|
||||
// In this case we are instantiating a generic function call with a non-comptime
|
||||
// non-anytype parameter that ended up being a one-possible-type.
|
||||
// We don't want the parameter to be part of the instantiated function type.
|
||||
sema.inst_map.putAssumeCapacity(inst, Air.internedToRef(opv.toIntern()));
|
||||
sema.comptime_args[param_index] = opv.toIntern();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try block.params.append(sema.arena, .{
|
||||
.ty = param_ty.toIntern(),
|
||||
.is_comptime = comptime_syntax,
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
export fn callBoolMethod() void {
|
||||
const s = S{};
|
||||
s.boolMethod({});
|
||||
}
|
||||
|
||||
export fn callVoidMethod() void {
|
||||
const s = S{};
|
||||
s.voidMethod(false);
|
||||
}
|
||||
|
||||
const S = struct {
|
||||
fn boolMethod(comptime _: @This(), _: bool) void {}
|
||||
fn voidMethod(comptime _: @This(), _: void) void {}
|
||||
};
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :3:18: error: expected type 'bool', found 'void'
|
||||
// :8:18: error: expected type 'void', found 'bool'
|
||||
Loading…
x
Reference in New Issue
Block a user