diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2021-10-01 14:46:49 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-01 14:46:49 -0700 |
| commit | 1781e4b81af0440ce58b6905724df5d3e2afd548 (patch) | |
| tree | b6ca89d656f0a0bc5e153ea50e4961e6d428d6f2 /compiler/rustc_codegen_llvm/src | |
| parent | 743e842afb043b09f8be6dacd012b46befc7b736 (diff) | |
| parent | d90934ce87352e7478f8c872a5a65363206082a0 (diff) | |
| download | rust-1781e4b81af0440ce58b6905724df5d3e2afd548.tar.gz rust-1781e4b81af0440ce58b6905724df5d3e2afd548.zip | |
Rollup merge of #89376 - andjo403:selfProfileUseAfterDropFix, r=Mark-Simulacrum
Fix use after drop in self-profile with llvm events self-profile with `-Z self-profile-events=llvm` have failed with a segmentation fault due to this use after drop. this type of events can be more useful now that the new passmanager is the default.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/back/write.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_llvm/src/back/write.rs b/compiler/rustc_codegen_llvm/src/back/write.rs index 9b0e7526894..fd91eda4a01 100644 --- a/compiler/rustc_codegen_llvm/src/back/write.rs +++ b/compiler/rustc_codegen_llvm/src/back/write.rs @@ -406,13 +406,15 @@ pub(crate) unsafe fn optimize_with_new_llvm_pass_manager( None }; - let llvm_selfprofiler = if cgcx.prof.llvm_recording_enabled() { - let mut llvm_profiler = LlvmSelfProfiler::new(cgcx.prof.get_self_profiler().unwrap()); - &mut llvm_profiler as *mut _ as *mut c_void + let mut llvm_profiler = if cgcx.prof.llvm_recording_enabled() { + Some(LlvmSelfProfiler::new(cgcx.prof.get_self_profiler().unwrap())) } else { - std::ptr::null_mut() + None }; + let llvm_selfprofiler = + llvm_profiler.as_mut().map(|s| s as *mut _ as *mut c_void).unwrap_or(std::ptr::null_mut()); + let extra_passes = config.passes.join(","); // FIXME: NewPM doesn't provide a facility to pass custom InlineParams. |
