about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2013-03-26 13:20:44 -0400
committerNiko Matsakis <niko@alum.mit.edu>2013-03-26 14:12:13 -0400
commit0dc6c414af158370b73bfd379bec84a1a8d480f6 (patch)
treee60d00cf788b5ce64e45ed9215c1627ad823178a
parent5f52669296bceac4907608a6ac3bfba41de7dab9 (diff)
downloadrust-0dc6c414af158370b73bfd379bec84a1a8d480f6.tar.gz
rust-0dc6c414af158370b73bfd379bec84a1a8d480f6.zip
Check for null in return_to_mut. Fixes #4904.
-rw-r--r--src/libcore/unstable/lang.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs
index 5d7920ce820..554083fcdb5 100644
--- a/src/libcore/unstable/lang.rs
+++ b/src/libcore/unstable/lang.rs
@@ -99,8 +99,12 @@ pub unsafe fn borrow_as_imm(a: *u8) {
 #[lang="return_to_mut"]
 #[inline(always)]
 pub unsafe fn return_to_mut(a: *u8) {
-    let a: *mut BoxRepr = transmute(a);
-    (*a).header.ref_count &= !FROZEN_BIT;
+    // Sometimes the box is null, if it is conditionally frozen.
+    // See e.g. #4904.
+    if !a.is_null() {
+        let a: *mut BoxRepr = transmute(a);
+        (*a).header.ref_count &= !FROZEN_BIT;
+    }
 }
 
 #[lang="check_not_borrowed"]