From 648d34d8eacaf2e35e336abd5b0c50c2ab9bfc94 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Thu, 27 Oct 2022 13:40:20 +0300 Subject: [PATCH] Sema: coerce zero-bit generic args are coerced properly Closes #13307 --- src/Sema.zig | 2 ++ ...zero-bit_generic_args_are_coerced_to_param_type.zig | 10 ++++++++++ 2 files changed, 12 insertions(+) create mode 100644 test/cases/compile_errors/zero-bit_generic_args_are_coerced_to_param_type.zig diff --git a/src/Sema.zig b/src/Sema.zig index b41dd21b81..43c8b88372 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -6738,6 +6738,8 @@ fn analyzeGenericCallArg( try sema.queueFullTypeResolution(param_ty); runtime_args[runtime_i.*] = casted_arg; runtime_i.* += 1; + } else if (try sema.typeHasOnePossibleValue(block, arg_src, comptime_arg.ty)) |_| { + _ = try sema.coerce(block, comptime_arg.ty, uncasted_arg, arg_src); } } diff --git a/test/cases/compile_errors/zero-bit_generic_args_are_coerced_to_param_type.zig b/test/cases/compile_errors/zero-bit_generic_args_are_coerced_to_param_type.zig new file mode 100644 index 0000000000..0288979084 --- /dev/null +++ b/test/cases/compile_errors/zero-bit_generic_args_are_coerced_to_param_type.zig @@ -0,0 +1,10 @@ +fn bar(a: anytype, _: @TypeOf(a)) void {} +pub export fn entry() void { + bar(@as(u0, 0), "fooo"); +} + +// error +// backend=stage2 +// target=native +// +// :3:21: error: expected type 'u0', found '*const [4:0]u8'