diff options
| author | bors <bors@rust-lang.org> | 2020-08-12 04:43:38 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-08-12 04:43:38 +0000 |
| commit | c94ed5ca91f1363b66970ce2cbd6e2773e3cb1d3 (patch) | |
| tree | 084f519a1715a703b4ba9815f80196e11fb20e55 /src/test | |
| parent | 840dbe7654bf3e803d0b447960bd9c120661cd1d (diff) | |
| parent | 2cc7da6f9555f9bb911bc65a1c858ed9e7a7126d (diff) | |
| download | rust-c94ed5ca91f1363b66970ce2cbd6e2773e3cb1d3.tar.gz rust-c94ed5ca91f1363b66970ce2cbd6e2773e3cb1d3.zip | |
Auto merge of #75436 - JohnTitor:rollup-ss0lxds, r=JohnTitor
Rollup of 9 pull requests Successful merges: - #74521 (older toolchains not valid anymore) - #74960 (Fix regionck failure when converting Index to IndexMut) - #75234 (Update asm! documentation in unstable book) - #75368 (Move to doc links inside the prelude) - #75371 (Move to doc links inside std/time.rs) - #75394 (Add a function to `TyCtxt` for computing an `Allocation` for a `static` item's initializer) - #75395 (Switch to intra-doc links in library/std/src/os/*/fs.rs) - #75422 (Accept more safety comments) - #75424 (fix wrong word in documentation) Failed merges: r? @ghost
Diffstat (limited to 'src/test')
| -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); +} |
