add test for method ufcs notation
This commit is contained in:
parent
56506cfa25
commit
e84db9bc1b
2 changed files with 122 additions and 0 deletions
81
src/test/ui/nll/user-annotations/method-ufcs.rs
Normal file
81
src/test/ui/nll/user-annotations/method-ufcs.rs
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// Unit test for the "user substitutions" that are annotated on each
|
||||
// node.
|
||||
|
||||
#![feature(nll)]
|
||||
|
||||
trait Bazoom<T> {
|
||||
fn method<U>(&self, arg: T, arg2: U) { }
|
||||
}
|
||||
|
||||
impl<T, U> Bazoom<U> for T {
|
||||
}
|
||||
|
||||
fn no_annot() {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
let c = 66;
|
||||
<_ as Bazoom<_>>::method(&a, b, &c); // OK
|
||||
}
|
||||
|
||||
fn annot_underscore() {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
let c = 66;
|
||||
<_ as Bazoom<_>>::method::<_>(&a, b, &c); // OK
|
||||
}
|
||||
|
||||
fn annot_reference_any_lifetime() {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
let c = 66;
|
||||
<_ as Bazoom<_>>::method::<&u32>(&a, b, &c); // OK
|
||||
}
|
||||
|
||||
fn annot_reference_static_lifetime() {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
let c = 66;
|
||||
<_ as Bazoom<_>>::method::<&'static u32>(&a, b, &c); //~ ERROR
|
||||
}
|
||||
|
||||
fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
let c = 66;
|
||||
<_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c); //~ ERROR
|
||||
}
|
||||
|
||||
fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
<_ as Bazoom<_>>::method::<&'a u32>(&a, b, c);
|
||||
}
|
||||
|
||||
fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
let _closure = || {
|
||||
let c = 66;
|
||||
<_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c); //~ ERROR
|
||||
};
|
||||
}
|
||||
|
||||
fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
|
||||
let a = 22;
|
||||
let b = 44;
|
||||
let _closure = || {
|
||||
<_ as Bazoom<_>>::method::<&'a u32>(&a, b, c);
|
||||
};
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
41
src/test/ui/nll/user-annotations/method-ufcs.stderr
Normal file
41
src/test/ui/nll/user-annotations/method-ufcs.stderr
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
error[E0597]: `c` does not live long enough
|
||||
--> $DIR/method-ufcs.rs:48:53
|
||||
|
|
||||
LL | <_ as Bazoom<_>>::method::<&'static u32>(&a, b, &c); //~ ERROR
|
||||
| ^^ borrowed value does not live long enough
|
||||
LL | }
|
||||
| - `c` dropped here while still borrowed
|
||||
|
|
||||
= note: borrowed value must be valid for the static lifetime...
|
||||
|
||||
error[E0597]: `c` does not live long enough
|
||||
--> $DIR/method-ufcs.rs:55:48
|
||||
|
|
||||
LL | <_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c); //~ ERROR
|
||||
| ^^ borrowed value does not live long enough
|
||||
LL | }
|
||||
| - `c` dropped here while still borrowed
|
||||
|
|
||||
note: borrowed value must be valid for the lifetime 'a as defined on the function body at 51:35...
|
||||
--> $DIR/method-ufcs.rs:51:35
|
||||
|
|
||||
LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
|
||||
| ^^
|
||||
|
||||
error[E0597]: `c` does not live long enough
|
||||
--> $DIR/method-ufcs.rs:69:52
|
||||
|
|
||||
LL | <_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c); //~ ERROR
|
||||
| ^^ borrowed value does not live long enough
|
||||
LL | };
|
||||
| - `c` dropped here while still borrowed
|
||||
|
|
||||
note: borrowed value must be valid for the lifetime 'a as defined on the function body at 64:46...
|
||||
--> $DIR/method-ufcs.rs:64:46
|
||||
|
|
||||
LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
|
||||
| ^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0597`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue