summaryrefslogtreecommitdiffstats
path: root/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.rs')
-rw-r--r--src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.rs368
1 files changed, 368 insertions, 0 deletions
diff --git a/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.rs b/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.rs
new file mode 100644
index 000000000..0b3de0df2
--- /dev/null
+++ b/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.rs
@@ -0,0 +1,368 @@
+#![allow(unused)]
+#![deny(explicit_outlives_requirements)]
+
+
+// These examples should live in edition-lint-infer-outlives.rs, but are split
+// into this separate file because they can't be `rustfix`'d (and thus, can't
+// be part of a `run-rustfix` test file) until rust-lang-nursery/rustfix#141
+// is solved
+
+mod structs {
+ use std::fmt::Debug;
+
+ struct TeeOutlivesAyIsDebugBee<'a, 'b, T: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ struct TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ struct TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: T,
+ yoo: &'a &'b U
+ }
+
+ struct TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ struct TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ struct TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U> where U: 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ struct TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: T,
+ yoo: &'a &'b U
+ }
+
+ struct TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U> where U: 'b + Debug {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ struct TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U> where U: Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ struct TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where T: 'a, U: 'b + Debug {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ struct TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where T: 'a, U: Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ struct BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T,
+ }
+
+ struct BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T,
+ }
+
+ struct BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ struct BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where 'b: 'a, T: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ struct BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: T,
+ yoo: &'a &'b U
+ }
+
+ struct BeeWhereAyTeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U>
+ where U: 'a + Debug + 'b, 'b: 'a
+ //~^ ERROR outlives requirements can be inferred
+ {
+ tee: T,
+ yoo: &'a &'b U
+ }
+}
+
+mod tuple_structs {
+ use std::fmt::Debug;
+
+ struct TeeOutlivesAyIsDebugBee<'a, 'b, T: 'a + Debug + 'b>(&'a &'b T);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeWhereOutlivesAyIsDebugBee<'a, 'b, T>(&'a &'b T) where T: 'a + Debug + 'b;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b>(T, &'a &'b U);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug>(&'a T, &'b U);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b>(&'a T, &'b U);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U>(&'a T, &'b U) where U: 'b;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U>(T, &'a &'b U) where U: 'a + Debug + 'b;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U>(&'a T, &'b U) where U: 'b + Debug;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U>(&'a T, &'b U) where U: Debug + 'b;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeWhereAyYooWhereBeeIsDebug<'a, 'b, T, U>(&'a T, &'b U) where T: 'a, U: 'b + Debug;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct TeeWhereAyYooWhereIsDebugBee<'a, 'b, T, U>(&'a T, &'b U) where T: 'a, U: Debug + 'b;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b>(&'a &'b T);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b>(&'a &'b T);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b>(&'a &'b T);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct BeeWhereAyTeeWhereAyIsDebugBee<'a, 'b, T>(&'a &'b T) where 'b: 'a, T: 'a + Debug + 'b;
+ //~^ ERROR outlives requirements can be inferred
+
+ struct BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b>(T, &'a &'b U);
+ //~^ ERROR outlives requirements can be inferred
+
+ struct BeeWhereAyTeeYooWhereAyIsDebugBee<'a, 'b, T, U>(T, &'a &'b U)
+ where U: 'a + Debug + 'b, 'b: 'a;
+ //~^ ERROR outlives requirements can be inferred
+}
+
+mod enums {
+ use std::fmt::Debug;
+
+ enum TeeOutlivesAyIsDebugBee<'a, 'b, T: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a &'b T },
+ }
+
+ enum TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ V(&'a &'b T),
+ }
+
+ enum TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: T, },
+ W(&'a &'b U),
+ }
+
+ enum TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug> {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a T, yoo: &'b U },
+ W,
+ }
+
+ enum TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ V(&'a T, &'b U),
+ W,
+ }
+
+ enum TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U> where U: 'b {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a T },
+ W(&'b U),
+ }
+
+ enum TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: T, yoo: &'a &'b U },
+ W,
+ }
+
+ enum TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U> where U: 'b + Debug {
+ //~^ ERROR outlives requirements can be inferred
+ V(&'a T, &'b U),
+ W,
+ }
+
+ enum TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U> where U: Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a T },
+ W(&'b U)
+ }
+
+ enum TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where T: 'a, U: 'b + Debug {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a T, yoo: &'b U },
+ W,
+ }
+
+ enum TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where T: 'a, U: Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ V(&'a T, &'b U),
+ W,
+ }
+
+ enum BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a &'b T },
+ }
+
+ enum BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a &'b T },
+ W,
+ }
+
+ enum BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: &'a &'b T },
+ }
+
+ enum BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where 'b: 'a, T: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ V(&'a &'b T),
+ }
+
+ enum BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: T },
+ W(&'a &'b U),
+ }
+
+ enum BeeWhereAyTeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b, 'b: 'a {
+ //~^ ERROR outlives requirements can be inferred
+ V { tee: T, yoo: &'a &'b U },
+ }
+}
+
+mod unions {
+ use std::fmt::Debug;
+
+ union TeeOutlivesAyIsDebugBee<'a, 'b, T: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ union TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ union TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: *const T,
+ yoo: &'a &'b U
+ }
+
+ union TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ union TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ union TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U> where U: 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ union TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: *const T,
+ yoo: &'a &'b U
+ }
+
+ union TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U> where U: 'b + Debug {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ union TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U> where U: Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ union TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where T: 'a, U: 'b + Debug {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ union TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where T: 'a, U: Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a T,
+ yoo: &'b U
+ }
+
+ union BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T,
+ }
+
+ union BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T,
+ }
+
+ union BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ union BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where 'b: 'a, T: 'a + Debug + 'b {
+ //~^ ERROR outlives requirements can be inferred
+ tee: &'a &'b T
+ }
+
+ union BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b> {
+ //~^ ERROR outlives requirements can be inferred
+ tee: *const T,
+ yoo: &'a &'b U
+ }
+
+ union BeeWhereAyTeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b, 'b: 'a {
+ //~^ ERROR outlives requirements can be inferred
+ tee: *const T,
+ yoo: &'a &'b U
+ }
+}
+
+fn main() {}