mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Fix ICE on type alias in recursion
This commit is contained in:
parent
f4f5fc3e5c
commit
21bcd2ee9c
@ -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);
|
||||
|
2
tests/ui/infinite/auxiliary/alias.rs
Normal file
2
tests/ui/infinite/auxiliary/alias.rs
Normal file
@ -0,0 +1,2 @@
|
||||
pub struct W<T>(T);
|
||||
pub type Wrapper<T> = W<T>;
|
9
tests/ui/infinite/infinite-alias.rs
Normal file
9
tests/ui/infinite/infinite-alias.rs
Normal 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() {}
|
14
tests/ui/infinite/infinite-alias.stderr
Normal file
14
tests/ui/infinite/infinite-alias.stderr
Normal 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`.
|
Loading…
Reference in New Issue
Block a user