Skip to content

Commit b8f4cb6

Browse files
committed
Auto merge of rust-lang#95893 - luqmana:no-prepopulate-passes-tweaks, r=nikic
Respect -Z verify-llvm-ir and other flags that add extra passes when combined with -C no-prepopulate-passes in the new LLVM Pass Manager. As part of the switch to the new LLVM Pass Manager the behaviour of flags such as `-Z verify-llvm-ir` (e.g. sanitizer, instrumentation) was modified when combined with `-C no-prepopulate-passes`. With the old PM, rustc was the one manually constructing the pipeline and respected those flags but in the new pass manager, those flags are used to build a list of callbacks that get invoked at certain extension points in the pipeline. Unfortunately, `-C no-prepopulate-passes` would skip building the pipeline altogether meaning we'd never add the corresponding passes. The fix here is to just manually invoke those callbacks as needed. Fixes rust-lang#95874 Demonstrating the current vs fixed behaviour using the bug in rust-lang#95864 ```console $ rustc +nightly asm-miscompile.rs --edition 2021 --emit=llvm-ir -C no-prepopulate-passes -Z verify-llvm-ir $ echo $? 0 $ rustc +stage1 asm-miscompile.rs --edition 2021 --emit=llvm-ir -C no-prepopulate-passes -Z verify-llvm-ir Basic Block in function '_ZN14asm_miscompile3foo28_$u7b$$u7b$closure$u7d$$u7d$17h360e2f7eee1275c5E' does not have terminator! label %bb1 LLVM ERROR: Broken module found, compilation aborted! ```
2 parents 36f4ded + 84fb481 commit b8f4cb6

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,13 @@ LLVMRustOptimizeWithNewPassManager(
995995
break;
996996
}
997997
}
998+
} else {
999+
// We're not building any of the default pipelines but we still want to
1000+
// add the verifier, instrumentation, etc passes if they were requested
1001+
for (const auto &C : PipelineStartEPCallbacks)
1002+
C(MPM, OptLevel);
1003+
for (const auto &C : OptimizerLastEPCallbacks)
1004+
C(MPM, OptLevel);
9981005
}
9991006

10001007
if (ExtraPassesLen) {

0 commit comments

Comments
 (0)