aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-10-27 13:40:20 +0300
committerVeikka Tuominen <git@vexu.eu>2022-10-27 13:40:20 +0300
commit648d34d8eacaf2e35e336abd5b0c50c2ab9bfc94 (patch)
tree3d211f9f81d98e1c6012f59325ec983f0a33d1ef
parentb937a045607deae158ccb6a00f5defaf36510e61 (diff)
downloadzig-648d34d8eacaf2e35e336abd5b0c50c2ab9bfc94.tar.gz
zig-648d34d8eacaf2e35e336abd5b0c50c2ab9bfc94.zip
Sema: coerce zero-bit generic args are coerced properly
Closes #13307
-rw-r--r--src/Sema.zig2
-rw-r--r--test/cases/compile_errors/zero-bit_generic_args_are_coerced_to_param_type.zig10
2 files changed, 12 insertions, 0 deletions
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'