aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-05-04 21:57:55 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-06-10 20:42:28 -0700
commit41cdcd5486ba10dcd21dc45cb8470c556b7497dd (patch)
treef4827ae6615e016508f3317a0be90ccdee614e5a /src/value.zig
parent6ab8b6f8b273356ce248a075b6a0657bfea33c79 (diff)
downloadzig-41cdcd5486ba10dcd21dc45cb8470c556b7497dd.tar.gz
zig-41cdcd5486ba10dcd21dc45cb8470c556b7497dd.zip
stage2: add a few more Value checks for InternPool
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/value.zig b/src/value.zig
index f1d706aa09..c2c37ba68b 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -258,7 +258,7 @@ pub const Value = struct {
}
pub fn castTag(self: Value, comptime t: Tag) ?*t.Type() {
- assert(self.ip_index == .none);
+ if (self.ip_index != .none) return null;
if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count)
return null;
@@ -2806,24 +2806,30 @@ pub const Value = struct {
}
pub fn isPtrToThreadLocal(val: Value, mod: *Module) bool {
- return switch (val.tag()) {
- .variable => false,
+ return switch (val.ip_index) {
+ .none => switch (val.tag()) {
+ .variable => false,
+ else => val.isPtrToThreadLocalInner(mod),
+ },
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,
+ return switch (val.ip_index) {
+ .none => 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,
+ },
else => false,
};
}