Rollup merge of #83297 - oli-obk:why_bug_today_if_you_can_delay_to_tomorrow, r=petrochenkov
Do not ICE on ty::Error as an error must already have been reported fixes #83253
This commit is contained in:
commit
51a29cbb23
@ -10,6 +10,7 @@ use crate::ty::subst::{GenericArg, GenericArgKind, SubstsRef};
|
||||
use crate::ty::{self, Ty, TyCtxt, TypeFoldable};
|
||||
use rustc_hir as ast;
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_span::DUMMY_SP;
|
||||
use rustc_target::spec::abi;
|
||||
use std::iter;
|
||||
|
||||
@ -499,11 +500,14 @@ pub fn super_relate_consts<R: TypeRelation<'tcx>>(
|
||||
|
||||
// FIXME(oli-obk): once const generics can have generic types, this assertion
|
||||
// will likely get triggered. Move to `normalize_erasing_regions` at that point.
|
||||
assert_eq!(
|
||||
tcx.erase_regions(a.ty),
|
||||
tcx.erase_regions(b.ty),
|
||||
"cannot relate constants of different types"
|
||||
);
|
||||
let a_ty = tcx.erase_regions(a.ty);
|
||||
let b_ty = tcx.erase_regions(b.ty);
|
||||
if a_ty != b_ty {
|
||||
relation.tcx().sess.delay_span_bug(
|
||||
DUMMY_SP,
|
||||
&format!("cannot relate constants of different types: {} != {}", a_ty, b_ty),
|
||||
);
|
||||
}
|
||||
|
||||
let eagerly_eval = |x: &'tcx ty::Const<'tcx>| x.eval(tcx, relation.param_env());
|
||||
let a = eagerly_eval(a);
|
||||
|
9
src/test/ui/const-generics/type_mismatch.rs
Normal file
9
src/test/ui/const-generics/type_mismatch.rs
Normal file
@ -0,0 +1,9 @@
|
||||
fn foo<const N: usize>() -> [u8; N] {
|
||||
bar::<N>() //~ ERROR mismatched types
|
||||
}
|
||||
|
||||
fn bar<const N: u8>() -> [u8; N] {}
|
||||
//~^ ERROR mismatched types
|
||||
//~| ERROR mismatched types
|
||||
|
||||
fn main() {}
|
23
src/test/ui/const-generics/type_mismatch.stderr
Normal file
23
src/test/ui/const-generics/type_mismatch.stderr
Normal file
@ -0,0 +1,23 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/type_mismatch.rs:2:11
|
||||
|
|
||||
LL | bar::<N>()
|
||||
| ^ expected `u8`, found `usize`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/type_mismatch.rs:5:31
|
||||
|
|
||||
LL | fn bar<const N: u8>() -> [u8; N] {}
|
||||
| ^ expected `usize`, found `u8`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/type_mismatch.rs:5:26
|
||||
|
|
||||
LL | fn bar<const N: u8>() -> [u8; N] {}
|
||||
| --- ^^^^^^^ expected array `[u8; N]`, found `()`
|
||||
| |
|
||||
| implicitly returns `()` as its body has no tail or `return` expression
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
11
src/test/ui/const-generics/type_not_in_scope.rs
Normal file
11
src/test/ui/const-generics/type_not_in_scope.rs
Normal file
@ -0,0 +1,11 @@
|
||||
impl X {
|
||||
//~^ ERROR cannot find type
|
||||
fn getn<const N: usize>() -> [u8; N] {
|
||||
getn::<N>()
|
||||
}
|
||||
}
|
||||
fn getn<const N: cfg_attr>() -> [u8; N] {}
|
||||
//~^ ERROR expected type, found built-in attribute `cfg_attr`
|
||||
//~| ERROR mismatched types
|
||||
|
||||
fn main() {}
|
24
src/test/ui/const-generics/type_not_in_scope.stderr
Normal file
24
src/test/ui/const-generics/type_not_in_scope.stderr
Normal file
@ -0,0 +1,24 @@
|
||||
error[E0412]: cannot find type `X` in this scope
|
||||
--> $DIR/type_not_in_scope.rs:1:6
|
||||
|
|
||||
LL | impl X {
|
||||
| ^ not found in this scope
|
||||
|
||||
error[E0573]: expected type, found built-in attribute `cfg_attr`
|
||||
--> $DIR/type_not_in_scope.rs:7:18
|
||||
|
|
||||
LL | fn getn<const N: cfg_attr>() -> [u8; N] {}
|
||||
| ^^^^^^^^ not a type
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/type_not_in_scope.rs:7:33
|
||||
|
|
||||
LL | fn getn<const N: cfg_attr>() -> [u8; N] {}
|
||||
| ---- ^^^^^^^ expected array `[u8; N]`, found `()`
|
||||
| |
|
||||
| implicitly returns `()` as its body has no tail or `return` expression
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0308, E0412, E0573.
|
||||
For more information about an error, try `rustc --explain E0308`.
|
Loading…
x
Reference in New Issue
Block a user