Erase regions in new abstract consts
This commit is contained in:
parent
e02d645110
commit
1e40200b35
2 changed files with 35 additions and 1 deletions
|
@ -236,7 +236,7 @@ impl<'tcx> AbstractConst<'tcx> {
|
||||||
) -> Result<Option<AbstractConst<'tcx>>, ErrorGuaranteed> {
|
) -> Result<Option<AbstractConst<'tcx>>, ErrorGuaranteed> {
|
||||||
let inner = tcx.thir_abstract_const_opt_const_arg(uv.def)?;
|
let inner = tcx.thir_abstract_const_opt_const_arg(uv.def)?;
|
||||||
debug!("AbstractConst::new({:?}) = {:?}", uv, inner);
|
debug!("AbstractConst::new({:?}) = {:?}", uv, inner);
|
||||||
Ok(inner.map(|inner| AbstractConst { inner, substs: uv.substs }))
|
Ok(inner.map(|inner| AbstractConst { inner, substs: tcx.erase_regions(uv.substs) }))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_const(
|
pub fn from_const(
|
||||||
|
@ -416,6 +416,7 @@ impl<'a, 'tcx> AbstractConstBuilder<'a, 'tcx> {
|
||||||
// `AbstractConst`s should not contain any promoteds as they require references which
|
// `AbstractConst`s should not contain any promoteds as they require references which
|
||||||
// are not allowed.
|
// are not allowed.
|
||||||
assert_eq!(ct.promoted, None);
|
assert_eq!(ct.promoted, None);
|
||||||
|
assert_eq!(ct, self.tcx.erase_regions(ct));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
33
src/test/ui/const-generics/try_unify_ignore_lifetimes.rs
Normal file
33
src/test/ui/const-generics/try_unify_ignore_lifetimes.rs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// check-pass
|
||||||
|
#![feature(generic_const_exprs)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
struct Num<const N: usize>;
|
||||||
|
|
||||||
|
trait NumT {
|
||||||
|
const VALUE: usize;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<const N: usize> NumT for Num<N> {
|
||||||
|
const VALUE: usize = N;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Foo<'a, N: NumT>(&'a [u32; N::VALUE]) where [(); N::VALUE]:;
|
||||||
|
|
||||||
|
trait Bar {
|
||||||
|
type Size: NumT;
|
||||||
|
|
||||||
|
fn bar<'a>(foo: &Foo<'a, Self::Size>) where [(); Self::Size::VALUE]: {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Baz<'a> {
|
||||||
|
type Size: NumT;
|
||||||
|
|
||||||
|
fn baz(foo: &Foo<'a, Self::Size>) where [(); Self::Size::VALUE]: {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue