diff --git a/src/Sema.zig b/src/Sema.zig index 9b137cf5af..f5f1bc15b3 100644 --- a/src/Sema.zig +++ b/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, diff --git a/test/cases/compile_errors/generic_method_call_invalid_coercion.zig b/test/cases/compile_errors/generic_method_call_invalid_coercion.zig new file mode 100644 index 0000000000..59fa50da37 --- /dev/null +++ b/test/cases/compile_errors/generic_method_call_invalid_coercion.zig @@ -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'