It's not about types or consts, but the lack of regions
This commit is contained in:
parent
ead49f0beb
commit
c7b6ebdf7c
30 changed files with 71 additions and 77 deletions
|
@ -91,14 +91,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
mutate_fulfillment_errors: impl Fn(&mut Vec<traits::FulfillmentError<'tcx>>),
|
||||
) -> Ty<'tcx> {
|
||||
// No Infer()? Nothing needs doing.
|
||||
if !ty.has_infer_types_or_consts() {
|
||||
if !ty.has_non_region_infer() {
|
||||
debug!("no inference var, nothing needs doing");
|
||||
return ty;
|
||||
}
|
||||
|
||||
// If `ty` is a type variable, see whether we already know what it is.
|
||||
ty = self.resolve_vars_if_possible(ty);
|
||||
if !ty.has_infer_types_or_consts() {
|
||||
if !ty.has_non_region_infer() {
|
||||
debug!(?ty);
|
||||
return ty;
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
let get_operand_ty = |expr| {
|
||||
let ty = self.typeck_results.borrow().expr_ty_adjusted(expr);
|
||||
let ty = self.resolve_vars_if_possible(ty);
|
||||
if ty.has_infer_types_or_consts() {
|
||||
if ty.has_non_region_infer() {
|
||||
assert!(self.is_tainted_by_errors());
|
||||
self.tcx.ty_error()
|
||||
} else {
|
||||
|
|
|
@ -149,7 +149,7 @@ impl<'a, 'tcx> InlineAsmCtxt<'a, 'tcx> {
|
|||
target_features: &FxHashSet<Symbol>,
|
||||
) -> Option<InlineAsmType> {
|
||||
let ty = (self.get_operand_ty)(expr);
|
||||
if ty.has_infer_types_or_consts() {
|
||||
if ty.has_non_region_infer() {
|
||||
bug!("inference variable in asm operand ty: {:?} {:?}", expr, ty);
|
||||
}
|
||||
let asm_ty_isize = match self.tcx.sess.target.pointer_width {
|
||||
|
|
|
@ -471,7 +471,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
// This has nothing here because it means we did string
|
||||
// concatenation (e.g., "Hello " + "World!"). This means
|
||||
// we don't want the note in the else clause to be emitted
|
||||
} else if lhs_ty.has_param_types_or_consts() {
|
||||
} else if lhs_ty.has_non_region_param() {
|
||||
// Look for a TraitPredicate in the Fulfillment errors,
|
||||
// and use it to generate a suggestion.
|
||||
//
|
||||
|
@ -657,7 +657,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
format!("cannot apply unary operator `{}`", op.as_str()),
|
||||
);
|
||||
|
||||
if operand_ty.has_param_types_or_consts() {
|
||||
if operand_ty.has_non_region_param() {
|
||||
let predicates = errors.iter().filter_map(|error| {
|
||||
error.obligation.predicate.to_opt_poly_trait_pred()
|
||||
});
|
||||
|
|
|
@ -1428,9 +1428,7 @@ fn check_where_clauses<'tcx>(wfcx: &WfCheckingCtxt<'_, 'tcx>, span: Span, def_id
|
|||
let substituted_pred = predicates.rebind(pred).subst(tcx, substs);
|
||||
// Don't check non-defaulted params, dependent defaults (including lifetimes)
|
||||
// or preds with multiple params.
|
||||
if substituted_pred.has_param_types_or_consts()
|
||||
|| param_count.params.len() > 1
|
||||
|| has_region
|
||||
if substituted_pred.has_non_region_param() || param_count.params.len() > 1 || has_region
|
||||
{
|
||||
None
|
||||
} else if predicates.0.predicates.iter().any(|&(p, _)| p == substituted_pred) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue