diff options
-rw-r--r-- | crates/hir_def/src/item_tree/lower.rs | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/crates/hir_def/src/item_tree/lower.rs b/crates/hir_def/src/item_tree/lower.rs index 1a29081c5..ca7fb4a43 100644 --- a/crates/hir_def/src/item_tree/lower.rs +++ b/crates/hir_def/src/item_tree/lower.rs | |||
@@ -42,45 +42,6 @@ pub(super) struct Ctx { | |||
42 | forced_visibility: Option<RawVisibilityId>, | 42 | forced_visibility: Option<RawVisibilityId>, |
43 | } | 43 | } |
44 | 44 | ||
45 | /// Returns `true` if the given intrinsic is unsafe to call or not. | ||
46 | pub fn is_intrinsic_fn_unsafe(name: &Name) -> bool { | ||
47 | // Should be kept in sync with https://github.com/rust-lang/rust/blob/c6e4db620a7d2f569f11dcab627430921ea8aacf/compiler/rustc_typeck/src/check/intrinsic.rs#L68 | ||
48 | *name != known::abort | ||
49 | && *name != known::min_align_of | ||
50 | && *name != known::needs_drop | ||
51 | && *name != known::caller_location | ||
52 | && *name != known::size_of_val | ||
53 | && *name != known::min_align_of_val | ||
54 | && *name != known::add_with_overflow | ||
55 | && *name != known::sub_with_overflow | ||
56 | && *name != known::mul_with_overflow | ||
57 | && *name != known::wrapping_add | ||
58 | && *name != known::wrapping_sub | ||
59 | && *name != known::wrapping_mul | ||
60 | && *name != known::saturating_add | ||
61 | && *name != known::saturating_sub | ||
62 | && *name != known::rotate_left | ||
63 | && *name != known::rotate_right | ||
64 | && *name != known::ctpop | ||
65 | && *name != known::ctlz | ||
66 | && *name != known::cttz | ||
67 | && *name != known::bswap | ||
68 | && *name != known::bitreverse | ||
69 | && *name != known::discriminant_value | ||
70 | && *name != known::type_id | ||
71 | && *name != known::likely | ||
72 | && *name != known::unlikely | ||
73 | && *name != known::ptr_guaranteed_eq | ||
74 | && *name != known::ptr_guaranteed_ne | ||
75 | && *name != known::minnumf32 | ||
76 | && *name != known::minnumf64 | ||
77 | && *name != known::maxnumf32 | ||
78 | && *name != known::rustc_peek | ||
79 | && *name != known::maxnumf64 | ||
80 | && *name != known::type_name | ||
81 | && *name != known::variant_count | ||
82 | } | ||
83 | |||
84 | impl Ctx { | 45 | impl Ctx { |
85 | pub(super) fn new(db: &dyn DefDatabase, hygiene: Hygiene, file: HirFileId) -> Self { | 46 | pub(super) fn new(db: &dyn DefDatabase, hygiene: Hygiene, file: HirFileId) -> Self { |
86 | Self { | 47 | Self { |
@@ -753,3 +714,45 @@ enum GenericsOwner<'a> { | |||
753 | TypeAlias, | 714 | TypeAlias, |
754 | Impl, | 715 | Impl, |
755 | } | 716 | } |
717 | |||
718 | /// Returns `true` if the given intrinsic is unsafe to call, or false otherwise. | ||
719 | fn is_intrinsic_fn_unsafe(name: &Name) -> bool { | ||
720 | // Should be kept in sync with https://github.com/rust-lang/rust/blob/c6e4db620a7d2f569f11dcab627430921ea8aacf/compiler/rustc_typeck/src/check/intrinsic.rs#L68 | ||
721 | ![ | ||
722 | known::abort, | ||
723 | known::min_align_of, | ||
724 | known::needs_drop, | ||
725 | known::caller_location, | ||
726 | known::size_of_val, | ||
727 | known::min_align_of_val, | ||
728 | known::add_with_overflow, | ||
729 | known::sub_with_overflow, | ||
730 | known::mul_with_overflow, | ||
731 | known::wrapping_add, | ||
732 | known::wrapping_sub, | ||
733 | known::wrapping_mul, | ||
734 | known::saturating_add, | ||
735 | known::saturating_sub, | ||
736 | known::rotate_left, | ||
737 | known::rotate_right, | ||
738 | known::ctpop, | ||
739 | known::ctlz, | ||
740 | known::cttz, | ||
741 | known::bswap, | ||
742 | known::bitreverse, | ||
743 | known::discriminant_value, | ||
744 | known::type_id, | ||
745 | known::likely, | ||
746 | known::unlikely, | ||
747 | known::ptr_guaranteed_eq, | ||
748 | known::ptr_guaranteed_ne, | ||
749 | known::minnumf32, | ||
750 | known::minnumf64, | ||
751 | known::maxnumf32, | ||
752 | known::rustc_peek, | ||
753 | known::maxnumf64, | ||
754 | known::type_name, | ||
755 | known::variant_count, | ||
756 | ] | ||
757 | .contains(&name) | ||
758 | } | ||