aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-04 23:12:34 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-05 13:22:21 +0200
commitea48f06fc2965ff2e9516c23e58a50a9db5da84b (patch)
treeeba6d1e1a58ca6c77c69c73ca23506092b64ed86 /src/value.zig
parentf96748ebc19b0c083569e7677f65fe4454c32b57 (diff)
downloadzig-ea48f06fc2965ff2e9516c23e58a50a9db5da84b.tar.gz
zig-ea48f06fc2965ff2e9516c23e58a50a9db5da84b.zip
stage2: address of threadlocal variable is not comptime known
Closes #13215
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/value.zig b/src/value.zig
index a727df5d22..792ec5068f 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -2806,6 +2806,29 @@ pub const Value = extern union {
};
}
+ pub fn isPtrToThreadLocal(val: Value, mod: *Module) bool {
+ return switch (val.tag()) {
+ .variable => false,
+ else => val.isPtrToThreadLocalInner(mod),
+ };
+ }
+
+ fn isPtrToThreadLocalInner(val: Value, mod: *Module) bool {
+ return switch (val.tag()) {
+ .slice => val.castTag(.slice).?.data.ptr.isPtrToThreadLocalInner(mod),
+ .comptime_field_ptr => val.castTag(.comptime_field_ptr).?.data.field_val.isPtrToThreadLocalInner(mod),
+ .elem_ptr => val.castTag(.elem_ptr).?.data.array_ptr.isPtrToThreadLocalInner(mod),
+ .field_ptr => val.castTag(.field_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
+ .eu_payload_ptr => val.castTag(.eu_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
+ .opt_payload_ptr => val.castTag(.opt_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
+ .decl_ref => mod.declPtr(val.castTag(.decl_ref).?.data).val.isPtrToThreadLocalInner(mod),
+ .decl_ref_mut => mod.declPtr(val.castTag(.decl_ref_mut).?.data.decl_index).val.isPtrToThreadLocalInner(mod),
+
+ .variable => val.castTag(.variable).?.data.is_threadlocal,
+ else => false,
+ };
+ }
+
// Asserts that the provided start/end are in-bounds.
pub fn sliceArray(
val: Value,