Rollup merge of #77423 - ecstatic-morse:discriminant-switch-effect-config, r=pnkfelix
Add `-Zprecise-enum-drop-elaboration` Its purpose is to assist in debugging #77382 and #74551. Passing `-Zprecise-enum-drop-elaboration=no` will turn off the added precision that seems to be causing issues on some platforms. This assumes that we can reproduce #77382 on the latest master. I should have done this earlier. Oh well. cc @cuviper r? @pnkfelix
This commit is contained in:
commit
1e3c7e214a
3 changed files with 13 additions and 0 deletions
|
@ -568,6 +568,7 @@ fn test_debugging_options_tracking_hash() {
|
||||||
tracked!(osx_rpath_install_name, true);
|
tracked!(osx_rpath_install_name, true);
|
||||||
tracked!(panic_abort_tests, true);
|
tracked!(panic_abort_tests, true);
|
||||||
tracked!(plt, Some(true));
|
tracked!(plt, Some(true));
|
||||||
|
tracked!(precise_enum_drop_elaboration, false);
|
||||||
tracked!(print_fuel, Some("abc".to_string()));
|
tracked!(print_fuel, Some("abc".to_string()));
|
||||||
tracked!(profile, true);
|
tracked!(profile, true);
|
||||||
tracked!(profile_emit, Some(PathBuf::from("abc")));
|
tracked!(profile_emit, Some(PathBuf::from("abc")));
|
||||||
|
|
|
@ -358,6 +358,10 @@ impl<'tcx> GenKillAnalysis<'tcx> for MaybeInitializedPlaces<'_, 'tcx> {
|
||||||
discr: &mir::Operand<'tcx>,
|
discr: &mir::Operand<'tcx>,
|
||||||
edge_effects: &mut impl SwitchIntEdgeEffects<G>,
|
edge_effects: &mut impl SwitchIntEdgeEffects<G>,
|
||||||
) {
|
) {
|
||||||
|
if !self.tcx.sess.opts.debugging_opts.precise_enum_drop_elaboration {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let enum_ = discr.place().and_then(|discr| {
|
let enum_ = discr.place().and_then(|discr| {
|
||||||
switch_on_enum_discriminant(self.tcx, &self.body, &self.body[block], discr)
|
switch_on_enum_discriminant(self.tcx, &self.body, &self.body[block], discr)
|
||||||
});
|
});
|
||||||
|
@ -469,6 +473,10 @@ impl<'tcx> GenKillAnalysis<'tcx> for MaybeUninitializedPlaces<'_, 'tcx> {
|
||||||
discr: &mir::Operand<'tcx>,
|
discr: &mir::Operand<'tcx>,
|
||||||
edge_effects: &mut impl SwitchIntEdgeEffects<G>,
|
edge_effects: &mut impl SwitchIntEdgeEffects<G>,
|
||||||
) {
|
) {
|
||||||
|
if !self.tcx.sess.opts.debugging_opts.precise_enum_drop_elaboration {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if !self.mark_inactive_variants_as_uninit {
|
if !self.mark_inactive_variants_as_uninit {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1008,6 +1008,10 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
||||||
"a single extra argument to prepend the linker invocation (can be used several times)"),
|
"a single extra argument to prepend the linker invocation (can be used several times)"),
|
||||||
pre_link_args: Vec<String> = (Vec::new(), parse_list, [UNTRACKED],
|
pre_link_args: Vec<String> = (Vec::new(), parse_list, [UNTRACKED],
|
||||||
"extra arguments to prepend to the linker invocation (space separated)"),
|
"extra arguments to prepend to the linker invocation (space separated)"),
|
||||||
|
precise_enum_drop_elaboration: bool = (true, parse_bool, [TRACKED],
|
||||||
|
"use a more precise version of drop elaboration for matches on enums (default: yes). \
|
||||||
|
This results in better codegen, but has caused miscompilations on some tier 2 platforms. \
|
||||||
|
See #77382 and #74551."),
|
||||||
print_fuel: Option<String> = (None, parse_opt_string, [TRACKED],
|
print_fuel: Option<String> = (None, parse_opt_string, [TRACKED],
|
||||||
"make rustc print the total optimization fuel used by a crate"),
|
"make rustc print the total optimization fuel used by a crate"),
|
||||||
print_link_args: bool = (false, parse_bool, [UNTRACKED],
|
print_link_args: bool = (false, parse_bool, [UNTRACKED],
|
||||||
|
|
Loading…
Add table
Reference in a new issue