about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-09-13 11:25:59 +0000
committerbors <bors@rust-lang.org>2014-09-13 11:25:59 +0000
commit13475a0851afc66ca574874bfb16fde09afbe9d3 (patch)
tree8107f5e53eddb5468bc298fc35afa6dbad748c12
parent90304ed2669a9554a5aa5c58194e71fa373abe13 (diff)
parenta152d5fcedf7dda803a34dcdb89908cacd8856d5 (diff)
downloadrust-13475a0851afc66ca574874bfb16fde09afbe9d3.tar.gz
rust-13475a0851afc66ca574874bfb16fde09afbe9d3.zip
auto merge of #17182 : luqmana/rust/rnp, r=alexcrichton
Fixes #17120.
-rw-r--r--src/librustc/middle/trans/adt.rs5
-rw-r--r--src/test/run-pass/enum-null-pointer-opt.rs5
2 files changed, 7 insertions, 3 deletions
diff --git a/src/librustc/middle/trans/adt.rs b/src/librustc/middle/trans/adt.rs
index e62e3563a0a..4d8e0145901 100644
--- a/src/librustc/middle/trans/adt.rs
+++ b/src/librustc/middle/trans/adt.rs
@@ -298,9 +298,8 @@ impl Case {
 
         for (i, &ty) in self.tys.iter().enumerate() {
             match ty::get(ty).sty {
-                // &T/&mut T/*T could either be a thin or fat pointer depending on T
-                ty::ty_rptr(_, ty::mt { ty, .. })
-                | ty::ty_ptr(ty::mt { ty, .. }) => match ty::get(ty).sty {
+                // &T/&mut T could either be a thin or fat pointer depending on T
+                ty::ty_rptr(_, ty::mt { ty, .. }) => match ty::get(ty).sty {
                     // &[T] and &str are a pointer and length pair
                     ty::ty_vec(_, None) | ty::ty_str => return Some(FatPointer(i, slice_elt_base)),
 
diff --git a/src/test/run-pass/enum-null-pointer-opt.rs b/src/test/run-pass/enum-null-pointer-opt.rs
index bd9dfc1e449..433c3b54224 100644
--- a/src/test/run-pass/enum-null-pointer-opt.rs
+++ b/src/test/run-pass/enum-null-pointer-opt.rs
@@ -37,4 +37,9 @@ fn main() {
     assert_eq!(size_of::<Box<int>>(), size_of::<Option<Box<int>>>());
     assert_eq!(size_of::<Gc<int>>(), size_of::<Option<Gc<int>>>());
 
+
+    // The optimization can't apply to raw pointers
+    assert!(size_of::<Option<*const int>>() != size_of::<*const int>());
+    assert!(Some(0 as *const int).is_some()); // Can't collapse None to null
+
 }