authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-10-07 17:42:17-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-10-07 17:42:17-07:00
log75cecef63ccaffda32b7ec2dd2d6cc3cb0b3d23a
tree40154037ee31701ccfa3484b7dedefdc8139baea
parenta0c44e806b70021203f5b9cf9af3b5049c40a75a

stage2: fix returning structs byval from functions


3 files changed, 16 insertions(+), 16 deletions(-)

src/AstGen.zig+1-1
......@@ -6473,7 +6473,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref
64736473 .never => {
64746474 // Returning a value that cannot be an error; skip error defers.
64756475 try genDefers(gz, defer_outer, scope, .normal_only);
6476 _ = try gz.addUnNode(.ret_node, operand, node);
6476 try gz.addRet(rl, operand, node);
64776477 return Zir.Inst.Ref.unreachable_value;
64786478 },
64796479 .always => {
test/behavior/struct.zig+15
......@@ -129,3 +129,18 @@ const MemberFnRand = struct {
129129 return r.seed;
130130 }
131131};
132
133test "return struct byval from function" {
134 const bar = makeBar2(1234, 5678);
135 try expect(bar.y == 5678);
136}
137const Bar = struct {
138 x: i32,
139 y: i32,
140};
141fn makeBar2(x: i32, y: i32) Bar {
142 return Bar{
143 .x = x,
144 .y = y,
145 };
146}
test/behavior/struct_stage1.zig-15
......@@ -61,21 +61,6 @@ test "store member function in variable" {
6161 try expect(result == 1234);
6262}
6363
64test "return struct byval from function" {
65 const bar = makeBar2(1234, 5678);
66 try expect(bar.y == 5678);
67}
68const Bar = struct {
69 x: i32,
70 y: i32,
71};
72fn makeBar2(x: i32, y: i32) Bar {
73 return Bar{
74 .x = x,
75 .y = y,
76 };
77}
78
7964test "empty struct method call" {
8065 const es = EmptyStruct{};
8166 try expect(es.method() == 1234);