Skip to content

Commit 0214ec2

Browse files
committed
Update error format for E0062
1 parent e804a3c commit 0214ec2

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

Diff for: src/librustc_typeck/check/mod.rs

+17-3
Original file line numberDiff line numberDiff line change
@@ -3063,6 +3063,8 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
30633063
remaining_fields.insert(field.name, field);
30643064
}
30653065

3066+
let mut seen_fields = FnvHashMap();
3067+
30663068
let mut error_happened = false;
30673069

30683070
// Typecheck each field.
@@ -3071,13 +3073,25 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
30713073

30723074
if let Some(v_field) = remaining_fields.remove(&field.name.node) {
30733075
expected_field_type = self.field_ty(field.span, v_field, substs);
3076+
3077+
seen_fields.insert(field.name.node, field.span);
30743078
} else {
30753079
error_happened = true;
30763080
expected_field_type = tcx.types.err;
30773081
if let Some(_) = variant.find_field_named(field.name.node) {
3078-
span_err!(self.tcx.sess, field.name.span, E0062,
3079-
"field `{}` specified more than once",
3080-
field.name.node);
3082+
let mut err = struct_span_err!(self.tcx.sess,
3083+
field.name.span,
3084+
E0062,
3085+
"field `{}` specified more than once",
3086+
field.name.node);
3087+
3088+
err.span_label(field.name.span, &format!("used more than once"));
3089+
3090+
if let Some(prev_span) = seen_fields.get(&field.name.node) {
3091+
err.span_label(*prev_span, &format!("first use of `{}`", field.name.node));
3092+
}
3093+
3094+
err.emit();
30813095
} else {
30823096
self.report_unknown_field(adt_ty, variant, field, ast_fields);
30833097
}

Diff for: src/test/compile-fail/E0062.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ struct Foo {
1414

1515
fn main() {
1616
let x = Foo {
17+
x: 0, //~ NOTE first use of `x`
1718
x: 0,
18-
x: 0, //~ ERROR E0062
19+
//~^ ERROR E0062
20+
//~| NOTE used more than once
1921
};
2022
}

0 commit comments

Comments
 (0)