Skip to content

Commit

Permalink
Rollup merge of rust-lang#89730 - crlf0710:type_changing_feature, r=j…
Browse files Browse the repository at this point in the history
…ackh726

add feature flag for `type_changing_struct_update`

This implements the PR0 part of the mentoring notes within rust-lang#86618.

overrides the previous inactive rust-lang#86646 pr.

r? `@nikomatsakis`
  • Loading branch information
matthiaskrgr authored Oct 22, 2021
2 parents 1ff1ae1 + 7d7ebf8 commit 38d274f
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 0 deletions.
4 changes: 4 additions & 0 deletions compiler/rustc_feature/src/active.rs
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,10 @@ declare_features! (
/// Allows using the `non_exhaustive_omitted_patterns` lint.
(active, non_exhaustive_omitted_patterns_lint, "1.57.0", Some(89554), None),

/// Allows creation of instances of a struct by moving fields that have
/// not changed from prior instances of the same struct (RFC #2528)
(incomplete, type_changing_struct_update, "1.58.0", Some(86555), None),

// -------------------------------------------------------------------------
// feature-group-end: actual feature gates
// -------------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_span/src/symbol.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1338,6 +1338,7 @@ symbols! {
type_alias_enum_variants,
type_alias_impl_trait,
type_ascription,
type_changing_struct_update,
type_id,
type_length_limit,
type_macros,
Expand Down
Original file line number Diff line number Diff line change
@@ -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() {}
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 38d274f

Please sign in to comment.