about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorCharles Lew <crlf0710@gmail.com>2021-10-10 14:50:39 +0800
committerjackh726 <jack.huey@umassmed.edu>2021-10-22 11:46:55 -0400
commit7d7ebf88057ad6e16331e02a86c5951ecd1f23db (patch)
tree24fe7f96878bb4b61f4ac53f0235fd8ed74380f5 /src
parent1ddd4e6d7ed446934abd428a08e18535faef5e03 (diff)
downloadrust-7d7ebf88057ad6e16331e02a86c5951ecd1f23db.tar.gz
rust-7d7ebf88057ad6e16331e02a86c5951ecd1f23db.zip
add feature flag for `type_changing_struct_update`
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/feature-gates/feature-gate-type_changing_struct_update.rs26
-rw-r--r--src/test/ui/feature-gates/feature-gate-type_changing_struct_update.stderr12
2 files changed, 38 insertions, 0 deletions
diff --git a/src/test/ui/feature-gates/feature-gate-type_changing_struct_update.rs b/src/test/ui/feature-gates/feature-gate-type_changing_struct_update.rs
new file mode 100644
index 00000000000..520c1478f32
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-type_changing_struct_update.rs
@@ -0,0 +1,26 @@
+#[derive(Debug)]
+struct Machine<S> {
+    state: S,
+    common_field1: &'static str,
+    common_field2: i32,
+}
+#[derive(Debug)]
+struct State1;
+#[derive(Debug, PartialEq)]
+struct State2;
+
+fn update_to_state2() {
+    let m1: Machine<State1> = Machine {
+        state: State1,
+        common_field1: "hello",
+        common_field2: 2,
+    };
+    let m2: Machine<State2> = Machine {
+        state: State2,
+        ..m1 //~ ERROR mismatched types
+    };
+    // FIXME: this should trigger feature gate
+    assert_eq!(State2, m2.state);
+}
+
+fn main() {}
diff --git a/src/test/ui/feature-gates/feature-gate-type_changing_struct_update.stderr b/src/test/ui/feature-gates/feature-gate-type_changing_struct_update.stderr
new file mode 100644
index 00000000000..9934fe68164
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-type_changing_struct_update.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+  --> $DIR/feature-gate-type_changing_struct_update.rs:20:11
+   |
+LL |         ..m1
+   |           ^^ expected struct `State2`, found struct `State1`
+   |
+   = note: expected struct `Machine<State2>`
+              found struct `Machine<State1>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.