diff options
| author | Gary Guo <gary@garyguo.net> | 2020-07-30 21:54:18 +0100 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2020-08-20 15:17:00 -0400 |
| commit | 96ca7842dbf59e201312bb23b4c416427a45cbab (patch) | |
| tree | 88f7667e3f5604feeebcf4a08a7d27c4f551ecda | |
| parent | b4e552b1c8445095f8898f4482c8af4416fdeefd (diff) | |
| download | rust-96ca7842dbf59e201312bb23b4c416427a45cbab.tar.gz rust-96ca7842dbf59e201312bb23b4c416427a45cbab.zip | |
Add UI test for issue 74933
| -rw-r--r-- | src/test/ui/typeck/issue-74933.rs | 38 |
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); +} |
