Erase regions in new abstract consts

This commit is contained in:
kadmin 2022-06-25 09:59:48 +00:00
parent e02d645110
commit 1e40200b35
2 changed files with 35 additions and 1 deletions

View File

@ -236,7 +236,7 @@ impl<'tcx> AbstractConst<'tcx> {
) -> Result<Option<AbstractConst<'tcx>>, ErrorGuaranteed> {
let inner = tcx.thir_abstract_const_opt_const_arg(uv.def)?;
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(
@ -416,6 +416,7 @@ impl<'a, 'tcx> AbstractConstBuilder<'a, 'tcx> {
// `AbstractConst`s should not contain any promoteds as they require references which
// are not allowed.
assert_eq!(ct.promoted, None);
assert_eq!(ct, self.tcx.erase_regions(ct));
}
}
}

View 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() {}