diff options
| author | kennytm <kennytm@gmail.com> | 2019-03-16 14:56:44 +0800 |
|---|---|---|
| committer | kennytm <kennytm@gmail.com> | 2019-03-16 22:40:07 +0800 |
| commit | 464478fbbb606348023ea75f1d003d5175a932c5 (patch) | |
| tree | 98d308cf6733eb0812c4aed5ec9a2ad50f5426e5 | |
| parent | c6569ecb76065ed13bd70ac9387ccd9ab84e1c50 (diff) | |
| parent | df05fbf006e90ed4827c385eb9192e4c46de70f4 (diff) | |
| download | rust-464478fbbb606348023ea75f1d003d5175a932c5.tar.gz rust-464478fbbb606348023ea75f1d003d5175a932c5.zip | |
Rollup merge of #59118 - seanmonstar:alias-where-self-ice, r=alexreg
rustc: fix ICE when trait alias has bare Self Fixes https://github.com/rust-lang/rust/issues/59029
| -rw-r--r-- | src/librustc/hir/map/mod.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-59029-1.rs | 8 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-59029-1.stderr | 9 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-59029-2.rs | 8 |
4 files changed, 29 insertions, 2 deletions
diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 600e7e21e99..151c5413dcf 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -541,7 +541,8 @@ impl<'hir> Map<'hir> { pub fn ty_param_owner(&self, id: HirId) -> HirId { match self.get_by_hir_id(id) { - Node::Item(&Item { node: ItemKind::Trait(..), .. }) => id, + Node::Item(&Item { node: ItemKind::Trait(..), .. }) | + Node::Item(&Item { node: ItemKind::TraitAlias(..), .. }) => id, Node::GenericParam(_) => self.get_parent_node_by_hir_id(id), _ => bug!("ty_param_owner: {} not a type parameter", self.hir_to_string(id)) } @@ -549,7 +550,8 @@ impl<'hir> Map<'hir> { pub fn ty_param_name(&self, id: HirId) -> Name { match self.get_by_hir_id(id) { - Node::Item(&Item { node: ItemKind::Trait(..), .. }) => keywords::SelfUpper.name(), + Node::Item(&Item { node: ItemKind::Trait(..), .. }) | + Node::Item(&Item { node: ItemKind::TraitAlias(..), .. }) => keywords::SelfUpper.name(), Node::GenericParam(param) => param.name.ident().name, _ => bug!("ty_param_name: {} not a type parameter", self.hir_to_string(id)), } diff --git a/src/test/ui/issues/issue-59029-1.rs b/src/test/ui/issues/issue-59029-1.rs new file mode 100644 index 00000000000..e98a4d0e491 --- /dev/null +++ b/src/test/ui/issues/issue-59029-1.rs @@ -0,0 +1,8 @@ +#![feature(trait_alias)] + +trait Svc<Req> { type Res; } + +trait MkSvc<Target, Req> = Svc<Target> where Self::Res: Svc<Req>; +//~^ ERROR associated type `Res` not found for `Self` + +fn main() {} diff --git a/src/test/ui/issues/issue-59029-1.stderr b/src/test/ui/issues/issue-59029-1.stderr new file mode 100644 index 00000000000..ed1d98c40d1 --- /dev/null +++ b/src/test/ui/issues/issue-59029-1.stderr @@ -0,0 +1,9 @@ +error[E0220]: associated type `Res` not found for `Self` + --> $DIR/issue-59029-1.rs:5:46 + | +LL | trait MkSvc<Target, Req> = Svc<Target> where Self::Res: Svc<Req>; + | ^^^^^^^^^ associated type `Res` not found + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0220`. diff --git a/src/test/ui/issues/issue-59029-2.rs b/src/test/ui/issues/issue-59029-2.rs new file mode 100644 index 00000000000..2bdb128d8c4 --- /dev/null +++ b/src/test/ui/issues/issue-59029-2.rs @@ -0,0 +1,8 @@ +// run-pass +#![feature(trait_alias)] + +trait Svc<Req> { type Res; } + +trait MkSvc<Target, Req> = Svc<Target> where <Self as Svc<Target>>::Res: Svc<Req>; + +fn main() {} |
