- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.9k
Closed
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
Begin with the following working code: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=fb4c4c5e78cd9c3f549cdd806e68388a
Then, delete the , before ..Default::default(), resulting in:
#[derive(Default)]
struct Inner {
    a: u8,
    b: u8,
}
#[derive(Default)]
struct Outer {
    inner: Inner,
    defaulted: u8,
}
fn main(){
    Outer {
        inner: Inner {
            a: 1,
            b: 2,
        }
        ..Default::default()
    };
}The current output is:
error[[E0308]](https://doc.rust-lang.org/stable/error-index.html#E0308): mismatched types
  --> src/main.rs:15:16
   |
15 |           inner: Inner {
   |  ________________^
16 | |             a: 1,
17 | |             b: 2,
18 | |         }
19 | |         ..Default::default()
   | |____________________________^ expected struct `Inner`, found struct `std::ops::Range`
   |
   = note: expected struct `Inner`
              found struct `std::ops::Range<Inner>`
error[[E0063]](https://doc.rust-lang.org/stable/error-index.html#E0063): missing field `defaulted` in initializer of `Outer`
  --> src/main.rs:14:5
   |
14 |     Outer {
   |     ^^^^^ missing `defaulted`
   |
help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
   |
18 |         },
   |          +
Some errors have detailed explanations: E0063, E0308.
For more information about an error, try `rustc --explain E0063`.
error: could not compile `playground` due to 2 previous errors```
Ideally the output should explain that struct update syntax requires a comma separating the last field from the .. notation and point to that line.
Encountered in the wild in the Bevy community, although I run into this myself regularly when initializing structs by hand.
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.