mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
Sema: make @returnAddress return 0 at comptime
See also #14938. Resolves: #14931
This commit is contained in:
parent
9f2aa3fbee
commit
71e873703f
3 changed files with 25 additions and 3 deletions
10
src/Sema.zig
10
src/Sema.zig
|
|
@ -15454,9 +15454,13 @@ fn zirRetAddr(
|
||||||
block: *Block,
|
block: *Block,
|
||||||
extended: Zir.Inst.Extended.InstData,
|
extended: Zir.Inst.Extended.InstData,
|
||||||
) CompileError!Air.Inst.Ref {
|
) CompileError!Air.Inst.Ref {
|
||||||
const src = LazySrcLoc.nodeOffset(@bitCast(i32, extended.operand));
|
_ = extended;
|
||||||
try sema.requireRuntimeBlock(block, src, null);
|
if (block.is_comptime) {
|
||||||
return try block.addNoOp(.ret_addr);
|
// TODO: we could give a meaningful lazy value here. #14938
|
||||||
|
return sema.addIntUnsigned(Type.usize, 0);
|
||||||
|
} else {
|
||||||
|
return block.addNoOp(.ret_addr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn zirFrameAddress(
|
fn zirFrameAddress(
|
||||||
|
|
|
||||||
|
|
@ -191,6 +191,7 @@ test {
|
||||||
_ = @import("behavior/pub_enum.zig");
|
_ = @import("behavior/pub_enum.zig");
|
||||||
_ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
|
_ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
|
||||||
_ = @import("behavior/reflection.zig");
|
_ = @import("behavior/reflection.zig");
|
||||||
|
_ = @import("behavior/return_address.zig");
|
||||||
_ = @import("behavior/saturating_arithmetic.zig");
|
_ = @import("behavior/saturating_arithmetic.zig");
|
||||||
_ = @import("behavior/select.zig");
|
_ = @import("behavior/select.zig");
|
||||||
_ = @import("behavior/shuffle.zig");
|
_ = @import("behavior/shuffle.zig");
|
||||||
|
|
|
||||||
17
test/behavior/return_address.zig
Normal file
17
test/behavior/return_address.zig
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
const builtin = @import("builtin");
|
||||||
|
const testing = @import("std").testing;
|
||||||
|
|
||||||
|
fn retAddr() usize {
|
||||||
|
return @returnAddress();
|
||||||
|
}
|
||||||
|
|
||||||
|
test "return address" {
|
||||||
|
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||||
|
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||||
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||||
|
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||||
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||||
|
_ = retAddr();
|
||||||
|
// TODO: #14938
|
||||||
|
try testing.expectEqual(0, comptime retAddr());
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue