Skip to content

Commit 02ad667

Browse files
committed
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: rust-lang/compiler-team#618
2 parents e223c41 + 4a8c5cb commit 02ad667

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,14 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
468468
// it prevents control flow from "falling through" into whatever code
469469
// happens to be laid out next in memory.
470470
Options.TrapUnreachable = true;
471+
// But don't emit traps after other traps or no-returns unnecessarily.
472+
// ...except for when targeting WebAssembly, because the NoTrapAfterNoreturn
473+
// option causes bugs in the LLVM WebAssembly backend. You should be able to
474+
// remove this check when Rust's minimum supported LLVM version is >= 18
475+
// https://github.com/llvm/llvm-project/pull/65876
476+
if (!Trip.isWasm()) {
477+
Options.NoTrapAfterNoreturn = true;
478+
}
471479
}
472480

473481
if (Singlethread) {

0 commit comments

Comments
 (0)