diff options
| author | Gary Guo <gary@garyguo.net> | 2020-07-30 21:54:18 +0100 |
|---|---|---|
| committer | Gary Guo <gary@garyguo.net> | 2020-07-31 16:37:42 +0100 |
| commit | 000f5cdd24be7067c3294e1fba2da4a3e88dd849 (patch) | |
| tree | 2b8536e8df58e1f1eb2dd2f38f77ddacc4dcbd5c | |
| parent | 2cfcc0c65c4642400305823994f0c6b021c4b53a (diff) | |
| download | rust-000f5cdd24be7067c3294e1fba2da4a3e88dd849.tar.gz rust-000f5cdd24be7067c3294e1fba2da4a3e88dd849.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); +} |
