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 {...@@ -4903,9 +4903,12 @@ fn semaDecl(mod: *Module, decl_index: Decl.Index) !bool {
4903 break :blk (try decl_arena_allocator.dupeZ(u8, bytes)).ptr;4903 break :blk (try decl_arena_allocator.dupeZ(u8, bytes)).ptr;
4904 };4904 };
4905 decl.@"addrspace" = blk: {4905 decl.@"addrspace" = blk: {
4906 const addrspace_ctx: Sema.AddressSpaceContext = switch (decl_tv.val.tag()) {4906 const addrspace_ctx: Sema.AddressSpaceContext = switch (decl_tv.val.ip_index) {
4907 .function, .extern_fn => .function,4907 .none => switch (decl_tv.val.tag()) {
4908 .variable => .variable,4908 .function, .extern_fn => .function,
4909 .variable => .variable,
4910 else => .constant,
4911 },
4909 else => .constant,4912 else => .constant,
4910 };4913 };
49114914
src/type.zig+1-1
...@@ -252,7 +252,7 @@ pub const Type = struct {...@@ -252,7 +252,7 @@ pub const Type = struct {
252 }252 }
253253
254 pub fn castTag(self: Type, comptime t: Tag) ?*t.Type() {254 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
257 if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count)257 if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count)
258 return null;258 return null;
src/value.zig+20-14
...@@ -258,7 +258,7 @@ pub const Value = struct {...@@ -258,7 +258,7 @@ pub const Value = struct {
258 }258 }
259259
260 pub fn castTag(self: Value, comptime t: Tag) ?*t.Type() {260 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
263 if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count)263 if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count)
264 return null;264 return null;
...@@ -2806,24 +2806,30 @@ pub const Value = struct {...@@ -2806,24 +2806,30 @@ pub const Value = struct {
2806 }2806 }
28072807
2808 pub fn isPtrToThreadLocal(val: Value, mod: *Module) bool {2808 pub fn isPtrToThreadLocal(val: Value, mod: *Module) bool {
2809 return switch (val.tag()) {2809 return switch (val.ip_index) {
2810 .variable => false,2810 .none => switch (val.tag()) {
2811 .variable => false,
2812 else => val.isPtrToThreadLocalInner(mod),
2813 },
2811 else => val.isPtrToThreadLocalInner(mod),2814 else => val.isPtrToThreadLocalInner(mod),
2812 };2815 };
2813 }2816 }
28142817
2815 fn isPtrToThreadLocalInner(val: Value, mod: *Module) bool {2818 fn isPtrToThreadLocalInner(val: Value, mod: *Module) bool {
2816 return switch (val.tag()) {2819 return switch (val.ip_index) {
2817 .slice => val.castTag(.slice).?.data.ptr.isPtrToThreadLocalInner(mod),2820 .none => switch (val.tag()) {
2818 .comptime_field_ptr => val.castTag(.comptime_field_ptr).?.data.field_val.isPtrToThreadLocalInner(mod),2821 .slice => val.castTag(.slice).?.data.ptr.isPtrToThreadLocalInner(mod),
2819 .elem_ptr => val.castTag(.elem_ptr).?.data.array_ptr.isPtrToThreadLocalInner(mod),2822 .comptime_field_ptr => val.castTag(.comptime_field_ptr).?.data.field_val.isPtrToThreadLocalInner(mod),
2820 .field_ptr => val.castTag(.field_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),2823 .elem_ptr => val.castTag(.elem_ptr).?.data.array_ptr.isPtrToThreadLocalInner(mod),
2821 .eu_payload_ptr => val.castTag(.eu_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),2824 .field_ptr => val.castTag(.field_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2822 .opt_payload_ptr => val.castTag(.opt_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),2825 .eu_payload_ptr => val.castTag(.eu_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2823 .decl_ref => mod.declPtr(val.castTag(.decl_ref).?.data).val.isPtrToThreadLocalInner(mod),2826 .opt_payload_ptr => val.castTag(.opt_payload_ptr).?.data.container_ptr.isPtrToThreadLocalInner(mod),
2824 .decl_ref_mut => mod.declPtr(val.castTag(.decl_ref_mut).?.data.decl_index).val.isPtrToThreadLocalInner(mod),2827 .decl_ref => mod.declPtr(val.castTag(.decl_ref).?.data).val.isPtrToThreadLocalInner(mod),
28252828 .decl_ref_mut => mod.declPtr(val.castTag(.decl_ref_mut).?.data.decl_index).val.isPtrToThreadLocalInner(mod),
2826 .variable => val.castTag(.variable).?.data.is_threadlocal,2829
2830 .variable => val.castTag(.variable).?.data.is_threadlocal,
2831 else => false,
2832 },
2827 else => false,2833 else => false,
2828 };2834 };
2829 }2835 }