]> git.lizzy.rs Git - rust.git/commitdiff
Fixes #41073, it is no longer an ICE
authorSimon Sapin <simon.sapin@exyr.org>
Wed, 3 Jul 2019 11:02:47 +0000 (13:02 +0200)
committerOliver Scherer <github35764891676564198441@oli-obk.de>
Fri, 11 Oct 2019 08:43:54 +0000 (10:43 +0200)
src/test/ui/union/issue-41073.rs [new file with mode: 0644]
src/test/ui/union/issue-41073.stderr [new file with mode: 0644]

diff --git a/src/test/ui/union/issue-41073.rs b/src/test/ui/union/issue-41073.rs
new file mode 100644 (file)
index 0000000..91e9a0d
--- /dev/null
@@ -0,0 +1,24 @@
+#![feature(untagged_unions)]
+
+union Test {
+    a: A, //~ ERROR unions may not contain fields that need dropping
+    b: B
+}
+
+#[derive(Debug)]
+struct A(i32);
+impl Drop for A {
+    fn drop(&mut self) { println!("A"); }
+}
+
+#[derive(Debug)]
+struct B(f32);
+impl Drop for B {
+    fn drop(&mut self) { println!("B"); }
+}
+
+fn main() {
+    let mut test = Test { a: A(3) };
+    println!("{:?}", unsafe { test.b });
+    unsafe { test.b = B(0.5); }
+}
diff --git a/src/test/ui/union/issue-41073.stderr b/src/test/ui/union/issue-41073.stderr
new file mode 100644 (file)
index 0000000..2e9598b
--- /dev/null
@@ -0,0 +1,15 @@
+error[E0740]: unions may not contain fields that need dropping
+  --> $DIR/issue-41073.rs:4:5
+   |
+LL |     a: A,
+   |     ^^^^
+   |
+note: `std::mem::ManuallyDrop` can be used to wrap the type
+  --> $DIR/issue-41073.rs:4:5
+   |
+LL |     a: A,
+   |     ^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0740`.