diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-02-12 22:53:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-12 22:53:34 +0100 |
| commit | b67be3aa6b8101c63f7d31e80741c7bc78f0cb49 (patch) | |
| tree | 4fb98c5abeb6bf9fdd3d215c6d8a2ab65cbf6393 /src/test | |
| parent | 354f19cf2475148994954b6783341620c7445071 (diff) | |
| parent | 7ca96ed2af7552cf67be36befe8f6e25e5fe63f8 (diff) | |
Rollup merge of #81911 - BoxyUwU:constgenericgaticefix, r=nikomatsakis
GAT/const_generics: Allow with_opt_const_param to return GAT param def_id Fixes #75415 Fixes #79666 cc ```@lcnr``` I've absolutely no idea who to r? for this...
Diffstat (limited to 'src/test')
3 files changed, 71 insertions, 0 deletions
diff --git a/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-1.rs b/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-1.rs new file mode 100644 index 00000000000..ab33ef6f244 --- /dev/null +++ b/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-1.rs @@ -0,0 +1,22 @@ +// run-pass +#![feature(generic_associated_types)] +#![allow(incomplete_features)] + +// This test unsures that with_opt_const_param returns the +// def_id of the N param in the Foo::Assoc GAT. + +trait Foo { + type Assoc<const N: usize>; + fn foo(&self) -> Self::Assoc<3>; +} + +impl Foo for () { + type Assoc<const N: usize> = [(); N]; + fn foo(&self) -> Self::Assoc<3> { + [(); 3] + } +} + +fn main() { + assert_eq!(().foo(), [(); 3]); +} diff --git a/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-2.rs b/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-2.rs new file mode 100644 index 00000000000..ba9a82ae721 --- /dev/null +++ b/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-2.rs @@ -0,0 +1,22 @@ +// run-pass +#![feature(generic_associated_types)] +#![allow(incomplete_features)] + +// This test unsures that with_opt_const_param returns the +// def_id of the N param in the Foo::Assoc GAT. + +trait Foo { + type Assoc<const N: usize>; + fn foo<const N: usize>(&self) -> Self::Assoc<N>; +} + +impl Foo for () { + type Assoc<const N: usize> = [(); N]; + fn foo<const N: usize>(&self) -> Self::Assoc<N> { + [(); N] + } +} + +fn main() { + assert_eq!(().foo::<10>(), [(); 10]); +} diff --git a/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-3.rs b/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-3.rs new file mode 100644 index 00000000000..9da5334056a --- /dev/null +++ b/src/test/ui/generic-associated-types/const-generics-gat-in-trait-return-type-3.rs @@ -0,0 +1,27 @@ +// run-pass +#![feature(generic_associated_types)] +#![allow(incomplete_features)] + +// This test unsures that with_opt_const_param returns the +// def_id of the N param in the Bar::Assoc GAT. + +trait Bar { + type Assoc<const N: usize>; +} +trait Foo: Bar { + fn foo(&self) -> Self::Assoc<3>; +} + +impl Bar for () { + type Assoc<const N: usize> = [(); N]; +} + +impl Foo for () { + fn foo(&self) -> Self::Assoc<3> { + [(); 3] + } +} + +fn main() { + assert_eq!(().foo(), [(); 3]); +} |
