Skip to content

Commit

Permalink
Rollup merge of rust-lang#60710 - varkor:delay_span_bug-const-parent,…
Browse files Browse the repository at this point in the history
… r=matthewjasper

Use `delay_span_bug` for error cases when checking `AnonConst` parent

Fixes rust-lang#60704.
Fixes rust-lang#60650.
  • Loading branch information
Centril authored May 13, 2019
2 parents e952b52 + 0f792ab commit 25b5d30
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 3 deletions.
24 changes: 21 additions & 3 deletions src/librustc_typeck/collect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1404,15 +1404,27 @@ pub fn checked_type_of<'a, 'tcx>(
if !fail {
return None;
}
bug!("unexpected const parent path def {:?}", x);
tcx.sess.delay_span_bug(
DUMMY_SP,
&format!(
"unexpected const parent path def {:?}", x
),
);
tcx.types.err
}
}
}
x => {
if !fail {
return None;
}
bug!("unexpected const parent path {:?}", x);
tcx.sess.delay_span_bug(
DUMMY_SP,
&format!(
"unexpected const parent path {:?}", x
),
);
tcx.types.err
}
}
}
Expand All @@ -1421,7 +1433,13 @@ pub fn checked_type_of<'a, 'tcx>(
if !fail {
return None;
}
bug!("unexpected const parent in type_of_def_id(): {:?}", x);
tcx.sess.delay_span_bug(
DUMMY_SP,
&format!(
"unexpected const parent in type_of_def_id(): {:?}", x
),
);
tcx.types.err
}
}
}
Expand Down
11 changes: 11 additions & 0 deletions src/test/ui/const-generics/cannot-infer-type-for-const-param.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#![feature(const_generics)]
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash

// We should probably be able to infer the types here. However, this test is checking that we don't
// get an ICE in this case. It may be modified later to not be an error.

struct Foo<const NUM_BYTES: usize>(pub [u8; NUM_BYTES]);

fn main() {
let _ = Foo::<3>([1, 2, 3]); //~ ERROR type annotations needed
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
--> $DIR/cannot-infer-type-for-const-param.rs:1:12
|
LL | #![feature(const_generics)]
| ^^^^^^^^^^^^^^

error[E0282]: type annotations needed
--> $DIR/cannot-infer-type-for-const-param.rs:10:19
|
LL | let _ = Foo::<3>([1, 2, 3]);
| ^ cannot infer type for `{integer}`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0282`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
use std::convert::TryInto;

struct S;

fn main() {
let _: u32 = 5i32.try_into::<32>().unwrap(); //~ ERROR wrong number of const arguments
S.f::<0>(); //~ ERROR no method named `f`
S::<0>; //~ ERROR wrong number of const arguments
}
25 changes: 25 additions & 0 deletions src/test/ui/const-generics/invalid-const-arg-for-type-param.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
error[E0107]: wrong number of const arguments: expected 0, found 1
--> $DIR/invalid-const-arg-for-type-param.rs:6:34
|
LL | let _: u32 = 5i32.try_into::<32>().unwrap();
| ^^ unexpected const argument

error[E0599]: no method named `f` found for type `S` in the current scope
--> $DIR/invalid-const-arg-for-type-param.rs:7:7
|
LL | struct S;
| --------- method `f` not found for this
...
LL | S.f::<0>();
| ^

error[E0107]: wrong number of const arguments: expected 0, found 1
--> $DIR/invalid-const-arg-for-type-param.rs:8:9
|
LL | S::<0>;
| ^ unexpected const argument

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0107, E0599.
For more information about an error, try `rustc --explain E0107`.

0 comments on commit 25b5d30

Please sign in to comment.