Fix ICE on type alias in recursion

This commit is contained in:
clubby789 2023-02-17 16:19:13 +00:00
parent f4f5fc3e5c
commit 21bcd2ee9c
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`.