llvm: unions which are equivalent to enums are not by-ref

The LLVM backend lowers unions where all fields are zero-bit as
equivalent to their backing enum, and expects them to have the same
by-ref-ness in at least one place in the backend, probably more.

Resolves: #23577
This commit is contained in:
mlugg
2025-08-12 23:18:05 +01:00
parent 38ba425b26
commit ba6abd71c2
2 changed files with 16 additions and 1 deletions

View File

@@ -2722,3 +2722,18 @@ test "@intFromFloat vector boundary cases" {
try S.doTheTest();
try comptime S.doTheTest();
}
test "coerce enum to union with zero-bit fields through local variables" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
const E = enum(u1) { foo, bar };
const U = union(E) { foo, bar };
var runtime: E = undefined;
runtime = .foo;
var result: U = undefined;
result = runtime;
try expect(result == .foo);
}