about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDylan MacKenzie <ecstaticmorse@gmail.com>2020-02-07 11:06:12 -0800
committerDylan MacKenzie <ecstaticmorse@gmail.com>2020-02-18 21:03:29 -0800
commit4992eb2c6fab0c7eb4a841385607723620a38cf6 (patch)
tree0244e18b9860b54fcea54ef66c3bfc27fbf24038 /src
parent8e7609b9fe12f4a972a55afb75b1a0098ada1378 (diff)
downloadrust-4992eb2c6fab0c7eb4a841385607723620a38cf6.tar.gz
rust-4992eb2c6fab0c7eb4a841385607723620a38cf6.zip
Test `rustc_const_unstable` on trait fns
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/stability.rs33
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/stability.stderr12
2 files changed, 45 insertions, 0 deletions
diff --git a/src/test/ui/rfc-2632-const-trait-impl/stability.rs b/src/test/ui/rfc-2632-const-trait-impl/stability.rs
new file mode 100644
index 00000000000..36cfaff2ffa
--- /dev/null
+++ b/src/test/ui/rfc-2632-const-trait-impl/stability.rs
@@ -0,0 +1,33 @@
+#![allow(incomplete_features)]
+#![feature(allow_internal_unstable)]
+#![feature(const_add)]
+#![feature(const_trait_impl)]
+#![feature(staged_api)]
+
+pub struct Int(i32);
+
+#[rustc_const_unstable(feature = "const_add", issue = "none")]
+impl const std::ops::Add for Int {
+    type Output = Self;
+
+    fn add(self, rhs: Self) -> Self {
+        Int(self.0 + rhs.0)
+    }
+}
+
+#[stable(feature = "rust1", since = "1.0.0")]
+#[rustc_const_stable(feature = "rust1", since = "1.0.0")]
+pub const fn foo() -> Int {
+    Int(1i32) + Int(2i32)
+    //~^ ERROR can only call other `const fn` within a `const fn`
+}
+
+// ok
+#[stable(feature = "rust1", since = "1.0.0")]
+#[rustc_const_unstable(feature = "bar", issue = "none")]
+pub const fn bar() -> Int {
+    Int(1i32) + Int(2i32)
+}
+
+
+fn main() {}
diff --git a/src/test/ui/rfc-2632-const-trait-impl/stability.stderr b/src/test/ui/rfc-2632-const-trait-impl/stability.stderr
new file mode 100644
index 00000000000..ce3bada01e8
--- /dev/null
+++ b/src/test/ui/rfc-2632-const-trait-impl/stability.stderr
@@ -0,0 +1,12 @@
+error[E0723]: can only call other `const fn` within a `const fn`, but `const <Int as std::ops::Add>::add` is not stable as `const fn`
+  --> $DIR/stability.rs:21:5
+   |
+LL |     Int(1i32) + Int(2i32)
+   |     ^^^^^^^^^^^^^^^^^^^^^
+   |
+   = 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`.