summaryrefslogtreecommitdiffstats
path: root/src/test/ui/typeck/issue-74933.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/typeck/issue-74933.rs')
-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 000000000..4b6c173b8
--- /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);
+}