aboutsummaryrefslogtreecommitdiff
path: root/go/pointer
diff options
context:
space:
mode:
Diffstat (limited to 'go/pointer')
-rw-r--r--go/pointer/pointer_go117_test.go7
-rw-r--r--go/pointer/pointer_test.go70
-rw-r--r--go/pointer/stdlib_test.go29
-rw-r--r--go/pointer/testdata/a_test.go12
-rw-r--r--go/pointer/testdata/another.go5
-rw-r--r--go/pointer/testdata/arrayreflect.go15
-rw-r--r--go/pointer/testdata/arrays.go17
-rw-r--r--go/pointer/testdata/arrays_go117.go54
-rw-r--r--go/pointer/testdata/channels.go25
-rw-r--r--go/pointer/testdata/chanreflect.go11
-rw-r--r--go/pointer/testdata/context.go17
-rw-r--r--go/pointer/testdata/conv.go13
-rw-r--r--go/pointer/testdata/extended.go3
-rw-r--r--go/pointer/testdata/finalizer.go14
-rw-r--r--go/pointer/testdata/flow.go17
-rw-r--r--go/pointer/testdata/fmtexcerpt.go3
-rw-r--r--go/pointer/testdata/func.go75
-rw-r--r--go/pointer/testdata/funcreflect.go23
-rw-r--r--go/pointer/testdata/hello.go7
-rw-r--r--go/pointer/testdata/interfaces.go41
-rw-r--r--go/pointer/testdata/mapreflect.go13
-rw-r--r--go/pointer/testdata/maps.go35
-rw-r--r--go/pointer/testdata/panic.go5
-rw-r--r--go/pointer/testdata/recur.go3
-rw-r--r--go/pointer/testdata/reflect.go15
-rw-r--r--go/pointer/testdata/rtti.go2
-rw-r--r--go/pointer/testdata/structs.go19
27 files changed, 294 insertions, 256 deletions
diff --git a/go/pointer/pointer_go117_test.go b/go/pointer/pointer_go117_test.go
index 7546a0660..50eb2135f 100644
--- a/go/pointer/pointer_go117_test.go
+++ b/go/pointer/pointer_go117_test.go
@@ -13,6 +13,7 @@ import (
"fmt"
"io/ioutil"
"os"
+ "path/filepath"
"testing"
)
@@ -34,8 +35,12 @@ func TestSliceToArrayPointer(t *testing.T) {
if err != nil {
t.Fatalf("couldn't read file '%s': %s", filename, err)
}
+ fpath, err := filepath.Abs(filename)
+ if err != nil {
+ t.Errorf("couldn't get absolute path for '%s': %s", filename, err)
+ }
- if !doOneInput(string(content), filename) {
+ if !doOneInput(t, string(content), fpath) {
t.Fail()
}
}
diff --git a/go/pointer/pointer_test.go b/go/pointer/pointer_test.go
index 2f6e069f2..1ac5b6c9f 100644
--- a/go/pointer/pointer_test.go
+++ b/go/pointer/pointer_test.go
@@ -21,13 +21,15 @@ import (
"go/types"
"io/ioutil"
"os"
+ "path/filepath"
"regexp"
"strconv"
"strings"
"testing"
+ "unsafe"
"golang.org/x/tools/go/callgraph"
- "golang.org/x/tools/go/loader"
+ "golang.org/x/tools/go/packages"
"golang.org/x/tools/go/pointer"
"golang.org/x/tools/go/ssa"
"golang.org/x/tools/go/ssa/ssautil"
@@ -123,7 +125,7 @@ var inputs = []string{
//
type expectation struct {
kind string // "pointsto" | "pointstoquery" | "types" | "calls" | "warning"
- filename string
+ filepath string
linenum int // source line number, 1-based
args []string
query string // extended query
@@ -136,7 +138,7 @@ func (e *expectation) String() string {
}
func (e *expectation) errorf(format string, args ...interface{}) {
- fmt.Printf("%s:%d: ", e.filename, e.linenum)
+ fmt.Printf("%s:%d: ", e.filepath, e.linenum)
fmt.Printf(format, args...)
fmt.Println()
}
@@ -149,44 +151,50 @@ func (e *expectation) needsProbe() bool {
func findProbe(prog *ssa.Program, probes map[*ssa.CallCommon]bool, queries map[ssa.Value]pointer.Pointer, e *expectation) (site *ssa.CallCommon, pts pointer.PointsToSet) {
for call := range probes {
pos := prog.Fset.Position(call.Pos())
- if pos.Line == e.linenum && pos.Filename == e.filename {
+ if pos.Line == e.linenum && pos.Filename == e.filepath {
// TODO(adonovan): send this to test log (display only on failure).
// fmt.Printf("%s:%d: info: found probe for %s: %s\n",
- // e.filename, e.linenum, e, p.arg0) // debugging
+ // e.filepath, e.linenum, e, p.arg0) // debugging
return call, queries[call.Args[0]].PointsTo()
}
}
return // e.g. analysis didn't reach this call
}
-func doOneInput(input, filename string) bool {
- var conf loader.Config
-
- // Parsing.
- f, err := conf.ParseFile(filename, input)
+func doOneInput(t *testing.T, input, fpath string) bool {
+ cfg := &packages.Config{
+ Mode: packages.LoadAllSyntax,
+ Tests: true,
+ }
+ pkgs, err := packages.Load(cfg, fpath)
if err != nil {
fmt.Println(err)
return false
}
-
- // Create single-file main package and import its dependencies.
- conf.CreateFromFiles("main", f)
- iprog, err := conf.Load()
- if err != nil {
- fmt.Println(err)
+ if packages.PrintErrors(pkgs) > 0 {
+ fmt.Println("loaded packages have errors")
return false
}
- mainPkgInfo := iprog.Created[0].Pkg
// SSA creation + building.
- prog := ssautil.CreateProgram(iprog, ssa.SanityCheckFunctions)
+ prog, ssaPkgs := ssautil.AllPackages(pkgs, ssa.SanityCheckFunctions)
prog.Build()
- mainpkg := prog.Package(mainPkgInfo)
+ // main underlying packages.Package.
+ mainPpkg := pkgs[0]
+ mainpkg := ssaPkgs[0]
ptrmain := mainpkg // main package for the pointer analysis
if mainpkg.Func("main") == nil {
- // No main function; assume it's a test.
- ptrmain = prog.CreateTestMainPackage(mainpkg)
+ // For test programs without main, such as testdata/a_test.go,
+ // the package with the original code is "main [main.test]" and
+ // the package with the main is "main.test".
+ for i, pkg := range pkgs {
+ if pkg.ID == mainPpkg.ID+".test" {
+ ptrmain = ssaPkgs[i]
+ } else if pkg.ID == fmt.Sprintf("%s [%s.test]", mainPpkg.ID, mainPpkg.ID) {
+ mainpkg = ssaPkgs[i]
+ }
+ }
}
// Find all calls to the built-in print(x). Analytically,
@@ -221,14 +229,14 @@ func doOneInput(input, filename string) bool {
if matches := re.FindAllStringSubmatch(line, -1); matches != nil {
match := matches[0]
kind, rest := match[1], match[2]
- e := &expectation{kind: kind, filename: filename, linenum: linenum}
+ e := &expectation{kind: kind, filepath: fpath, linenum: linenum}
if kind == "line" {
if rest == "" {
ok = false
e.errorf("@%s expectation requires identifier", kind)
} else {
- lineMapping[fmt.Sprintf("%s:%d", filename, linenum)] = rest
+ lineMapping[fmt.Sprintf("%s:%d", fpath, linenum)] = rest
}
continue
}
@@ -251,7 +259,7 @@ func doOneInput(input, filename string) bool {
for _, typstr := range split(rest, "|") {
var t types.Type = types.Typ[types.Invalid] // means "..."
if typstr != "..." {
- tv, err := types.Eval(prog.Fset, mainpkg.Pkg, f.Pos(), typstr)
+ tv, err := types.Eval(prog.Fset, mainpkg.Pkg, mainPpkg.Syntax[0].Pos(), typstr)
if err != nil {
ok = false
// Don't print err since its location is bad.
@@ -294,7 +302,7 @@ func doOneInput(input, filename string) bool {
}
var log bytes.Buffer
- fmt.Fprintf(&log, "Input: %s\n", filename)
+ fmt.Fprintf(&log, "Input: %s\n", fpath)
// Run the analysis.
config := &pointer.Config{
@@ -308,7 +316,7 @@ probeLoop:
v := probe.Args[0]
pos := prog.Fset.Position(probe.Pos())
for _, e := range exps {
- if e.linenum == pos.Line && e.filename == pos.Filename && e.kind == "pointstoquery" {
+ if e.linenum == pos.Line && e.filepath == pos.Filename && e.kind == "pointstoquery" {
var err error
e.extended, err = config.AddExtendedQuery(v, e.query)
if err != nil {
@@ -546,6 +554,9 @@ func TestInput(t *testing.T) {
if testing.Short() {
t.Skip("skipping in short mode; this test requires tons of memory; https://golang.org/issue/14113")
}
+ if unsafe.Sizeof(unsafe.Pointer(nil)) <= 4 {
+ t.Skip("skipping memory-intensive test on platform with small address space; https://golang.org/issue/14113")
+ }
ok := true
wd, err := os.Getwd()
@@ -567,7 +578,12 @@ func TestInput(t *testing.T) {
continue
}
- if !doOneInput(string(content), filename) {
+ fpath, err := filepath.Abs(filename)
+ if err != nil {
+ t.Errorf("couldn't get absolute path for '%s': %s", filename, err)
+ }
+
+ if !doOneInput(t, string(content), fpath) {
ok = false
}
}
diff --git a/go/pointer/stdlib_test.go b/go/pointer/stdlib_test.go
index 2d5097f33..3ba42a171 100644
--- a/go/pointer/stdlib_test.go
+++ b/go/pointer/stdlib_test.go
@@ -19,13 +19,11 @@ package pointer
import (
"flag"
- "go/build"
"go/token"
"testing"
"time"
- "golang.org/x/tools/go/buildutil"
- "golang.org/x/tools/go/loader"
+ "golang.org/x/tools/go/packages"
"golang.org/x/tools/go/ssa"
"golang.org/x/tools/go/ssa/ssautil"
)
@@ -37,22 +35,18 @@ func TestStdlib(t *testing.T) {
t.Skip("skipping (slow) stdlib test (use --stdlib)")
}
- // Load, parse and type-check the program.
- ctxt := build.Default // copy
- ctxt.GOPATH = "" // disable GOPATH
- conf := loader.Config{Build: &ctxt}
- if _, err := conf.FromArgs(buildutil.AllPackages(conf.Build), true); err != nil {
- t.Errorf("FromArgs failed: %v", err)
- return
+ cfg := &packages.Config{
+ Mode: packages.LoadAllSyntax,
+ // Create test main packages with a main function.
+ Tests: true,
}
-
- iprog, err := conf.Load()
- if err != nil {
+ pkgs, err := packages.Load(cfg, "std")
+ if err != nil || packages.PrintErrors(pkgs) > 0 {
t.Fatalf("Load failed: %v", err)
}
// Create SSA packages.
- prog := ssautil.CreateProgram(iprog, 0)
+ prog, _ := ssautil.AllPackages(pkgs, 0)
prog.Build()
numPkgs := len(prog.AllPackages())
@@ -62,10 +56,9 @@ func TestStdlib(t *testing.T) {
// Determine the set of packages/tests to analyze.
var mains []*ssa.Package
- for _, info := range iprog.InitialPackages() {
- ssapkg := prog.Package(info.Pkg)
- if main := prog.CreateTestMainPackage(ssapkg); main != nil {
- mains = append(mains, main)
+ for _, ssapkg := range prog.AllPackages() {
+ if ssapkg.Pkg.Name() == "main" && ssapkg.Func("main") != nil {
+ mains = append(mains, ssapkg)
}
}
if mains == nil {
diff --git a/go/pointer/testdata/a_test.go b/go/pointer/testdata/a_test.go
index 3baa9ac7e..c6058a0d2 100644
--- a/go/pointer/testdata/a_test.go
+++ b/go/pointer/testdata/a_test.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package a
@@ -11,7 +12,7 @@ import "testing"
func log(f func(*testing.T)) {
// The PTS of f is the set of called tests. TestingQuux is not present.
- print(f) // @pointsto main.Test | main.TestFoo
+ print(f) // @pointsto command-line-arguments.Test | command-line-arguments.TestFoo
}
func Test(t *testing.T) {
@@ -33,10 +34,11 @@ func BenchmarkFoo(b *testing.B) {
}
func ExampleBar() {
+ // Output:
}
// Excludes TestingQuux.
-// @calls testing.tRunner -> main.Test
-// @calls testing.tRunner -> main.TestFoo
-// @calls testing.runExample -> main.ExampleBar
-// @calls (*testing.B).runN -> main.BenchmarkFoo
+// @calls testing.tRunner -> command-line-arguments.Test
+// @calls testing.tRunner -> command-line-arguments.TestFoo
+// @calls (*testing.B).runN -> command-line-arguments.BenchmarkFoo
+// @calls testing.runExample -> command-line-arguments.ExampleBar
diff --git a/go/pointer/testdata/another.go b/go/pointer/testdata/another.go
index 12ed690e9..75b92c523 100644
--- a/go/pointer/testdata/another.go
+++ b/go/pointer/testdata/another.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -29,8 +30,8 @@ func main() {
// NB, an interface may never directly alias any global
// labels, even though it may contain pointers that do.
- print(i) // @pointsto makeinterface:func(x int) int | makeinterface:func(x int, y int) | makeinterface:func(int, int) | makeinterface:int | makeinterface:main.S
- print(i.(func(int) int)) // @pointsto main.incr
+ print(i) // @pointsto makeinterface:func(x int) int | makeinterface:func(x int, y int) | makeinterface:func(int, int) | makeinterface:int | makeinterface:command-line-arguments.S
+ print(i.(func(int) int)) // @pointsto command-line-arguments.incr
print() // regression test for crash
}
diff --git a/go/pointer/testdata/arrayreflect.go b/go/pointer/testdata/arrayreflect.go
index 2b2367409..18c8707f6 100644
--- a/go/pointer/testdata/arrayreflect.go
+++ b/go/pointer/testdata/arrayreflect.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -17,7 +18,7 @@ func reflectValueSlice() {
rvsl := reflect.ValueOf(slice).Slice(0, 0)
print(rvsl.Interface()) // @types []*int
print(rvsl.Interface().([]*int)) // @pointsto makeslice@slice:15
- print(rvsl.Interface().([]*int)[42]) // @pointsto main.a
+ print(rvsl.Interface().([]*int)[42]) // @pointsto command-line-arguments.a
// reflect.Value contains an array (non-addressable).
array := [10]*int{&a} // @line array
@@ -30,7 +31,7 @@ func reflectValueSlice() {
rvparray := reflect.ValueOf(&array).Slice(0, 0)
print(rvparray.Interface()) // @types []*int
print(rvparray.Interface().([]*int)) // @pointsto array@array:2
- print(rvparray.Interface().([]*int)[42]) // @pointsto main.a
+ print(rvparray.Interface().([]*int)[42]) // @pointsto command-line-arguments.a
// reflect.Value contains a string.
rvstring := reflect.ValueOf("hi").Slice(0, 0)
@@ -75,12 +76,12 @@ func reflectValueIndex() {
slice := []*int{&a} // @line ar6slice
rv1 := reflect.ValueOf(slice)
print(rv1.Index(42).Interface()) // @types *int
- print(rv1.Index(42).Interface().(*int)) // @pointsto main.a
+ print(rv1.Index(42).Interface().(*int)) // @pointsto command-line-arguments.a
array := [10]*int{&a}
rv2 := reflect.ValueOf(array)
print(rv2.Index(42).Interface()) // @types *int
- print(rv2.Index(42).Interface().(*int)) // @pointsto main.a
+ print(rv2.Index(42).Interface().(*int)) // @pointsto command-line-arguments.a
rv3 := reflect.ValueOf("string")
print(rv3.Index(42).Interface()) // @types rune
@@ -97,9 +98,9 @@ func reflectValueElem() {
var iface interface{} = &a
rv1 := reflect.ValueOf(&iface).Elem()
print(rv1.Interface()) // @types *int
- print(rv1.Interface().(*int)) // @pointsto main.a
+ print(rv1.Interface().(*int)) // @pointsto command-line-arguments.a
print(rv1.Elem().Interface()) // @types *int
- print(rv1.Elem().Interface().(*int)) // @pointsto main.a
+ print(rv1.Elem().Interface().(*int)) // @pointsto command-line-arguments.a
print(reflect.ValueOf(new(interface{})).Elem().Elem()) // @types
@@ -107,7 +108,7 @@ func reflectValueElem() {
ptr := &a
rv2 := reflect.ValueOf(&ptr)
print(rv2.Elem().Interface()) // @types *int
- print(rv2.Elem().Interface().(*int)) // @pointsto main.a
+ print(rv2.Elem().Interface().(*int)) // @pointsto command-line-arguments.a
// No other type works with (rV).Elem, not even those that
// work with (rT).Elem: slice, array, map, chan.
diff --git a/go/pointer/testdata/arrays.go b/go/pointer/testdata/arrays.go
index e57a15b4b..96498f512 100644
--- a/go/pointer/testdata/arrays.go
+++ b/go/pointer/testdata/arrays.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -14,10 +15,10 @@ func array1() {
sliceB = append(sliceB, &b) // @line a1append
print(sliceA) // @pointsto makeslice@a1make:16
- print(sliceA[0]) // @pointsto main.a
+ print(sliceA[0]) // @pointsto command-line-arguments.a
print(sliceB) // @pointsto append@a1append:17
- print(sliceB[100]) // @pointsto main.b
+ print(sliceB[100]) // @pointsto command-line-arguments.b
}
func array2() {
@@ -27,10 +28,10 @@ func array2() {
sliceB := sliceA[:]
print(sliceA) // @pointsto makeslice@a2make:16
- print(sliceA[0]) // @pointsto main.a
+ print(sliceA[0]) // @pointsto command-line-arguments.a
print(sliceB) // @pointsto makeslice@a2make:16
- print(sliceB[0]) // @pointsto main.a
+ print(sliceB[0]) // @pointsto command-line-arguments.a
}
func array3() {
@@ -65,18 +66,18 @@ func array4() {
sl4a := append(sl4) // @line a4L4
print(sl4a) // @pointsto slicelit@a4L3:18 | append@a4L4:16
print(&sl4a[0]) // @pointsto slicelit[*]@a4L3:18 | append[*]@a4L4:16
- print(sl4a[0]) // @pointsto main.a
+ print(sl4a[0]) // @pointsto command-line-arguments.a
var sl5 = []*int{&b} // @line a4L5
copy(sl5, sl4)
print(sl5) // @pointsto slicelit@a4L5:18
print(&sl5[0]) // @pointsto slicelit[*]@a4L5:18
- print(sl5[0]) // @pointsto main.b | main.a
+ print(sl5[0]) // @pointsto command-line-arguments.b | command-line-arguments.a
var sl6 = sl5[:0]
print(sl6) // @pointsto slicelit@a4L5:18
print(&sl6[0]) // @pointsto slicelit[*]@a4L5:18
- print(sl6[0]) // @pointsto main.b | main.a
+ print(sl6[0]) // @pointsto command-line-arguments.b | command-line-arguments.a
}
func array5() {
@@ -85,7 +86,7 @@ func array5() {
arr[1] = &b
var n int
- print(arr[n]) // @pointsto main.a | main.b
+ print(arr[n]) // @pointsto command-line-arguments.a | command-line-arguments.b
}
func main() {
diff --git a/go/pointer/testdata/arrays_go117.go b/go/pointer/testdata/arrays_go117.go
index 7a66f6728..7ad9f5f35 100644
--- a/go/pointer/testdata/arrays_go117.go
+++ b/go/pointer/testdata/arrays_go117.go
@@ -18,10 +18,10 @@ func array1() {
sliceB = append(sliceB, &b) // @line a1append
print(sliceA) // @pointsto makeslice@a1make:16
- print(sliceA[0]) // @pointsto main.a
+ print(sliceA[0]) // @pointsto command-line-arguments.a
print(sliceB) // @pointsto append@a1append:17
- print(sliceB[100]) // @pointsto main.b
+ print(sliceB[100]) // @pointsto command-line-arguments.b
}
func array2() {
@@ -31,10 +31,10 @@ func array2() {
sliceB := sliceA[:]
print(sliceA) // @pointsto makeslice@a2make:16
- print(sliceA[0]) // @pointsto main.a
+ print(sliceA[0]) // @pointsto command-line-arguments.a
print(sliceB) // @pointsto makeslice@a2make:16
- print(sliceB[0]) // @pointsto main.a
+ print(sliceB[0]) // @pointsto command-line-arguments.a
}
func array3() {
@@ -69,18 +69,18 @@ func array4() {
sl4a := append(sl4) // @line a4L4
print(sl4a) // @pointsto slicelit@a4L3:18 | append@a4L4:16
print(&sl4a[0]) // @pointsto slicelit[*]@a4L3:18 | append[*]@a4L4:16
- print(sl4a[0]) // @pointsto main.a
+ print(sl4a[0]) // @pointsto command-line-arguments.a
var sl5 = []*int{&b} // @line a4L5
copy(sl5, sl4)
print(sl5) // @pointsto slicelit@a4L5:18
print(&sl5[0]) // @pointsto slicelit[*]@a4L5:18
- print(sl5[0]) // @pointsto main.b | main.a
+ print(sl5[0]) // @pointsto command-line-arguments.b | command-line-arguments.a
var sl6 = sl5[:0]
print(sl6) // @pointsto slicelit@a4L5:18
print(&sl6[0]) // @pointsto slicelit[*]@a4L5:18
- print(sl6[0]) // @pointsto main.b | main.a
+ print(sl6[0]) // @pointsto command-line-arguments.b | command-line-arguments.a
}
func array5() {
@@ -89,7 +89,7 @@ func array5() {
arr[1] = &b
var n int
- print(arr[n]) // @pointsto main.a | main.b
+ print(arr[n]) // @pointsto command-line-arguments.a | command-line-arguments.b
}
func array6() {
@@ -99,35 +99,35 @@ func array6() {
ap0 := (*[1]*int)(sl0)
ar0 := *ap0
- print(ap0[n]) // @pointsto main.a
- print(sl0[n]) // @pointsto main.a
- print(ar0[n]) // @pointsto main.a
+ print(ap0[n]) // @pointsto command-line-arguments.a
+ print(sl0[n]) // @pointsto command-line-arguments.a
+ print(ar0[n]) // @pointsto command-line-arguments.a
sl1 := []*int{&a}
ap1 := (*[1]*int)(sl1)
ar1 := *ap1
ar1[0] = &b
- print(ap1[n]) // @pointsto main.a
- print(sl1[n]) // @pointsto main.a
- print(ar1[n]) // @pointsto main.a | main.b
+ print(ap1[n]) // @pointsto command-line-arguments.a
+ print(sl1[n]) // @pointsto command-line-arguments.a
+ print(ar1[n]) // @pointsto command-line-arguments.a | command-line-arguments.b
sl2 := []*int{&a}
ap2 := (*[1]*int)(sl2)
ar2 := *ap2
ap2[0] = &b
- print(ap2[n]) // @pointsto main.a | main.b
- print(sl2[n]) // @pointsto main.a | main.b
- print(ar2[n]) // @pointsto main.a | main.b
+ print(ap2[n]) // @pointsto command-line-arguments.a | command-line-arguments.b
+ print(sl2[n]) // @pointsto command-line-arguments.a | command-line-arguments.b
+ print(ar2[n]) // @pointsto command-line-arguments.a | command-line-arguments.b
sl3 := []*int{&b, nil}
ap3 := (*[1]*int)(sl3)
ar3 := *ap3
- print(sl3[n]) // @pointsto main.b
- print(ap3[n]) // @pointsto main.b
- print(ar3[n]) // @pointsto main.b
+ print(sl3[n]) // @pointsto command-line-arguments.b
+ print(ap3[n]) // @pointsto command-line-arguments.b
+ print(ar3[n]) // @pointsto command-line-arguments.b
}
func array7() {
@@ -139,9 +139,9 @@ func array7() {
ap1[0] = &a
- print(sl0[n]) // @pointsto main.a
- print(ap0[n]) // @pointsto main.a
- print(ap1[n]) // @pointsto main.a
+ print(sl0[n]) // @pointsto command-line-arguments.a
+ print(ap0[n]) // @pointsto command-line-arguments.a
+ print(ap1[n]) // @pointsto command-line-arguments.a
}
func array8() {
@@ -153,12 +153,12 @@ func array8() {
pa2 := (*[1]*int)(sl2)
sl1[0] = &a
sl2[0] = &b
- print(pa1[n]) // @pointsto main.a
- print(pa2[n]) // @pointsto main.b
+ print(pa1[n]) // @pointsto command-line-arguments.a
+ print(pa2[n]) // @pointsto command-line-arguments.b
pa2 = pa1
- print(pa1[n]) // @pointsto main.a
- print(pa2[n]) // @pointsto main.a
+ print(pa1[n]) // @pointsto command-line-arguments.a
+ print(pa2[n]) // @pointsto command-line-arguments.a
}
func main() {
diff --git a/go/pointer/testdata/channels.go b/go/pointer/testdata/channels.go
index 377b68a56..c4f5150bf 100644
--- a/go/pointer/testdata/channels.go
+++ b/go/pointer/testdata/channels.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -16,10 +17,10 @@ func chan1() {
chB <- func(int) int { return 1 }
print(chA) // @pointsto makechan@c1makeA:13
- print(<-chA) // @pointsto main.incr
+ print(<-chA) // @pointsto command-line-arguments.incr
print(chB) // @pointsto makechan@c1makeB:13
- print(<-chB) // @pointsto main.decr | main.chan1$1
+ print(<-chB) // @pointsto command-line-arguments.decr | command-line-arguments.chan1$1
}
func chan2() {
@@ -37,18 +38,18 @@ func chan2() {
}
print(chA) // @pointsto makechan@c2makeA:13
- print(<-chA) // @pointsto main.incr
+ print(<-chA) // @pointsto command-line-arguments.incr
print(chB) // @pointsto makechan@c2makeB:13
- print(<-chB) // @pointsto main.decr | main.chan2$1
+ print(<-chB) // @pointsto command-line-arguments.decr | command-line-arguments.chan2$1
print(chAB) // @pointsto makechan@c2makeA:13 | makechan@c2makeB:13
- print(<-chAB) // @pointsto main.incr | main.decr | main.chan2$1
+ print(<-chAB) // @pointsto command-line-arguments.incr | command-line-arguments.decr | command-line-arguments.chan2$1
(<-chA)(3)
}
-// @calls main.chan2 -> main.incr
+// @calls command-line-arguments.chan2 -> command-line-arguments.incr
func chan3() {
chA := make(chan func(int) int, 0) // @line c3makeA
@@ -57,14 +58,14 @@ func chan3() {
chB <- decr
chB <- func(int) int { return 1 }
print(chA) // @pointsto makechan@c3makeA:13
- print(<-chA) // @pointsto main.incr
+ print(<-chA) // @pointsto command-line-arguments.incr
print(chB) // @pointsto makechan@c3makeB:13
- print(<-chB) // @pointsto main.decr | main.chan3$1
+ print(<-chB) // @pointsto command-line-arguments.decr | command-line-arguments.chan3$1
(<-chA)(3)
}
-// @calls main.chan3 -> main.incr
+// @calls command-line-arguments.chan3 -> command-line-arguments.incr
func chan4() {
chA := make(chan func(int) int, 0) // @line c4makeA
@@ -74,16 +75,16 @@ func chan4() {
case chA <- incr:
case chB <- decr:
case a := <-chA:
- print(a) // @pointsto main.incr
+ print(a) // @pointsto command-line-arguments.incr
case b := <-chB:
- print(b) // @pointsto main.decr
+ print(b) // @pointsto command-line-arguments.decr
default:
print(chA) // @pointsto makechan@c4makeA:13
print(chB) // @pointsto makechan@c4makeB:13
}
for k := range chA {
- print(k) // @pointsto main.incr
+ print(k) // @pointsto command-line-arguments.incr
}
// Exercise constraint generation (regtest for a crash).
for range chA {
diff --git a/go/pointer/testdata/chanreflect.go b/go/pointer/testdata/chanreflect.go
index 7d22efeb6..21f78b61f 100644
--- a/go/pointer/testdata/chanreflect.go
+++ b/go/pointer/testdata/chanreflect.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -14,7 +15,7 @@ func chanreflect1() {
crv.Send(reflect.ValueOf(&a))
print(crv.Interface()) // @types chan *int
print(crv.Interface().(chan *int)) // @pointsto makechan@cr1make:12
- print(<-ch) // @pointsto main.a
+ print(<-ch) // @pointsto command-line-arguments.a
}
func chanreflect1i() {
@@ -24,7 +25,7 @@ func chanreflect1i() {
reflect.ValueOf(ch).Send(reflect.ValueOf(&a))
v := <-ch
print(v) // @types *int
- print(v.(*int)) // @pointsto main.a
+ print(v.(*int)) // @pointsto command-line-arguments.a
}
func chanreflect2() {
@@ -33,7 +34,7 @@ func chanreflect2() {
crv := reflect.ValueOf(ch)
r, _ := crv.Recv()
print(r.Interface()) // @types *int
- print(r.Interface().(*int)) // @pointsto main.b
+ print(r.Interface().(*int)) // @pointsto command-line-arguments.b
}
func chanOfRecv() {
@@ -60,8 +61,8 @@ func chanOfBoth() {
ch.Send(reflect.ValueOf(&b))
ch.Interface().(chan *int) <- &a
r, _ := ch.Recv()
- print(r.Interface().(*int)) // @pointsto main.a | main.b
- print(<-ch.Interface().(chan *int)) // @pointsto main.a | main.b
+ print(r.Interface().(*int)) // @pointsto command-line-arguments.a | command-line-arguments.b
+ print(<-ch.Interface().(chan *int)) // @pointsto command-line-arguments.a | command-line-arguments.b
}
var unknownDir reflect.ChanDir // not a constant
diff --git a/go/pointer/testdata/context.go b/go/pointer/testdata/context.go
index ed616e7ec..b76c20070 100644
--- a/go/pointer/testdata/context.go
+++ b/go/pointer/testdata/context.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -16,29 +17,29 @@ func context1() {
var t1, t2 T
t1.SetX(&a)
t2.SetX(&b)
- print(t1.GetX()) // @pointsto main.a
- print(t2.GetX()) // @pointsto main.b
+ print(t1.GetX()) // @pointsto command-line-arguments.a
+ print(t2.GetX()) // @pointsto command-line-arguments.b
}
func context2() {
id := func(x *int) *int {
- print(x) // @pointsto main.a | main.b
+ print(x) // @pointsto command-line-arguments.a | command-line-arguments.b
return x
}
- print(id(&a)) // @pointsto main.a
- print(id(&b)) // @pointsto main.b
+ print(id(&a)) // @pointsto command-line-arguments.a
+ print(id(&b)) // @pointsto command-line-arguments.b
// Same again, but anon func has free vars.
var c int // @line context2c
id2 := func(x *int) (*int, *int) {
- print(x) // @pointsto main.a | main.b
+ print(x) // @pointsto command-line-arguments.a | command-line-arguments.b
return x, &c
}
p, q := id2(&a)
- print(p) // @pointsto main.a
+ print(p) // @pointsto command-line-arguments.a
print(q) // @pointsto c@context2c:6
r, s := id2(&b)
- print(r) // @pointsto main.b
+ print(r) // @pointsto command-line-arguments.b
print(s) // @pointsto c@context2c:6
}
diff --git a/go/pointer/testdata/conv.go b/go/pointer/testdata/conv.go
index 692f0ceba..5ef1fdf01 100644
--- a/go/pointer/testdata/conv.go
+++ b/go/pointer/testdata/conv.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -26,23 +27,23 @@ func conv3() {
// Conversion of same underlying types.
type PI *int
pi := PI(&a)
- print(pi) // @pointsto main.a
+ print(pi) // @pointsto command-line-arguments.a
pint := (*int)(pi)
- print(pint) // @pointsto main.a
+ print(pint) // @pointsto command-line-arguments.a
// Conversions between pointers to identical base types.
var y *PI = &pi
var x **int = (**int)(y)
- print(*x) // @pointsto main.a
- print(*y) // @pointsto main.a
+ print(*x) // @pointsto command-line-arguments.a
+ print(*y) // @pointsto command-line-arguments.a
y = (*PI)(x)
- print(*y) // @pointsto main.a
+ print(*y) // @pointsto command-line-arguments.a
}
func conv4() {
// Handling of unsafe.Pointer conversion is unsound:
- // we lose the alias to main.a and get something like new(int) instead.
+ // we lose the alias to command-line-arguments.a and get something like new(int) instead.
p := (*int)(unsafe.Pointer(&a)) // @line c2p
print(p) // @pointsto convert@c2p:13
}
diff --git a/go/pointer/testdata/extended.go b/go/pointer/testdata/extended.go
index b3dd20304..a95449c2e 100644
--- a/go/pointer/testdata/extended.go
+++ b/go/pointer/testdata/extended.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -17,5 +18,5 @@ func fn() []t {
func main() {
x := fn()
- print(x) // @pointstoquery <-(*x[i].a)[key] main.a
+ print(x) // @pointstoquery <-(*x[i].a)[key] command-line-arguments.a
}
diff --git a/go/pointer/testdata/finalizer.go b/go/pointer/testdata/finalizer.go
index 97f25c904..7ee03da07 100644
--- a/go/pointer/testdata/finalizer.go
+++ b/go/pointer/testdata/finalizer.go
@@ -17,8 +17,8 @@ func runtimeSetFinalizer1() {
runtime.SetFinalizer(x, final1b) // param type mismatch: no effect
}
-// @calls main.runtimeSetFinalizer1 -> main.final1a
-// @calls main.runtimeSetFinalizer1 -> main.final1b
+// @calls command-line-arguments.runtimeSetFinalizer1 -> command-line-arguments.final1a
+// @calls command-line-arguments.runtimeSetFinalizer1 -> command-line-arguments.final1b
func final2a(x *bool) {
print(x) // @pointsto new@newbool1:10 | new@newbool2:10
@@ -38,8 +38,8 @@ func runtimeSetFinalizer2() {
runtime.SetFinalizer(x, f)
}
-// @calls main.runtimeSetFinalizer2 -> main.final2a
-// @calls main.runtimeSetFinalizer2 -> main.final2b
+// @calls command-line-arguments.runtimeSetFinalizer2 -> command-line-arguments.final2a
+// @calls command-line-arguments.runtimeSetFinalizer2 -> command-line-arguments.final2b
type T int
@@ -52,7 +52,7 @@ func runtimeSetFinalizer3() {
runtime.SetFinalizer(x, (*T).finalize)
}
-// @calls main.runtimeSetFinalizer3 -> (*main.T).finalize$thunk
+// @calls command-line-arguments.runtimeSetFinalizer3 -> (*command-line-arguments.T).finalize$thunk
// I hope I never live to see this code in the wild.
var setFinalizer = runtime.SetFinalizer
@@ -75,8 +75,8 @@ func runtimeSetFinalizerNonpointer() {
runtime.SetFinalizer((*T).finalize, nil) // f is a non-pointer
}
-// @calls main.runtimeSetFinalizerIndirect -> runtime.SetFinalizer
-// @calls runtime.SetFinalizer -> main.final4
+// @calls command-line-arguments.runtimeSetFinalizerIndirect -> runtime.SetFinalizer
+// @calls runtime.SetFinalizer -> command-line-arguments.final4
func main() {
runtimeSetFinalizer1()
diff --git a/go/pointer/testdata/flow.go b/go/pointer/testdata/flow.go
index 6fb599e8d..9e8ce9355 100644
--- a/go/pointer/testdata/flow.go
+++ b/go/pointer/testdata/flow.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -18,10 +19,10 @@ func flow1() {
if somepred {
r = s
}
- print(s) // @pointsto main.f1
- print(p) // @pointsto main.f2
- print(q) // @pointsto main.f2
- print(r) // @pointsto main.f1 | main.f2
+ print(s) // @pointsto command-line-arguments.f1
+ print(p) // @pointsto command-line-arguments.f2
+ print(q) // @pointsto command-line-arguments.f2
+ print(r) // @pointsto command-line-arguments.f1 | command-line-arguments.f2
}
// Tracking concrete types in interfaces.
@@ -50,10 +51,10 @@ func flow3() {
if somepred {
r = s
}
- print(s) // @pointsto main.g1
- print(p) // @pointsto main.g2
- print(q) // @pointsto main.g2
- print(r) // @pointsto main.g2 | main.g1
+ print(s) // @pointsto command-line-arguments.g1
+ print(p) // @pointsto command-line-arguments.g2
+ print(q) // @pointsto command-line-arguments.g2
+ print(r) // @pointsto command-line-arguments.g2 | command-line-arguments.g1
}
func main() {
diff --git a/go/pointer/testdata/fmtexcerpt.go b/go/pointer/testdata/fmtexcerpt.go
index ee2a0e76c..422e31d41 100644
--- a/go/pointer/testdata/fmtexcerpt.go
+++ b/go/pointer/testdata/fmtexcerpt.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
// This is a slice of the fmt package.
@@ -39,4 +40,4 @@ func main() {
Println("Hello, World!", S(0))
}
-// @calls (*main.pp).doPrint -> (main.S).String
+// @calls (*command-line-arguments.pp).doPrint -> (command-line-arguments.S).String
diff --git a/go/pointer/testdata/func.go b/go/pointer/testdata/func.go
index 2155f8ef7..11a713882 100644
--- a/go/pointer/testdata/func.go
+++ b/go/pointer/testdata/func.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -23,14 +24,14 @@ func func1() {
return f(x)
}
- print(g(&a)) // @pointsto main.a | main.b | h@f1h:6
- print(f(&a)) // @pointsto main.a | main.b
- print(&a) // @pointsto main.a
+ print(g(&a)) // @pointsto command-line-arguments.a | command-line-arguments.b | h@f1h:6
+ print(f(&a)) // @pointsto command-line-arguments.a | command-line-arguments.b
+ print(&a) // @pointsto command-line-arguments.a
}
-// @calls main.func1 -> main.func1$2
-// @calls main.func1 -> main.func1$1
-// @calls main.func1$2 -> main.func1$1
+// @calls command-line-arguments.func1 -> command-line-arguments.func1$2
+// @calls command-line-arguments.func1 -> command-line-arguments.func1$1
+// @calls command-line-arguments.func1$2 -> command-line-arguments.func1$1
func func2() {
var x, y *int
@@ -40,8 +41,8 @@ func func2() {
go func() {
y = &b
}()
- print(x) // @pointsto main.a
- print(y) // @pointsto main.b
+ print(x) // @pointsto command-line-arguments.a
+ print(y) // @pointsto command-line-arguments.b
}
func func3() {
@@ -53,8 +54,8 @@ func func3() {
}
return
}()
- print(x) // @pointsto main.a
- print(y) // @pointsto main.b | main.c
+ print(x) // @pointsto command-line-arguments.a
+ print(y) // @pointsto command-line-arguments.b | command-line-arguments.c
}
func swap(x, y *int) (*int, *int) { // @line swap
@@ -74,26 +75,26 @@ func func4() {
print(q) // @pointsto makeslice[*]@func4make:11
f := &b
- print(f) // @pointsto main.b
+ print(f) // @pointsto command-line-arguments.b
}
type T int
func (t *T) f(x *int) *int {
- print(t) // @pointsto main.a
- print(x) // @pointsto main.c
+ print(t) // @pointsto command-line-arguments.a
+ print(x) // @pointsto command-line-arguments.c
return &b
}
func (t *T) g(x *int) *int {
- print(t) // @pointsto main.a
- print(x) // @pointsto main.b
+ print(t) // @pointsto command-line-arguments.a
+ print(x) // @pointsto command-line-arguments.b
return &c
}
func (t *T) h(x *int) *int {
- print(t) // @pointsto main.a
- print(x) // @pointsto main.b
+ print(t) // @pointsto command-line-arguments.a
+ print(x) // @pointsto command-line-arguments.b
return &c
}
@@ -102,29 +103,29 @@ var h func(*T, *int) *int
func func5() {
// Static call of method.
t := (*T)(&a)
- print(t.f(&c)) // @pointsto main.b
+ print(t.f(&c)) // @pointsto command-line-arguments.b
// Static call of method as function
- print((*T).g(t, &b)) // @pointsto main.c
+ print((*T).g(t, &b)) // @pointsto command-line-arguments.c
// Dynamic call (not invoke) of method.
h = (*T).h
- print(h(t, &b)) // @pointsto main.c
+ print(h(t, &b)) // @pointsto command-line-arguments.c
}
-// @calls main.func5 -> (*main.T).f
-// @calls main.func5 -> (*main.T).g$thunk
-// @calls main.func5 -> (*main.T).h$thunk
+// @calls command-line-arguments.func5 -> (*command-line-arguments.T).f
+// @calls command-line-arguments.func5 -> (*command-line-arguments.T).g$thunk
+// @calls command-line-arguments.func5 -> (*command-line-arguments.T).h$thunk
func func6() {
A := &a
f := func() *int {
return A // (free variable)
}
- print(f()) // @pointsto main.a
+ print(f()) // @pointsto command-line-arguments.a
}
-// @calls main.func6 -> main.func6$1
+// @calls command-line-arguments.func6 -> command-line-arguments.func6$1
type I interface {
f()
@@ -138,18 +139,18 @@ func func7() {
var i I = D{}
imethodClosure := i.f
imethodClosure()
- // @calls main.func7 -> (main.I).f$bound
- // @calls (main.I).f$bound -> (main.D).f
+ // @calls command-line-arguments.func7 -> (command-line-arguments.I).f$bound
+ // @calls (command-line-arguments.I).f$bound -> (command-line-arguments.D).f
var d D
cmethodClosure := d.f
cmethodClosure()
- // @calls main.func7 -> (main.D).f$bound
- // @calls (main.D).f$bound ->(main.D).f
+ // @calls command-line-arguments.func7 -> (command-line-arguments.D).f$bound
+ // @calls (command-line-arguments.D).f$bound ->(command-line-arguments.D).f
methodExpr := D.f
methodExpr(d)
- // @calls main.func7 -> (main.D).f$thunk
+ // @calls command-line-arguments.func7 -> (command-line-arguments.D).f$thunk
}
func func8(x ...int) {
@@ -182,11 +183,11 @@ func func9() {
i.f() // must not crash the solver
}(new(D))
- print(e.x1) // @pointsto main.a
- print(e.x2) // @pointsto main.a
- print(e.x3) // @pointsto main.a
- print(e.x4) // @pointsto main.a
- print(e.x5) // @pointsto main.a
+ print(e.x1) // @pointsto command-line-arguments.a
+ print(e.x2) // @pointsto command-line-arguments.a
+ print(e.x3) // @pointsto command-line-arguments.a
+ print(e.x4) // @pointsto command-line-arguments.a
+ print(e.x5) // @pointsto command-line-arguments.a
}
func main() {
@@ -201,5 +202,5 @@ func main() {
func9()
}
-// @calls <root> -> main.main
-// @calls <root> -> main.init
+// @calls <root> -> command-line-arguments.main
+// @calls <root> -> command-line-arguments.init
diff --git a/go/pointer/testdata/funcreflect.go b/go/pointer/testdata/funcreflect.go
index a0a9a5faa..2b4315ba5 100644
--- a/go/pointer/testdata/funcreflect.go
+++ b/go/pointer/testdata/funcreflect.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -8,7 +9,7 @@ var zero, a, b int
var false2 bool
func f(p *int, q hasF) *int {
- print(p) // @pointsto main.a
+ print(p) // @pointsto command-line-arguments.a
print(q) // @types *T
print(q.(*T)) // @pointsto new@newT1:22
return &b
@@ -26,10 +27,10 @@ func reflectValueCall() {
reflect.ValueOf(&a),
})
print(res[0].Interface()) // @types *int
- print(res[0].Interface().(*int)) // @pointsto main.b
+ print(res[0].Interface().(*int)) // @pointsto command-line-arguments.b
}
-// @calls main.reflectValueCall -> main.f
+// @calls command-line-arguments.reflectValueCall -> command-line-arguments.f
func reflectValueCallIndirect() {
rvf := reflect.ValueOf(g)
@@ -45,14 +46,14 @@ func reflectValueCallIndirect() {
})
res0 := res[0].Interface()
print(res0) // @types *int | *bool | *T
- print(res0.(*int)) // @pointsto main.b
- print(res0.(*bool)) // @pointsto main.false2
+ print(res0.(*int)) // @pointsto command-line-arguments.b
+ print(res0.(*bool)) // @pointsto command-line-arguments.false2
print(res0.(hasF)) // @types *T
print(res0.(*T)) // @pointsto new@newT2:19
}
-// @calls main.reflectValueCallIndirect -> (reflect.Value).Call$bound
-// @calls (reflect.Value).Call$bound -> main.g
+// @calls command-line-arguments.reflectValueCallIndirect -> (reflect.Value).Call$bound
+// @calls (reflect.Value).Call$bound -> command-line-arguments.g
func reflectTypeInOut() {
var f func(float64, bool) (string, int)
@@ -94,17 +95,17 @@ func reflectTypeMethodByName() {
F, _ := TU.MethodByName("F")
print(reflect.Zero(F.Type)) // @types func(T) | func(U, int)
- print(F.Func) // @pointsto (main.T).F | (main.U).F
+ print(F.Func) // @pointsto (command-line-arguments.T).F | (command-line-arguments.U).F
g, _ := TU.MethodByName("g")
print(reflect.Zero(g.Type)) // @types func(T, int) | func(U, string)
- print(g.Func) // @pointsto (main.T).g | (main.U).g
+ print(g.Func) // @pointsto (command-line-arguments.T).g | (command-line-arguments.U).g
// Non-literal method names are treated less precisely.
U := reflect.TypeOf(U{})
X, _ := U.MethodByName(nonconst)
print(reflect.Zero(X.Type)) // @types func(U, int) | func(U, string)
- print(X.Func) // @pointsto (main.U).F | (main.U).g
+ print(X.Func) // @pointsto (command-line-arguments.U).F | (command-line-arguments.U).g
// Interface methods.
rThasF := reflect.TypeOf(new(hasF)).Elem()
@@ -118,7 +119,7 @@ func reflectTypeMethodByName() {
func reflectTypeMethod() {
m := reflect.TypeOf(T{}).Method(0)
print(reflect.Zero(m.Type)) // @types func(T) | func(T, int)
- print(m.Func) // @pointsto (main.T).F | (main.T).g
+ print(m.Func) // @pointsto (command-line-arguments.T).F | (command-line-arguments.T).g
}
func main() {
diff --git a/go/pointer/testdata/hello.go b/go/pointer/testdata/hello.go
index b81784b22..3967cbe00 100644
--- a/go/pointer/testdata/hello.go
+++ b/go/pointer/testdata/hello.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -12,7 +13,7 @@ type S int
var theS S
func (s *S) String() string {
- print(s) // @pointsto main.theS
+ print(s) // @pointsto command-line-arguments.theS
return ""
}
@@ -23,5 +24,5 @@ func main() {
fmt.Println("Hello, World!", &theS)
}
-// @calls main.main -> fmt.Println
-// @calls (*fmt.pp).handleMethods -> (*main.S).String
+// @calls command-line-arguments.main -> fmt.Println
+// @calls (*fmt.pp).handleMethods -> (*command-line-arguments.S).String
diff --git a/go/pointer/testdata/interfaces.go b/go/pointer/testdata/interfaces.go
index 91c0fa9a9..2312e13ed 100644
--- a/go/pointer/testdata/interfaces.go
+++ b/go/pointer/testdata/interfaces.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -34,13 +35,13 @@ func interface1() {
print(j) // @types D
print(k) // @types *int | D
- print(i.(*int)) // @pointsto main.a
+ print(i.(*int)) // @pointsto command-line-arguments.a
print(j.(*int)) // @pointsto
- print(k.(*int)) // @pointsto main.a
+ print(k.(*int)) // @pointsto command-line-arguments.a
print(i.(D).ptr) // @pointsto
- print(j.(D).ptr) // @pointsto main.b
- print(k.(D).ptr) // @pointsto main.b
+ print(j.(D).ptr) // @pointsto command-line-arguments.b
+ print(k.(D).ptr) // @pointsto command-line-arguments.b
}
func interface2() {
@@ -54,21 +55,21 @@ func interface2() {
print(i) // @types *C
print(j) // @types D
print(k) // @types *C | D
- print(k) // @pointsto makeinterface:main.D | makeinterface:*main.C
+ print(k) // @pointsto makeinterface:command-line-arguments.D | makeinterface:*command-line-arguments.C
k.f()
- // @calls main.interface2 -> (*main.C).f
- // @calls main.interface2 -> (main.D).f
+ // @calls command-line-arguments.interface2 -> (*command-line-arguments.C).f
+ // @calls command-line-arguments.interface2 -> (command-line-arguments.D).f
- print(i.(*C)) // @pointsto main.a
- print(j.(D).ptr) // @pointsto main.a
- print(k.(*C)) // @pointsto main.a
+ print(i.(*C)) // @pointsto command-line-arguments.a
+ print(j.(D).ptr) // @pointsto command-line-arguments.a
+ print(k.(*C)) // @pointsto command-line-arguments.a
switch x := k.(type) {
case *C:
- print(x) // @pointsto main.a
+ print(x) // @pointsto command-line-arguments.a
case D:
- print(x.ptr) // @pointsto main.a
+ print(x.ptr) // @pointsto command-line-arguments.a
case *E:
print(x) // @pointsto
}
@@ -94,15 +95,15 @@ func interface4() {
j := i.(I) // interface narrowing type-assertion
print(j) // @types D
- print(j.(D).ptr) // @pointsto main.a
+ print(j.(D).ptr) // @pointsto command-line-arguments.a
var l interface{} = j // interface widening assignment.
print(l) // @types D
- print(l.(D).ptr) // @pointsto main.a
+ print(l.(D).ptr) // @pointsto command-line-arguments.a
m := j.(interface{}) // interface widening type-assertion.
print(m) // @types D
- print(m.(D).ptr) // @pointsto main.a
+ print(m.(D).ptr) // @pointsto command-line-arguments.a
}
// Interface method calls and value flow:
@@ -128,19 +129,19 @@ func interface5() {
print(j.f(&i)) // @pointsto p.x@i5p:6
print(&i) // @pointsto i@i5i:6
- print(j) // @pointsto makeinterface:*main.P
+ print(j) // @pointsto makeinterface:*command-line-arguments.P
}
-// @calls main.interface5 -> (*main.P).f
+// @calls command-line-arguments.interface5 -> (*command-line-arguments.P).f
func interface6() {
f := I.f
- print(f) // @pointsto (main.I).f$thunk
+ print(f) // @pointsto (command-line-arguments.I).f$thunk
f(new(struct{ D }))
}
-// @calls main.interface6 -> (main.I).f$thunk
-// @calls (main.I).f$thunk -> (*struct{main.D}).f
+// @calls command-line-arguments.interface6 -> (command-line-arguments.I).f$thunk
+// @calls (command-line-arguments.I).f$thunk -> (*struct{command-line-arguments.D}).f
func main() {
interface1()
diff --git a/go/pointer/testdata/mapreflect.go b/go/pointer/testdata/mapreflect.go
index bc5e7e6b7..d8c1d5a89 100644
--- a/go/pointer/testdata/mapreflect.go
+++ b/go/pointer/testdata/mapreflect.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -25,11 +26,11 @@ func reflectMapKeysIndex() {
print(k) // @pointsto <alloc in (reflect.Value).MapKeys>
print(k) // @types *int
print(k.Interface()) // @types *int
- print(k.Interface().(*int)) // @pointsto main.a
+ print(k.Interface().(*int)) // @pointsto command-line-arguments.a
v := mrv.MapIndex(k)
print(v.Interface()) // @types *bool
- print(v.Interface().(*bool)) // @pointsto main.b
+ print(v.Interface().(*bool)) // @pointsto command-line-arguments.b
}
}
@@ -38,11 +39,11 @@ func reflectSetMapIndex() {
mrv := reflect.ValueOf(m)
mrv.SetMapIndex(reflect.ValueOf(&a), reflect.ValueOf(&b))
- print(m[nil]) // @pointsto main.b
+ print(m[nil]) // @pointsto command-line-arguments.b
for _, k := range mrv.MapKeys() {
print(k.Interface()) // @types *int
- print(k.Interface().(*int)) // @pointsto main.a
+ print(k.Interface().(*int)) // @pointsto command-line-arguments.a
}
tmap := reflect.TypeOf(m)
@@ -71,9 +72,9 @@ func reflectSetMapIndexInterface() {
reflect.ValueOf(m).SetMapIndex(reflect.ValueOf(&a), reflect.ValueOf(&b))
for k, v := range m {
print(k) // @types *int
- print(k.(*int)) // @pointsto main.a
+ print(k.(*int)) // @pointsto command-line-arguments.a
print(v) // @types *bool
- print(v.(*bool)) // @pointsto main.b
+ print(v.(*bool)) // @pointsto command-line-arguments.b
}
}
diff --git a/go/pointer/testdata/maps.go b/go/pointer/testdata/maps.go
index f73a6ea19..cce4a1020 100644
--- a/go/pointer/testdata/maps.go
+++ b/go/pointer/testdata/maps.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -11,8 +12,8 @@ func maps1() {
m2 := make(map[*int]*int) // @line m1m2
m2[&b] = &a
- print(m1[nil]) // @pointsto main.b | main.c
- print(m2[nil]) // @pointsto main.a
+ print(m1[nil]) // @pointsto command-line-arguments.b | command-line-arguments.c
+ print(m2[nil]) // @pointsto command-line-arguments.a
print(m1) // @pointsto makemap@m1m1:21
print(m2) // @pointsto makemap@m1m2:12
@@ -20,19 +21,19 @@ func maps1() {
m1[&b] = &c
for k, v := range m1 {
- print(k) // @pointsto main.a | main.b
- print(v) // @pointsto main.b | main.c
+ print(k) // @pointsto command-line-arguments.a | command-line-arguments.b
+ print(v) // @pointsto command-line-arguments.b | command-line-arguments.c
}
for k, v := range m2 {
- print(k) // @pointsto main.b
- print(v) // @pointsto main.a
+ print(k) // @pointsto command-line-arguments.b
+ print(v) // @pointsto command-line-arguments.a
}
// Lookup doesn't create any aliases.
- print(m2[&c]) // @pointsto main.a
+ print(m2[&c]) // @pointsto command-line-arguments.a
if _, ok := m2[&a]; ok {
- print(m2[&c]) // @pointsto main.a
+ print(m2[&c]) // @pointsto command-line-arguments.a
}
}
@@ -41,8 +42,8 @@ func maps2() {
m2 := map[*int]*int{&b: &c}
_ = []map[*int]*int{m1, m2} // (no spurious merging of m1, m2)
- print(m1[nil]) // @pointsto main.b
- print(m2[nil]) // @pointsto main.c
+ print(m1[nil]) // @pointsto command-line-arguments.b
+ print(m2[nil]) // @pointsto command-line-arguments.c
}
var g int
@@ -54,7 +55,7 @@ func maps3() {
// v components, so copying the map key or value may cause
// miswiring if the key has >1 components. In the worst case,
// this causes a crash. The test below used to report that
- // pts(v) includes not just main.g but new(float64) too, which
+ // pts(v) includes not just command-line-arguments.g but new(float64) too, which
// is ill-typed.
// sizeof(K) > 1, abstractly
@@ -63,7 +64,7 @@ func maps3() {
m := map[K]*int{k: &g}
for _, v := range m {
- print(v) // @pointsto main.g
+ print(v) // @pointsto command-line-arguments.g
}
}
@@ -78,17 +79,17 @@ func maps4() {
m := map[K]*int{k: &g}
for x, y := range m {
- print(x.a) // @pointsto main.v
- print(y) // @pointsto main.g
+ print(x.a) // @pointsto command-line-arguments.v
+ print(y) // @pointsto command-line-arguments.g
}
var i struct{ a *float64 }
for i, _ = range m {
- print(i.a) // @pointsto main.v
+ print(i.a) // @pointsto command-line-arguments.v
}
var j interface{}
for _, j = range m {
// TODO support the statement `print(j.(*int))`
- print(j) // @pointsto main.g
+ print(j) // @pointsto command-line-arguments.g
}
for _, _ = range m {
}
@@ -96,7 +97,7 @@ func maps4() {
// effects of indexing
for _, j = range m {
// TODO support the statement `print(j.(*int))`
- print(j) // @pointsto main.g
+ print(j) // @pointsto command-line-arguments.g
}
}
diff --git a/go/pointer/testdata/panic.go b/go/pointer/testdata/panic.go
index ee8a7668e..3377d836d 100644
--- a/go/pointer/testdata/panic.go
+++ b/go/pointer/testdata/panic.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -31,6 +32,6 @@ func main() {
}
ex := recover()
print(ex) // @types myPanic | string | func(int) | func() string
- print(ex.(func(int))) // @pointsto main.f
- print(ex.(func() string)) // @pointsto main.g
+ print(ex.(func(int))) // @pointsto command-line-arguments.f
+ print(ex.(func() string)) // @pointsto command-line-arguments.g
}
diff --git a/go/pointer/testdata/recur.go b/go/pointer/testdata/recur.go
index 4c7229de9..065676330 100644
--- a/go/pointer/testdata/recur.go
+++ b/go/pointer/testdata/recur.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -8,4 +9,4 @@ func main() {
main()
}
-// @calls main.main -> main.main
+// @calls command-line-arguments.main -> command-line-arguments.main
diff --git a/go/pointer/testdata/reflect.go b/go/pointer/testdata/reflect.go
index 6b8d0f22e..cf3195a6a 100644
--- a/go/pointer/testdata/reflect.go
+++ b/go/pointer/testdata/reflect.go
@@ -1,9 +1,12 @@
+//go:build ignore
// +build ignore
package main
-import "reflect"
-import "unsafe"
+import (
+ "reflect"
+ "unsafe"
+)
var a, b int
var unknown bool
@@ -11,9 +14,9 @@ var unknown bool
func reflectIndirect() {
ptr := &a
// Pointer:
- print(reflect.Indirect(reflect.ValueOf(&ptr)).Interface().(*int)) // @pointsto main.a
+ print(reflect.Indirect(reflect.ValueOf(&ptr)).Interface().(*int)) // @pointsto command-line-arguments.a
// Non-pointer:
- print(reflect.Indirect(reflect.ValueOf([]*int{ptr})).Interface().([]*int)[0]) // @pointsto main.a
+ print(reflect.Indirect(reflect.ValueOf([]*int{ptr})).Interface().([]*int)[0]) // @pointsto command-line-arguments.a
}
func reflectNewAt() {
@@ -21,7 +24,7 @@ func reflectNewAt() {
print(reflect.NewAt(reflect.TypeOf(3), unsafe.Pointer(&x)).Interface()) // @types *int
}
-// @warning "unsound: main.reflectNewAt contains a reflect.NewAt.. call"
+// @warning "unsound: command-line-arguments.reflectNewAt contains a reflect.NewAt.. call"
func reflectTypeOf() {
t := reflect.TypeOf(3)
@@ -61,7 +64,7 @@ func metareflection() {
print(v1a) // @types reflect.Value
v0a := v1a.Interface().(reflect.Value) // unbox
print(v0a) // @types *int
- print(v0a.Interface().(*int)) // @pointsto main.a
+ print(v0a.Interface().(*int)) // @pointsto command-line-arguments.a
// "box" an interface{} lvalue twice, unbox it twice.
var iface interface{} = 3
diff --git a/go/pointer/testdata/rtti.go b/go/pointer/testdata/rtti.go
index 88e1798d0..05b4a88c1 100644
--- a/go/pointer/testdata/rtti.go
+++ b/go/pointer/testdata/rtti.go
@@ -25,5 +25,5 @@ type I interface {
func main() {
type Y struct{ X }
- print(reflect.Indirect(reflect.ValueOf(new(Y))).Interface().(I).F()) // @pointsto main.a
+ print(reflect.Indirect(reflect.ValueOf(new(Y))).Interface().(I).F()) // @pointsto command-line-arguments.a
}
diff --git a/go/pointer/testdata/structs.go b/go/pointer/testdata/structs.go
index 9036d608d..085439e04 100644
--- a/go/pointer/testdata/structs.go
+++ b/go/pointer/testdata/structs.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
@@ -12,12 +13,12 @@ type A struct {
}
func (a A) m1() {
- print(a.f) // @pointsto main.p
+ print(a.f) // @pointsto command-line-arguments.p
}
func (a *A) m2() {
print(a) // @pointsto complit.A@struct1s:9
- print(a.f) // @pointsto main.p
+ print(a.f) // @pointsto command-line-arguments.p
}
type B struct {
@@ -32,21 +33,21 @@ func structs1() {
b.f = &p
b.g = b
- print(b.h) // @pointsto main.q
- print(b.f) // @pointsto main.p
+ print(b.h) // @pointsto command-line-arguments.q
+ print(b.f) // @pointsto command-line-arguments.p
print(b.g) // @types *B
ptr := &b.f
- print(*ptr) // @pointsto main.p
+ print(*ptr) // @pointsto command-line-arguments.p
b.m1()
b.m2()
}
-// @calls main.structs1 -> (main.A).m1
-// @calls main.structs1 -> (*main.A).m2
-// @calls (*main.B).m1 -> (main.A).m1
-// @calls (*main.B).m2 -> (*main.A).m2
+// @calls command-line-arguments.structs1 -> (command-line-arguments.A).m1
+// @calls command-line-arguments.structs1 -> (*command-line-arguments.A).m2
+// @calls (*command-line-arguments.B).m1 -> (command-line-arguments.A).m1
+// @calls (*command-line-arguments.B).m2 -> (*command-line-arguments.A).m2
type T struct {
x int