]> git.lizzy.rs Git - rust.git/commitdiff
add regression test for #48071
authorNiko Matsakis <niko@alum.mit.edu>
Tue, 24 Jul 2018 21:27:01 +0000 (00:27 +0300)
committerNiko Matsakis <niko@alum.mit.edu>
Wed, 25 Jul 2018 03:38:38 +0000 (06:38 +0300)
Fixes #48071

src/test/ui/nll/relate_tys/issue-48071.rs [new file with mode: 0644]

diff --git a/src/test/ui/nll/relate_tys/issue-48071.rs b/src/test/ui/nll/relate_tys/issue-48071.rs
new file mode 100644 (file)
index 0000000..c2498cb
--- /dev/null
@@ -0,0 +1,38 @@
+// 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.
+
+// Regression test for #48071. This test used to ICE because -- in
+// the leak-check -- it would pass since we knew that the return type
+// was `'static`, and hence `'static: 'a` was legal even for a
+// placeholder region, but in NLL land it would fail because we had
+// rewritten `'static` to a region variable.
+//
+// compile-pass
+
+#![allow(warnings)]
+#![feature(dyn_trait)]
+#![feature(nll)]
+
+trait Foo {
+    fn foo(&self) { }
+}
+
+impl Foo for () {
+}
+
+type MakeFooFn = for<'a> fn(&'a u8) -> Box<dyn Foo + 'a>;
+
+fn make_foo(x: &u8) -> Box<dyn Foo + 'static> {
+    Box::new(())
+}
+
+fn main() {
+    let x: MakeFooFn = make_foo as MakeFooFn;
+}