about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDylan MacKenzie <ecstaticmorse@gmail.com>2020-09-16 13:19:45 -0700
committerDylan MacKenzie <ecstaticmorse@gmail.com>2020-09-16 14:17:51 -0700
commitabc71677da866fd36c70790e768f36d2f809c493 (patch)
tree18ebf9dcc69cda45b65189e48024896c9854d3f7 /src
parent1e1257b8f87d1e3073020df27765dc57fcf2c0cd (diff)
Test that `const_precise_live_drops` can't be depended upon stably
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/consts/stable-precise-live-drops-in-libcore.rs22
-rw-r--r--src/test/ui/consts/stable-precise-live-drops-in-libcore.stderr12
-rw-r--r--src/test/ui/consts/unstable-precise-live-drops-in-libcore.rs23
3 files changed, 57 insertions, 0 deletions
diff --git a/src/test/ui/consts/stable-precise-live-drops-in-libcore.rs b/src/test/ui/consts/stable-precise-live-drops-in-libcore.rs
new file mode 100644
index 00000000000..651462d7ef1
--- /dev/null
+++ b/src/test/ui/consts/stable-precise-live-drops-in-libcore.rs
@@ -0,0 +1,22 @@
+#![stable(feature = "core", since = "1.6.0")]
+#![feature(staged_api)]
+#![feature(const_precise_live_drops, const_fn)]
+
+enum Either<T, S> {
+    Left(T),
+    Right(S),
+}
+
+impl<T> Either<T, T> {
+    #[stable(feature = "rust1", since = "1.0.0")]
+    #[rustc_const_stable(feature = "foo", since = "1.0.0")]
+    pub const fn unwrap(self) -> T {
+        //~^ ERROR destructors cannot be evaluated at compile-time
+        match self {
+            Self::Left(t) => t,
+            Self::Right(t) => t,
+        }
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/consts/stable-precise-live-drops-in-libcore.stderr b/src/test/ui/consts/stable-precise-live-drops-in-libcore.stderr
new file mode 100644
index 00000000000..a3f513541dd
--- /dev/null
+++ b/src/test/ui/consts/stable-precise-live-drops-in-libcore.stderr
@@ -0,0 +1,12 @@
+error[E0493]: destructors cannot be evaluated at compile-time
+  --> $DIR/stable-precise-live-drops-in-libcore.rs:13:25
+   |
+LL |     pub const fn unwrap(self) -> T {
+   |                         ^^^^ constant functions cannot evaluate destructors
+...
+LL |     }
+   |     - value is dropped here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0493`.
diff --git a/src/test/ui/consts/unstable-precise-live-drops-in-libcore.rs b/src/test/ui/consts/unstable-precise-live-drops-in-libcore.rs
new file mode 100644
index 00000000000..619084eaa51
--- /dev/null
+++ b/src/test/ui/consts/unstable-precise-live-drops-in-libcore.rs
@@ -0,0 +1,23 @@
+// check-pass
+
+#![stable(feature = "core", since = "1.6.0")]
+#![feature(staged_api)]
+#![feature(const_precise_live_drops)]
+
+enum Either<T, S> {
+    Left(T),
+    Right(S),
+}
+
+impl<T> Either<T, T> {
+    #[stable(feature = "rust1", since = "1.0.0")]
+    #[rustc_const_unstable(feature = "foo", issue = "none")]
+    pub const fn unwrap(self) -> T {
+        match self {
+            Self::Left(t) => t,
+            Self::Right(t) => t,
+        }
+    }
+}
+
+fn main() {}