Rollup merge of #108285 - BoxyUwU:remove_pick_stable_before_unstable_flag, r=oli-obk
remove unstable `pick_stable_methods_before_any_unstable` flag This flag was only added in #90329 in case there was any issue with the impl so that it would be easy to tell nightly users to use the flag to disable the new logic to fix their code. It's now been enabled for two years and also I can't find any issues corresponding to this new functionality? This flag made it way harder to understand how this code works so it would be nice to remove it and simplify what's going on. cc `@nbdd0121` r? `@oli-obk`
This commit is contained in:
commit
6a21237bb8
4 changed files with 178 additions and 234 deletions
|
@ -1095,17 +1095,8 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pick_core(&self) -> Option<PickResult<'tcx>> {
|
fn pick_core(&self) -> Option<PickResult<'tcx>> {
|
||||||
let pick = self.pick_all_method(Some(&mut vec![]));
|
// Pick stable methods only first, and consider unstable candidates if not found.
|
||||||
|
self.pick_all_method(Some(&mut vec![])).or_else(|| self.pick_all_method(None))
|
||||||
// In this case unstable picking is done by `pick_method`.
|
|
||||||
if !self.tcx.sess.opts.unstable_opts.pick_stable_methods_before_any_unstable {
|
|
||||||
return pick;
|
|
||||||
}
|
|
||||||
|
|
||||||
if pick.is_none() {
|
|
||||||
return self.pick_all_method(None);
|
|
||||||
}
|
|
||||||
pick
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pick_all_method(
|
fn pick_all_method(
|
||||||
|
@ -1244,54 +1235,11 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pick_method_with_unstable(&self, self_ty: Ty<'tcx>) -> Option<PickResult<'tcx>> {
|
|
||||||
debug!("pick_method_with_unstable(self_ty={})", self.ty_to_string(self_ty));
|
|
||||||
|
|
||||||
let mut possibly_unsatisfied_predicates = Vec::new();
|
|
||||||
|
|
||||||
for (kind, candidates) in
|
|
||||||
&[("inherent", &self.inherent_candidates), ("extension", &self.extension_candidates)]
|
|
||||||
{
|
|
||||||
debug!("searching {} candidates", kind);
|
|
||||||
let res = self.consider_candidates(
|
|
||||||
self_ty,
|
|
||||||
candidates,
|
|
||||||
&mut possibly_unsatisfied_predicates,
|
|
||||||
Some(&mut vec![]),
|
|
||||||
);
|
|
||||||
if res.is_some() {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (kind, candidates) in
|
|
||||||
&[("inherent", &self.inherent_candidates), ("extension", &self.extension_candidates)]
|
|
||||||
{
|
|
||||||
debug!("searching unstable {kind} candidates");
|
|
||||||
let res = self.consider_candidates(
|
|
||||||
self_ty,
|
|
||||||
candidates,
|
|
||||||
&mut possibly_unsatisfied_predicates,
|
|
||||||
None,
|
|
||||||
);
|
|
||||||
if res.is_some() {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.unsatisfied_predicates.borrow_mut().extend(possibly_unsatisfied_predicates);
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
fn pick_method(
|
fn pick_method(
|
||||||
&self,
|
&self,
|
||||||
self_ty: Ty<'tcx>,
|
self_ty: Ty<'tcx>,
|
||||||
mut unstable_candidates: Option<&mut Vec<(Candidate<'tcx>, Symbol)>>,
|
mut unstable_candidates: Option<&mut Vec<(Candidate<'tcx>, Symbol)>>,
|
||||||
) -> Option<PickResult<'tcx>> {
|
) -> Option<PickResult<'tcx>> {
|
||||||
if !self.tcx.sess.opts.unstable_opts.pick_stable_methods_before_any_unstable {
|
|
||||||
return self.pick_method_with_unstable(self_ty);
|
|
||||||
}
|
|
||||||
|
|
||||||
debug!("pick_method(self_ty={})", self.ty_to_string(self_ty));
|
debug!("pick_method(self_ty={})", self.ty_to_string(self_ty));
|
||||||
|
|
||||||
let mut possibly_unsatisfied_predicates = Vec::new();
|
let mut possibly_unsatisfied_predicates = Vec::new();
|
||||||
|
|
|
@ -776,7 +776,6 @@ fn test_unstable_options_tracking_hash() {
|
||||||
tracked!(packed_bundled_libs, true);
|
tracked!(packed_bundled_libs, true);
|
||||||
tracked!(panic_abort_tests, true);
|
tracked!(panic_abort_tests, true);
|
||||||
tracked!(panic_in_drop, PanicStrategy::Abort);
|
tracked!(panic_in_drop, PanicStrategy::Abort);
|
||||||
tracked!(pick_stable_methods_before_any_unstable, false);
|
|
||||||
tracked!(plt, Some(true));
|
tracked!(plt, Some(true));
|
||||||
tracked!(polonius, true);
|
tracked!(polonius, true);
|
||||||
tracked!(precise_enum_drop_elaboration, false);
|
tracked!(precise_enum_drop_elaboration, false);
|
||||||
|
|
|
@ -1567,8 +1567,6 @@ options! {
|
||||||
"parse only; do not compile, assemble, or link (default: no)"),
|
"parse only; do not compile, assemble, or link (default: no)"),
|
||||||
perf_stats: bool = (false, parse_bool, [UNTRACKED],
|
perf_stats: bool = (false, parse_bool, [UNTRACKED],
|
||||||
"print some performance-related statistics (default: no)"),
|
"print some performance-related statistics (default: no)"),
|
||||||
pick_stable_methods_before_any_unstable: bool = (true, parse_bool, [TRACKED],
|
|
||||||
"try to pick stable methods first before picking any unstable methods (default: yes)"),
|
|
||||||
plt: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
plt: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||||
"whether to use the PLT when calling into shared libraries;
|
"whether to use the PLT when calling into shared libraries;
|
||||||
only has effect for PIC code on systems with ELF binaries
|
only has effect for PIC code on systems with ELF binaries
|
||||||
|
|
|
@ -116,7 +116,6 @@
|
||||||
-Z panic-in-drop=val -- panic strategy for panics in drops
|
-Z panic-in-drop=val -- panic strategy for panics in drops
|
||||||
-Z parse-only=val -- parse only; do not compile, assemble, or link (default: no)
|
-Z parse-only=val -- parse only; do not compile, assemble, or link (default: no)
|
||||||
-Z perf-stats=val -- print some performance-related statistics (default: no)
|
-Z perf-stats=val -- print some performance-related statistics (default: no)
|
||||||
-Z pick-stable-methods-before-any-unstable=val -- try to pick stable methods first before picking any unstable methods (default: yes)
|
|
||||||
-Z plt=val -- whether to use the PLT when calling into shared libraries;
|
-Z plt=val -- whether to use the PLT when calling into shared libraries;
|
||||||
only has effect for PIC code on systems with ELF binaries
|
only has effect for PIC code on systems with ELF binaries
|
||||||
(default: PLT is disabled if full relro is enabled)
|
(default: PLT is disabled if full relro is enabled)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue