Skip to content

Commit 3cd0908

Browse files
committed
Mark float intrinsics with no preconditions as safe
1 parent e4e3b33 commit 3cd0908

File tree

11 files changed

+199
-158
lines changed

11 files changed

+199
-158
lines changed

compiler/rustc_hir_analysis/src/check/intrinsic.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,22 +81,67 @@ fn intrinsic_operation_unsafety(tcx: TyCtxt<'_>, intrinsic_id: LocalDefId) -> hi
8181
| sym::bswap
8282
| sym::caller_location
8383
| sym::carrying_mul_add
84+
| sym::ceilf128
85+
| sym::ceilf16
86+
| sym::ceilf32
87+
| sym::ceilf64
8488
| sym::cold_path
8589
| sym::const_eval_select
8690
| sym::contract_check_ensures
8791
| sym::contract_check_requires
8892
| sym::contract_checks
93+
| sym::cosf128
94+
| sym::cosf16
95+
| sym::cosf32
96+
| sym::cosf64
8997
| sym::ctlz
9098
| sym::ctpop
9199
| sym::cttz
92100
| sym::discriminant_value
101+
| sym::exp2f128
102+
| sym::exp2f16
103+
| sym::exp2f32
104+
| sym::exp2f64
105+
| sym::expf128
106+
| sym::expf16
107+
| sym::expf32
108+
| sym::expf64
93109
| sym::fadd_algebraic
110+
| sym::fadd_fast
94111
| sym::fdiv_algebraic
112+
| sym::fdiv_fast
113+
| sym::floorf128
114+
| sym::floorf16
115+
| sym::floorf32
116+
| sym::floorf64
117+
| sym::fmaf128
118+
| sym::fmaf16
119+
| sym::fmaf32
120+
| sym::fmaf64
121+
| sym::fmuladdf128
122+
| sym::fmuladdf16
123+
| sym::fmuladdf32
124+
| sym::fmuladdf64
95125
| sym::fmul_algebraic
126+
| sym::fmul_fast
96127
| sym::forget
97128
| sym::frem_algebraic
129+
| sym::frem_fast
98130
| sym::fsub_algebraic
131+
| sym::fsub_fast
99132
| sym::is_val_statically_known
133+
| sym::log10f128
134+
| sym::log10f16
135+
| sym::log10f32
136+
| sym::log10f64
137+
| sym::log2f128
138+
| sym::log2f16
139+
| sym::log2f32
140+
| sym::log2f64
141+
| sym::logf128
142+
| sym::logf16
143+
| sym::logf32
144+
| sym::logf64
100145
| sym::maximumf128
101146
| sym::maximumf16
102147
| sym::maximumf32
@@ -115,6 +160,14 @@ fn intrinsic_operation_unsafety(tcx: TyCtxt<'_>, intrinsic_id: LocalDefId) -> hi
115160
| sym::minnumf64
116161
| sym::mul_with_overflow
117162
| sym::needs_drop
163+
| sym::powf128
164+
| sym::powf16
165+
| sym::powf32
166+
| sym::powf64
167+
| sym::powif128
168+
| sym::powif16
169+
| sym::powif32
170+
| sym::powif64
118171
| sym::prefetch_read_data
119172
| sym::prefetch_read_instruction
120173
| sym::prefetch_write_data
@@ -124,6 +177,10 @@ fn intrinsic_operation_unsafety(tcx: TyCtxt<'_>, intrinsic_id: LocalDefId) -> hi
124177
| sym::ptr_metadata
125178
| sym::rotate_left
126179
| sym::rotate_right
180+
| sym::roundf128
181+
| sym::roundf16
182+
| sym::roundf32
183+
| sym::roundf64
127184
| sym::round_ties_even_f128
128185
| sym::round_ties_even_f16
129186
| sym::round_ties_even_f32
@@ -132,9 +189,21 @@ fn intrinsic_operation_unsafety(tcx: TyCtxt<'_>, intrinsic_id: LocalDefId) -> hi
132189
| sym::saturating_add
133190
| sym::saturating_sub
134191
| sym::select_unpredictable
192+
| sym::sinf128
193+
| sym::sinf16
194+
| sym::sinf32
195+
| sym::sinf64
135196
| sym::size_of
197+
| sym::sqrtf128
198+
| sym::sqrtf16
199+
| sym::sqrtf32
200+
| sym::sqrtf64
136201
| sym::sub_with_overflow
137202
| sym::three_way_compare
203+
| sym::truncf128
204+
| sym::truncf16
205+
| sym::truncf32
206+
| sym::truncf64
138207
| sym::type_id
139208
| sym::type_id_eq
140209
| sym::type_name

library/compiler-builtins/libm/src/math/support/float_traits.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ macro_rules! float_impl {
289289
cfg_if! {
290290
// fma is not yet available in `core`
291291
if #[cfg(intrinsics_enabled)] {
292-
unsafe{ core::intrinsics::$fma_intrinsic(self, y, z) }
292+
core::intrinsics::$fma_intrinsic(self, y, z)
293293
} else {
294294
super::super::$fma_fn(self, y, z)
295295
}

0 commit comments

Comments
 (0)