diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-12-14 17:17:58 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-14 17:17:58 +0100 |
| commit | 0e861ccb9e86b54715089ea96ff37b891f5b44f0 (patch) | |
| tree | a6885f1ea3c505d6a0580bbb18ad12d5320139e1 | |
| parent | 6d3a93c82342ee7bbf0b6f90570207bd48653229 (diff) | |
| parent | 675fa0b3dd5fe14b43ad5b7862f4528df7322468 (diff) | |
| download | rust-0e861ccb9e86b54715089ea96ff37b891f5b44f0.tar.gz rust-0e861ccb9e86b54715089ea96ff37b891f5b44f0.zip | |
Rollup merge of #105624 - compiler-errors:cache-unsound, r=jyn514
Fix unsoundness in bootstrap cache code Discovered via #105575, which showed that rustc was failing to build during a perf run.
| -rw-r--r-- | src/bootstrap/cache.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/bootstrap/cache.rs b/src/bootstrap/cache.rs index be5c9bb0788..05f25af68ea 100644 --- a/src/bootstrap/cache.rs +++ b/src/bootstrap/cache.rs @@ -89,16 +89,16 @@ impl<T: Internable + Hash> Hash for Interned<T> { impl<T: Internable + Deref> Deref for Interned<T> { type Target = T::Target; - fn deref(&self) -> &'static Self::Target { + fn deref(&self) -> &Self::Target { let l = T::intern_cache().lock().unwrap(); - unsafe { mem::transmute::<&Self::Target, &'static Self::Target>(l.get(*self)) } + unsafe { mem::transmute::<&Self::Target, &Self::Target>(l.get(*self)) } } } impl<T: Internable + AsRef<U>, U: ?Sized> AsRef<U> for Interned<T> { - fn as_ref(&self) -> &'static U { + fn as_ref(&self) -> &U { let l = T::intern_cache().lock().unwrap(); - unsafe { mem::transmute::<&U, &'static U>(l.get(*self).as_ref()) } + unsafe { mem::transmute::<&U, &U>(l.get(*self).as_ref()) } } } |
