1
Fork 0

Rollup merge of #108168 - clubby789:recursive-type-alias, r=compiler-errors

Fix ICE on type alias in recursion

Fixes #108160
This commit is contained in:
Guillaume Gomez 2023-02-22 10:35:07 +01:00 committed by GitHub
commit 89c201e3be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 2 deletions

View file

@ -2,7 +2,7 @@ use crate::dep_graph::DepKind;
use rustc_data_structures::fx::FxHashSet;
use rustc_errors::{pluralize, struct_span_err, Applicability, MultiSpan};
use rustc_hir as hir;
use rustc_hir::def::DefKind;
use rustc_hir::def::{DefKind, Res};
use rustc_middle::ty::Representability;
use rustc_middle::ty::{self, DefIdTree, Ty, TyCtxt};
use rustc_query_system::query::QueryInfo;
@ -199,7 +199,8 @@ fn find_item_ty_spans(
) {
match ty.kind {
hir::TyKind::Path(hir::QPath::Resolved(_, path)) => {
if let Some(def_id) = path.res.opt_def_id() {
if let Res::Def(kind, def_id) = path.res
&& kind != DefKind::TyAlias {
let check_params = def_id.as_local().map_or(true, |def_id| {
if def_id == needle {
spans.push(ty.span);

View file

@ -0,0 +1,2 @@
pub struct W<T>(T);
pub type Wrapper<T> = W<T>;

View file

@ -0,0 +1,9 @@
// aux-build: alias.rs
// regression test for 108160
extern crate alias;
use alias::Wrapper;
struct Rec(Wrapper<Rec>); //~ ERROR recursive type `Rec` has infinite
fn main() {}

View file

@ -0,0 +1,14 @@
error[E0072]: recursive type `Rec` has infinite size
--> $DIR/infinite-alias.rs:7:1
|
LL | struct Rec(Wrapper<Rec>);
| ^^^^^^^^^^ ------------ recursive without indirection
|
help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
|
LL | struct Rec(Box<Wrapper<Rec>>);
| ++++ +
error: aborting due to previous error
For more information about this error, try `rustc --explain E0072`.