Skip to content

Commit

Permalink
Add a rustc flag for disabling the barrier removal optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
jacob-hughes committed Jan 10, 2025
1 parent fe4f024 commit 53f9d14
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 0 deletions.
3 changes: 3 additions & 0 deletions compiler/rustc_mir_transform/src/remove_elidable_drops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ pub struct RemoveElidableDrops;

impl<'tcx> MirPass<'tcx> for RemoveElidableDrops {
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
if tcx.sess.opts.cg.no_premature_finalizer_prevention_opt {
return;
}
trace!("Running RemoveElidableDrops on {:?}", body.source);

let is_gc_crate = tcx
Expand Down
2 changes: 2 additions & 0 deletions compiler/rustc_session/src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1521,6 +1521,8 @@ options! {
"disable optimization to remove unnecessary finalizers"),
no_finalizer_safety_analysis: bool = (false, parse_bool, [TRACKED],
"disable checking of drop methods for GC soundness"),
no_premature_finalizer_prevention_opt: bool = (false, parse_bool, [TRACKED],
"disable optimization to remove unnecessary finalization barriers"),
no_prepopulate_passes: bool = (false, parse_no_flag, [TRACKED],
"give an empty list of passes to the pass manager"),
no_redzone: Option<bool> = (None, parse_opt_bool, [TRACKED],
Expand Down
3 changes: 3 additions & 0 deletions src/bootstrap/src/core/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1524,6 +1524,9 @@ impl<'a> Builder<'a> {
if stage != 0 && !self.config.finalizer_safety_analysis {
rustflags.arg("-Cno-finalizer-safety-analysis");
}
if stage != 0 && !self.config.premature_finalizer_prevention_optimize {
rustflags.arg("-Cno-premature-finalizer-prevention-opt");
}

// Enable compile-time checking of `cfg` names, values and Cargo `features`.
//
Expand Down
8 changes: 8 additions & 0 deletions src/bootstrap/src/core/config/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ pub struct Config {
pub finalizer_elision: bool,
pub finalizer_safety_analysis: bool,
pub premature_finalizer_prevention: bool,
pub premature_finalizer_prevention_optimize: bool,

// misc
pub low_priority: bool,
Expand Down Expand Up @@ -1146,6 +1147,7 @@ define_config! {
finalizer_elision: Option<bool> = "finalizer-elision",
finalizer_safety_analysis: Option<bool> = "finalizer-safety-analysis",
premature_finalizer_prevention: Option<bool> = "premature-finalizer-prevention",
premature_finalizer_prevention_optimize: Option<bool> = "premature-finalizer-prevention-optimize",
}
}

Expand Down Expand Up @@ -1220,6 +1222,7 @@ impl Config {
finalizer_elision: true,
finalizer_safety_analysis: true,
premature_finalizer_prevention: true,
premature_finalizer_prevention_optimize: true,

..Default::default()
}
Expand Down Expand Up @@ -1779,12 +1782,17 @@ impl Config {
finalizer_elision,
finalizer_safety_analysis,
premature_finalizer_prevention,
premature_finalizer_prevention_optimize,
} = alloy;

set(&mut config.log_stats, log_stats);
set(&mut config.finalizer_elision, finalizer_elision);
set(&mut config.finalizer_safety_analysis, finalizer_safety_analysis);
set(&mut config.premature_finalizer_prevention, premature_finalizer_prevention);
set(
&mut config.premature_finalizer_prevention_optimize,
premature_finalizer_prevention_optimize,
);
}

if let Some(llvm) = toml.llvm {
Expand Down

0 comments on commit 53f9d14

Please sign in to comment.