about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGary Guo <gary@garyguo.net>2020-07-30 21:54:18 +0100
committerGary Guo <gary@garyguo.net>2020-07-31 16:37:42 +0100
commit000f5cdd24be7067c3294e1fba2da4a3e88dd849 (patch)
tree2b8536e8df58e1f1eb2dd2f38f77ddacc4dcbd5c
parent2cfcc0c65c4642400305823994f0c6b021c4b53a (diff)
downloadrust-000f5cdd24be7067c3294e1fba2da4a3e88dd849.tar.gz
rust-000f5cdd24be7067c3294e1fba2da4a3e88dd849.zip
Add UI test for issue 74933
-rw-r--r--src/test/ui/typeck/issue-74933.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/test/ui/typeck/issue-74933.rs b/src/test/ui/typeck/issue-74933.rs
new file mode 100644
index 00000000000..4b6c173b8ce
--- /dev/null
+++ b/src/test/ui/typeck/issue-74933.rs
@@ -0,0 +1,38 @@
+// check-pass
+//
+// rust-lang/rust#74933: Lifetime error when indexing with borrowed index
+
+use std::ops::{Index, IndexMut};
+
+struct S(V);
+struct K<'a>(&'a ());
+struct V;
+
+impl<'a> Index<&'a K<'a>> for S {
+    type Output = V;
+
+    fn index(&self, _: &'a K<'a>) -> &V {
+        &self.0
+    }
+}
+
+impl<'a> IndexMut<&'a K<'a>> for S {
+    fn index_mut(&mut self, _: &'a K<'a>) -> &mut V {
+        &mut self.0
+    }
+}
+
+impl V {
+    fn foo(&mut self) {}
+}
+
+fn test(s: &mut S, k: &K<'_>) {
+    s[k] = V;
+    s[k].foo();
+}
+
+fn main() {
+    let mut s = S(V);
+    let k = K(&());
+    test(&mut s, &k);
+}