about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2020-08-16 17:51:49 +0200
committerRalf Jung <post@ralfj.de>2020-09-06 14:14:31 +0200
commit28ddda76b730960cdfd35f188345af0299e29517 (patch)
tree17cbddaa2132f8b260e127c28a1edeb5a676fae9
parent720293b6407ad883c609efb6badda990edf59769 (diff)
downloadrust-28ddda76b730960cdfd35f188345af0299e29517.tar.gz
rust-28ddda76b730960cdfd35f188345af0299e29517.zip
add compile-fail test for &mut promotion
-rw-r--r--src/test/ui/consts/promote-no-mut.rs10
-rw-r--r--src/test/ui/consts/promote-no-mut.stderr23
-rw-r--r--src/test/ui/consts/promotion-mutable-ref.rs2
3 files changed, 34 insertions, 1 deletions
diff --git a/src/test/ui/consts/promote-no-mut.rs b/src/test/ui/consts/promote-no-mut.rs
new file mode 100644
index 00000000000..fb57c8bb934
--- /dev/null
+++ b/src/test/ui/consts/promote-no-mut.rs
@@ -0,0 +1,10 @@
+// ignore-tidy-linelength
+// We do not promote mutable references.
+static mut TEST1: Option<&mut [i32]> = Some(&mut [1, 2, 3]); //~ ERROR temporary value dropped while borrowed
+
+static mut TEST2: &'static mut [i32] = {
+    let x = &mut [1,2,3]; //~ ERROR temporary value dropped while borrowed
+    x
+};
+
+fn main() {}
diff --git a/src/test/ui/consts/promote-no-mut.stderr b/src/test/ui/consts/promote-no-mut.stderr
new file mode 100644
index 00000000000..49d96546ada
--- /dev/null
+++ b/src/test/ui/consts/promote-no-mut.stderr
@@ -0,0 +1,23 @@
+error[E0716]: temporary value dropped while borrowed
+  --> $DIR/promote-no-mut.rs:3:50
+   |
+LL | static mut TEST1: Option<&mut [i32]> = Some(&mut [1, 2, 3]);
+   |                                        ----------^^^^^^^^^-
+   |                                        |         |        |
+   |                                        |         |        temporary value is freed at the end of this statement
+   |                                        |         creates a temporary which is freed while still in use
+   |                                        using this value as a static requires that borrow lasts for `'static`
+
+error[E0716]: temporary value dropped while borrowed
+  --> $DIR/promote-no-mut.rs:6:18
+   |
+LL |     let x = &mut [1,2,3];
+   |                  ^^^^^^^ creates a temporary which is freed while still in use
+LL |     x
+   |     - using this value as a static requires that borrow lasts for `'static`
+LL | };
+   | - temporary value is freed at the end of this statement
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0716`.
diff --git a/src/test/ui/consts/promotion-mutable-ref.rs b/src/test/ui/consts/promotion-mutable-ref.rs
index d6457b3b2c1..d103c5a9d23 100644
--- a/src/test/ui/consts/promotion-mutable-ref.rs
+++ b/src/test/ui/consts/promotion-mutable-ref.rs
@@ -2,7 +2,7 @@
 #![feature(const_mut_refs)]
 
 static mut TEST: i32 = {
-    // We cannot promote this, as CTFE needs to be able to mutate it later.
+    // We must not promote this, as CTFE needs to be able to mutate it later.
     let x = &mut [1,2,3];
     x[0] += 1;
     x[0]