Closed
Description
The following program crashes with the panic:
package main
import (
"go/ast"
"go/parser"
"go/token"
_ "golang.org/x/tools/go/gcimporter"
"golang.org/x/tools/go/types"
)
func main() {
data := []byte(`
package a
var v = 0>>1.1
`)
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "src.go", data, parser.ParseComments|parser.DeclarationErrors|parser.AllErrors)
if err != nil {
return
}
_, err = types.Check("pkg", fset, []*ast.File{f})
if err != nil {
return
}
}
panic: 11/10 not an Int
goroutine 1 [running]:
golang.org/x/tools/go/types.(*Checker).handleBailout(0x4c20803c270, 0x4c20802de60)
src/golang.org/x/tools/go/types/check.go:218 +0xfc
golang.org/x/tools/go/exact.Uint64Val(0x7f4fb20bf128, 0x4c208032ac0, 0x7f4fb20beae8, 0x76e4c0)
src/golang.org/x/tools/go/exact/exact.go:245 +0x2ef
golang.org/x/tools/go/types.(*Checker).shift(0x4c20803c270, 0x4c208032a40, 0x4c208032a80, 0x15)
src/golang.org/x/tools/go/types/expr.go:651 +0x186
golang.org/x/tools/go/types.(*Checker).binary(0x4c20803c270, 0x4c208032a40, 0x7f4fb20beef8, 0x4c20801e320, 0x7f4fb20beef8, 0x4c20801e340, 0x15)
src/golang.org/x/tools/go/types/expr.go:735 +0x14d
golang.org/x/tools/go/types.(*Checker).exprInternal(0x4c20803c270, 0x4c208032a40, 0x7f4fb20bef30, 0x4c20803aa20, 0x0, 0x0, 0x40a100)
src/golang.org/x/tools/go/types/expr.go:1382 +0x31b6
golang.org/x/tools/go/types.(*Checker).rawExpr(0x4c20803c270, 0x4c208032a40, 0x7f4fb20bef30, 0x4c20803aa20, 0x0, 0x0, 0x0)
src/golang.org/x/tools/go/types/expr.go:908 +0x80
golang.org/x/tools/go/types.(*Checker).expr(0x4c20803c270, 0x4c208032a40, 0x7f4fb20bef30, 0x4c20803aa20)
src/golang.org/x/tools/go/types/expr.go:1436 +0x6e
golang.org/x/tools/go/types.(*Checker).varDecl(0x4c20803c270, 0x4c208036af0, 0x4c2080340a0, 0x1, 0x1, 0x0, 0x0, 0x7f4fb20bef30, 0x4c20803aa20)
src/golang.org/x/tools/go/types/decl.go:158 +0x38e
golang.org/x/tools/go/types.(*Checker).objDecl(0x4c20803c270, 0x7f4fb20bf040, 0x4c208036af0, 0x0, 0x4c20802dd88, 0x0, 0x8)
src/golang.org/x/tools/go/types/decl.go:81 +0x441
golang.org/x/tools/go/types.(*Checker).packageObjects(0x4c20803c270, 0x4c20800a690, 0x1, 0x1)
src/golang.org/x/tools/go/types/resolver.go:393 +0x1ff
golang.org/x/tools/go/types.(*Checker).Files(0x4c20803c270, 0x4c20802df30, 0x1, 0x1, 0x0, 0x0)
src/golang.org/x/tools/go/types/check.go:230 +0x103
golang.org/x/tools/go/types.(*Config).Check(0x4c208032940, 0x6550f0, 0x3, 0x4c208032840, 0x4c20802df30, 0x1, 0x1, 0x0, 0x4c20805ef10, 0x0, ...)
src/golang.org/x/tools/go/types/api.go:340 +0xbb
golang.org/x/tools/go/types.Check(0x6550f0, 0x3, 0x4c208032840, 0x4c20802df30, 0x1, 0x1, 0x4c208070300, 0x0, 0x0)
src/golang.org/x/tools/go/types/api.go:42 +0x9b
main.main()
gotypes.go:22 +0x1e0
Should return an error instead.
on commit af81789