| ... | @@ -698,7 +698,13 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr | ... | @@ -698,7 +698,13 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr |
| 698 | .lhs = lhs, | 698 | .lhs = lhs, |
| 699 | .start = start, | 699 | .start = start, |
| 700 | }); | 700 | }); |
| 701 | return rvalue(gz, rl, result, node); | 701 | switch (rl) { |
| | 702 | .ref, .none_or_ref => return result, |
| | 703 | else => { |
| | 704 | const dereffed = try gz.addUnNode(.load, result, node); |
| | 705 | return rvalue(gz, rl, dereffed, node); |
| | 706 | }, |
| | 707 | } |
| 702 | }, | 708 | }, |
| 703 | .slice => { | 709 | .slice => { |
| 704 | const lhs = try expr(gz, scope, .ref, node_datas[node].lhs); | 710 | const lhs = try expr(gz, scope, .ref, node_datas[node].lhs); |
| ... | @@ -710,7 +716,13 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr | ... | @@ -710,7 +716,13 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr |
| 710 | .start = start, | 716 | .start = start, |
| 711 | .end = end, | 717 | .end = end, |
| 712 | }); | 718 | }); |
| 713 | return rvalue(gz, rl, result, node); | 719 | switch (rl) { |
| | 720 | .ref, .none_or_ref => return result, |
| | 721 | else => { |
| | 722 | const dereffed = try gz.addUnNode(.load, result, node); |
| | 723 | return rvalue(gz, rl, dereffed, node); |
| | 724 | }, |
| | 725 | } |
| 714 | }, | 726 | }, |
| 715 | .slice_sentinel => { | 727 | .slice_sentinel => { |
| 716 | const lhs = try expr(gz, scope, .ref, node_datas[node].lhs); | 728 | const lhs = try expr(gz, scope, .ref, node_datas[node].lhs); |
| ... | @@ -724,7 +736,13 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr | ... | @@ -724,7 +736,13 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr |
| 724 | .end = end, | 736 | .end = end, |
| 725 | .sentinel = sentinel, | 737 | .sentinel = sentinel, |
| 726 | }); | 738 | }); |
| 727 | return rvalue(gz, rl, result, node); | 739 | switch (rl) { |
| | 740 | .ref, .none_or_ref => return result, |
| | 741 | else => { |
| | 742 | const dereffed = try gz.addUnNode(.load, result, node); |
| | 743 | return rvalue(gz, rl, dereffed, node); |
| | 744 | }, |
| | 745 | } |
| 728 | }, | 746 | }, |
| 729 | | 747 | |
| 730 | .deref => { | 748 | .deref => { |