diff options
| author | Robert Griesemer <gri@golang.org> | 2023-03-09 16:21:22 -0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-03-10 18:22:02 +0000 |
| commit | 2cbab4e98c6091f5fb6cb73bdebfe328793da388 (patch) | |
| tree | 41fc9cf8552f5e9a932458314d7a279aa3f64847 /src/cmd/compile/internal/noder | |
| parent | 3790ceca9735432486ba34da28f214349e4c1e7e (diff) | |
| download | go-2cbab4e98c6091f5fb6cb73bdebfe328793da388.tar.xz | |
cmd/compile: pass type checker error codes in the compiler
Pass type checker error codes to base.ErrorfAt function calls
in the compiler (but don't do anything yet with the code).
Also, provide error codes to base.ErrorfAt calls in the
compiler as needed.
This opens the door towards reporting the error code and/or
providing a link/reference to more detailed explanations
(see internal/types/errors/codes.go).
Change-Id: I0ff9368d8163499ffdac6adfe8331fdc4a19b4b3
Reviewed-on: https://go-review.googlesource.com/c/go/+/475198
Reviewed-by: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/noder')
| -rw-r--r-- | src/cmd/compile/internal/noder/irgen.go | 7 | ||||
| -rw-r--r-- | src/cmd/compile/internal/noder/noder.go | 2 | ||||
| -rw-r--r-- | src/cmd/compile/internal/noder/writer.go | 2 |
3 files changed, 6 insertions, 5 deletions
diff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go index f0addc4892..3adf9e5d11 100644 --- a/src/cmd/compile/internal/noder/irgen.go +++ b/src/cmd/compile/internal/noder/irgen.go @@ -6,6 +6,7 @@ package noder import ( "fmt" + "internal/types/errors" "regexp" "sort" @@ -47,7 +48,7 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) { 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) + base.ErrorfAt(m.makeXPos(terr.Pos), terr.Code, "%s", msg) }, Importer: &importer, Sizes: &gcSizes{}, @@ -72,7 +73,7 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) { syntax.Inspect(file, func(n syntax.Node) bool { if n, ok := n.(*syntax.InterfaceType); ok { if f.hasCycle(n.GetTypeInfo().Type.(*types2.Interface)) { - base.ErrorfAt(m.makeXPos(n.Pos()), "invalid recursive type: anonymous interface refers to itself (see https://go.dev/issue/56103)") + base.ErrorfAt(m.makeXPos(n.Pos()), errors.InvalidTypeCycle, "invalid recursive type: anonymous interface refers to itself (see https://go.dev/issue/56103)") for typ := range f.cyclic { f.cyclic[typ] = false // suppress duplicate errors @@ -106,7 +107,7 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) { return ti.pos.Before(tj.pos) }) for _, targ := range nihTargs { - base.ErrorfAt(targ.pos, "cannot use incomplete (or unallocatable) type as a type argument: %v", targ.typ) + base.ErrorfAt(targ.pos, 0, "cannot use incomplete (or unallocatable) type as a type argument: %v", targ.typ) } } diff --git a/src/cmd/compile/internal/noder/noder.go b/src/cmd/compile/internal/noder/noder.go index 16113e37a3..c846130976 100644 --- a/src/cmd/compile/internal/noder/noder.go +++ b/src/cmd/compile/internal/noder/noder.go @@ -65,7 +65,7 @@ func LoadPackage(filenames []string) { var m posMap for _, p := range noders { for e := range p.err { - base.ErrorfAt(m.makeXPos(e.Pos), "%s", e.Msg) + base.ErrorfAt(m.makeXPos(e.Pos), 0, "%s", e.Msg) } if p.file == nil { base.ErrorExit() diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 97862938ee..72c7a1fc86 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -108,7 +108,7 @@ func newPkgWriter(m posMap, pkg *types2.Package, info *types2.Info) *pkgWriter { // errorf reports a user error about thing p. func (pw *pkgWriter) errorf(p poser, msg string, args ...interface{}) { - base.ErrorfAt(pw.m.pos(p), msg, args...) + base.ErrorfAt(pw.m.pos(p), 0, msg, args...) } // fatalf reports an internal compiler error about thing p. |
