]> git.proxmox.com Git - rustc.git/blobdiff - src/test/ui/regions/regions-enum-not-wf.rs
New upstream version 1.31.0~beta.4+dfsg1
[rustc.git] / src / test / ui / regions / regions-enum-not-wf.rs
index e21f92bc9b885947d84bc603015edeb5c1175413..a2d3cf6779f1768f4bf620ddd76862cd89bdd934 100644 (file)
@@ -8,31 +8,43 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// ignore-tidy-linelength
+
 // Various examples of structs whose fields are not well-formed.
 
 #![allow(dead_code)]
 
+trait Dummy<'a> {
+  type Out;
+}
+impl<'a, T> Dummy<'a> for T
+where T: 'a
+{
+  type Out = ();
+}
+type RequireOutlives<'a, T> = <T as Dummy<'a>>::Out;
+
 enum Ref1<'a, T> {
-    Ref1Variant1(&'a T) //~ ERROR the parameter type `T` may not live long enough
+    Ref1Variant1(RequireOutlives<'a, T>) //~ ERROR the parameter type `T` may not live long enough
 }
 
 enum Ref2<'a, T> {
     Ref2Variant1,
-    Ref2Variant2(isize, &'a T), //~ ERROR the parameter type `T` may not live long enough
+    Ref2Variant2(isize, RequireOutlives<'a, T>), //~ ERROR the parameter type `T` may not live long enough
 }
 
 enum RefOk<'a, T:'a> {
     RefOkVariant1(&'a T)
 }
 
+// This is now well formed. RFC 2093
 enum RefIndirect<'a, T> {
     RefIndirectVariant1(isize, RefOk<'a,T>)
-        //~^ ERROR the parameter type `T` may not live long enough
 }
 
-enum RefDouble<'a, 'b, T> {
-    RefDoubleVariant1(&'a &'b T)
-        //~^ ERROR reference has a longer lifetime than the data
+enum RefDouble<'a, 'b, T> { //~ ERROR 45:1: 48:2: the parameter type `T` may not live long enough [E0309]
+    RefDoubleVariant1(&'a RequireOutlives<'b, T>)
+        //~^ 46:23: 46:49: the parameter type `T` may not live long enough [E0309]
 }
 
 fn main() { }