summaryrefslogtreecommitdiffstats
path: root/src/test/ui/mir/mir_const_prop_tuple_field_reorder.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/mir/mir_const_prop_tuple_field_reorder.rs')
-rw-r--r--src/test/ui/mir/mir_const_prop_tuple_field_reorder.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/ui/mir/mir_const_prop_tuple_field_reorder.rs b/src/test/ui/mir/mir_const_prop_tuple_field_reorder.rs
new file mode 100644
index 000000000..b66a85d07
--- /dev/null
+++ b/src/test/ui/mir/mir_const_prop_tuple_field_reorder.rs
@@ -0,0 +1,27 @@
+// compile-flags: -Z mir-opt-level=3
+// build-pass
+#![crate_type="lib"]
+
+// This used to ICE: const-prop did not account for field reordering of scalar pairs,
+// and would generate a tuple like `(0x1337, VariantBar): (FooEnum, isize)`,
+// causing assertion failures in codegen when trying to read 0x1337 at the wrong type.
+
+pub enum FooEnum {
+ VariantBar,
+ VariantBaz,
+ VariantBuz,
+}
+
+pub fn wrong_index() -> isize {
+ let (_, b) = id((FooEnum::VariantBar, 0x1337));
+ b
+}
+
+pub fn wrong_index_two() -> isize {
+ let (_, (_, b)) = id(((), (FooEnum::VariantBar, 0x1338)));
+ b
+}
+
+fn id<T>(x: T) -> T {
+ x
+}