go/types, go/gcimporter: backport changes from std repo
This is a 1:1 backport of the following changes: https://go-review.googlesource.com/8611 https://go-review.googlesource.com/8621 Change-Id: I4a75d73cb99a7d104d32553f5530408c2b6d81b8 Reviewed-on: https://go-review.googlesource.com/8629 Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
		
							parent
							
								
									bf8b6a5c4c
								
							
						
					
					
						commit
						069d2f3bcb
					
				| 
						 | 
				
			
			@ -30,7 +30,7 @@ func init() {
 | 
			
		|||
	types.DefaultImport = Import
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var pkgExts = [...]string{".a", ".5", ".6", ".8"}
 | 
			
		||||
var pkgExts = [...]string{".a", ".5", ".6", ".7", ".8", ".9"}
 | 
			
		||||
 | 
			
		||||
// FindPkg returns the filename and unique package id for an import
 | 
			
		||||
// path based on package information provided by build.Import (using
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,23 +18,27 @@ import (
 | 
			
		|||
	"golang.org/x/tools/go/types"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// skipSpecialPlatforms causes the test to be skipped for platforms where
 | 
			
		||||
// builders (build.golang.org) don't have access to compiled packages for
 | 
			
		||||
// import.
 | 
			
		||||
func skipSpecialPlatforms(t *testing.T) {
 | 
			
		||||
	switch platform := runtime.GOOS + "-" + runtime.GOARCH; platform {
 | 
			
		||||
	case "nacl-amd64p32",
 | 
			
		||||
		"nacl-386",
 | 
			
		||||
		"darwin-arm",
 | 
			
		||||
		"darwin-arm64":
 | 
			
		||||
		t.Skipf("no compiled packages available for import on %s", platform)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var gcPath string // Go compiler path
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	// determine compiler
 | 
			
		||||
	var gc string
 | 
			
		||||
	switch runtime.GOARCH {
 | 
			
		||||
	case "386":
 | 
			
		||||
		gc = "8g"
 | 
			
		||||
	case "amd64":
 | 
			
		||||
		gc = "6g"
 | 
			
		||||
	case "arm":
 | 
			
		||||
		gc = "5g"
 | 
			
		||||
	default:
 | 
			
		||||
		gcPath = "unknown-GOARCH-compiler"
 | 
			
		||||
	if char, err := build.ArchChar(runtime.GOARCH); err == nil {
 | 
			
		||||
		gcPath = filepath.Join(build.ToolDir, char+"g")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	gcPath = filepath.Join(build.ToolDir, gc)
 | 
			
		||||
	gcPath = "unknown-GOARCH-compiler"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func compile(t *testing.T, dirname, filename string) string {
 | 
			
		||||
| 
						 | 
				
			
			@ -97,8 +101,9 @@ func testDir(t *testing.T, dir string, endTime time.Time) (nimports int) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestImport(t *testing.T) {
 | 
			
		||||
	// This package does not handle gccgo export data.
 | 
			
		||||
	if runtime.Compiler == "gccgo" {
 | 
			
		||||
	// This package only handles gc export data.
 | 
			
		||||
	if runtime.Compiler != "gc" {
 | 
			
		||||
		t.Skipf("gc-built packages not available (compiler = %s)", runtime.Compiler)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -133,10 +138,14 @@ var importedObjectTests = []struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestImportedTypes(t *testing.T) {
 | 
			
		||||
	// This package does not handle gccgo export data.
 | 
			
		||||
	if runtime.Compiler == "gccgo" {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	// This package only handles gc export data.
 | 
			
		||||
	if runtime.Compiler != "gc" {
 | 
			
		||||
		t.Skipf("gc-built packages not available (compiler = %s)", runtime.Compiler)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, test := range importedObjectTests {
 | 
			
		||||
		s := strings.Split(test.name, ".")
 | 
			
		||||
		if len(s) != 2 {
 | 
			
		||||
| 
						 | 
				
			
			@ -165,8 +174,11 @@ func TestImportedTypes(t *testing.T) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestIssue5815(t *testing.T) {
 | 
			
		||||
	// This package does not handle gccgo export data.
 | 
			
		||||
	if runtime.Compiler == "gccgo" {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	// This package only handles gc export data.
 | 
			
		||||
	if runtime.Compiler != "gc" {
 | 
			
		||||
		t.Skipf("gc-built packages not available (compiler = %s)", runtime.Compiler)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -195,8 +207,11 @@ func TestIssue5815(t *testing.T) {
 | 
			
		|||
 | 
			
		||||
// Smoke test to ensure that imported methods get the correct package.
 | 
			
		||||
func TestCorrectMethodPackage(t *testing.T) {
 | 
			
		||||
	// This package does not handle gccgo export data.
 | 
			
		||||
	if runtime.Compiler == "gccgo" {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	// This package only handles gc export data.
 | 
			
		||||
	if runtime.Compiler != "gc" {
 | 
			
		||||
		t.Skipf("gc-built packages not available (compiler = %s)", runtime.Compiler)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ import (
 | 
			
		|||
	"go/ast"
 | 
			
		||||
	"go/parser"
 | 
			
		||||
	"go/token"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +18,19 @@ import (
 | 
			
		|||
	. "golang.org/x/tools/go/types"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// skipSpecialPlatforms causes the test to be skipped for platforms where
 | 
			
		||||
// builders (build.golang.org) don't have access to compiled packages for
 | 
			
		||||
// import.
 | 
			
		||||
func skipSpecialPlatforms(t *testing.T) {
 | 
			
		||||
	switch platform := runtime.GOOS + "-" + runtime.GOARCH; platform {
 | 
			
		||||
	case "nacl-amd64p32",
 | 
			
		||||
		"nacl-386",
 | 
			
		||||
		"darwin-arm",
 | 
			
		||||
		"darwin-arm64":
 | 
			
		||||
		t.Skipf("no compiled packages available for import on %s", platform)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func pkgFor(path, source string, info *Info) (*Package, error) {
 | 
			
		||||
	fset := token.NewFileSet()
 | 
			
		||||
	f, err := parser.ParseFile(fset, path, source, 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -284,6 +298,8 @@ func predString(tv TypeAndValue) string {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestPredicatesInfo(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	var tests = []struct {
 | 
			
		||||
		src  string
 | 
			
		||||
		expr string
 | 
			
		||||
| 
						 | 
				
			
			@ -368,6 +384,8 @@ func TestPredicatesInfo(t *testing.T) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestScopesInfo(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	var tests = []struct {
 | 
			
		||||
		src    string
 | 
			
		||||
		scopes []string // list of scope descriptors of the form kind:varlist
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -278,6 +278,8 @@ func checkFiles(t *testing.T, testfiles []string) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestCheck(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	// Declare builtins for testing.
 | 
			
		||||
	DefPredeclaredTestFuncs()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,8 @@ func TestEvalArith(t *testing.T) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestEvalContext(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	src := `
 | 
			
		||||
package p
 | 
			
		||||
import "fmt"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,6 +89,8 @@ var pkgnames = []string{
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestResolveIdents(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	// parse package files
 | 
			
		||||
	fset := token.NewFileSet()
 | 
			
		||||
	var files []*ast.File
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,8 @@ var (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
func TestStdlib(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	walkDirs(t, filepath.Join(runtime.GOROOT(), "src"))
 | 
			
		||||
	if testing.Verbose() {
 | 
			
		||||
		fmt.Println(pkgCount, "packages typechecked in", time.Since(start))
 | 
			
		||||
| 
						 | 
				
			
			@ -116,6 +118,14 @@ func testTestDir(t *testing.T, path string, ignore ...string) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestStdTest(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	// test/recover4.go is only built for Linux and Darwin.
 | 
			
		||||
	// TODO(gri) Remove once tests consider +build tags (issue 10370).
 | 
			
		||||
	if runtime.GOOS != "linux" || runtime.GOOS != "darwin" {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	testTestDir(t, filepath.Join(runtime.GOROOT(), "test"),
 | 
			
		||||
		"cmplxdivide.go", // also needs file cmplxdivide1.go - ignore
 | 
			
		||||
		"sigchld.go",     // don't work on Windows; testTestDir should consult build tags
 | 
			
		||||
| 
						 | 
				
			
			@ -123,6 +133,8 @@ func TestStdTest(t *testing.T) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestStdFixed(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	testTestDir(t, filepath.Join(runtime.GOROOT(), "test", "fixedbugs"),
 | 
			
		||||
		"bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore
 | 
			
		||||
		"bug459.go",    // possibly incorrect test - see issue 6703 (pending spec clarification)
 | 
			
		||||
| 
						 | 
				
			
			@ -132,6 +144,8 @@ func TestStdFixed(t *testing.T) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestStdKen(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	testTestDir(t, filepath.Join(runtime.GOROOT(), "test", "ken"))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -116,6 +116,8 @@ var dependentTestTypes = []testEntry{
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func TestTypeString(t *testing.T) {
 | 
			
		||||
	skipSpecialPlatforms(t)
 | 
			
		||||
 | 
			
		||||
	var tests []testEntry
 | 
			
		||||
	tests = append(tests, independentTestTypes...)
 | 
			
		||||
	tests = append(tests, dependentTestTypes...)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue