Auto merge of #110494 - majaha:noTrapAfterNoreturn, r=nikic
Use the LLVM option NoTrapAfterNoreturn Use this LLVM option: https://llvm.org/doxygen/classllvm_1_1TargetOptions.html#acd83fce25de1ac9f6c975135a8235c22 when TrapUnreachable is enabled. This prevents codegenning unnecessary double-traps in some situations. See further discussion here: https://github.com/rust-lang/compiler-team/issues/618
This commit is contained in:
commit
02ad6676dd
@ -468,6 +468,14 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
|||||||
// it prevents control flow from "falling through" into whatever code
|
// it prevents control flow from "falling through" into whatever code
|
||||||
// happens to be laid out next in memory.
|
// happens to be laid out next in memory.
|
||||||
Options.TrapUnreachable = true;
|
Options.TrapUnreachable = true;
|
||||||
|
// But don't emit traps after other traps or no-returns unnecessarily.
|
||||||
|
// ...except for when targeting WebAssembly, because the NoTrapAfterNoreturn
|
||||||
|
// option causes bugs in the LLVM WebAssembly backend. You should be able to
|
||||||
|
// remove this check when Rust's minimum supported LLVM version is >= 18
|
||||||
|
// https://github.com/llvm/llvm-project/pull/65876
|
||||||
|
if (!Trip.isWasm()) {
|
||||||
|
Options.NoTrapAfterNoreturn = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Singlethread) {
|
if (Singlethread) {
|
||||||
|
Loading…
Reference in New Issue
Block a user