Skip to content

Commit 117e7de

Browse files
committed
Only allow PassMode::Direct for aggregates on wasm when using the C ABI
For the Rust ABI we don't have any ABI compat reasons to allow PassMode::Direct for aggregates.
1 parent 0e98766 commit 117e7de

File tree

1 file changed

+17
-7
lines changed
  • compiler/rustc_ty_utils/src

1 file changed

+17
-7
lines changed

Diff for: compiler/rustc_ty_utils/src/abi.rs

+17-7
Original file line numberDiff line numberDiff line change
@@ -480,13 +480,23 @@ fn fn_abi_sanity_check<'tcx>(
480480
// The unstable abi `PtxKernel` also uses Direct for now.
481481
// It needs to switch to something else before stabilization can happen.
482482
// (See issue: https://github.com/rust-lang/rust/issues/117271)
483-
assert!(
484-
matches!(&*tcx.sess.target.arch, "wasm32" | "wasm64")
485-
|| matches!(spec_abi, ExternAbi::PtxKernel | ExternAbi::Unadjusted),
486-
"`PassMode::Direct` for aggregates only allowed for \"unadjusted\" and \"ptx-kernel\" functions and on wasm\n\
487-
Problematic type: {:#?}",
488-
arg.layout,
489-
);
483+
//
484+
// And finally the unadjusted ABI is ill specified and uses Direct for all
485+
// args, but unfortunately we need it for calling certain LLVM intrinsics.
486+
487+
match spec_abi {
488+
ExternAbi::Unadjusted => {}
489+
ExternAbi::PtxKernel => {}
490+
ExternAbi::C { unwind: _ }
491+
if matches!(&*tcx.sess.target.arch, "wasm32" | "wasm64") => {}
492+
_ => {
493+
panic!(
494+
"`PassMode::Direct` for aggregates only allowed for \"unadjusted\" and \"ptx-kernel\" functions and on wasm\n\
495+
Problematic type: {:#?}",
496+
arg.layout,
497+
);
498+
}
499+
}
490500
}
491501
}
492502
}

0 commit comments

Comments
 (0)