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...@@ -6473,7 +6473,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref
6473 .never => {6473 .never => {
6474 // Returning a value that cannot be an error; skip error defers.6474 // Returning a value that cannot be an error; skip error defers.
6475 try genDefers(gz, defer_outer, scope, .normal_only);6475 try genDefers(gz, defer_outer, scope, .normal_only);
6476 _ = try gz.addUnNode(.ret_node, operand, node);6476 try gz.addRet(rl, operand, node);
6477 return Zir.Inst.Ref.unreachable_value;6477 return Zir.Inst.Ref.unreachable_value;
6478 },6478 },
6479 .always => {6479 .always => {
test/behavior/struct.zig+15
...@@ -129,3 +129,18 @@ const MemberFnRand = struct {...@@ -129,3 +129,18 @@ const MemberFnRand = struct {
129 return r.seed;129 return r.seed;
130 }130 }
131};131};
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" {...@@ -61,21 +61,6 @@ test "store member function in variable" {
61 try expect(result == 1234);61 try expect(result == 1234);
62}62}
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
79test "empty struct method call" {64test "empty struct method call" {
80 const es = EmptyStruct{};65 const es = EmptyStruct{};
81 try expect(es.method() == 1234);66 try expect(es.method() == 1234);