[go] cmd/compile: use "unknown field f in struct literal of type S" in error messages

182 views
Skip to first unread message

Robert Griesemer (Gerrit)

unread,
Sep 26, 2022, 3:52:27 PM9/26/22
to goph...@pubsubhelper.golang.org, Robert Griesemer, golang-co...@googlegroups.com

Robert Griesemer has uploaded this change for review.

View Change

cmd/compile: use "unknown field f in struct literal of type S" in error messages

This is a compromise of the error reported by the compiler (quotes
around field name removed) and the error reported by the type checkers
(added mention of struct type).

For #55326.

Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
---
M src/cmd/compile/internal/types2/expr.go
M src/go/types/expr.go
M test/fixedbugs/issue17631.go
M test/fixedbugs/issue19482.go
M test/fixedbugs/issue24339.go
M test/fixedbugs/issue25727.go
6 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/cmd/compile/internal/types2/expr.go b/src/cmd/compile/internal/types2/expr.go
index 3e82e4b..c700667 100644
--- a/src/cmd/compile/internal/types2/expr.go
+++ b/src/cmd/compile/internal/types2/expr.go
@@ -1418,11 +1418,7 @@
}
i := fieldIndex(utyp.fields, check.pkg, key.Value)
if i < 0 {
- if check.conf.CompilerErrorMessages {
- check.errorf(kv.Key, _MissingLitField, "unknown field '%s' in struct literal of type %s", key.Value, base)
- } else {
- check.errorf(kv.Key, _MissingLitField, "unknown field %s in struct literal", key.Value)
- }
+ check.errorf(kv.Key, _MissingLitField, "unknown field %s in struct literal of type %s", key.Value, base)
continue
}
fld := fields[i]
diff --git a/src/go/types/expr.go b/src/go/types/expr.go
index 12f7394..ebb107b 100644
--- a/src/go/types/expr.go
+++ b/src/go/types/expr.go
@@ -1397,7 +1397,7 @@
}
i := fieldIndex(utyp.fields, check.pkg, key.Name)
if i < 0 {
- check.errorf(kv, _MissingLitField, "unknown field %s in struct literal", key.Name)
+ check.errorf(kv, _MissingLitField, "unknown field %s in struct literal of type %s", key.Name, base)
continue
}
fld := fields[i]
diff --git a/test/fixedbugs/issue17631.go b/test/fixedbugs/issue17631.go
index b820b2d..742b054 100644
--- a/test/fixedbugs/issue17631.go
+++ b/test/fixedbugs/issue17631.go
@@ -17,6 +17,6 @@
expect map[string]int
}{
about: "this one",
- updates: map[string]int{"gopher": 10}, // ERROR "unknown field 'updates' in struct literal of type|unknown field .*updates.* in .*unnamed struct.*"
+ updates: map[string]int{"gopher": 10}, // ERROR "unknown field updates in struct literal of type|unknown field .*updates.* in .*unnamed struct.*"
}
}
diff --git a/test/fixedbugs/issue19482.go b/test/fixedbugs/issue19482.go
index ee0d340..b67dda5 100644
--- a/test/fixedbugs/issue19482.go
+++ b/test/fixedbugs/issue19482.go
@@ -22,13 +22,13 @@

var (
y = T{"stare"}
- w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
+ w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
_ = T{"page"}
- _ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
+ _ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
)

func bad() {
- var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
+ var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
_ = z
- _ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
+ _ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
}
diff --git a/test/fixedbugs/issue24339.go b/test/fixedbugs/issue24339.go
index 2cca7f8..4d54e38 100644
--- a/test/fixedbugs/issue24339.go
+++ b/test/fixedbugs/issue24339.go
@@ -17,4 +17,4 @@



-// ERROR "unknown field 'foo'"
+// ERROR "unknown field foo"
diff --git a/test/fixedbugs/issue25727.go b/test/fixedbugs/issue25727.go
index 5599a83..06b2e2c 100644
--- a/test/fixedbugs/issue25727.go
+++ b/test/fixedbugs/issue25727.go
@@ -11,11 +11,11 @@
var s = http.Server{}
var _ = s.doneChan // ERROR "s.doneChan undefined .cannot refer to unexported field or method doneChan.$|unexported field or method|s.doneChan undefined"
var _ = s.DoneChan // ERROR "s.DoneChan undefined .type http.Server has no field or method DoneChan.$|undefined field or method"
-var _ = http.Server{tlsConfig: nil} // ERROR "unknown field 'tlsConfig' in struct literal.+ .but does have TLSConfig.$|unknown field .?tlsConfig.? in .?http.Server|unknown field"
-var _ = http.Server{DoneChan: nil} // ERROR "unknown field 'DoneChan' in struct literal of type http.Server$|unknown field .?DoneChan.? in .?http.Server"
+var _ = http.Server{tlsConfig: nil} // ERROR "unknown field tlsConfig in struct literal.+ .but does have TLSConfig.$|unknown field .?tlsConfig.? in .?http.Server|unknown field"
+var _ = http.Server{DoneChan: nil} // ERROR "unknown field DoneChan in struct literal of type http.Server$|unknown field .?DoneChan.? in .?http.Server"

type foo struct {
bar int
}

-var _ = &foo{bAr: 10} // ERROR "unknown field 'bAr' in struct literal.+ .but does have bar.$|unknown field .?bAr.? in .?foo|unknown field"
+var _ = &foo{bAr: 10} // ERROR "unknown field bAr in struct literal.+ .but does have bar.$|unknown field .?bAr.? in .?foo|unknown field"

To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: go
Gerrit-Branch: master
Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
Gerrit-Change-Number: 434815
Gerrit-PatchSet: 1
Gerrit-Owner: Robert Griesemer <g...@golang.org>
Gerrit-MessageType: newchange

Robert Griesemer (Gerrit)

unread,
Sep 26, 2022, 3:53:10 PM9/26/22
to Robert Griesemer, goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Robert Griesemer uploaded patch set #2 to this change.

View Change

go/types, types2: use "unknown field f in struct literal of type S" in error messages


This is a compromise of the error reported by the compiler (quotes
around field name removed) and the error reported by the type checkers
(added mention of struct type).

For #55326.

Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
---
M src/cmd/compile/internal/types2/expr.go
M src/go/types/expr.go
M test/fixedbugs/issue17631.go
M test/fixedbugs/issue19482.go
M test/fixedbugs/issue24339.go
M test/fixedbugs/issue25727.go
6 files changed, 26 insertions(+), 15 deletions(-)

To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: go
Gerrit-Branch: master
Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
Gerrit-Change-Number: 434815
Gerrit-PatchSet: 2
Gerrit-Owner: Robert Griesemer <g...@golang.org>
Gerrit-MessageType: newpatchset

Robert Griesemer (Gerrit)

unread,
Sep 26, 2022, 3:54:13 PM9/26/22
to Robert Griesemer, goph...@pubsubhelper.golang.org, Robert Findley, golang-co...@googlegroups.com

Attention is currently required from: Robert Findley, Robert Griesemer.

Patch set 2:Run-TryBot +1Auto-Submit +1Code-Review +1

View Change

    To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: go
    Gerrit-Branch: master
    Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
    Gerrit-Change-Number: 434815
    Gerrit-PatchSet: 2
    Gerrit-Owner: Robert Griesemer <g...@golang.org>
    Gerrit-Reviewer: Robert Findley <rfin...@google.com>
    Gerrit-Reviewer: Robert Griesemer <g...@google.com>
    Gerrit-Attention: Robert Findley <rfin...@google.com>
    Gerrit-Attention: Robert Griesemer <g...@golang.org>
    Gerrit-Comment-Date: Mon, 26 Sep 2022 19:54:08 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    Gerrit-MessageType: comment

    Robert Griesemer (Gerrit)

    unread,
    Sep 26, 2022, 7:55:50 PM9/26/22
    to Robert Griesemer, goph...@pubsubhelper.golang.org, Gopher Robot, Robert Findley, golang-co...@googlegroups.com

    Attention is currently required from: Robert Findley, Robert Griesemer.

    Patch set 3:Run-TryBot +1Auto-Submit +1Code-Review +1

    View Change

      To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: go
      Gerrit-Branch: master
      Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
      Gerrit-Change-Number: 434815
      Gerrit-PatchSet: 3
      Gerrit-Owner: Robert Griesemer <g...@golang.org>
      Gerrit-Reviewer: Gopher Robot <go...@golang.org>
      Gerrit-Reviewer: Robert Findley <rfin...@google.com>
      Gerrit-Reviewer: Robert Griesemer <g...@google.com>
      Gerrit-Attention: Robert Findley <rfin...@google.com>
      Gerrit-Attention: Robert Griesemer <g...@golang.org>
      Gerrit-Comment-Date: Mon, 26 Sep 2022 23:55:45 +0000

      Robert Findley (Gerrit)

      unread,
      Sep 27, 2022, 9:56:32 AM9/27/22
      to Robert Griesemer, goph...@pubsubhelper.golang.org, Gopher Robot, Robert Griesemer, golang-co...@googlegroups.com

      Attention is currently required from: Robert Griesemer, Robert Griesemer.

      View Change

      1 comment:

      • File test/fixedbugs/issue17631.go:

        • Patch Set #4, Line 20: field updates

          Hmm, this is making me second guess the decision to remove quotes. In this case, it look like we're complaining about "field updates".

          Worth a second thought?

      To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: go
      Gerrit-Branch: master
      Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
      Gerrit-Change-Number: 434815
      Gerrit-PatchSet: 4
      Gerrit-Owner: Robert Griesemer <g...@golang.org>
      Gerrit-Reviewer: Gopher Robot <go...@golang.org>
      Gerrit-Reviewer: Robert Findley <rfin...@google.com>
      Gerrit-Reviewer: Robert Griesemer <g...@google.com>
      Gerrit-Attention: Robert Griesemer <g...@golang.org>
      Gerrit-Attention: Robert Griesemer <g...@google.com>
      Gerrit-Comment-Date: Tue, 27 Sep 2022 13:56:28 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Gerrit-MessageType: comment

      Robert Griesemer (Gerrit)

      unread,
      Sep 27, 2022, 11:19:51 AM9/27/22
      to Robert Griesemer, goph...@pubsubhelper.golang.org, Gopher Robot, Robert Findley, golang-co...@googlegroups.com

      Attention is currently required from: Robert Findley, Robert Griesemer.

      Patch set 4:Code-Review +1

      View Change

      1 comment:

      • File test/fixedbugs/issue17631.go:

        • Hmm, this is making me second guess the decision to remove quotes. […]

          The same was true for "missing method Write" etc. One can always find a word that makes the error message appear odd. I'd suggest we leave this w/o quotes for now because it's consistent with what we do elsewhere. And then we should decide if we want to quote always, and everywhere.

      To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: go
      Gerrit-Branch: master
      Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
      Gerrit-Change-Number: 434815
      Gerrit-PatchSet: 4
      Gerrit-Owner: Robert Griesemer <g...@golang.org>
      Gerrit-Reviewer: Gopher Robot <go...@golang.org>
      Gerrit-Reviewer: Robert Findley <rfin...@google.com>
      Gerrit-Reviewer: Robert Griesemer <g...@google.com>
      Gerrit-Attention: Robert Findley <rfin...@google.com>
      Gerrit-Attention: Robert Griesemer <g...@golang.org>
      Gerrit-Comment-Date: Tue, 27 Sep 2022 15:19:47 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: Robert Findley <rfin...@google.com>
      Gerrit-MessageType: comment

      Robert Griesemer (Gerrit)

      unread,
      Sep 27, 2022, 12:43:21 PM9/27/22
      to Robert Griesemer, goph...@pubsubhelper.golang.org, Gopher Robot, Robert Findley, golang-co...@googlegroups.com

      Attention is currently required from: Robert Findley, Robert Griesemer.

      Patch set 5:Run-TryBot +1Auto-Submit +1Code-Review +1

      View Change

        To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

        Gerrit-Project: go
        Gerrit-Branch: master
        Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
        Gerrit-Change-Number: 434815
        Gerrit-PatchSet: 5
        Gerrit-Owner: Robert Griesemer <g...@golang.org>
        Gerrit-Reviewer: Gopher Robot <go...@golang.org>
        Gerrit-Reviewer: Robert Findley <rfin...@google.com>
        Gerrit-Reviewer: Robert Griesemer <g...@google.com>
        Gerrit-Attention: Robert Findley <rfin...@google.com>
        Gerrit-Attention: Robert Griesemer <g...@golang.org>
        Gerrit-Comment-Date: Tue, 27 Sep 2022 16:43:17 +0000

        Robert Findley (Gerrit)

        unread,
        Sep 27, 2022, 3:03:58 PM9/27/22
        to Robert Griesemer, goph...@pubsubhelper.golang.org, Robert Griesemer, Gopher Robot, golang-co...@googlegroups.com

        Attention is currently required from: Robert Griesemer, Robert Griesemer.

        Patch set 5:Code-Review +2

        View Change

        1 comment:

        • File test/fixedbugs/issue17631.go:

          • The same was true for "missing method Write" etc. […]

            Sounds good.

        To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

        Gerrit-Project: go
        Gerrit-Branch: master
        Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
        Gerrit-Change-Number: 434815
        Gerrit-PatchSet: 5
        Gerrit-Owner: Robert Griesemer <g...@golang.org>
        Gerrit-Reviewer: Gopher Robot <go...@golang.org>
        Gerrit-Reviewer: Robert Findley <rfin...@google.com>
        Gerrit-Reviewer: Robert Griesemer <g...@google.com>
        Gerrit-Attention: Robert Griesemer <g...@golang.org>
        Gerrit-Attention: Robert Griesemer <g...@google.com>
        Gerrit-Comment-Date: Tue, 27 Sep 2022 19:03:51 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        Comment-In-Reply-To: Robert Findley <rfin...@google.com>
        Comment-In-Reply-To: Robert Griesemer <g...@google.com>
        Gerrit-MessageType: comment

        Robert Griesemer (Gerrit)

        unread,
        Sep 27, 2022, 5:59:15 PM9/27/22
        to Robert Griesemer, goph...@pubsubhelper.golang.org, golang-...@googlegroups.com, Gopher Robot, Robert Findley, golang-co...@googlegroups.com

        Robert Griesemer submitted this change.

        View Change


        Approvals: Robert Findley: Looks good to me, approved Robert Griesemer: Looks good to me, but someone else must approve; Run TryBots; Automatically submit change Objections: Gopher Robot: TryBots failed
        go/types, types2: use "unknown field f in struct literal of type S" in error messages

        This is a compromise of the error reported by the compiler (quotes
        around field name removed) and the error reported by the type checkers
        (added mention of struct type).

        For #55326.

        Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
        Reviewed-on: https://go-review.googlesource.com/c/go/+/434815
        Reviewed-by: Robert Findley <rfin...@google.com>
        Auto-Submit: Robert Griesemer <g...@google.com>
        Run-TryBot: Robert Griesemer <g...@google.com>
        Reviewed-by: Robert Griesemer <g...@google.com>

        ---
        M src/cmd/compile/internal/types2/expr.go
        M src/go/types/expr.go
        M test/fixedbugs/issue17631.go
        M test/fixedbugs/issue19482.go
        M test/fixedbugs/issue24339.go
        M test/fixedbugs/issue25727.go
        6 files changed, 31 insertions(+), 15 deletions(-)

        To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.

        Gerrit-Project: go
        Gerrit-Branch: master
        Gerrit-Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074
        Gerrit-Change-Number: 434815
        Gerrit-PatchSet: 6
        Gerrit-Owner: Robert Griesemer <g...@golang.org>
        Gerrit-Reviewer: Gopher Robot <go...@golang.org>
        Gerrit-Reviewer: Robert Findley <rfin...@google.com>
        Gerrit-Reviewer: Robert Griesemer <g...@google.com>
        Gerrit-MessageType: merged
        Reply all
        Reply to author
        Forward
        0 new messages