summaryrefslogtreecommitdiffstats
path: root/tests/ui/rfc-2632-const-trait-impl/specialization
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
commitdc0db358abe19481e475e10c32149b53370f1a1c (patch)
treeab8ce99c4b255ce46f99ef402c27916055b899ee /tests/ui/rfc-2632-const-trait-impl/specialization
parentReleasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff)
downloadrustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz
rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/rfc-2632-const-trait-impl/specialization')
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs58
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr18
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs39
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs26
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr8
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs15
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs49
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs57
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs39
9 files changed, 0 insertions, 309 deletions
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs b/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs
deleted file mode 100644
index f31123f16..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs
+++ /dev/null
@@ -1,58 +0,0 @@
-// Tests that trait bounds on specializing trait impls must be `~const` if the
-// same bound is present on the default impl and is `~const` there.
-
-#![feature(const_trait_impl)]
-#![feature(rustc_attrs)]
-#![feature(min_specialization)]
-
-#[rustc_specialization_trait]
-trait Specialize {}
-
-#[const_trait]
-trait Foo {}
-
-#[const_trait]
-trait Bar {
- fn bar();
-}
-
-// bgr360: I was only able to exercise the code path that raises the
-// "missing ~const qualifier" error by making this base impl non-const, even
-// though that doesn't really make sense to do. As seen below, if the base impl
-// is made const, rustc fails earlier with an overlapping impl failure.
-impl<T> Bar for T
-where
- T: ~const Foo,
-{
- default fn bar() {}
-}
-
-impl<T> Bar for T
-where
- T: Foo, //~ ERROR missing `~const` qualifier
- T: Specialize,
-{
- fn bar() {}
-}
-
-#[const_trait]
-trait Baz {
- fn baz();
-}
-
-impl<T> const Baz for T
-where
- T: ~const Foo,
-{
- default fn baz() {}
-}
-
-impl<T> const Baz for T //~ ERROR conflicting implementations of trait `Baz`
-where
- T: Foo,
- T: Specialize,
-{
- fn baz() {}
-}
-
-fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr b/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr
deleted file mode 100644
index 057cf4aea..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error: missing `~const` qualifier for specialization
- --> $DIR/const-default-bound-non-const-specialized-bound.rs:32:8
- |
-LL | T: Foo,
- | ^^^
-
-error[E0119]: conflicting implementations of trait `Baz`
- --> $DIR/const-default-bound-non-const-specialized-bound.rs:50:1
- |
-LL | impl<T> const Baz for T
- | ----------------------- first implementation here
-...
-LL | impl<T> const Baz for T
- | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs b/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
deleted file mode 100644
index 9ddea427c..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Tests that a const default trait impl can be specialized by another const
-// trait impl and that the specializing impl will be used during const-eval.
-
-// run-pass
-
-#![feature(const_trait_impl)]
-#![feature(min_specialization)]
-
-#[const_trait]
-trait Value {
- fn value() -> u32;
-}
-
-const fn get_value<T: ~const Value>() -> u32 {
- T::value()
-}
-
-impl<T> const Value for T {
- default fn value() -> u32 {
- 0
- }
-}
-
-struct FortyTwo;
-
-impl const Value for FortyTwo {
- fn value() -> u32 {
- 42
- }
-}
-
-const ZERO: u32 = get_value::<()>();
-
-const FORTY_TWO: u32 = get_value::<FortyTwo>();
-
-fn main() {
- assert_eq!(ZERO, 0);
- assert_eq!(FORTY_TWO, 42);
-}
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs b/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
deleted file mode 100644
index a3bb9b3f9..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Tests that specializing trait impls must be at least as const as the default impl.
-
-#![feature(const_trait_impl)]
-#![feature(min_specialization)]
-
-#[const_trait]
-trait Value {
- fn value() -> u32;
-}
-
-impl<T> const Value for T {
- default fn value() -> u32 {
- 0
- }
-}
-
-struct FortyTwo;
-
-impl Value for FortyTwo { //~ ERROR cannot specialize on const impl with non-const impl
- fn value() -> u32 {
- println!("You can't do that (constly)");
- 42
- }
-}
-
-fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr b/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
deleted file mode 100644
index 247668047..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
+++ /dev/null
@@ -1,8 +0,0 @@
-error: cannot specialize on const impl with non-const impl
- --> $DIR/const-default-impl-non-const-specialized-impl.rs:19:1
- |
-LL | impl Value for FortyTwo {
- | ^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs b/tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs
deleted file mode 100644
index 2aac0a2b4..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// check-pass
-
-#![feature(const_trait_impl)]
-#![feature(min_specialization)]
-
-#[const_trait]
-trait Foo {
- fn foo();
-}
-
-impl const Foo for u32 {
- default fn foo() {}
-}
-
-fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs b/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs
deleted file mode 100644
index 92d8be6bb..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Tests that `~const` trait bounds can be used to specialize const trait impls.
-
-// check-pass
-
-#![feature(const_trait_impl)]
-#![feature(rustc_attrs)]
-#![feature(min_specialization)]
-
-#[const_trait]
-#[rustc_specialization_trait]
-trait Specialize {}
-
-#[const_trait]
-trait Foo {
- fn foo();
-}
-
-impl<T> const Foo for T {
- default fn foo() {}
-}
-
-impl<T> const Foo for T
-where
- T: ~const Specialize,
-{
- fn foo() {}
-}
-
-#[const_trait]
-trait Bar {
- fn bar() {}
-}
-
-impl<T> const Bar for T
-where
- T: ~const Foo,
-{
- default fn bar() {}
-}
-
-impl<T> const Bar for T
-where
- T: ~const Foo,
- T: ~const Specialize,
-{
- fn bar() {}
-}
-
-fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs b/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs
deleted file mode 100644
index 51bfaf73b..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Tests that `T: ~const Foo` in a specializing impl is treated as equivalent to
-// `T: Foo` in the default impl for the purposes of specialization (i.e., it
-// does not think that the user is attempting to specialize on trait `Foo`).
-
-// check-pass
-
-#![feature(rustc_attrs)]
-#![feature(min_specialization)]
-#![feature(const_trait_impl)]
-
-#[rustc_specialization_trait]
-trait Specialize {}
-
-#[const_trait]
-trait Foo {}
-
-#[const_trait]
-trait Bar {
- fn bar();
-}
-
-impl<T> Bar for T
-where
- T: Foo,
-{
- default fn bar() {}
-}
-
-impl<T> const Bar for T
-where
- T: ~const Foo,
- T: Specialize,
-{
- fn bar() {}
-}
-
-#[const_trait]
-trait Baz {
- fn baz();
-}
-
-impl<T> const Baz for T
-where
- T: Foo,
-{
- default fn baz() {}
-}
-
-impl<T> const Baz for T
-where
- T: ~const Foo,
- T: Specialize,
-{
- fn baz() {}
-}
-
-fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs b/tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs
deleted file mode 100644
index 35aa52fbd..000000000
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Tests that a non-const default impl can be specialized by a const trait impl,
-// but that the default impl cannot be used in a const context.
-
-// run-pass
-
-#![feature(const_trait_impl)]
-#![feature(min_specialization)]
-
-#[const_trait]
-trait Value {
- fn value() -> u32;
-}
-
-const fn get_value<T: ~const Value>() -> u32 {
- T::value()
-}
-
-impl<T> Value for T {
- default fn value() -> u32 {
- println!("You can't do that (constly)");
- 0
- }
-}
-
-struct FortyTwo;
-
-impl const Value for FortyTwo {
- fn value() -> u32 {
- 42
- }
-}
-
-fn main() {
- let zero = get_value::<()>();
- assert_eq!(zero, 0);
-
- const FORTY_TWO: u32 = get_value::<FortyTwo>();
- assert_eq!(FORTY_TWO, 42);
-}