forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add subset relations test using polonius
It's a relatively simple smoke-test for subset errors, executed outside of the polonius compare-mode.
- Loading branch information
Showing
2 changed files
with
44 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
// Checks that Polonius can compute cases of universal regions errors: | ||
// "illegal subset relation errors", cases where analysis finds that | ||
// two free regions outlive each other, without any evidence that this | ||
// relation holds. | ||
|
||
// ignore-compare-mode-nll | ||
// compile-flags: -Z borrowck=mir -Zpolonius | ||
|
||
// returning `y` requires that `'b: 'a`, but it's not known to be true | ||
fn missing_subset<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 { | ||
y //~ ERROR | ||
} | ||
|
||
// `'b: 'a` is explicitly declared | ||
fn valid_subset<'a, 'b: 'a>(x: &'a u32, y: &'b u32) -> &'a u32 { | ||
y | ||
} | ||
|
||
// because of `x`, it is implied that `'b: 'a` holds | ||
fn implied_bounds_subset<'a, 'b>(x: &'a &'b mut u32) -> &'a u32 { | ||
x | ||
} | ||
|
||
// `'b: 'a` is declared, and `'a: 'c` is known via implied bounds: | ||
// `'b: 'c` is therefore known to hold transitively | ||
fn transitively_valid_subset<'a, 'b: 'a, 'c>(x: &'c &'a u32, y: &'b u32) -> &'c u32 { | ||
y | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
error: lifetime may not live long enough | ||
--> $DIR/subset-relations.rs:11:5 | ||
| | ||
LL | fn missing_subset<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 { | ||
| -- -- lifetime `'b` defined here | ||
| | | ||
| lifetime `'a` defined here | ||
LL | y | ||
| ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b` | ||
| | ||
= help: consider adding the following bound: `'b: 'a` | ||
|
||
error: aborting due to previous error | ||
|