add subset relations test using polonius
It's a relatively simple smoke-test for subset errors, executed outside of the polonius compare-mode.
This commit is contained in:
parent
e2230a4366
commit
1314ba323b
30
src/test/ui/nll/polonius/subset-relations.rs
Normal file
30
src/test/ui/nll/polonius/subset-relations.rs
Normal file
@ -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() {}
|
14
src/test/ui/nll/polonius/subset-relations.stderr
Normal file
14
src/test/ui/nll/polonius/subset-relations.stderr
Normal file
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user