about summary refs log tree commit diff
path: root/tests/rustdoc-js-std/osstring-to-string.js
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2023-10-30 21:03:40 +0100
committerGitHub <noreply@github.com>2023-10-30 21:03:40 +0100
commitc5aec964405a9b5d769e74a8869326d321d5008f (patch)
tree00f56e54746c55f625926bab929788bde20c5d09 /tests/rustdoc-js-std/osstring-to-string.js
parent3e95c6ab036a705ce166695351c61ae74b984244 (diff)
parentc91f60e22fccbd1ee7701b2a1b88457985f9df0b (diff)
downloadrust-c5aec964405a9b5d769e74a8869326d321d5008f.tar.gz
rust-c5aec964405a9b5d769e74a8869326d321d5008f.zip
Rollup merge of #117414 - compiler-errors:tait-forevert, r=oli-obk
Don't normalize to an un-revealed opaque when we hit the recursion limit

Currently, we will normalize `Opaque := Option<&Opaque>` to something like `Option<&Option<&Option<&...Opaque>>>`, hitting a limit and bottoming out in an unnormalized opaque after the recursion limit gets hit.

Unfortunately, during `layout_of`, we'll simply recurse and try again if the type normalizes to something different than the type:
https://github.com/rust-lang/rust/blob/e6e931dda5fffbae0fd87c5b1af753cc95556880/compiler/rustc_ty_utils/src/layout.rs#L58-L60

That means then we'll try to normalize `Option<&Option<&Option<&...Opaque>>>` again, substituting `Opaque` into itself even deeper. Eventually this will get to the point that we're just stack-overflowing on a really deep type before even hitting an opaque again.

To fix this, we just bottom out into `ty::Error` instead of the unrevealed opaque type.

Fixes #117412

r? `@oli-obk`
Diffstat (limited to 'tests/rustdoc-js-std/osstring-to-string.js')
0 files changed, 0 insertions, 0 deletions