diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2022-10-15 02:02:21 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-10-15 14:17:25 -0400 |
| commit | cb0e22db4e18dd803e1edd681c836fadbae0ea6f (patch) | |
| tree | 0377d1540686d1e34998a171abb3a7f7ce53ca5e /src/codegen | |
| parent | feab1ebe1bfea3955320a6acba69f0c6c79c0730 (diff) | |
| download | zig-cb0e22db4e18dd803e1edd681c836fadbae0ea6f.tar.gz zig-cb0e22db4e18dd803e1edd681c836fadbae0ea6f.zip | |
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
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/llvm.zig | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 4a0978af5b..3a02cd630b 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -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); } |
