Skip to content

Commit

Permalink
Rollup merge of #70223 - lcnr:issue70167, r=eddyb
Browse files Browse the repository at this point in the history
fix type of const params in associated types.

fixes #66906
fixes #70167

r? @eddyb
  • Loading branch information
Dylan-DPC authored Mar 22, 2020
2 parents ea44d71 + a9c2378 commit 3c8f8b6
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 4 deletions.
20 changes: 16 additions & 4 deletions src/librustc_typeck/collect/type_of.rs
Original file line number Diff line number Diff line change
Expand Up @@ -256,15 +256,18 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
// figure out which generic parameter it corresponds to and return
// the relevant type.
let generics = match path.res {
Res::Def(DefKind::Ctor(..), def_id) => {
Res::Def(DefKind::Ctor(..), def_id)
| Res::Def(DefKind::AssocTy, def_id) => {
tcx.generics_of(tcx.parent(def_id).unwrap())
}
Res::Def(_, def_id) => tcx.generics_of(def_id),
Res::Err => return tcx.types.err,
res => {
tcx.sess.delay_span_bug(
DUMMY_SP,
&format!("unexpected const parent path def {:?}", res,),
&format!(
"unexpected const parent path def, parent: {:?}, def: {:?}",
parent_node, res
),
);
return tcx.types.err;
}
Expand All @@ -284,7 +287,16 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
.map(|param| tcx.type_of(param.def_id))
// This is no generic parameter associated with the arg. This is
// probably from an extra arg where one is not needed.
.unwrap_or(tcx.types.err)
.unwrap_or_else(|| {
tcx.sess.delay_span_bug(
DUMMY_SP,
&format!(
"missing generic parameter for `AnonConst`, parent {:?}",
parent_node
),
);
tcx.types.err
})
} else {
tcx.sess.delay_span_bug(
DUMMY_SP,
Expand Down
12 changes: 12 additions & 0 deletions src/test/ui/const-generics/issues/issue-66906.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// check-pass

#![feature(const_generics)]
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash

pub struct Tuple;

pub trait Trait<const I: usize> {
type Input: From<<Self as Trait<I>>::Input>;
}

fn main() {}
8 changes: 8 additions & 0 deletions src/test/ui/const-generics/issues/issue-66906.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
--> $DIR/issue-66906.rs:3:12
|
LL | #![feature(const_generics)]
| ^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default

10 changes: 10 additions & 0 deletions src/test/ui/const-generics/issues/issue-70167.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// check-pass

#![feature(const_generics)]
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash

pub trait Trait<const N: usize>: From<<Self as Trait<N>>::Item> {
type Item;
}

fn main() {}
8 changes: 8 additions & 0 deletions src/test/ui/const-generics/issues/issue-70167.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
--> $DIR/issue-70167.rs:3:12
|
LL | #![feature(const_generics)]
| ^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default

0 comments on commit 3c8f8b6

Please sign in to comment.