From 188ae00f857ba5da2061882d24086b922a9edfd7 Mon Sep 17 00:00:00 2001 From: lcnr Date: Thu, 3 Mar 2022 11:57:14 +0100 Subject: [PATCH] add tests for #94502 --- src/test/ui/nll/lint-no-err.rs | 23 +++++++++++++++++++++++ src/test/ui/nll/lint-no-err.stderr | 17 +++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/test/ui/nll/lint-no-err.rs create mode 100644 src/test/ui/nll/lint-no-err.stderr 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 0000000000000..44fefdcca75c8 --- /dev/null +++ b/src/test/ui/nll/lint-no-err.rs @@ -0,0 +1,23 @@ +// check-pass + +// mir borrowck previously incorrectly set `tainted_by_errors` +// when buffering lints, which resulted in ICE later on, +// see #94502. + +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 0000000000000..e1c1eed002dde --- /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:20: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 + +warning: 1 warning emitted +