Rollup merge of #116576 - eduardosm:const-eval-wasm-target-features, r=RalfJung
const-eval: allow calling functions with targat features disabled at compile time in WASM This is not unsafe on WASM, see https://github.com/rust-lang/rust/pull/84988 r? `@RalfJung` Fixes https://github.com/rust-lang/rust/issues/116516
This commit is contained in:
commit
03cbf50c34
@ -890,8 +890,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check_fn_target_features(&self, instance: ty::Instance<'tcx>) -> InterpResult<'tcx, ()> {
|
fn check_fn_target_features(&self, instance: ty::Instance<'tcx>) -> InterpResult<'tcx, ()> {
|
||||||
|
// Calling functions with `#[target_feature]` is not unsafe on WASM, see #84988
|
||||||
let attrs = self.tcx.codegen_fn_attrs(instance.def_id());
|
let attrs = self.tcx.codegen_fn_attrs(instance.def_id());
|
||||||
if attrs
|
if !self.tcx.sess.target.is_like_wasm
|
||||||
|
&& attrs
|
||||||
.target_features
|
.target_features
|
||||||
.iter()
|
.iter()
|
||||||
.any(|feature| !self.tcx.sess.target_features.contains(feature))
|
.any(|feature| !self.tcx.sess.target_features.contains(feature))
|
||||||
|
@ -110,8 +110,8 @@ case $HOST_TARGET in
|
|||||||
MIRI_TEST_TARGET=i686-pc-windows-gnu run_tests
|
MIRI_TEST_TARGET=i686-pc-windows-gnu run_tests
|
||||||
MIRI_TEST_TARGET=x86_64-unknown-freebsd run_tests_minimal hello integer vec panic/panic concurrency/simple atomic data_race env/var
|
MIRI_TEST_TARGET=x86_64-unknown-freebsd run_tests_minimal hello integer vec panic/panic concurrency/simple atomic data_race env/var
|
||||||
MIRI_TEST_TARGET=aarch64-linux-android run_tests_minimal hello integer vec panic/panic
|
MIRI_TEST_TARGET=aarch64-linux-android run_tests_minimal hello integer vec panic/panic
|
||||||
MIRI_TEST_TARGET=wasm32-wasi run_tests_minimal no_std integer strings
|
MIRI_TEST_TARGET=wasm32-wasi run_tests_minimal no_std integer strings wasm
|
||||||
MIRI_TEST_TARGET=wasm32-unknown-unknown run_tests_minimal no_std integer strings
|
MIRI_TEST_TARGET=wasm32-unknown-unknown run_tests_minimal no_std integer strings wasm
|
||||||
MIRI_TEST_TARGET=thumbv7em-none-eabihf run_tests_minimal no_std # no_std embedded architecture
|
MIRI_TEST_TARGET=thumbv7em-none-eabihf run_tests_minimal no_std # no_std embedded architecture
|
||||||
MIRI_TEST_TARGET=tests/avr.json MIRI_NO_STD=1 run_tests_minimal no_std # JSON target file
|
MIRI_TEST_TARGET=tests/avr.json MIRI_NO_STD=1 run_tests_minimal no_std # JSON target file
|
||||||
;;
|
;;
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
//@only-target-wasm32: tests WASM-specific behavior
|
||||||
|
//@compile-flags: -C target-feature=-simd128
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// Calling functions with `#[target_feature]` is not unsound on WASM, see #84988
|
||||||
|
assert!(!cfg!(target_feature = "simd128"));
|
||||||
|
simd128_fn();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[target_feature(enable = "simd128")]
|
||||||
|
fn simd128_fn() {}
|
14
tests/ui/consts/const-eval/const_fn_target_feature_wasm.rs
Normal file
14
tests/ui/consts/const-eval/const_fn_target_feature_wasm.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// only-wasm32
|
||||||
|
// compile-flags:-C target-feature=-simd128
|
||||||
|
// build-pass
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[cfg(target_feature = "simd128")]
|
||||||
|
compile_error!("simd128 target feature should be disabled");
|
||||||
|
|
||||||
|
// Calling functions with `#[target_feature]` is not unsound on WASM, see #84988
|
||||||
|
const A: () = simd128_fn();
|
||||||
|
|
||||||
|
#[target_feature(enable = "simd128")]
|
||||||
|
const fn simd128_fn() {}
|
Loading…
x
Reference in New Issue
Block a user