[go] cmd/compile: handle go.mod error msg reference in noder, not type checker

0 views
Skip to first unread message

Gopher Robot (Gerrit)

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

Gopher Robot submitted this change.

View Change


Approvals: Gopher Robot: TryBots succeeded Robert Findley: Looks good to me, approved Robert Griesemer: Looks good to me, but someone else must approve; Run TryBots; Automatically submit change
cmd/compile: handle go.mod error msg reference in noder, not type checker

Currently, for version errors, types2 adds the helpful hint

(-lang was set to go1.xx; check go.mod)

where 1.xx is the respective language version, to the error message.
This requires that the type checker knows that it was invoked by the
compiler, which is done through the Config.CompilerErrorMessages flag.

This change looks for version errors being returned by the type checker
and then adds the hint at that point, external to the type checker.
This removes a dependency on the Config.CompilerErrorMessages. Once
we have removed all dependencies on Config.CompilerErrorMessages we
can remove it.

For #55326.

Change-Id: I1f9b2e472c49fe785a2075e26c4b3d9b8fcdbf4d
Reviewed-on: https://go-review.googlesource.com/c/go/+/432559
Reviewed-by: Robert Griesemer <g...@google.com>
Run-TryBot: Robert Griesemer <g...@google.com>
Auto-Submit: Robert Griesemer <g...@google.com>
TryBot-Result: Gopher Robot <go...@golang.org>
Reviewed-by: Robert Findley <rfin...@google.com>
---
M src/cmd/compile/internal/noder/irgen.go
M src/cmd/compile/internal/types2/conversions.go
M src/cmd/compile/internal/types2/errors.go
M src/go/types/conversions.go
M src/go/types/errors.go
5 files changed, 42 insertions(+), 25 deletions(-)

diff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go
index dc69e94..bf471e0 100644
--- a/src/cmd/compile/internal/noder/irgen.go
+++ b/src/cmd/compile/internal/noder/irgen.go
@@ -6,6 +6,7 @@

import (
"fmt"
+ "regexp"
"sort"

"cmd/compile/internal/base"
@@ -18,6 +19,8 @@
"cmd/internal/src"
)

+var versionErrorRx = regexp.MustCompile(`requires go[0-9]+\.[0-9]+ or later`)
+
// checkFiles configures and runs the types2 checker on the given
// parsed source files and then returns the result.
func checkFiles(noders []*noder) (posMap, *types2.Package, *types2.Info) {
@@ -46,7 +49,12 @@
CompilerErrorMessages: true, // use error strings matching existing compiler errors
Error: func(err error) {
terr := err.(types2.Error)
- base.ErrorfAt(m.makeXPos(terr.Pos), "%s", terr.Msg)
+ msg := terr.Msg
+ // if we have a version error, hint at the -lang setting
+ if versionErrorRx.MatchString(msg) {
+ msg = fmt.Sprintf("%s (-lang was set to %s; check go.mod)", msg, base.Flag.Lang)
+ }
+ base.ErrorfAt(m.makeXPos(terr.Pos), "%s", msg)
},
Importer: &importer,
Sizes: &gcSizes{},
diff --git a/src/cmd/compile/internal/types2/conversions.go b/src/cmd/compile/internal/types2/conversions.go
index d156454..da3a317 100644
--- a/src/cmd/compile/internal/types2/conversions.go
+++ b/src/cmd/compile/internal/types2/conversions.go
@@ -7,7 +7,6 @@
package types2

import (
- "fmt"
"go/constant"
"unicode"
)
@@ -201,9 +200,6 @@
if cause != nil {
// TODO(gri) consider restructuring versionErrorf so we can use it here and below
*cause = "conversion of slices to arrays requires go1.20 or later"
- if check.conf.CompilerErrorMessages {
- *cause += fmt.Sprintf(" (-lang was set to %s; check go.mod)", check.conf.GoVersion)
- }
}
return false
}
@@ -216,9 +212,6 @@
// check != nil
if cause != nil {
*cause = "conversion of slices to array pointers requires go1.17 or later"
- if check.conf.CompilerErrorMessages {
- *cause += fmt.Sprintf(" (-lang was set to %s; check go.mod)", check.conf.GoVersion)
- }
}
return false
}
diff --git a/src/cmd/compile/internal/types2/errors.go b/src/cmd/compile/internal/types2/errors.go
index 7df6656..09d44f6 100644
--- a/src/cmd/compile/internal/types2/errors.go
+++ b/src/cmd/compile/internal/types2/errors.go
@@ -286,11 +286,7 @@

func (check *Checker) versionErrorf(at poser, goVersion string, format string, args ...interface{}) {
msg := check.sprintf(format, args...)
- if check.conf.CompilerErrorMessages {
- msg = fmt.Sprintf("%s requires %s or later (-lang was set to %s; check go.mod)", msg, goVersion, check.conf.GoVersion)
- } else {
- msg = fmt.Sprintf("%s requires %s or later", msg, goVersion)
- }
+ msg = fmt.Sprintf("%s requires %s or later", msg, goVersion)
check.err(at, _UnsupportedFeature, msg, true)
}

diff --git a/src/go/types/conversions.go b/src/go/types/conversions.go
index 926a79c..edb983d 100644
--- a/src/go/types/conversions.go
+++ b/src/go/types/conversions.go
@@ -7,7 +7,6 @@
package types

import (
- "fmt"
"go/constant"
"go/token"
"unicode"
@@ -201,9 +200,6 @@
if cause != nil {
// TODO(gri) consider restructuring versionErrorf so we can use it here and below
*cause = "conversion of slices to arrays requires go1.20 or later"
- if compilerErrorMessages {
- *cause += fmt.Sprintf(" (-lang was set to %s; check go.mod)", check.conf.GoVersion)
- }
}
return false
}
@@ -216,9 +212,6 @@
// check != nil
if cause != nil {
*cause = "conversion of slices to array pointers requires go1.17 or later"
- if compilerErrorMessages {
- *cause += fmt.Sprintf(" (-lang was set to %s; check go.mod)", check.conf.GoVersion)
- }
}
return false
}
diff --git a/src/go/types/errors.go b/src/go/types/errors.go
index 9869ec7..c6a6971 100644
--- a/src/go/types/errors.go
+++ b/src/go/types/errors.go
@@ -295,11 +295,7 @@
func (check *Checker) versionErrorf(at positioner, code errorCode, goVersion string, format string, args ...interface{}) {
msg := check.sprintf(format, args...)
var err *error_
- if compilerErrorMessages {
- err = newErrorf(at, code, "%s requires %s or later (-lang was set to %s; check go.mod)", msg, goVersion, check.conf.GoVersion)
- } else {
- err = newErrorf(at, code, "%s requires %s or later", msg, goVersion)
- }
+ err = newErrorf(at, code, "%s requires %s or later", msg, goVersion)
check.report(err)
}


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

Gerrit-Project: go
Gerrit-Branch: master
Gerrit-Change-Id: I1f9b2e472c49fe785a2075e26c4b3d9b8fcdbf4d
Gerrit-Change-Number: 432559
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-MessageType: merged
Reply all
Reply to author
Forward
0 new messages