encode generics_of
of fields and ty params
This commit is contained in:
parent
1f94abcda6
commit
2c004a2287
@ -918,12 +918,12 @@ fn should_encode_generics(def_kind: DefKind) -> bool {
|
|||||||
| DefKind::AnonConst
|
| DefKind::AnonConst
|
||||||
| DefKind::OpaqueTy
|
| DefKind::OpaqueTy
|
||||||
| DefKind::Impl
|
| DefKind::Impl
|
||||||
|
| DefKind::Field
|
||||||
|
| DefKind::TyParam
|
||||||
| DefKind::Closure
|
| DefKind::Closure
|
||||||
| DefKind::Generator => true,
|
| DefKind::Generator => true,
|
||||||
DefKind::Mod
|
DefKind::Mod
|
||||||
| DefKind::Field
|
|
||||||
| DefKind::ForeignMod
|
| DefKind::ForeignMod
|
||||||
| DefKind::TyParam
|
|
||||||
| DefKind::ConstParam
|
| DefKind::ConstParam
|
||||||
| DefKind::Macro(..)
|
| DefKind::Macro(..)
|
||||||
| DefKind::Use
|
| DefKind::Use
|
||||||
|
23
src/test/ui/const-generics/auxiliary/generics_of_parent.rs
Normal file
23
src/test/ui/const-generics/auxiliary/generics_of_parent.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
// library portion of regression test for #87674
|
||||||
|
pub struct Foo<const N: usize>([(); N + 1])
|
||||||
|
where
|
||||||
|
[(); N + 1]: ;
|
||||||
|
|
||||||
|
// library portion of regression test for #87603
|
||||||
|
pub struct S<T: Copy + Default, const N: usize>
|
||||||
|
where
|
||||||
|
[T; N * 2]: Sized,
|
||||||
|
{
|
||||||
|
pub s: [T; N * 2],
|
||||||
|
}
|
||||||
|
impl<T: Default + Copy, const N: usize> S<T, N>
|
||||||
|
where
|
||||||
|
[T; N * 2]: Sized,
|
||||||
|
{
|
||||||
|
pub fn test() -> Self {
|
||||||
|
S { s: [T::default(); N * 2] }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
// library portion of testing that `impl Trait<{ expr }>` doesnt ice because of a `DefKind::TyParam` parent
|
||||||
|
pub fn foo<const N: usize>(foo: impl Into<[(); N + 1]>) {
|
||||||
|
foo.into();
|
||||||
|
}
|
25
src/test/ui/const-generics/parent_generics_of_encoding.rs
Normal file
25
src/test/ui/const-generics/parent_generics_of_encoding.rs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// aux-build:generics_of_parent.rs
|
||||||
|
// check-pass
|
||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
extern crate generics_of_parent;
|
||||||
|
|
||||||
|
use generics_of_parent::{Foo, S};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// regression test for #87603
|
||||||
|
const N: usize = 2;
|
||||||
|
let x: S<u8, N> = S::test();
|
||||||
|
}
|
||||||
|
|
||||||
|
// regression test for #87674
|
||||||
|
fn new<U>(a: U) -> U {
|
||||||
|
a
|
||||||
|
}
|
||||||
|
fn foo<const N: usize>(bar: &mut Foo<N>)
|
||||||
|
where
|
||||||
|
[(); N + 1]: ,
|
||||||
|
{
|
||||||
|
*bar = new(loop {});
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
// aux-build:generics_of_parent_impl_trait.rs
|
||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
extern crate generics_of_parent_impl_trait;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// check for `impl Trait<{ const }>` which has a parent of a `DefKind::TyParam`
|
||||||
|
generics_of_parent_impl_trait::foo([()]);
|
||||||
|
//~^ error: type annotations needed:
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
error[E0284]: type annotations needed: cannot satisfy `the constant `foo::{opaque#0}::{constant#0}` can be evaluated`
|
||||||
|
--> $DIR/parent_generics_of_encoding_impl_trait.rs:9:5
|
||||||
|
|
|
||||||
|
LL | generics_of_parent_impl_trait::foo([()]);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot satisfy `the constant `foo::{opaque#0}::{constant#0}` can be evaluated`
|
||||||
|
|
|
||||||
|
::: $DIR/auxiliary/generics_of_parent_impl_trait.rs:5:48
|
||||||
|
|
|
||||||
|
LL | pub fn foo<const N: usize>(foo: impl Into<[(); N + 1]>) {
|
||||||
|
| ----- required by this bound in `foo`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0284`.
|
Loading…
x
Reference in New Issue
Block a user