diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
commit | 218caa410aa38c29984be31a5229b9fa717560ee (patch) | |
tree | c54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui/borrowck/two-phase-allow-access-during-reservation.rs | |
parent | Releasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip |
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/borrowck/two-phase-allow-access-during-reservation.rs')
-rw-r--r-- | src/test/ui/borrowck/two-phase-allow-access-during-reservation.rs | 37 |
1 files changed, 0 insertions, 37 deletions
diff --git a/src/test/ui/borrowck/two-phase-allow-access-during-reservation.rs b/src/test/ui/borrowck/two-phase-allow-access-during-reservation.rs deleted file mode 100644 index 67d084207..000000000 --- a/src/test/ui/borrowck/two-phase-allow-access-during-reservation.rs +++ /dev/null @@ -1,37 +0,0 @@ -// revisions: nll_target - -// The following revisions are disabled due to missing support for two_phase_beyond_autoref -//[nll_beyond] compile-flags: -Z two_phase_beyond_autoref - -// This is the second counter-example from Niko's blog post -// smallcultfollowing.com/babysteps/blog/2017/03/01/nested-method-calls-via-two-phase-borrowing/ -// -// It is "artificial". It is meant to illustrate directly that we -// should allow an aliasing access during reservation, but *not* while -// the mutable borrow is active. -// -// The convention for the listed revisions: "lxl" means lexical -// lifetimes (which can be easier to reason about). "nll" means -// non-lexical lifetimes. "nll_target" means the initial conservative -// two-phase borrows that only applies to autoref-introduced borrows. -// "nll_beyond" means the generalization of two-phase borrows to all -// `&mut`-borrows (doing so makes it easier to write code for specific -// corner cases). - -fn main() { - /*0*/ let mut i = 0; - - /*1*/ let p = &mut i; // (reservation of `i` starts here) - - /*2*/ let j = i; // OK: `i` is only reserved here - //[nll_target]~^ ERROR cannot use `i` because it was mutably borrowed [E0503] - - /*3*/ *p += 1; // (mutable borrow of `i` starts here, since `p` is used) - - /*4*/ let k = i; //[nll_beyond]~ ERROR cannot use `i` because it was mutably borrowed [E0503] - //[nll_target]~^ ERROR cannot use `i` because it was mutably borrowed [E0503] - - /*5*/ *p += 1; - - let _ = (j, k, p); -} |