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
Metadata
Metadata
Assignees
Type
Projects
Relationships
Development
No branches or pull requests
Activity
dvyukov commentedon Jun 23, 2015
FTR, this also fixed the following gotype crash:
now it prints:
go/types: add missing test for constant shifts