]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.13] cmd/compile: better error message for language version errors
authorRobert Griesemer <gri@golang.org>
Wed, 2 Oct 2019 21:42:46 +0000 (14:42 -0700)
committerAndrew Bonventre <andybons@golang.org>
Wed, 16 Oct 2019 19:47:04 +0000 (19:47 +0000)
Fixes #33761.
Updates #33753.
Updates #31747.

Change-Id: Icc42b23405ead4f7f17b0ffa3611405454b6b271
Reviewed-on: https://go-review.googlesource.com/c/go/+/198491
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
(cherry picked from commit 27fc32ff01cc699e160890546816bd99d6c57823)
Reviewed-on: https://go-review.googlesource.com/c/go/+/201480
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
src/cmd/compile/internal/gc/noder.go
src/cmd/compile/internal/gc/subr.go
src/cmd/compile/internal/gc/typecheck.go
test/fixedbugs/issue31747.go

index 93d355278e1a03a1a75f93a881e29bd6922b0d1d..6aca89cad9d0467fbff1b92122e852b32cfd993a 100644 (file)
@@ -1330,7 +1330,7 @@ func checkLangCompat(lit *syntax.BasicLit) {
        }
        // len(s) > 2
        if strings.Contains(s, "_") {
-               yyerror("underscores in numeric literals only supported as of -lang=go1.13")
+               yyerrorv("go1.13", "underscores in numeric literals")
                return
        }
        if s[0] != '0' {
@@ -1338,15 +1338,15 @@ func checkLangCompat(lit *syntax.BasicLit) {
        }
        base := s[1]
        if base == 'b' || base == 'B' {
-               yyerror("binary literals only supported as of -lang=go1.13")
+               yyerrorv("go1.13", "binary literals")
                return
        }
        if base == 'o' || base == 'O' {
-               yyerror("0o/0O-style octal literals only supported as of -lang=go1.13")
+               yyerrorv("go1.13", "0o/0O-style octal literals")
                return
        }
        if lit.Kind != syntax.IntLit && (base == 'x' || base == 'X') {
-               yyerror("hexadecimal floating-point literals only supported as of -lang=go1.13")
+               yyerrorv("go1.13", "hexadecimal floating-point literals")
        }
 }
 
index f3ec21c7cb0f247dcf799449e4832cec4f40637e..d33fd4eb6c50f30a06479817e4a3f9d1a1a72721 100644 (file)
@@ -154,6 +154,11 @@ func yyerrorl(pos src.XPos, format string, args ...interface{}) {
        }
 }
 
+func yyerrorv(lang string, format string, args ...interface{}) {
+       what := fmt.Sprintf(format, args...)
+       yyerrorl(lineno, "%s requires %s or later (-lang was set to %s; check go.mod)", what, lang, flag_lang)
+}
+
 func yyerror(format string, args ...interface{}) {
        yyerrorl(lineno, format, args...)
 }
index 4cb28d6100b1495be8165e50360ca7639b6d3485..223e5add367a2570d215705896e238ee736c822c 100644 (file)
@@ -632,7 +632,7 @@ func typecheck1(n *Node, top int) (res *Node) {
                                return n
                        }
                        if t.IsSigned() && !langSupported(1, 13) {
-                               yyerror("invalid operation: %v (signed shift count type %v, only supported as of -lang=go1.13)", n, r.Type)
+                               yyerrorv("go1.13", "invalid operation: %v (signed shift count type %v)", n, r.Type)
                                n.Type = nil
                                return n
                        }
index dfb585c613d95b664c29a5f4d4242c99a9afcada..420fe30735e868506fa1d0211729b00cf6667333 100644 (file)
@@ -8,11 +8,11 @@ package p
 
 // numeric literals
 const (
-       _ = 1_000 // ERROR "underscores in numeric literals only supported as of -lang=go1.13"
-       _ = 0b111 // ERROR "binary literals only supported as of -lang=go1.13"
-       _ = 0o567 // ERROR "0o/0O-style octal literals only supported as of -lang=go1.13"
+       _ = 1_000 // ERROR "underscores in numeric literals requires go1.13 or later \(-lang was set to go1.12; check go.mod\)"
+       _ = 0b111 // ERROR "binary literals requires go1.13 or later"
+       _ = 0o567 // ERROR "0o/0O-style octal literals requires go1.13 or later"
        _ = 0xabc // ok
-       _ = 0x0p1 // ERROR "hexadecimal floating-point literals only supported as of -lang=go1.13"
+       _ = 0x0p1 // ERROR "hexadecimal floating-point literals requires go1.13 or later"
 
        _ = 0B111 // ERROR "binary"
        _ = 0O567 // ERROR "octal"
@@ -29,6 +29,6 @@ const (
 // signed shift counts
 var (
        s int
-       _ = 1 << s // ERROR "signed shift count type int, only supported as of -lang=go1.13"
+       _ = 1 << s // ERROR "invalid operation: 1 << s \(signed shift count type int\) requires go1.13 or later"
        _ = 1 >> s // ERROR "signed shift count"
 )