zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit d127c1d59ebf19e5ffaedece99a39f69712683b0 (tree)
parent 032c722d2019a475362c0ae01241a80417bdd8a2
Author: Daniele Cocca <daniele.cocca@gmail.com>
Date:   Sat, 30 Apr 2022 07:34:21 +0100

CBE: handle returning `undefined` for ErrorUnion

Just like for Struct in 8238d4b33585a715c58ab559cd001dd3ea1db55b, in the
case of ErrorUnion struct we need to return a compound literal "(T){...}"
instead of just "{}", which is invalid code when used in e.g. a "return"
expression.

Diffstat:
Msrc/codegen/c.zig | 2+-
Mtest/behavior/sizeof_and_typeof.zig | 2--
2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/codegen/c.zig b/src/codegen/c.zig @@ -580,7 +580,7 @@ pub const DeclGen = struct { 64 => return writer.writeAll("(void *)0xaaaaaaaaaaaaaaaa"), else => unreachable, }, - .Struct => { + .Struct, .ErrorUnion => { try writer.writeByte('('); try dg.renderTypecast(writer, ty); return writer.writeAll("){0xaa}"); diff --git a/test/behavior/sizeof_and_typeof.zig b/test/behavior/sizeof_and_typeof.zig @@ -187,7 +187,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" { test "@TypeOf() has no runtime side effects" { if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; const S = struct { fn foo(comptime T: type, ptr: *T) T { ptr.* += 1; @@ -203,7 +202,6 @@ test "@TypeOf() has no runtime side effects" { test "branching logic inside @TypeOf" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; const S = struct { var data: i32 = 0; fn foo() anyerror!i32 {