summaryrefslogtreecommitdiffstats
path: root/src/test/ui/regions/regions-no-variance-from-fn-generics.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/regions/regions-no-variance-from-fn-generics.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/regions/regions-no-variance-from-fn-generics.rs')
-rw-r--r--src/test/ui/regions/regions-no-variance-from-fn-generics.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/test/ui/regions/regions-no-variance-from-fn-generics.rs b/src/test/ui/regions/regions-no-variance-from-fn-generics.rs
new file mode 100644
index 000000000..76706a827
--- /dev/null
+++ b/src/test/ui/regions/regions-no-variance-from-fn-generics.rs
@@ -0,0 +1,44 @@
+// run-pass
+#![allow(unused_variables)]
+// Issue #12856: a lifetime formal binding introduced by a generic fn
+// should not upset the variance inference for actual occurrences of
+// that lifetime in type expressions.
+
+
+pub trait HasLife<'a> {
+ fn dummy(&'a self) { } // just to induce a variance on 'a
+}
+
+trait UseLife01 {
+ fn refs<'a, H: HasLife<'a>>(&'a self) -> H;
+}
+
+trait UseLife02 {
+ fn refs<'a, T: 'a, H: HasType<&'a T>>(&'a self) -> H;
+}
+
+
+pub trait HasType<T>
+{
+ fn dummy(&self, t: T) -> T { panic!() }
+}
+
+
+trait UseLife03<T> {
+ fn refs<'a, H: HasType<&'a T>>(&'a self) -> H where T: 'a;
+}
+
+
+// (The functions below were not actually a problem observed during
+// fixing of #12856; they just seem like natural tests to put in to
+// cover a couple more points in the testing space)
+
+pub fn top_refs_1<'a, H: HasLife<'a>>(_s: &'a ()) -> H {
+ unimplemented!()
+}
+
+pub fn top_refs_2<'a, T: 'a, H: HasType<&'a T>>(_s: &'a ()) -> H {
+ unimplemented!()
+}
+
+pub fn main() {}