Skip to content

x/tools/go/pointer: internal panic in pointer analysis #41877

Closed
@goodmorning-coder

Description

@goodmorning-coder

What version of Go are you using (go version)?

$ go version
go version go1.15.2 linux/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/Alice/.cache/go-build"
GOENV="/home/Alice/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/Alice/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/Alice/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build803063649=/tmp/go-build -gno-record-gcc-switches"

What did you do?

I wrote a program

package main

import (
	"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"
	"log"
	"strings"
)

func main() {
	cfg := &packages.Config{Mode: packages.LoadAllSyntax, Tests: true}
	initial, err := packages.Load(cfg, "/path/to/bug_test.go")
	if err != nil {
		log.Fatal(err)
	}

	if packages.PrintErrors(initial) > 0 {
		log.Fatalf("packages contain errors")
	}

	prog, pkgs := ssautil.Packages(initial, ssa.PrintPackages)
	_ = prog

	var mains []*ssa.Package

	for _, p := range pkgs {
		if p != nil {
			p.Build()
		}

		if strings.HasSuffix(p.Pkg.Path(), ".test") {
			mains = append(mains, p)
		}
	}

	config := &pointer.Config{
		Mains:           mains,
		BuildCallGraph:  true,
		Log: log.Writer(),
	}

	pointer.Analyze(config)
}

bug_test.go

package bug_test

import "testing"

func TestFunc(t *testing.T) {
}

What did you expect to see?

No panic

What did you see instead?

==== Generating constraints for cg3:(*reflect.rtype).Align, shared contour
Internal panic in pointer analysis:
goroutine 1 [running]:
runtime/debug.Stack(0x24, 0x0, 0x0)
        /usr/local/go/src/runtime/debug/stack.go:24 +0x9f
runtime/debug.PrintStack()
        /usr/local/go/src/runtime/debug/stack.go:16 +0x25
golang.org/x/tools/go/pointer.Analyze.func1(0xc002a1fe48)
        /home/Alice/go/src/golang.org/x/tools/go/pointer/analysis.go:227 +0x10b
panic(0x6d5080, 0xc004e5b540)
        /usr/local/go/src/runtime/panic.go:969 +0x175
golang.org/x/tools/go/ssa.writeSignature(0xc0052fca80, 0xc005544780, 0xc005797f99, 0x5, 0xc006496f90, 0x0, 0x0, 0x0)
        /home/Alice/go/src/golang.org/x/tools/go/ssa/func.go:522 +0x286
golang.org/x/tools/go/ssa.WriteFunction(0xc0052fca80, 0xc002a1f770)
        /home/Alice/go/src/golang.org/x/tools/go/ssa/func.go:585 +0x1c5
golang.org/x/tools/go/ssa.(*Function).WriteTo(0xc002a1f770, 0x74fd20, 0xc0000be010, 0x29, 0xc002a1f750, 0x2)
        /home/Alice/go/src/golang.org/x/tools/go/ssa/func.go:544 +0x4e
golang.org/x/tools/go/pointer.(*analysis).genFunc(0xc00109c1c0, 0xc001cfcfc0)
        /home/Alice/go/src/golang.org/x/tools/go/pointer/gen.go:1166 +0x919
golang.org/x/tools/go/pointer.(*analysis).generate(0xc00109c1c0)
        /home/Alice/go/src/golang.org/x/tools/go/pointer/gen.go:1305 +0x187
golang.org/x/tools/go/pointer.Analyze(0xc002a28aa0, 0x0, 0x74fbc0, 0xc001bb5150)
        /home/Alice/go/src/golang.org/x/tools/go/pointer/analysis.go:292 +0x478
main.main()
        /home/Alice/go/src/10.3.0.221/Alice/ryze/cmd/bug/main.go:44 +0x405

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.ToolsThis label describes issues relating to any tools in the x/tools repository.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions