From fcd0cd0adef72e2bc00016eccd97af2ebf70c12c Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Sat, 15 Sep 2018 18:24:18 +0100 Subject: Don't try to use a path to a type alias as a path to the adt it aliases --- src/test/ui/nll/type-alias-free-regions.rs | 33 ++++++++++++++++++++++++++ src/test/ui/nll/type-alias-free-regions.stderr | 22 +++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/test/ui/nll/type-alias-free-regions.rs create mode 100644 src/test/ui/nll/type-alias-free-regions.stderr (limited to 'src/test') diff --git a/src/test/ui/nll/type-alias-free-regions.rs b/src/test/ui/nll/type-alias-free-regions.rs new file mode 100644 index 00000000000..6e480dcaac0 --- /dev/null +++ b/src/test/ui/nll/type-alias-free-regions.rs @@ -0,0 +1,33 @@ +// Test that we don't assume that type aliases have the same type parameters +// as the type they alias and then panic when we see this. + +#![feature(nll)] + +type a<'a> = &'a isize; +type b<'a> = Box>; + +struct c<'a> { + f: Box> +} + +trait FromBox<'a> { + fn from_box(b: Box) -> Self; +} + +impl<'a> FromBox<'a> for c<'a> { + fn from_box(b: Box) -> Self { + c { f: b } //~ ERROR + } +} + +trait FromTuple<'a> { + fn from_tuple( b: (b,)) -> Self; +} + +impl<'a> FromTuple<'a> for c<'a> { + fn from_tuple(b: (b,)) -> Self { + c { f: Box::new(b.0) } //~ ERROR + } +} + +fn main() {} diff --git a/src/test/ui/nll/type-alias-free-regions.stderr b/src/test/ui/nll/type-alias-free-regions.stderr new file mode 100644 index 00000000000..05f2c930944 --- /dev/null +++ b/src/test/ui/nll/type-alias-free-regions.stderr @@ -0,0 +1,22 @@ +error: unsatisfied lifetime constraints + --> $DIR/type-alias-free-regions.rs:19:9 + | +LL | impl<'a> FromBox<'a> for c<'a> { + | -- lifetime `'a` defined here +LL | fn from_box(b: Box) -> Self { + | - has type `std::boxed::Box>` +LL | c { f: b } //~ ERROR + | ^^^^^^^^^^ returning this value requires that `'1` must outlive `'a` + +error: unsatisfied lifetime constraints + --> $DIR/type-alias-free-regions.rs:29:9 + | +LL | impl<'a> FromTuple<'a> for c<'a> { + | -- lifetime `'a` defined here +LL | fn from_tuple(b: (b,)) -> Self { + | - has type `(std::boxed::Box<&'1 isize>,)` +LL | c { f: Box::new(b.0) } //~ ERROR + | ^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'a` + +error: aborting due to 2 previous errors + -- cgit 1.4.1-3-g733a5