about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-03-07 11:35:55 +0100
committerGitHub <noreply@github.com>2022-03-07 11:35:55 +0100
commit2c98edaaa795d3b203052ec4d738d188598b47b4 (patch)
treef20d7ada26012d150762768debd49628f46c48a6
parent297273c45b205820a4c055082c71677197a40b55 (diff)
parentdad81b65db1b67be7f24b2a418c66db10aecd4b5 (diff)
downloadrust-2c98edaaa795d3b203052ec4d738d188598b47b4.tar.gz
rust-2c98edaaa795d3b203052ec4d738d188598b47b4.zip
Rollup merge of #94553 - lcnr:add-tests, r=Dylan-DPC
add tests for #94502

cc #94552
-rw-r--r--src/test/ui/nll/lint-no-err.rs28
-rw-r--r--src/test/ui/nll/lint-no-err.stderr17
2 files changed, 45 insertions, 0 deletions
diff --git a/src/test/ui/nll/lint-no-err.rs b/src/test/ui/nll/lint-no-err.rs
new file mode 100644
index 00000000000..4b4169faadf
--- /dev/null
+++ b/src/test/ui/nll/lint-no-err.rs
@@ -0,0 +1,28 @@
+// check-pass
+
+// mir borrowck previously incorrectly set `tainted_by_errors`
+// when buffering lints, which resulted in ICE later on,
+// see #94502.
+
+// Errors with `nll` which is already tested in enough other tests,
+// so we ignore it here.
+//
+// ignore-compare-mode-nll
+
+struct Repro;
+impl Repro {
+    fn get(&self) -> &i32 {
+        &3
+    }
+
+    fn insert(&mut self, _: i32) {}
+}
+
+fn main() {
+    let x = &0;
+    let mut conflict = Repro;
+    let prev = conflict.get();
+    conflict.insert(*prev + *x);
+    //~^ WARN cannot borrow `conflict` as mutable because it is also borrowed as immutable
+    //~| WARN this borrowing pattern was not meant to be accepted
+}
diff --git a/src/test/ui/nll/lint-no-err.stderr b/src/test/ui/nll/lint-no-err.stderr
new file mode 100644
index 00000000000..1e7aecfaa64
--- /dev/null
+++ b/src/test/ui/nll/lint-no-err.stderr
@@ -0,0 +1,17 @@
+warning: cannot borrow `conflict` as mutable because it is also borrowed as immutable
+  --> $DIR/lint-no-err.rs:25:5
+   |
+LL |     let prev = conflict.get();
+   |                -------------- immutable borrow occurs here
+LL |     conflict.insert(*prev + *x);
+   |     ^^^^^^^^^^^^^^^^-----^^^^^^
+   |     |               |
+   |     |               immutable borrow later used here
+   |     mutable borrow occurs here
+   |
+   = note: `#[warn(mutable_borrow_reservation_conflict)]` on by default
+   = warning: this borrowing pattern was not meant to be accepted, and may become a hard error in the future
+   = note: for more information, see issue #59159 <https://github.com/rust-lang/rust/issues/59159>
+
+warning: 1 warning emitted
+