authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-05-04 21:57:55-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-10 20:42:28-07:00
log41cdcd5486ba10dcd21dc45cb8470c556b7497dd
treef4827ae6615e016508f3317a0be90ccdee614e5a
parent6ab8b6f8b273356ce248a075b6a0657bfea33c79

stage2: add a few more Value checks for InternPool


3 files changed, 27 insertions(+), 18 deletions(-)

src/Module.zig+6-3
......@@ -4903,9 +4903,12 @@ fn semaDecl(mod: *Module, decl_index: Decl.Index) !bool {
49034903 break :blk (try decl_arena_allocator.dupeZ(u8, bytes)).ptr;
49044904 };
49054905 decl.@"addrspace" = blk: {
4906 const addrspace_ctx: Sema.AddressSpaceContext = switch (decl_tv.val.tag()) {
4907 .function, .extern_fn => .function,
4908 .variable => .variable,
4906 const addrspace_ctx: Sema.AddressSpaceContext = switch (decl_tv.val.ip_index) {
4907 .none => switch (decl_tv.val.tag()) {
4908 .function, .extern_fn => .function,
4909 .variable => .variable,
4910 else => .constant,
4911 },
49094912 else => .constant,
49104913 };
49114914
src/type.zig+1-1
......@@ -252,7 +252,7 @@ pub const Type = struct {
252252 }
253253
254254 pub fn castTag(self: Type, comptime t: Tag) ?*t.Type() {
255 assert(self.ip_index == .none);
255 if (self.ip_index != .none) return null;
256256
257257 if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count)
258258 return null;
src/value.zig+20-14
......@@ -258,7 +258,7 @@ pub const Value = struct {
258258 }
259259
260260 pub fn castTag(self: Value, comptime t: Tag) ?*t.Type() {
261 assert(self.ip_index == .none);
261 if (self.ip_index != .none) return null;
262262
263263 if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count)
264264 return null;
......@@ -2806,24 +2806,30 @@ pub const Value = struct {
28062806 }
28072807
28082808 pub fn isPtrToThreadLocal(val: Value, mod: *Module) bool {
2809 return switch (val.tag()) {
2810 .variable => false,
2809 return switch (val.ip_index) {
2810 .none => switch (val.tag()) {
2811 .variable => false,
2812 else => val.isPtrToThreadLocalInner(mod),
2813 },
28112814 else => val.isPtrToThreadLocalInner(mod),
28122815 };
28132816 }
28142817
28152818 fn isPtrToThreadLocalInner(val: Value, mod: *Module) bool {
2816 return switch (val.tag()) {
2817 .slice => val.castTag(.slice).?.data.ptr.isPtrToThreadLocalInner(mod),
2818 .comptime_field_ptr => val.castTag(.comptime_field_ptr).?.data.field_val.isPtrToThreadLocalInner(mod),
2819 .elem_ptr => val.castTag(.elem_ptr).?.data.array_ptr.isPtrToThreadLocalInner(mod),
2820 .field_ptr => val.castTag(.field_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2821 .eu_payload_ptr => val.castTag(.eu_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2822 .opt_payload_ptr => val.castTag(.opt_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2823 .decl_ref => mod.declPtr(val.castTag(.decl_ref).?.data).val.isPtrToThreadLocalInner(mod),
2824 .decl_ref_mut => mod.declPtr(val.castTag(.decl_ref_mut).?.data.decl_index).val.isPtrToThreadLocalInner(mod),
2825
2826 .variable => val.castTag(.variable).?.data.is_threadlocal,
2819 return switch (val.ip_index) {
2820 .none => switch (val.tag()) {
2821 .slice => val.castTag(.slice).?.data.ptr.isPtrToThreadLocalInner(mod),
2822 .comptime_field_ptr => val.castTag(.comptime_field_ptr).?.data.field_val.isPtrToThreadLocalInner(mod),
2823 .elem_ptr => val.castTag(.elem_ptr).?.data.array_ptr.isPtrToThreadLocalInner(mod),
2824 .field_ptr => val.castTag(.field_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2825 .eu_payload_ptr => val.castTag(.eu_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2826 .opt_payload_ptr => val.castTag(.opt_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2827 .decl_ref => mod.declPtr(val.castTag(.decl_ref).?.data).val.isPtrToThreadLocalInner(mod),
2828 .decl_ref_mut => mod.declPtr(val.castTag(.decl_ref_mut).?.data.decl_index).val.isPtrToThreadLocalInner(mod),
2829
2830 .variable => val.castTag(.variable).?.data.is_threadlocal,
2831 else => false,
2832 },
28272833 else => false,
28282834 };
28292835 }