Rollup merge of #113755 - fmease:probe-adt-norm-lazy-ty-alias, r=oli-obk

Normalize lazy type aliases when probing for ADTs

Fixes #113736.

r? ```@oli-obk```
This commit is contained in:
Matthias Krüger 2023-07-17 00:14:06 +02:00 committed by GitHub
commit b42ada2b12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View File

@ -302,7 +302,9 @@ fn probe_adt(&self, span: Span, ty: Ty<'tcx>) -> Option<ty::AdtDef<'tcx>> {
match ty.kind() {
ty::Adt(adt_def, _) => Some(*adt_def),
// FIXME(#104767): Should we handle bound regions here?
ty::Alias(ty::Projection | ty::Inherent, _) if !ty.has_escaping_bound_vars() => {
ty::Alias(ty::Projection | ty::Inherent | ty::Weak, _)
if !ty.has_escaping_bound_vars() =>
{
self.normalize(span, ty).ty_adt_def()
}
_ => None,

View File

@ -0,0 +1,17 @@
// Regression test for issue #113736.
// check-pass
#![feature(lazy_type_alias)]
enum Enum {
Unit,
Tuple(),
Struct {},
}
fn main() {
type Alias = Enum;
let _ = Alias::Unit;
let _ = Alias::Tuple();
let _ = Alias::Struct {};
}