about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-12-14 17:17:58 +0100
committerGitHub <noreply@github.com>2022-12-14 17:17:58 +0100
commit0e861ccb9e86b54715089ea96ff37b891f5b44f0 (patch)
treea6885f1ea3c505d6a0580bbb18ad12d5320139e1
parent6d3a93c82342ee7bbf0b6f90570207bd48653229 (diff)
parent675fa0b3dd5fe14b43ad5b7862f4528df7322468 (diff)
downloadrust-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.rs8
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()) }
     }
 }