Skip to content

Commit

Permalink
Don't super-fold types when we hit the recursion limit
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Oct 30, 2023
1 parent e6e931d commit c91f60e
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
11 changes: 4 additions & 7 deletions compiler/rustc_trait_selection/src/traits/query/normalize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,17 +230,14 @@ impl<'cx, 'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for QueryNormalizer<'cx, 'tcx>
Reveal::All => {
let args = data.args.try_fold_with(self)?;
let recursion_limit = self.interner().recursion_limit();

if !recursion_limit.value_within_limit(self.anon_depth) {
// A closure or coroutine may have itself as in its upvars.
// This should be checked handled by the recursion check for opaque
// types, but we may end up here before that check can happen.
// In that case, we delay a bug to mark the trip, and continue without
// revealing the opaque.
self.infcx
let guar = self
.infcx
.err_ctxt()
.build_overflow_error(&ty, self.cause.span, true)
.delay_as_bug();
return ty.try_super_fold_with(self);
return Ok(Ty::new_error(self.interner(), guar));
}

let generic_ty = self.interner().type_of(data.def_id);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#![feature(type_alias_impl_trait)]

type T = impl Copy;
//~^ ERROR cannot resolve opaque type

static STATIC: T = None::<&'static T>;

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0720]: cannot resolve opaque type
--> $DIR/infinite-cycle-involving-weak.rs:3:10
|
LL | type T = impl Copy;
| ^^^^^^^^^ cannot resolve opaque type

error: aborting due to previous error

For more information about this error, try `rustc --explain E0720`.

0 comments on commit c91f60e

Please sign in to comment.