| ... | ... | @@ -258,7 +258,7 @@ pub const Value = struct { |
| 258 | 258 | } |
| 259 | 259 | |
| 260 | 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; |
| 262 | 262 | |
| 263 | 263 | if (@enumToInt(self.legacy.tag_if_small_enough) < Tag.no_payload_count) |
| 264 | 264 | return null; |
| ... | ... | @@ -2806,24 +2806,30 @@ pub const Value = struct { |
| 2806 | 2806 | } |
| 2807 | 2807 | |
| 2808 | 2808 | 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 | }, |
| 2811 | 2814 | else => val.isPtrToThreadLocalInner(mod), |
| 2812 | 2815 | }; |
| 2813 | 2816 | } |
| 2814 | 2817 | |
| 2815 | 2818 | 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 | }, |
| 2827 | 2833 | else => false, |
| 2828 | 2834 | }; |
| 2829 | 2835 | } |