about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan MacKenzie <ecstaticmorse@gmail.com>2020-02-04 14:03:37 -0800
committerDylan MacKenzie <ecstaticmorse@gmail.com>2020-02-18 21:03:28 -0800
commit323ff193b8eda1c89eada54a1b3ac5c20d9e24c7 (patch)
tree9af9641bd72c5adb9fd7eb31cbde15904b458150
parent7a019b1bd2b13993bb2039053d815df02504083e (diff)
downloadrust-323ff193b8eda1c89eada54a1b3ac5c20d9e24c7.tar.gz
rust-323ff193b8eda1c89eada54a1b3ac5c20d9e24c7.zip
Add tests for calling trait methods on concrete types
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.rs30
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.stderr9
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs16
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr12
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr10
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/feature-gate.rs5
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr12
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/inherent-impl.rs2
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/inherent-impl.stderr20
9 files changed, 78 insertions, 38 deletions
diff --git a/src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.rs b/src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.rs
new file mode 100644
index 00000000000..ed6c07e4653
--- /dev/null
+++ b/src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.rs
@@ -0,0 +1,30 @@
+#![allow(incomplete_features)]
+#![feature(const_trait_impl)]
+#![feature(const_fn)]
+
+pub trait Plus {
+    fn plus(self, rhs: Self) -> Self;
+}
+
+impl const Plus for i32 {
+    fn plus(self, rhs: Self) -> Self {
+        self + rhs
+    }
+}
+
+impl Plus for u32 {
+    fn plus(self, rhs: Self) -> Self {
+        self + rhs
+    }
+}
+
+pub const fn add_i32(a: i32, b: i32) -> i32 {
+    a.plus(b)
+}
+
+pub const fn add_u32(a: u32, b: u32) -> u32 {
+    a.plus(b)
+    //~^ ERROR calls in constant functions are limited to constant functions
+}
+
+fn main() {}
diff --git a/src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.stderr b/src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.stderr
new file mode 100644
index 00000000000..7216876c83a
--- /dev/null
+++ b/src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method.stderr
@@ -0,0 +1,9 @@
+error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants
+  --> $DIR/call-const-trait-method.rs:26:5
+   |
+LL |     a.plus(b)
+   |     ^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0015`.
diff --git a/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs b/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
new file mode 100644
index 00000000000..cad4f69033b
--- /dev/null
+++ b/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
@@ -0,0 +1,16 @@
+#![allow(incomplete_features)]
+#![feature(const_trait_impl)]
+
+struct S;
+trait T {
+    fn foo();
+}
+
+fn non_const() {}
+
+impl const T for S {
+    fn foo() { non_const() }
+    //~^ ERROR
+}
+
+fn main() {}
diff --git a/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr b/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
new file mode 100644
index 00000000000..8c220dc44ab
--- /dev/null
+++ b/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
@@ -0,0 +1,12 @@
+error[E0723]: can only call other `const fn` within a `const fn`, but `const non_const` is not stable as `const fn`
+  --> $DIR/const-check-fns-in-const-impl.rs:12:16
+   |
+LL |     fn foo() { non_const() }
+   |                ^^^^^^^^^^^
+   |
+   = note: for more information, see issue https://github.com/rust-lang/rust/issues/57563
+   = help: add `#![feature(const_fn)]` to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0723`.
diff --git a/src/test/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr b/src/test/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr
index 061af3c94b4..d1ab99e33e9 100644
--- a/src/test/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr
+++ b/src/test/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr
@@ -1,10 +1,8 @@
-error: const trait impls are not yet implemented
-  --> $DIR/feature-gate.rs:9:1
+error: fatal error triggered by #[rustc_error]
+  --> $DIR/feature-gate.rs:14:1
    |
-LL | impl const T for S {}
-   | ^^^^^-----^^^^^^^^^^^
-   |      |
-   |      const because of this
+LL | fn main() {}
+   | ^^^^^^^^^^^^
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/rfc-2632-const-trait-impl/feature-gate.rs b/src/test/ui/rfc-2632-const-trait-impl/feature-gate.rs
index 49b6c0926c5..d9772431941 100644
--- a/src/test/ui/rfc-2632-const-trait-impl/feature-gate.rs
+++ b/src/test/ui/rfc-2632-const-trait-impl/feature-gate.rs
@@ -3,11 +3,12 @@
 
 #![cfg_attr(gated, feature(const_trait_impl))]
 #![allow(incomplete_features)]
+#![feature(rustc_attrs)]
 
 struct S;
 trait T {}
 impl const T for S {}
 //[stock]~^ ERROR const trait impls are experimental
-//[stock,gated]~^^ ERROR const trait impls are not yet implemented
 
-fn main() {}
+#[rustc_error]
+fn main() {} //[gated]~ ERROR fatal error triggered by #[rustc_error]
diff --git a/src/test/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr b/src/test/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr
index cfe226ea7a7..724090e49cd 100644
--- a/src/test/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr
+++ b/src/test/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr
@@ -1,5 +1,5 @@
 error[E0658]: const trait impls are experimental
-  --> $DIR/feature-gate.rs:9:6
+  --> $DIR/feature-gate.rs:10:6
    |
 LL | impl const T for S {}
    |      ^^^^^
@@ -7,14 +7,6 @@ LL | impl const T for S {}
    = note: see issue #67792 <https://github.com/rust-lang/rust/issues/67792> for more information
    = help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
 
-error: const trait impls are not yet implemented
-  --> $DIR/feature-gate.rs:9:1
-   |
-LL | impl const T for S {}
-   | ^^^^^-----^^^^^^^^^^^
-   |      |
-   |      const because of this
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
 
 For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.rs b/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.rs
index 7f064c0c53a..04123a532bd 100644
--- a/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.rs
+++ b/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.rs
@@ -8,10 +8,8 @@ trait T {}
 
 impl const S {}
 //~^ ERROR inherent impls cannot be `const`
-//~| ERROR const trait impls are not yet implemented
 
 impl const T {}
 //~^ ERROR inherent impls cannot be `const`
-//~| ERROR const trait impls are not yet implemented
 
 fn main() {}
diff --git a/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.stderr b/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.stderr
index bdc95ff2a57..3ea58a3728a 100644
--- a/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.stderr
+++ b/src/test/ui/rfc-2632-const-trait-impl/inherent-impl.stderr
@@ -9,7 +9,7 @@ LL | impl const S {}
    = note: only trait implementations may be annotated with `const`
 
 error: inherent impls cannot be `const`
-  --> $DIR/inherent-impl.rs:13:1
+  --> $DIR/inherent-impl.rs:12:1
    |
 LL | impl const T {}
    | ^^^^^-----^^^^^
@@ -18,21 +18,5 @@ LL | impl const T {}
    |
    = note: only trait implementations may be annotated with `const`
 
-error: const trait impls are not yet implemented
-  --> $DIR/inherent-impl.rs:9:1
-   |
-LL | impl const S {}
-   | ^^^^^-----^^^^^
-   |      |
-   |      const because of this
-
-error: const trait impls are not yet implemented
-  --> $DIR/inherent-impl.rs:13:1
-   |
-LL | impl const T {}
-   | ^^^^^-----^^^^^
-   |      |
-   |      const because of this
-
-error: aborting due to 4 previous errors
+error: aborting due to 2 previous errors