summaryrefslogtreecommitdiffstats
path: root/src/test/ui/generic-associated-types/parse
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/generic-associated-types/parse
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/generic-associated-types/parse')
-rw-r--r--src/test/ui/generic-associated-types/parse/in-trait-impl.rs10
-rw-r--r--src/test/ui/generic-associated-types/parse/in-trait.rs24
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-expected-token.rs10
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-expected-token.stderr10
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-expressions.rs22
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-expressions.stderr23
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.rs20
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.stderr43
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-segments.rs34
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-segments.stderr41
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.rs13
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.stderr33
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-types.rs22
-rw-r--r--src/test/ui/generic-associated-types/parse/trait-path-types.stderr41
14 files changed, 346 insertions, 0 deletions
diff --git a/src/test/ui/generic-associated-types/parse/in-trait-impl.rs b/src/test/ui/generic-associated-types/parse/in-trait-impl.rs
new file mode 100644
index 000000000..7f4775ddb
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/in-trait-impl.rs
@@ -0,0 +1,10 @@
+// check-pass
+// compile-flags: -Z parse-only
+
+#![feature(generic_associated_types)]
+
+impl<T> Baz for T where T: Foo {
+ type Quux<'a> = <T as Foo>::Bar<'a, 'static>;
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/in-trait.rs b/src/test/ui/generic-associated-types/parse/in-trait.rs
new file mode 100644
index 000000000..d438795eb
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/in-trait.rs
@@ -0,0 +1,24 @@
+// check-pass
+// compile-flags: -Z parse-only
+
+#![feature(generic_associated_types)]
+
+use std::ops::Deref;
+use std::fmt::Debug;
+
+trait Foo {
+ type Bar<'a>;
+ type Bar<'a, 'b>;
+ type Bar<'a, 'b,>;
+ type Bar<'a, 'b, T>;
+ type Bar<'a, 'b, T, U>;
+ type Bar<'a, 'b, T, U,>;
+ type Bar<'a, 'b, T: Debug, U,>;
+ type Bar<'a, 'b, T: Debug, U,>: Debug;
+ type Bar<'a, 'b, T: Debug, U,>: Deref<Target = T> + Into<U>;
+ type Bar<'a, 'b, T: Debug, U,> where T: Deref<Target = U>, U: Into<T>;
+ type Bar<'a, 'b, T: Debug, U,>: Deref<Target = T> + Into<U>
+ where T: Deref<Target = U>, U: Into<T>;
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-expected-token.rs b/src/test/ui/generic-associated-types/parse/trait-path-expected-token.rs
new file mode 100644
index 000000000..be85598b7
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-expected-token.rs
@@ -0,0 +1,10 @@
+#![feature(generic_associated_types)]
+
+trait X {
+ type Y<'a>;
+}
+
+fn f1<'a>(arg : Box<dyn X<Y = B = &'a ()>>) {}
+ //~^ ERROR: expected one of `!`, `(`, `+`, `,`, `::`, `<`, or `>`, found `=`
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-expected-token.stderr b/src/test/ui/generic-associated-types/parse/trait-path-expected-token.stderr
new file mode 100644
index 000000000..2b265e921
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-expected-token.stderr
@@ -0,0 +1,10 @@
+error: expected one of `!`, `(`, `+`, `,`, `::`, `<`, or `>`, found `=`
+ --> $DIR/trait-path-expected-token.rs:7:33
+ |
+LL | fn f1<'a>(arg : Box<dyn X<Y = B = &'a ()>>) {}
+ | - ^ expected one of 7 possible tokens
+ | |
+ | maybe try to close unmatched angle bracket
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-expressions.rs b/src/test/ui/generic-associated-types/parse/trait-path-expressions.rs
new file mode 100644
index 000000000..d57c2813b
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-expressions.rs
@@ -0,0 +1,22 @@
+#![feature(generic_associated_types)]
+
+mod error1 {
+ trait X {
+ type Y<'a>;
+ }
+
+ fn f1<'a>(arg : Box<dyn X< 1 = 32 >>) {}
+ //~^ ERROR: expected expression, found `)`
+}
+
+mod error2 {
+
+ trait X {
+ type Y<'a>;
+ }
+
+ fn f2<'a>(arg : Box<dyn X< { 1 } = 32 >>) {}
+ //~^ ERROR: expected one of
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-expressions.stderr b/src/test/ui/generic-associated-types/parse/trait-path-expressions.stderr
new file mode 100644
index 000000000..272afc10b
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-expressions.stderr
@@ -0,0 +1,23 @@
+error: expected expression, found `)`
+ --> $DIR/trait-path-expressions.rs:8:39
+ |
+LL | fn f1<'a>(arg : Box<dyn X< 1 = 32 >>) {}
+ | - ^ expected expression
+ | |
+ | while parsing a const generic argument starting here
+
+error: expected one of `,`, `:`, or `>`, found `=`
+ --> $DIR/trait-path-expressions.rs:18:36
+ |
+LL | fn f2<'a>(arg : Box<dyn X< { 1 } = 32 >>) {}
+ | - ^ expected one of `,`, `:`, or `>`
+ | |
+ | maybe try to close unmatched angle bracket
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | fn f2<'a>(arg : Box<dyn X< { 1 }> = 32 >>) {}
+ | +
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.rs b/src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.rs
new file mode 100644
index 000000000..791486480
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.rs
@@ -0,0 +1,20 @@
+#![feature(generic_associated_types)]
+
+trait X {
+ type Y<'a>;
+}
+
+const _: () = {
+ fn f1<'a>(arg : Box<dyn X< : 32 >>) {}
+ //~^ ERROR: expected one of `>`, a const expression, lifetime, or type, found `:`
+ //~| ERROR: expected parameter name, found `>`
+ //~| ERROR: expected one of `!`, `)`, `+`, `,`, or `::`, found `>`
+ //~| ERROR: constant provided when a type was expected
+};
+
+const _: () = {
+ fn f1<'a>(arg : Box<dyn X< = 32 >>) {}
+ //~^ ERROR: expected one of `>`, a const expression, lifetime, or type, found `=`
+};
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.stderr b/src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.stderr
new file mode 100644
index 000000000..3ace774a0
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-missing-gen_arg.stderr
@@ -0,0 +1,43 @@
+error: expected one of `>`, a const expression, lifetime, or type, found `:`
+ --> $DIR/trait-path-missing-gen_arg.rs:8:30
+ |
+LL | fn f1<'a>(arg : Box<dyn X< : 32 >>) {}
+ | ^ expected one of `>`, a const expression, lifetime, or type
+ |
+help: expressions must be enclosed in braces to be used as const generic arguments
+ |
+LL | fn f1<'a>(arg : Box<{ dyn X< : 32 } >>) {}
+ | + +
+
+error: expected parameter name, found `>`
+ --> $DIR/trait-path-missing-gen_arg.rs:8:36
+ |
+LL | fn f1<'a>(arg : Box<dyn X< : 32 >>) {}
+ | ^ expected parameter name
+
+error: expected one of `!`, `)`, `+`, `,`, or `::`, found `>`
+ --> $DIR/trait-path-missing-gen_arg.rs:8:36
+ |
+LL | fn f1<'a>(arg : Box<dyn X< : 32 >>) {}
+ | ^
+ | |
+ | expected one of `!`, `)`, `+`, `,`, or `::`
+ | help: missing `,`
+
+error: expected one of `>`, a const expression, lifetime, or type, found `=`
+ --> $DIR/trait-path-missing-gen_arg.rs:16:30
+ |
+LL | fn f1<'a>(arg : Box<dyn X< = 32 >>) {}
+ | - ^ expected one of `>`, a const expression, lifetime, or type
+ | |
+ | maybe try to close unmatched angle bracket
+
+error[E0747]: constant provided when a type was expected
+ --> $DIR/trait-path-missing-gen_arg.rs:8:23
+ |
+LL | fn f1<'a>(arg : Box<dyn X< : 32 >>) {}
+ | ^^^^^^^^^^^
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0747`.
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-segments.rs b/src/test/ui/generic-associated-types/parse/trait-path-segments.rs
new file mode 100644
index 000000000..e943f075f
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-segments.rs
@@ -0,0 +1,34 @@
+#![feature(generic_associated_types)]
+
+const _: () = {
+ trait X {
+ type Y<'a>;
+ }
+
+ fn f1<'a>(arg : Box<dyn X<X::Y = u32>>) {}
+ //~^ ERROR: expected one of
+ };
+
+const _: () = {
+ trait X {
+ type Y<'a>;
+ }
+
+ trait Z {}
+
+ impl<T : X<<Self as X>::Y<'a> = &'a u32>> Z for T {}
+ //~^ ERROR: expected one of
+};
+
+const _: () = {
+ trait X {
+ type Y<'a>;
+ }
+
+ trait Z {}
+
+ impl<T : X<X::Y<'a> = &'a u32>> Z for T {}
+ //~^ ERROR: expected one of
+};
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-segments.stderr b/src/test/ui/generic-associated-types/parse/trait-path-segments.stderr
new file mode 100644
index 000000000..7394393c0
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-segments.stderr
@@ -0,0 +1,41 @@
+error: expected one of `!`, `(`, `+`, `,`, `::`, `:`, `<`, or `>`, found `=`
+ --> $DIR/trait-path-segments.rs:8:36
+ |
+LL | fn f1<'a>(arg : Box<dyn X<X::Y = u32>>) {}
+ | - ^ expected one of 8 possible tokens
+ | |
+ | maybe try to close unmatched angle bracket
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | fn f1<'a>(arg : Box<dyn X<X::Y> = u32>>) {}
+ | +
+
+error: expected one of `,`, `::`, `:`, or `>`, found `=`
+ --> $DIR/trait-path-segments.rs:19:35
+ |
+LL | impl<T : X<<Self as X>::Y<'a> = &'a u32>> Z for T {}
+ | - ^ expected one of `,`, `::`, `:`, or `>`
+ | |
+ | maybe try to close unmatched angle bracket
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | impl<T : X<<Self as X>::Y<'a>> = &'a u32>> Z for T {}
+ | +
+
+error: expected one of `!`, `+`, `,`, `::`, `:`, or `>`, found `=`
+ --> $DIR/trait-path-segments.rs:30:25
+ |
+LL | impl<T : X<X::Y<'a> = &'a u32>> Z for T {}
+ | - ^ expected one of `!`, `+`, `,`, `::`, `:`, or `>`
+ | |
+ | maybe try to close unmatched angle bracket
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | impl<T : X<X::Y<'a>> = &'a u32>> Z for T {}
+ | +
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.rs b/src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.rs
new file mode 100644
index 000000000..4846af96d
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.rs
@@ -0,0 +1,13 @@
+#![feature(generic_associated_types)]
+
+trait X {
+ type Y<'a>;
+}
+
+const _: () = {
+ fn f2<'a>(arg : Box<dyn X<Y<1> = &'a ()>>) {}
+ //~^ ERROR this associated type takes 1 lifetime argument but 0 lifetime arguments
+ //~| ERROR this associated type takes 0 generic arguments but 1 generic argument
+};
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.stderr b/src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.stderr
new file mode 100644
index 000000000..46ddcb635
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-type-error-once-implemented.stderr
@@ -0,0 +1,33 @@
+error[E0107]: this associated type takes 1 lifetime argument but 0 lifetime arguments were supplied
+ --> $DIR/trait-path-type-error-once-implemented.rs:8:29
+ |
+LL | fn f2<'a>(arg : Box<dyn X<Y<1> = &'a ()>>) {}
+ | ^ expected 1 lifetime argument
+ |
+note: associated type defined here, with 1 lifetime parameter: `'a`
+ --> $DIR/trait-path-type-error-once-implemented.rs:4:10
+ |
+LL | type Y<'a>;
+ | ^ --
+help: add missing lifetime argument
+ |
+LL | fn f2<'a>(arg : Box<dyn X<Y<'a, 1> = &'a ()>>) {}
+ | +++
+
+error[E0107]: this associated type takes 0 generic arguments but 1 generic argument was supplied
+ --> $DIR/trait-path-type-error-once-implemented.rs:8:29
+ |
+LL | fn f2<'a>(arg : Box<dyn X<Y<1> = &'a ()>>) {}
+ | ^--- help: remove these generics
+ | |
+ | expected 0 generic arguments
+ |
+note: associated type defined here, with 0 generic parameters
+ --> $DIR/trait-path-type-error-once-implemented.rs:4:10
+ |
+LL | type Y<'a>;
+ | ^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0107`.
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-types.rs b/src/test/ui/generic-associated-types/parse/trait-path-types.rs
new file mode 100644
index 000000000..856253cc7
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-types.rs
@@ -0,0 +1,22 @@
+#![feature(generic_associated_types)]
+
+trait X {
+ type Y<'a>;
+}
+
+const _: () = {
+ fn f<'a>(arg : Box<dyn X< [u8; 1] = u32>>) {}
+ //~^ ERROR: expected one of
+};
+
+const _: () = {
+ fn f1<'a>(arg : Box<dyn X<(Y<'a>) = &'a ()>>) {}
+ //~^ ERROR: expected one of
+};
+
+const _: () = {
+ fn f1<'a>(arg : Box<dyn X< 'a = u32 >>) {}
+ //~^ ERROR: expected one of
+};
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parse/trait-path-types.stderr b/src/test/ui/generic-associated-types/parse/trait-path-types.stderr
new file mode 100644
index 000000000..fe9ed579e
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parse/trait-path-types.stderr
@@ -0,0 +1,41 @@
+error: expected one of `,`, `:`, or `>`, found `=`
+ --> $DIR/trait-path-types.rs:8:37
+ |
+LL | fn f<'a>(arg : Box<dyn X< [u8; 1] = u32>>) {}
+ | - ^ expected one of `,`, `:`, or `>`
+ | |
+ | maybe try to close unmatched angle bracket
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | fn f<'a>(arg : Box<dyn X< [u8; 1]> = u32>>) {}
+ | +
+
+error: expected one of `,`, `:`, or `>`, found `=`
+ --> $DIR/trait-path-types.rs:13:37
+ |
+LL | fn f1<'a>(arg : Box<dyn X<(Y<'a>) = &'a ()>>) {}
+ | - ^ expected one of `,`, `:`, or `>`
+ | |
+ | maybe try to close unmatched angle bracket
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | fn f1<'a>(arg : Box<dyn X<(Y<'a>)> = &'a ()>>) {}
+ | +
+
+error: expected one of `,`, `:`, or `>`, found `=`
+ --> $DIR/trait-path-types.rs:18:33
+ |
+LL | fn f1<'a>(arg : Box<dyn X< 'a = u32 >>) {}
+ | -- ^ expected one of `,`, `:`, or `>`
+ | |
+ | maybe try to close unmatched angle bracket
+ |
+help: you might have meant to end the type parameters here
+ |
+LL | fn f1<'a>(arg : Box<dyn X< 'a> = u32 >>) {}
+ | +
+
+error: aborting due to 3 previous errors
+