about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCedric <cedric.brancourt@gmail.com>2019-06-19 11:09:17 +0200
committerCedric <cedric.brancourt@gmail.com>2019-06-19 11:09:17 +0200
commit70e52f84186ee017d19d26e081ab8688beee9b37 (patch)
tree51af9fa6d8fe9dbe81153c7e4e5219eeb7c6d98a
parentc917ba325f3e7944eefb5e906ca0392c9b499541 (diff)
downloadrust-70e52f84186ee017d19d26e081ab8688beee9b37.tar.gz
rust-70e52f84186ee017d19d26e081ab8688beee9b37.zip
provide variant definition on tuple struct unknow field error
-rw-r--r--src/librustc_typeck/check/expr.rs4
-rw-r--r--src/test/ui/issues/issue-4736.stderr5
-rw-r--r--src/test/ui/numeric/numeric-fields.stderr5
3 files changed, 11 insertions, 3 deletions
diff --git a/src/librustc_typeck/check/expr.rs b/src/librustc_typeck/check/expr.rs
index 3c31e012403..d659169711f 100644
--- a/src/librustc_typeck/check/expr.rs
+++ b/src/librustc_typeck/check/expr.rs
@@ -1218,9 +1218,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
             ty);
         match variant.ctor_kind {
             CtorKind::Fn => {
+                err.span_label(variant.ident.span, format!("`{adt}` defined here", adt=ty));
                 err.span_label(field.ident.span, "field does not exist");
                 err.span_label(ty_span, format!(
-                    "`{adt}` is a tuple {kind_name}, use the appropriate syntax: `{adt}(/* fields */)`",
+                        "`{adt}` is a tuple {kind_name},\
+                         use the appropriate syntax: `{adt}(/* fields */)`",
                     adt=ty,
                     kind_name=kind_name
                 ));
diff --git a/src/test/ui/issues/issue-4736.stderr b/src/test/ui/issues/issue-4736.stderr
index 6786b592d98..557607503ef 100644
--- a/src/test/ui/issues/issue-4736.stderr
+++ b/src/test/ui/issues/issue-4736.stderr
@@ -1,10 +1,13 @@
 error[E0560]: struct `NonCopyable` has no field named `p`
   --> $DIR/issue-4736.rs:4:26
    |
+LL | struct NonCopyable(());
+   |        ----------- `NonCopyable` defined here
+...
 LL |     let z = NonCopyable{ p: () };
    |             -----------  ^ field does not exist
    |             |
-   |             `NonCopyable` is a tuple struct, use the appropriate syntax: `NonCopyable(/* fields */)`
+   |             `NonCopyable` is a tuple struct,use the appropriate syntax: `NonCopyable(/* fields */)`
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/numeric/numeric-fields.stderr b/src/test/ui/numeric/numeric-fields.stderr
index e71af0f33ee..ad1f1177f7b 100644
--- a/src/test/ui/numeric/numeric-fields.stderr
+++ b/src/test/ui/numeric/numeric-fields.stderr
@@ -1,10 +1,13 @@
 error[E0560]: struct `S` has no field named `0b1`
   --> $DIR/numeric-fields.rs:4:15
    |
+LL | struct S(u8, u16);
+   |        - `S` defined here
+...
 LL |     let s = S{0b1: 10, 0: 11};
    |             - ^^^ field does not exist
    |             |
-   |             `S` is a tuple struct, use the appropriate syntax: `S(/* fields */)`
+   |             `S` is a tuple struct,use the appropriate syntax: `S(/* fields */)`
 
 error[E0026]: struct `S` does not have a field named `0x1`
   --> $DIR/numeric-fields.rs:7:17