// 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 }) }