mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
llvm: fix lowering of runtime refs to comptime-only decls
When we want a runtime pointer to a zero-bit value we use an undef pointer, but what if we want a runtime pointer to a comptime-only value? Normally, if `T` is a comptime-only type such as `*const comptime_int`, then `*const T` would also be a comptime-only type, so anything referencing a comptime-only value is usually also comptime-only, and therefore not emitted to the executable. However, what if instead we have a `*const anyopaque` pointing to a comptime-only value? Certainly, `*const anyopaque` is a runtime type, and so we need some runtime value to store, even when it happens to be pointing to a comptime-only value. In this case we want to do the same thing as we do when pointing to a zero-bit value, so we use `hasRuntimeBits` to handle both cases instead of ignoring comptime. Closes #12025
This commit is contained in:
parent
feab1ebe1b
commit
cb0e22db4e
3 changed files with 12 additions and 1 deletions
|
|
@ -4077,7 +4077,7 @@ pub const DeclGen = struct {
|
|||
}
|
||||
|
||||
const is_fn_body = decl.ty.zigTypeTag() == .Fn;
|
||||
if (!is_fn_body and !decl.ty.hasRuntimeBitsIgnoreComptime()) {
|
||||
if (!is_fn_body and !decl.ty.hasRuntimeBits()) {
|
||||
return self.lowerPtrToVoid(tv.ty);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ test {
|
|||
_ = @import("behavior/bugs/11213.zig");
|
||||
_ = @import("behavior/bugs/11816.zig");
|
||||
_ = @import("behavior/bugs/12003.zig");
|
||||
_ = @import("behavior/bugs/12025.zig");
|
||||
_ = @import("behavior/bugs/12033.zig");
|
||||
_ = @import("behavior/bugs/12430.zig");
|
||||
_ = @import("behavior/bugs/12486.zig");
|
||||
|
|
|
|||
10
test/behavior/bugs/12025.zig
Normal file
10
test/behavior/bugs/12025.zig
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
test {
|
||||
comptime var st = .{
|
||||
.foo = &1,
|
||||
.bar = &2,
|
||||
};
|
||||
|
||||
inline for (@typeInfo(@TypeOf(st)).Struct.fields) |field| {
|
||||
_ = field;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue