about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGary Guo <gary@garyguo.net>2020-07-30 21:54:18 +0100
committerMark Rousskov <mark.simulacrum@gmail.com>2020-08-20 15:17:00 -0400
commit96ca7842dbf59e201312bb23b4c416427a45cbab (patch)
tree88f7667e3f5604feeebcf4a08a7d27c4f551ecda
parentb4e552b1c8445095f8898f4482c8af4416fdeefd (diff)
downloadrust-96ca7842dbf59e201312bb23b4c416427a45cbab.tar.gz
rust-96ca7842dbf59e201312bb23b4c416427a45cbab.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);
+}