We need a better approach eventually, but this is ok for now.
In go/types, always use _UnsupportedFeature for unavailable
version-specific features.
Change-Id: I15b47e34eda167db3133bd481aa2f55cf3662c31
Reviewed-on: https://go-review.googlesource.com/c/go/+/433195
Reviewed-by: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
at = rhs[len(rhs)-1].expr // report at last value
}
var err error_
+ err.code = _WrongResultCount
err.errorf(at, "%s return values", qualifier)
err.errorf(nopos, "have %s", check.typesSummary(operandTypes(rhs), false))
err.errorf(nopos, "want %s", check.typesSummary(varTypes(lhs), false))
params = sig.params.vars
}
var err error_
+ err.code = _WrongArgCount
err.errorf(at, "%s arguments in call to %s", qualifier, call.Fun)
err.errorf(nopos, "have %s", check.typesSummary(operandTypes(args), false))
err.errorf(nopos, "want %s", check.typesSummary(varTypes(params), sig.variadic))
if !ok {
var err error_
+ err.code = _InvalidConversion
if check.conf.CompilerErrorMessages {
if cause != "" {
// Add colon at end of line if we have a following cause.
if obj.Name() != "_" {
if alt := scope.Insert(obj); alt != nil {
var err error_
+ err.code = _DuplicateDecl
err.errorf(obj, "%s redeclared in this block", obj.Name())
err.recordAltDecl(alt)
check.report(&err)
func (check *Checker) reportCycle(cycle []Object) {
obj := cycle[0]
var err error_
+ err.code = _InvalidInitCycle
err.errorf(obj, "initialization cycle for %s", obj.Name())
// subtle loop: print cycle[i] for i = 0, n-1, n-2, ... 1 for len(cycle) = n
for i := len(cycle) - 1; i >= 0; i-- {
lbl := NewLabel(s.Label.Pos(), check.pkg, name)
if alt := all.Insert(lbl); alt != nil {
var err error_
+ err.code = _DuplicateLabel
err.soft = true
err.errorf(lbl.pos, "label %s already declared", name)
err.recordAltDecl(alt)
// TODO(mdempsky): Pivot stack so we report the cycle from the top?
var err error_
+ err.code = _InvalidInstanceCycle
obj0 := check.mono.vertices[v].obj
err.errorf(obj0, "instantiation cycle:")
// concurrently. See issue #32154.)
if alt := fileScope.Lookup(name); alt != nil {
var err error_
+ err.code = _DuplicateDecl
err.errorf(s.LocalPkgName, "%s redeclared in this block", alt.Name())
err.recordAltDecl(alt)
check.report(&err)
results, _ := check.collectParams(scope, ftyp.ResultList, false)
scope.Squash(func(obj, alt Object) {
var err error_
+ err.code = _DuplicateDecl
err.errorf(obj, "%s redeclared in this block", obj.Name())
err.recordAltDecl(alt)
check.report(&err)
for _, vt := range seen[val] {
if Identical(v.typ, vt.typ) {
var err error_
+ err.code = _DuplicateCase
err.errorf(&v, "duplicate case %s in expression switch", &v)
err.errorf(vt.pos, "previous case")
check.report(&err)
Ts = TypeString(T, check.qualifier)
}
var err error_
+ err.code = _DuplicateCase
err.errorf(e, "duplicate case %s in type switch", Ts)
err.errorf(other, "previous case")
check.report(&err)
// Ts = TypeString(T, check.qualifier)
// }
// var err error_
+// err.code = _DuplicateCase
// err.errorf(e, "duplicate case %s in type switch", Ts)
// err.errorf(other, "previous case")
// check.report(&err)
for _, obj := range res.vars {
if alt := check.lookup(obj.name); alt != nil && alt != obj {
var err error_
+ err.code = _OutOfScopeResult
err.errorf(s, "result parameter %s not in scope at return", obj.name)
err.errorf(alt, "inner declaration of %s", obj)
check.report(&err)
func (check *Checker) declareInSet(oset *objset, pos syntax.Pos, obj Object) bool {
if alt := oset.insert(obj); alt != nil {
var err error_
+ err.code = _DuplicateDecl
err.errorf(pos, "%s redeclared", obj.Name())
err.recordAltDecl(alt)
check.report(&err)
}
// check != nil
var err error_
+ err.code = _DuplicateDecl
err.errorf(pos, "duplicate method %s", m.name)
err.errorf(mpos[other.(*Func)], "other declaration of %s", m.name)
check.report(&err)
check.later(func() {
if !check.allowVersion(m.pkg, 1, 14) || !Identical(m.typ, other.Type()) {
var err error_
+ err.code = _DuplicateDecl
err.errorf(pos, "duplicate method %s", m.name)
err.errorf(mpos[other.(*Func)], "other declaration of %s", m.name)
check.report(&err)
check.report(err)
}
-func (check *Checker) versionErrorf(at positioner, code errorCode, goVersion string, format string, args ...interface{}) {
+func (check *Checker) versionErrorf(at positioner, goVersion string, format string, args ...interface{}) {
msg := check.sprintf(format, args...)
var err *error_
- err = newErrorf(at, code, "%s requires %s or later", msg, goVersion)
+ err = newErrorf(at, _UnsupportedFeature, "%s requires %s or later", msg, goVersion)
check.report(err)
}
// Ts = TypeString(T, check.qualifier)
// }
// var err error_
+// err.code = _DuplicateCase
// err.errorf(e, "duplicate case %s in type switch", Ts)
// err.errorf(other, "previous case")
// check.report(&err)
return
case universeAny, universeComparable:
if !check.allowVersion(check.pkg, 1, 18) {
- check.versionErrorf(e, _UndeclaredName, "go1.18", "predeclared %s", e.Name)
+ check.versionErrorf(e, "go1.18", "predeclared %s", e.Name)
return // avoid follow-on errors
}
}