authorgravatar for daniele.cocca@gmail.comDaniele Cocca <daniele.cocca@gmail.com> 2022-04-30 07:34:21+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-04-30 13:29:21-04:00
logd127c1d59ebf19e5ffaedece99a39f69712683b0
treea0eeee42fefce1fba094ab8ce6851452aba561ac
parent032c722d2019a475362c0ae01241a80417bdd8a2

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.

2 files changed, 1 insertions(+), 3 deletions(-)

src/codegen/c.zig+1-1
...@@ -580,7 +580,7 @@ pub const DeclGen = struct {...@@ -580,7 +580,7 @@ pub const DeclGen = struct {
580 64 => return writer.writeAll("(void *)0xaaaaaaaaaaaaaaaa"),580 64 => return writer.writeAll("(void *)0xaaaaaaaaaaaaaaaa"),
581 else => unreachable,581 else => unreachable,
582 },582 },
583 .Struct => {583 .Struct, .ErrorUnion => {
584 try writer.writeByte('(');584 try writer.writeByte('(');
585 try dg.renderTypecast(writer, ty);585 try dg.renderTypecast(writer, ty);
586 return writer.writeAll("){0xaa}");586 return writer.writeAll("){0xaa}");
test/behavior/sizeof_and_typeof.zig-2
...@@ -187,7 +187,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {...@@ -187,7 +187,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {
187187
188test "@TypeOf() has no runtime side effects" {188test "@TypeOf() has no runtime side effects" {
189 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;189 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
190 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
191 const S = struct {190 const S = struct {
192 fn foo(comptime T: type, ptr: *T) T {191 fn foo(comptime T: type, ptr: *T) T {
193 ptr.* += 1;192 ptr.* += 1;
...@@ -203,7 +202,6 @@ test "@TypeOf() has no runtime side effects" {...@@ -203,7 +202,6 @@ test "@TypeOf() has no runtime side effects" {
203test "branching logic inside @TypeOf" {202test "branching logic inside @TypeOf" {
204 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;203 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
205 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;204 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
206 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
207 const S = struct {205 const S = struct {
208 var data: i32 = 0;206 var data: i32 = 0;
209 fn foo() anyerror!i32 {207 fn foo() anyerror!i32 {