1
0
mirror of https://github.com/golang/go synced 2024-09-24 17:10:13 -06:00

cmd/compile: don't report redundant error for invalid integer literals

Fixes #30722.

Change-Id: Ia4c6e37282edc44788cd8af3f6cfa10895a19e4f
Reviewed-on: https://go-review.googlesource.com/c/go/+/166519
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Robert Griesemer 2019-03-10 10:19:31 -07:00
parent fbc5acbd70
commit bea58ef352
2 changed files with 22 additions and 9 deletions

View File

@ -283,15 +283,11 @@ func (a *Mpint) SetInt64(c int64) {
func (a *Mpint) SetString(as string) {
_, ok := a.Val.SetString(as, 0)
if !ok {
// required syntax is [+-][0[x]]d*
// At the moment we lose precise error cause;
// the old code distinguished between:
// - malformed hex constant
// - malformed octal constant
// - malformed decimal constant
// TODO(gri) use different conversion function
yyerror("malformed integer constant: %s", as)
a.Val.SetUint64(0)
// The lexer checks for correct syntax of the literal
// and reports detailed errors. Thus SetString should
// never fail (in theory it might run out of memory,
// but that wouldn't be reported as an error here).
Fatalf("malformed integer constant: %s", as)
return
}
if a.checkOverflow(0) {

View File

@ -0,0 +1,17 @@
// errorcheck
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Verify that we only get one error per invalid integer literal.
package p
const (
_ = 1_ // ERROR "'_' must separate successive digits"
_ = 0b // ERROR "binary literal has no digits"
_ = 0o // ERROR "octal literal has no digits"
_ = 0x // ERROR "hexadecimal literal has no digits"
_ = 0xde__ad // ERROR "'_' must separate successive digits"
)