| author | |
| committer | |
| log | 71e873703ffc49138d95cb66636856062341c420 |
| tree | 420e5df26dce2a83d65fb6a26d6268264c47fde4 |
| parent | 9f2aa3fbeec451021837ca6bca2baa47302f0468 |
See also #14938.
Resolves: #149313 files changed, 25 insertions(+), 3 deletions(-)
src/Sema.zig+7-3| ... | @@ -15454,9 +15454,13 @@ fn zirRetAddr( | ... | @@ -15454,9 +15454,13 @@ fn zirRetAddr( |
| 15454 | block: *Block, | 15454 | block: *Block, |
| 15455 | extended: Zir.Inst.Extended.InstData, | 15455 | extended: Zir.Inst.Extended.InstData, |
| 15456 | ) CompileError!Air.Inst.Ref { | 15456 | ) CompileError!Air.Inst.Ref { |
| 15457 | const src = LazySrcLoc.nodeOffset(@bitCast(i32, extended.operand)); | 15457 | _ = extended; |
| 15458 | try sema.requireRuntimeBlock(block, src, null); | 15458 | if (block.is_comptime) { |
| 15459 | return try block.addNoOp(.ret_addr); | 15459 | // TODO: we could give a meaningful lazy value here. #14938 |
| 15460 | return sema.addIntUnsigned(Type.usize, 0); | ||
| 15461 | } else { | ||
| 15462 | return block.addNoOp(.ret_addr); | ||
| 15463 | } | ||
| 15460 | } | 15464 | } |
| 15461 | 15465 | ||
| 15462 | fn zirFrameAddress( | 15466 | fn zirFrameAddress( |
test/behavior.zig+1| ... | @@ -191,6 +191,7 @@ test { | ... | @@ -191,6 +191,7 @@ test { |
| 191 | _ = @import("behavior/pub_enum.zig"); | 191 | _ = @import("behavior/pub_enum.zig"); |
| 192 | _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig"); | 192 | _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig"); |
| 193 | _ = @import("behavior/reflection.zig"); | 193 | _ = @import("behavior/reflection.zig"); |
| 194 | _ = @import("behavior/return_address.zig"); | ||
| 194 | _ = @import("behavior/saturating_arithmetic.zig"); | 195 | _ = @import("behavior/saturating_arithmetic.zig"); |
| 195 | _ = @import("behavior/select.zig"); | 196 | _ = @import("behavior/select.zig"); |
| 196 | _ = @import("behavior/shuffle.zig"); | 197 | _ = @import("behavior/shuffle.zig"); |
test/behavior/return_address.zig created+17| ... | @@ -0,0 +1,17 @@ | ||
| 1 | const builtin = @import("builtin"); | ||
| 2 | const testing = @import("std").testing; | ||
| 3 | |||
| 4 | fn retAddr() usize { | ||
| 5 | return @returnAddress(); | ||
| 6 | } | ||
| 7 | |||
| 8 | test "return address" { | ||
| 9 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | ||
| 10 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 11 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | ||
| 12 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | ||
| 13 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | ||
| 14 | _ = retAddr(); | ||
| 15 | // TODO: #14938 | ||
| 16 | try testing.expectEqual(0, comptime retAddr()); | ||
| 17 | } | ||