| ... | ... | @@ -698,7 +698,13 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr |
| 698 | 698 | .lhs = lhs, |
| 699 | 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 | 709 | .slice => { |
| 704 | 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 | 716 | .start = start, |
| 711 | 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 | 727 | .slice_sentinel => { |
| 716 | 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 | 736 | .end = end, |
| 725 | 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 | 748 | .deref => { |