Auto merge of #118968 - aliemjay:canon-static, r=lcnr
unify query canonicalization mode Exclude from canonicalization only the static lifetimes that appear in the param env because of #118965 . Any other occurrence can be canonicalized safely AFAICT. r? `@lcnr`
This commit is contained in:
@@ -87,10 +87,8 @@ impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx> {
|
||||
})
|
||||
} else {
|
||||
assert!(!self.intercrate);
|
||||
let c_pred = self.canonicalize_query_keep_static(
|
||||
param_env.and(obligation.predicate),
|
||||
&mut _orig_values,
|
||||
);
|
||||
let c_pred =
|
||||
self.canonicalize_query(param_env.and(obligation.predicate), &mut _orig_values);
|
||||
self.tcx.at(obligation.cause.span()).evaluate_obligation(c_pred)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,10 +272,7 @@ impl<'cx, 'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for QueryNormalizer<'cx, 'tcx>
|
||||
let data = data.try_fold_with(self)?;
|
||||
|
||||
let mut orig_values = OriginalQueryValues::default();
|
||||
// HACK(matthewjasper) `'static` is special-cased in selection,
|
||||
// so we cannot canonicalize it.
|
||||
let c_data = infcx
|
||||
.canonicalize_query_keep_static(self.param_env.and(data), &mut orig_values);
|
||||
let c_data = infcx.canonicalize_query(self.param_env.and(data), &mut orig_values);
|
||||
debug!("QueryNormalizer: c_data = {:#?}", c_data);
|
||||
debug!("QueryNormalizer: orig_values = {:#?}", orig_values);
|
||||
let result = match kind {
|
||||
|
||||
@@ -111,14 +111,9 @@ pub trait QueryTypeOp<'tcx>: fmt::Debug + Copy + TypeFoldable<TyCtxt<'tcx>> + 't
|
||||
return Ok((result, None, vec![], Certainty::Proven));
|
||||
}
|
||||
|
||||
// FIXME(#33684) -- We need to use
|
||||
// `canonicalize_query_keep_static` here because of things
|
||||
// like the subtype query, which go awry around
|
||||
// `'static` otherwise.
|
||||
let mut canonical_var_values = OriginalQueryValues::default();
|
||||
let old_param_env = query_key.param_env;
|
||||
let canonical_self =
|
||||
infcx.canonicalize_query_keep_static(query_key, &mut canonical_var_values);
|
||||
let canonical_self = infcx.canonicalize_query(query_key, &mut canonical_var_values);
|
||||
let canonical_result = Self::perform_query(infcx.tcx, canonical_self)?;
|
||||
|
||||
let InferOk { value, obligations } = infcx
|
||||
|
||||
Reference in New Issue
Block a user