about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorScott A Carr <s.carr1024@gmail.com>2016-08-04 16:14:33 -0700
committerScott A Carr <s.carr1024@gmail.com>2016-08-11 11:51:20 -0700
commitd77a136437a38535522fb3636d165edd4ed49df0 (patch)
tree2c430daa2e891d9eb45209502250b30b7d323e3d /src/test
parent42001edc998f3406ecc04afa48bf07ce91247b67 (diff)
downloadrust-d77a136437a38535522fb3636d165edd4ed49df0.tar.gz
rust-d77a136437a38535522fb3636d165edd4ed49df0.zip
add SetDiscriminant StatementKind to enable deaggregation of enums
Diffstat (limited to 'src/test')
-rw-r--r--src/test/mir-opt/deaggregator_test_enum.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/test/mir-opt/deaggregator_test_enum.rs b/src/test/mir-opt/deaggregator_test_enum.rs
new file mode 100644
index 00000000000..ccfa760a28c
--- /dev/null
+++ b/src/test/mir-opt/deaggregator_test_enum.rs
@@ -0,0 +1,45 @@
+// Copyright 2016 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.
+
+enum Baz {
+    Empty,
+    Foo { x: usize },
+}
+
+fn bar(a: usize) -> Baz {
+    Baz::Foo { x: a }
+}
+
+fn main() {
+    let x = bar(10);
+    match x {
+        Baz::Empty => println!("empty"),
+        Baz::Foo { x } => println!("{}", x),
+    };
+}
+
+// END RUST SOURCE
+// START rustc.node10.Deaggregator.before.mir
+// bb0: {
+//     var0 = arg0;                     // scope 0 at main.rs:7:8: 7:9
+//     tmp0 = var0;                     // scope 1 at main.rs:8:19: 8:20
+//     return = Baz::Foo { x: tmp0 };   // scope 1 at main.rs:8:5: 8:21
+//     goto -> bb1;                     // scope 1 at main.rs:7:1: 9:2
+// }
+// END rustc.node10.Deaggregator.before.mir
+// START rustc.node10.Deaggregator.after.mir
+// bb0: {
+//     var0 = arg0;                     // scope 0 at main.rs:7:8: 7:9
+//     tmp0 = var0;                     // scope 1 at main.rs:8:19: 8:20
+//     ((return as Foo).0: usize) = tmp0; // scope 1 at main.rs:8:5: 8:21
+//     discriminant(return) = 1;         // scope 1 at main.rs:8:5: 8:21
+//     goto -> bb1;                     // scope 1 at main.rs:7:1: 9:2
+// }
+// END rustc.node10.Deaggregator.after.mir
\ No newline at end of file