]> git.lizzy.rs Git - rust.git/commitdiff
accept undef in raw pointers, for consistency with integers
authorRalf Jung <post@ralfj.de>
Sat, 17 Nov 2018 13:05:00 +0000 (14:05 +0100)
committerRalf Jung <post@ralfj.de>
Sun, 25 Nov 2018 09:49:43 +0000 (10:49 +0100)
src/librustc_mir/interpret/validity.rs

index ed4cb65ea74b17136279b46742ae1b5053ff7b26..d98d05bc01b8504905e74987db362b474da3e87d 100644 (file)
@@ -312,12 +312,16 @@ fn visit_primitive(&mut self, value: OpTy<'tcx, M::PointerTag>) -> EvalResult<'t
                 }
             }
             ty::RawPtr(..) => {
-                // No undef allowed here.  Eventually this should be consistent with
-                // the integer types.
-                let _ptr = try_validation!(value.to_scalar_ptr(),
-                    "undefined address in pointer", self.path);
-                let _meta = try_validation!(value.to_meta(),
-                    "uninitialized data in fat pointer metadata", self.path);
+                if self.const_mode {
+                    // Integers/floats in CTFE: For consistency with integers, we do not
+                    // accept undef.
+                    let _ptr = try_validation!(value.to_scalar_ptr(),
+                        "undefined address in raw pointer", self.path);
+                    let _meta = try_validation!(value.to_meta(),
+                        "uninitialized data in raw fat pointer metadata", self.path);
+                } else {
+                    // Remain consistent with `usize`: Accept anything.
+                }
             }
             _ if ty.is_box() || ty.is_region_ptr() => {
                 // Handle fat pointers.