about summary refs log tree commit diff
path: root/src/test/codegen
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-09-22 23:08:03 +0000
committerbors <bors@rust-lang.org>2018-09-22 23:08:03 +0000
commitc6e3d7fa3113aaa64602507f39d4627c427742ff (patch)
treeff012996dd47c8d0a4034519b711b3c32e873cca /src/test/codegen
parent4591a245c7eec9f70d668982b1383cd2a6854af5 (diff)
parent1cdbad20224a2e8da4a63aea8389b34bf8313281 (diff)
downloadrust-c6e3d7fa3113aaa64602507f39d4627c427742ff.tar.gz
rust-c6e3d7fa3113aaa64602507f39d4627c427742ff.zip
Auto merge of #53508 - japaric:maybe-uninit, r=RalfJung
Implement `MaybeUninit`

This PR:

- Adds `MaybeUninit` (see #53491) to `{core,std}::mem`.
- Makes `mem::{uninitialized,zeroed}` panic when they are used to instantiate an uninhabited type.
- Does *not* deprecate `mem::{uninitialized,zeroed}` just yet. As per https://github.com/rust-lang/rust/issues/53491#issuecomment-414147666, we should not deprecate them until `MaybeUninit` is stabilized.
- It replaces uses of `mem::{uninitialized,zeroed}` in core and alloc with `MaybeUninit`.

There are still several instances of `mem::{uninitialized,zeroed}` in `std` that *this* PR doesn't address.

r? @RalfJung
cc @eddyb you may want to look at the new panicking logic
Diffstat (limited to 'src/test/codegen')
-rw-r--r--src/test/codegen/box-maybe-uninit.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/test/codegen/box-maybe-uninit.rs b/src/test/codegen/box-maybe-uninit.rs
new file mode 100644
index 00000000000..168e1a3eba0
--- /dev/null
+++ b/src/test/codegen/box-maybe-uninit.rs
@@ -0,0 +1,23 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// compile-flags: -O
+#![crate_type="lib"]
+#![feature(maybe_uninit)]
+
+use std::mem::MaybeUninit;
+
+// Boxing a `MaybeUninit` value should not copy junk from the stack
+#[no_mangle]
+pub fn box_uninitialized() -> Box<MaybeUninit<usize>> {
+    // CHECK-LABEL: @box_uninitialized
+    // CHECK-NOT: store
+    Box::new(MaybeUninit::uninitialized())
+}