1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
// Copyright 2021 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.
package analysisutil_test
import (
"go/ast"
"go/parser"
"go/token"
"go/types"
"testing"
"golang.org/x/tools/go/analysis/passes/internal/analysisutil"
)
func TestHasSideEffects(t *testing.T) {
src := `package p
type T int
type G[P any] int
func _() {
var x int
_ = T(x)
_ = G[int](x)
}
`
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, "p.go", src, 0)
if err != nil {
t.Fatal(err)
}
var conf types.Config
info := &types.Info{
Types: make(map[ast.Expr]types.TypeAndValue),
}
_, err = conf.Check("", fset, []*ast.File{file}, info)
if err != nil {
t.Fatal(err)
}
ast.Inspect(file, func(node ast.Node) bool {
call, ok := node.(*ast.CallExpr)
if !ok {
return true
}
if got := analysisutil.HasSideEffects(info, call); got != false {
t.Errorf("HasSideEffects(%s) = true, want false", types.ExprString(call))
}
return true
})
}
|