diff options
| author | bors <bors@rust-lang.org> | 2018-05-31 22:58:37 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-05-31 22:58:37 +0000 |
| commit | efc508ba4ce9bc0ac3570436b3400c6e0b0f1dfb (patch) | |
| tree | 04b94ccb71457ed95c2e2a8c747ac4a5ae85340d /src/test | |
| parent | 1ffb321477d85fb3c95a0be2a0cd89c04dff0d8d (diff) | |
| parent | b83daea479ceee19445058001ed0a6412ec25889 (diff) | |
| download | rust-efc508ba4ce9bc0ac3570436b3400c6e0b0f1dfb.tar.gz rust-efc508ba4ce9bc0ac3570436b3400c6e0b0f1dfb.zip | |
Auto merge of #51096 - matthewjasper:reverse-normalization-bounds, r=nikomatsakis
Register outlives predicates from queries the right way around. Closes #49354 The region constraints from queries need to be reversed from sub to outlives. Note: wf checking reports these errors before NLL, so I'm not sure if there's any case when these predicates need to be created at all. cc @nikomatsakis
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/nll/normalization-bounds-error.rs | 26 | ||||
| -rw-r--r-- | src/test/ui/nll/normalization-bounds-error.stderr | 23 | ||||
| -rw-r--r-- | src/test/ui/nll/normalization-bounds.rs | 26 |
3 files changed, 75 insertions, 0 deletions
diff --git a/src/test/ui/nll/normalization-bounds-error.rs b/src/test/ui/nll/normalization-bounds-error.rs new file mode 100644 index 00000000000..65b5cc12478 --- /dev/null +++ b/src/test/ui/nll/normalization-bounds-error.rs @@ -0,0 +1,26 @@ +// Copyright 2018 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. + +// Check that we error when a bound from the impl is not satisfied when +// normalizing an associated type. + +#![feature(nll)] +trait Visitor<'d> { + type Value; +} + +impl<'a, 'd: 'a> Visitor<'d> for &'a () { + type Value = (); +} + +fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {} +//~^ ERROR + +fn main() {} diff --git a/src/test/ui/nll/normalization-bounds-error.stderr b/src/test/ui/nll/normalization-bounds-error.stderr new file mode 100644 index 00000000000..970384f9d56 --- /dev/null +++ b/src/test/ui/nll/normalization-bounds-error.stderr @@ -0,0 +1,23 @@ +error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'d` due to conflicting requirements + --> $DIR/normalization-bounds-error.rs:23:1 + | +LL | fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: first, the lifetime cannot outlive the lifetime 'd as defined on the function body at 23:1... + --> $DIR/normalization-bounds-error.rs:23:1 + | +LL | fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +note: ...but the lifetime must also be valid for the lifetime 'a as defined on the function body at 23:1... + --> $DIR/normalization-bounds-error.rs:23:1 + | +LL | fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + = note: ...so that the types are compatible: + expected Visitor<'d> + found Visitor<'_> + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0495`. diff --git a/src/test/ui/nll/normalization-bounds.rs b/src/test/ui/nll/normalization-bounds.rs new file mode 100644 index 00000000000..722a6c00e75 --- /dev/null +++ b/src/test/ui/nll/normalization-bounds.rs @@ -0,0 +1,26 @@ +// Copyright 2018 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. + +// Check that lifetime bounds get checked the right way around with NLL enabled. + +//run-pass + +#![feature(nll)] +trait Visitor<'d> { + type Value; +} + +impl<'a, 'd: 'a> Visitor<'d> for &'a () { + type Value = (); +} + +fn visit_seq<'d: 'a, 'a>() -> <&'a () as Visitor<'d>>::Value {} + +fn main() {} |
