Rollup merge of #90396 - b-naber:type_flags_ices_default_anon_consts, r=lcnr
Prevent type flags assertions being thrown in default_anon_const_substs if errors occurred Fixes https://github.com/rust-lang/rust/issues/90364 Fixes https://github.com/rust-lang/rust/issues/88997 r? ``@lcnr``
This commit is contained in:
commit
d99dc7abfa
@ -292,7 +292,8 @@ pub(super) fn default_anon_const_substs(tcx: TyCtxt<'_>, def_id: DefId) -> Subst
|
||||
// Getting this wrong can lead to ICE and unsoundness, so we assert it here.
|
||||
for arg in substs.iter() {
|
||||
let allowed_flags = ty::TypeFlags::MAY_NEED_DEFAULT_CONST_SUBSTS
|
||||
| ty::TypeFlags::STILL_FURTHER_SPECIALIZABLE;
|
||||
| ty::TypeFlags::STILL_FURTHER_SPECIALIZABLE
|
||||
| ty::TypeFlags::HAS_ERROR;
|
||||
assert!(!arg.has_type_flags(!allowed_flags));
|
||||
}
|
||||
substs
|
||||
|
14
src/test/ui/const-generics/issues/issue-88997.rs
Normal file
14
src/test/ui/const-generics/issues/issue-88997.rs
Normal file
@ -0,0 +1,14 @@
|
||||
#![allow(incomplete_features)]
|
||||
#![feature(generic_const_exprs)]
|
||||
|
||||
struct ConstAssert<const COND: bool>;
|
||||
trait True {}
|
||||
impl True for ConstAssert<true> {}
|
||||
|
||||
struct Range<T: PartialOrd, const MIN: T, const MAX: T>(T)
|
||||
//~^ ERROR the type of const parameters must not depend on other generic parameters
|
||||
//~| ERROR the type of const parameters must not depend on other generic parameters
|
||||
where
|
||||
ConstAssert<{ MIN <= MAX }>: True;
|
||||
|
||||
fn main() {}
|
15
src/test/ui/const-generics/issues/issue-88997.stderr
Normal file
15
src/test/ui/const-generics/issues/issue-88997.stderr
Normal file
@ -0,0 +1,15 @@
|
||||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/issue-88997.rs:8:40
|
||||
|
|
||||
LL | struct Range<T: PartialOrd, const MIN: T, const MAX: T>(T)
|
||||
| ^ the type must not depend on the parameter `T`
|
||||
|
||||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/issue-88997.rs:8:54
|
||||
|
|
||||
LL | struct Range<T: PartialOrd, const MIN: T, const MAX: T>(T)
|
||||
| ^ the type must not depend on the parameter `T`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0770`.
|
9
src/test/ui/const-generics/issues/issue-90364.rs
Normal file
9
src/test/ui/const-generics/issues/issue-90364.rs
Normal file
@ -0,0 +1,9 @@
|
||||
#![feature(generic_const_exprs)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
pub struct Foo<T, const H: T>(T)
|
||||
//~^ ERROR the type of const parameters must not depend on other generic parameters
|
||||
where
|
||||
[(); 1]:;
|
||||
|
||||
fn main() {}
|
9
src/test/ui/const-generics/issues/issue-90364.stderr
Normal file
9
src/test/ui/const-generics/issues/issue-90364.stderr
Normal file
@ -0,0 +1,9 @@
|
||||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/issue-90364.rs:4:28
|
||||
|
|
||||
LL | pub struct Foo<T, const H: T>(T)
|
||||
| ^ the type must not depend on the parameter `T`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0770`.
|
Loading…
x
Reference in New Issue
Block a user