diff options
Diffstat (limited to 'vendor/golang.org/x/tools/go/ssa/stdlib_test.go')
-rw-r--r-- | vendor/golang.org/x/tools/go/ssa/stdlib_test.go | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/vendor/golang.org/x/tools/go/ssa/stdlib_test.go b/vendor/golang.org/x/tools/go/ssa/stdlib_test.go deleted file mode 100644 index f7e0f86..0000000 --- a/vendor/golang.org/x/tools/go/ssa/stdlib_test.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2013 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. - -// Incomplete source tree on Android. - -// +build !android - -package ssa_test - -// This file runs the SSA builder in sanity-checking mode on all -// packages beneath $GOROOT and prints some summary information. -// -// Run with "go test -cpu=8 to" set GOMAXPROCS. - -import ( - "go/ast" - "go/build" - "go/token" - "runtime" - "testing" - "time" - - "golang.org/x/tools/go/buildutil" - "golang.org/x/tools/go/loader" - "golang.org/x/tools/go/ssa" - "golang.org/x/tools/go/ssa/ssautil" -) - -// Skip the set of packages that transitively depend on -// cmd/internal/objfile, which uses vendoring, -// which go/loader does not yet support. -// TODO(adonovan): add support for vendoring and delete this. -var skip = map[string]bool{ - "cmd/addr2line": true, - "cmd/internal/objfile": true, - "cmd/nm": true, - "cmd/objdump": true, - "cmd/pprof": true, -} - -func bytesAllocated() uint64 { - runtime.GC() - var stats runtime.MemStats - runtime.ReadMemStats(&stats) - return stats.Alloc -} - -func TestStdlib(t *testing.T) { - if testing.Short() { - t.Skip("skipping in short mode; too slow (golang.org/issue/14113)") - } - // Load, parse and type-check the program. - t0 := time.Now() - alloc0 := bytesAllocated() - - // Load, parse and type-check the program. - ctxt := build.Default // copy - ctxt.GOPATH = "" // disable GOPATH - conf := loader.Config{Build: &ctxt} - for _, path := range buildutil.AllPackages(conf.Build) { - if skip[path] { - continue - } - conf.ImportWithTests(path) - } - - iprog, err := conf.Load() - if err != nil { - t.Fatalf("Load failed: %v", err) - } - - t1 := time.Now() - alloc1 := bytesAllocated() - - // Create SSA packages. - var mode ssa.BuilderMode - // Comment out these lines during benchmarking. Approx SSA build costs are noted. - mode |= ssa.SanityCheckFunctions // + 2% space, + 4% time - mode |= ssa.GlobalDebug // +30% space, +18% time - prog := ssautil.CreateProgram(iprog, mode) - - t2 := time.Now() - - // Build SSA. - prog.Build() - - t3 := time.Now() - alloc3 := bytesAllocated() - - numPkgs := len(prog.AllPackages()) - if want := 140; numPkgs < want { - t.Errorf("Loaded only %d packages, want at least %d", numPkgs, want) - } - - // Keep iprog reachable until after we've measured memory usage. - if len(iprog.AllPackages) == 0 { - panic("unreachable") - } - - allFuncs := ssautil.AllFunctions(prog) - - // Check that all non-synthetic functions have distinct names. - // Synthetic wrappers for exported methods should be distinct too, - // except for unexported ones (explained at (*Function).RelString). - byName := make(map[string]*ssa.Function) - for fn := range allFuncs { - if fn.Synthetic == "" || ast.IsExported(fn.Name()) { - str := fn.String() - prev := byName[str] - byName[str] = fn - if prev != nil { - t.Errorf("%s: duplicate function named %s", - prog.Fset.Position(fn.Pos()), str) - t.Errorf("%s: (previously defined here)", - prog.Fset.Position(prev.Pos())) - } - } - } - - // Dump some statistics. - var numInstrs int - for fn := range allFuncs { - for _, b := range fn.Blocks { - numInstrs += len(b.Instrs) - } - } - - // determine line count - var lineCount int - prog.Fset.Iterate(func(f *token.File) bool { - lineCount += f.LineCount() - return true - }) - - // NB: when benchmarking, don't forget to clear the debug + - // sanity builder flags for better performance. - - t.Log("GOMAXPROCS: ", runtime.GOMAXPROCS(0)) - t.Log("#Source lines: ", lineCount) - t.Log("Load/parse/typecheck: ", t1.Sub(t0)) - t.Log("SSA create: ", t2.Sub(t1)) - t.Log("SSA build: ", t3.Sub(t2)) - - // SSA stats: - t.Log("#Packages: ", numPkgs) - t.Log("#Functions: ", len(allFuncs)) - t.Log("#Instructions: ", numInstrs) - t.Log("#MB AST+types: ", int64(alloc1-alloc0)/1e6) - t.Log("#MB SSA: ", int64(alloc3-alloc1)/1e6) -} |