Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 9 pull requests #62961

Merged
merged 49 commits into from
Jul 25, 2019
Merged
Changes from 1 commit
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
ccb5d0a
Support SDKROOT env var on iOS
swolchok Jul 16, 2019
795f93b
ci: Install clang on Windows through tarballs
alexcrichton Jul 17, 2019
bb9bf0c
Add riscv32i-unknown-none-elf target
Disasm Jul 18, 2019
b9784b1
Don't link mcjit/interpreter LLVM components
nikic Jul 20, 2019
c442dae
Ignore NLL migrate mode test in the Polonius compare-mode
lqd Jun 11, 2019
d4ca9a3
Ignore test issue-45983 in the polonius compare mode
lqd Jun 11, 2019
273bfd4
Ignore two-phase-reservation-sharing-interference-2.rs in Polonius co…
lqd Jun 11, 2019
63c837e
Ignore feature-gate-nll.rs in Polonius compare mode
lqd Jun 11, 2019
51c15fa
Ignore test issue-45696-scribble-on-boxed-borrow.rs in Polonius compa…
lqd Jun 11, 2019
ff350f8
Bless output of test ui/emit-artifact-notifications.rs for Polonius
lqd Jun 11, 2019
2824db1
Bless output of test save-analysis/emit-notifications.rs for Polonius
lqd Jun 11, 2019
9410104
Bless output of test nll/loan_ends_mid_block_pair.rs for Polonius
lqd Jun 11, 2019
6a7c15e
Bless output of test consts/promote_const_let.rs for Polonius
lqd Jun 12, 2019
c5a1bc1
Bless output of test nll/get_default.rs for Polonius
lqd Jun 12, 2019
292d5c1
Bless output of test generator/ref-escapes-but-not-over-yield.rs for …
lqd Jun 12, 2019
6fe5292
Bless output of test borrowck/borrowck-escaping-closure-error-2.rs f…
lqd Jun 28, 2019
7db61e7
Bless output of test borrowck/two-phase-surprise-no-conflict.rs for P…
lqd Jun 28, 2019
08c25b5
Bless output of test dropck/dropck_trait_cycle_checked.rs for Polonius
lqd Jun 28, 2019
9a82f52
Create a dedicated polonius test folder
lqd Jul 5, 2019
6d9a4f9
Polonius facts: kill loans on Call terminators and StorageDead
lqd Jul 15, 2019
0bd2b32
Bless output of test borrowck/promote-ref-mut-in-let-issue-46557.rs …
lqd Jul 15, 2019
ed1625f
Ignore test hrtb/issue-30786.rs in Polonius compare mode
lqd Jul 15, 2019
40e6b02
Bless output of test nll/return-ref-mut-issue-46557.rs for Polonius
lqd Jul 15, 2019
9bd9b0d
Add test extracted from rand, checking that StorageDead kills loans
lqd Jul 15, 2019
606f798
Rename test so that both "kills-loans" tests match names
lqd Jul 15, 2019
9e0fb6f
Make both polonius loans tests check-pass
lqd Jul 15, 2019
823ab42
Bless output of test unboxed-closures/unboxed-closures-failed-recursi…
lqd Jul 15, 2019
2f3e36f
Polonius: generate `killed` facts for assignments to projections
lqd Jul 16, 2019
d41e002
Add test checking various assignments are accepted in Polonius
lqd Jul 16, 2019
770129c
Add test to check that assignments to projections do not kill too man…
lqd Jul 16, 2019
c7f9a71
issue-46589 passes in Polonius and fails in NLL, duplicate it and man…
lqd Jul 16, 2019
c0eab36
Bless output of test nll/loan_ends_mid_block_pair.rs for Polonius, again
lqd Jul 16, 2019
e16bede
fix tidy
lqd Jul 16, 2019
4b33968
add support for hexagon-unknown-linux-musl
androm3da Aug 10, 2018
6140371
cleanup: Remove `extern crate serialize as rustc_serialize`s
petrochenkov Jul 23, 2019
1aeadcc
Require a value for configure --debuginfo-level
cuviper Jul 23, 2019
a4ff823
fix check
swolchok Jul 23, 2019
eafb42d
Add binary dependencies to dep-info files
Mark-Simulacrum Jun 10, 2019
d749b5e
Gate binary dependency information behind -Zbinary-dep-depinfo
Mark-Simulacrum Jul 24, 2019
287db19
Add comment
swolchok Jul 24, 2019
40be400
Rollup merge of #61727 - Mark-Simulacrum:crate-deps-in-deps, r=alexcr…
Centril Jul 24, 2019
a676a36
Rollup merge of #62736 - lqd:polonius_tests3, r=matthewjasper
Centril Jul 24, 2019
5ef2162
Rollup merge of #62758 - alexcrichton:llvm-tarball-windows, r=pietroa…
Centril Jul 24, 2019
8d9000d
Rollup merge of #62784 - Disasm:riscv32i, r=estebank
Centril Jul 24, 2019
b1a8660
Rollup merge of #62814 - androm3da:hexagon_19jul_2019, r=alexcrichton
Centril Jul 24, 2019
e559042
Rollup merge of #62827 - nikic:llvm-components, r=alexcrichton
Centril Jul 24, 2019
5a7db0e
Rollup merge of #62901 - petrochenkov:serde, r=Centril
Centril Jul 24, 2019
6e1ed3a
Rollup merge of #62903 - swolchok:ios-sdkroot, r=alexcrichton
Centril Jul 24, 2019
0340d72
Rollup merge of #62906 - cuviper:debuginfo-level, r=Mark-Simulacrum
Centril Jul 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add test to check that assignments to projections do not kill too man…
…y loans
  • Loading branch information
lqd committed Jul 22, 2019

Verified

This commit was signed with the committer’s verified signature.
snyk-bot Snyk bot
commit 770129c28039ab7501cdc0f2f7ca1a38e22208f0
50 changes: 50 additions & 0 deletions src/test/ui/nll/polonius/assignment-to-differing-field.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#![allow(dead_code)]

// Compared to `assignment-kills-loans.rs`, we check here
// that we do not kill too many borrows. Assignments to the `.1`
// field projections should leave the borrows on `.0` intact.

// compile-flags: -Z borrowck=mir -Z polonius
// ignore-compare-mode-nll

struct List<T> {
value: T,
next: Option<Box<List<T>>>,
}


fn assignment_to_field_projection<'a, T>(
mut list: (&'a mut List<T>, &'a mut List<T>),
) -> Vec<&'a mut T> {
let mut result = vec![];
loop {
result.push(&mut (list.0).value);
//~^ ERROR cannot borrow `list.0.value` as mutable

if let Some(n) = (list.0).next.as_mut() {
//~^ ERROR cannot borrow `list.0.next` as mutable
list.1 = n;
} else {
return result;
}
}
}

fn assignment_through_projection_chain<'a, T>(
mut list: (((((Box<&'a mut List<T>>, Box<&'a mut List<T>>),),),),),
) -> Vec<&'a mut T> {
let mut result = vec![];
loop {
result.push(&mut ((((list.0).0).0).0).0.value);
//~^ ERROR cannot borrow `list.0.0.0.0.0.value` as mutable

if let Some(n) = ((((list.0).0).0).0).0.next.as_mut() {
//~^ ERROR cannot borrow `list.0.0.0.0.0.next` as mutable
*((((list.0).0).0).0).1 = n;
} else {
return result;
}
}
}

fn main() {}
51 changes: 51 additions & 0 deletions src/test/ui/nll/polonius/assignment-to-differing-field.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
error[E0499]: cannot borrow `list.0.value` as mutable more than once at a time
--> $DIR/assignment-to-differing-field.rs:21:21
|
LL | fn assignment_to_field_projection<'a, T>(
| -- lifetime `'a` defined here
...
LL | result.push(&mut (list.0).value);
| ^^^^^^^^^^^^^^^^^^^ mutable borrow starts here in previous iteration of loop
...
LL | return result;
| ------ returning this value requires that `list.0.value` is borrowed for `'a`

error[E0499]: cannot borrow `list.0.next` as mutable more than once at a time
--> $DIR/assignment-to-differing-field.rs:24:26
|
LL | fn assignment_to_field_projection<'a, T>(
| -- lifetime `'a` defined here
...
LL | if let Some(n) = (list.0).next.as_mut() {
| ^^^^^^^^^^^^^---------
| |
| mutable borrow starts here in previous iteration of loop
| argument requires that `list.0.next` is borrowed for `'a`

error[E0499]: cannot borrow `list.0.0.0.0.0.value` as mutable more than once at a time
--> $DIR/assignment-to-differing-field.rs:38:21
|
LL | fn assignment_through_projection_chain<'a, T>(
| -- lifetime `'a` defined here
...
LL | result.push(&mut ((((list.0).0).0).0).0.value);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow starts here in previous iteration of loop
...
LL | return result;
| ------ returning this value requires that `list.0.0.0.0.0.value` is borrowed for `'a`

error[E0499]: cannot borrow `list.0.0.0.0.0.next` as mutable more than once at a time
--> $DIR/assignment-to-differing-field.rs:41:26
|
LL | fn assignment_through_projection_chain<'a, T>(
| -- lifetime `'a` defined here
...
LL | if let Some(n) = ((((list.0).0).0).0).0.next.as_mut() {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^---------
| |
| mutable borrow starts here in previous iteration of loop
| argument requires that `list.0.0.0.0.0.next` is borrowed for `'a`

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0499`.