Commit Graph

645 Commits

Author SHA1 Message Date
Russ Cox 93604a3dc2 go/loader: fix fd leak and limit calls to ioutil.ReadDir
This makes 'ulimit -n 128; go test -short -v' pass.
It did not before, and that was breaking the openbsd/386 builder.

For golang/go#11811.

Change-Id: Idfdb2f4007ed06c6084486c0e58a561add552d2c
Reviewed-on: https://go-review.googlesource.com/13695
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-08-18 23:39:26 +00:00
Robert Griesemer 958ab4f550 x/tools: disable tests not supported on Android
For golang/go#11811.

Change-Id: Icf16a2d47fcf2fe0d79dd825ccb851a3d63a660f
Reviewed-on: https://go-review.googlesource.com/13268
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-08-06 00:36:03 +00:00
Robert Griesemer 874e71548b go/ssa/interp: exclude another long-running test if -short is set
For #11811.

Change-Id: Ic3bf3c035ce402f144b5b6670d5ef062874b167e
Reviewed-on: https://go-review.googlesource.com/13260
Reviewed-by: Chris Manghane <cmang@golang.org>
2015-08-05 21:28:02 +00:00
Robert Griesemer 50fdc6b946 go/loader: exclude example tests from Windows tests
The output of ExampleConfig_CreateFromFiles and ExampleConfig_Import
are different for Windows that for other platforms: They contain
internal/syscall/windows packages and unicode/utf16 not present in
the output for other platforms.

For golang/go#11811.

Change-Id: Id391fbeec8123616da86cb68fc3cefcd513b2493
Reviewed-on: https://go-review.googlesource.com/13032
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-07-31 22:13:26 +00:00
Robert Griesemer 784fe34e06 go/ssa/interp: abort long-running test when testing.Short() is set
This should help on slower machines.

For golang/go#11811.

Change-Id: Ibb5d5bf0f6cedcda6437ef0ee3fc1f4ba89dab90
Reviewed-on: https://go-review.googlesource.com/13009
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-07-31 22:12:02 +00:00
Alex Brainman d89a972634 go/loader: remove blank line
Blank line was inserted by mistake in CL 12830.

Change-Id: I9e4b3562a4efcab43c5a85c2960a0d22c0aab752
Reviewed-on: https://go-review.googlesource.com/12883
Reviewed-by: Dmitri Shuralyov <shurcool@gmail.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-07-31 21:22:20 +00:00
Robert Griesemer fe546a3233 go/types: exclude some tests when running against Go 1.4
For golang/go#11811.

Change-Id: I130f9608840177cfb7fb9fae30765fcb5aa77411
Reviewed-on: https://go-review.googlesource.com/13008
Reviewed-by: Russ Cox <rsc@golang.org>
2015-07-31 20:09:52 +00:00
Alan Donovan 14b8253455 go/loader: fork example_test.go for go1.4 since the expectations differ
Change-Id: I91138351525ce49b9afccdc66c59e7a4c1c0e096
Reviewed-on: https://go-review.googlesource.com/12870
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
2015-07-30 00:13:23 +00:00
Alex Brainman f25d0131d4 go/loader: make TestLoad_ParseError_AllowErrors pass on windows
Update golang/go#11811

Change-Id: Ic5f1ea87c88d563b6e0ef2d44042e28a9ea03a03
Reviewed-on: https://go-review.googlesource.com/12830
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-07-30 00:12:49 +00:00
Alan Donovan 739a26ae62 go/loader: add paranoid assertions to help diagnose issue 11012
Change-Id: I5e24fe0fb605bdb39de11309e0e3c8ffd7a1eb8b
Reviewed-on: https://go-review.googlesource.com/12842
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-07-29 18:39:32 +00:00
Alex Brainman 166a1118e9 go/loader: update examples Output
Some standard library dependencies have changed (packages and files).
Both ExampleConfig_CreateFromFiles and ExampleConfig_Import Output
needs to be adjusted. Do that.

Update golang/go#11811

Change-Id: I523f2adc1aa46f0932a71ccb23dd7c5a6b07fb27
Reviewed-on: https://go-review.googlesource.com/12832
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-07-29 16:23:00 +00:00
Michal Cierniak 7fe0389f47 go/ssa: update package doc to mention ssautil.CreateProgram
Change-Id: I92fb6cf5683c335826d2e84394cc594639e34fe6
Reviewed-on: https://go-review.googlesource.com/12542
Reviewed-by: Dave Cheney <dave@cheney.net>
2015-07-27 18:48:45 +00:00
Robert Griesemer 1c460ffc92 go/types: run tests that were excluded by mistake
Backport of https://go-review.googlesource.com/#/c/12517/.

TBR=adonovan

Change-Id: I6b010c977c9a770a27c3fa1271c07c38d9b84185
Reviewed-on: https://go-review.googlesource.com/12601
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-07-23 22:55:45 +00:00
Robert Griesemer 88421f4cb2 go/types: unexport UniverseByte/Rune; make Typ a slice
Also: backport https://go-review.googlesource.com/#/c/12443/ .

Change-Id: Ia8a664c627a70a17701b2d48946704c15f4f49c0
Reviewed-on: https://go-review.googlesource.com/12482
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-07-21 18:42:36 +00:00
Robert Griesemer 436a79e5dd go/types: fix internal inInteger operand predicate
Backport of https://go-review.googlesource.com/#/c/12045/

Fixes golang/go#11594.

Change-Id: I3c81e2b1bbdc084d4a323fd963c1c780054ce223
Reviewed-on: https://go-review.googlesource.com/12046
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-07-21 17:32:59 +00:00
Alan Donovan c5ca59aab8 go/loader: issue informative error (not panic) if cgo used in ad hoc package
See https://github.com/golang/go/issues/11627.

Change-Id: I458bc4ea54d0db34f3ba96060d284eda4bad7111
Reviewed-on: https://go-review.googlesource.com/12190
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-07-14 18:01:18 +00:00
Alan Donovan 543085f0ec go/callgraph: add "concurrent" or "deferred" prefix to (*Edge).Description
Fixes golang/go#11518

Change-Id: If6c86c1995c0b6a1226deedaa1713947baa6593a
Reviewed-on: https://go-review.googlesource.com/12085
Reviewed-by: Daniel Morsing <daniel.morsing@gmail.com>
2015-07-13 18:17:08 +00:00
Robert Griesemer 4cd43f3077 go/types: exclude tests that run too long
Backport of the go/types-specific changes of:

https://go-review.googlesource.com/#/c/11673/

(from std repo go/types). This will allow running
the go/types tests again in the x/tools repo.

Change-Id: I97d4664d5aed6309e74b571f86f36f8bb4df4fca
Reviewed-on: https://go-review.googlesource.com/12042
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-07-10 21:57:21 +00:00
Alan Donovan 997b3545fd go/types: change {Type,Object,Selection}String to accept a Qualifier function
The optional Qualifier function determines what prefix to attach to
package-level names, enabling clients to qualify packages in different
ways, for example, using only the package name instead of its complete
path, or using the locally appropriate name for package given a set of
(possibly renaming) imports.

Prior to this change, clients wanting this behavior had to copy
hundreds of lines of complex printing logic.

Fun fact: (*types.Package).Path and (*types.Package).Name are valid
Qualifier functions.

We provide the RelativeTo helper function to create Qualifiers so that
the old behavior remains a one-liner.

Fixes golang/go#11133

Change-Id: Ibd63f639c7b3aa1738826d6165f2d810efeb8293
Reviewed-on: https://go-review.googlesource.com/11692
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-30 19:00:00 +00:00
Alan Donovan 749901c676 go/types: add an API test of the Scope type
Also: make (*Scope).Innermost work for Package scopes.

Change-Id: I9836676e94f95df897101606bed6f29ba46e0f9d
Reviewed-on: https://go-review.googlesource.com/11691
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-29 20:05:11 +00:00
Alan Donovan 27bc91e0ba go/ssa/interp: disable interpretation of packages that have sprouted Examples
since we can't interpret os.Pipe yet.

Change-Id: If27dadc18532274ce97ad7e7557e8614dd15279e
Reviewed-on: https://go-review.googlesource.com/11712
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-29 19:24:15 +00:00
Robert Griesemer e841ad2e00 go/types: fix minor typo in comment
Change-Id: I2d696655c409f94a5ab6a3837b4b83bc7eb0b15d
Reviewed-on: https://go-review.googlesource.com/11366
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-23 21:03:00 +00:00
Robert Griesemer 8c8cd541fa go/types: in string(x) conversions, x must be of integer type
Fixes golang/go#11357.

Change-Id: Id6994a0fe3830cf56d3dbdd60a4dff89404e5a41
Reviewed-on: https://go-review.googlesource.com/11365
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-23 20:21:05 +00:00
Robert Griesemer 6369699504 go/types: better error message for certain unaary/binary expression errors
Fixes golang/go#11367.

Change-Id: Ic7f1bad51165685097c909fd18c245a57924cdc8
Reviewed-on: https://go-review.googlesource.com/11363
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-23 19:43:07 +00:00
Robert Griesemer e9a746de6e go/types: add missing test for constant shifts
Fixes golang/go#11325.

Change-Id: Ic302098fffd337fcfa31274319cdbd78907a6d5d
Reviewed-on: https://go-review.googlesource.com/11344
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-22 22:52:46 +00:00
Robert Griesemer af817890aa go/gccgoimporter: fix tests for Plan9
This is a backport of https://go-review.googlesource.com/#/c/11194/.

Change-Id: I2f8a8efec77a29258c85f5a1b11cd9deb81853d0
Reviewed-on: https://go-review.googlesource.com/11210
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-06-18 00:30:47 +00:00
Robert Griesemer 605d5bf7f5 go/gcimporter, go/types: skip nacl-arm for some tests
Backport of https://go-review.googlesource.com/9674 .

Change-Id: Ie86bea98e910616b2d6a49387b1aed973d4f1c66
Reviewed-on: https://go-review.googlesource.com/11126
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-15 20:50:49 +00:00
Robert Griesemer f9379e5b1f go/types: be robust in the presence of incorrect/missing position info
Fixes go/loader test crash.

TBR: adonovan

Change-Id: I91dba5e001afa0ee188ccea4db904a6ce744c4d0
Reviewed-on: https://go-review.googlesource.com/11042
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-13 01:27:06 +00:00
Robert Griesemer e5c3ebe4c7 go/pointer: fix build (provide correct args to types.NewSignature and types.Eval)
TBR: adonovan

Change-Id: I4b43b566278ede6b780a59f986c0fc392a5ef4ac
Reviewed-on: https://go-review.googlesource.com/11041
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-13 01:08:28 +00:00
Robert Griesemer f389b29208 go/ssa: fix build (remove unused params to types.NewSignature)
TBR: adonovan

Change-Id: I669140d6e0735804625b0327caa51f4e1807d277
Reviewed-on: https://go-review.googlesource.com/11040
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-13 00:57:15 +00:00
Robert Griesemer 136b4e419b go/types: revert most recent change - we cannot rely on 1.5 features quite yet
Revert "go/types: fix Eval to use correct file set when evaluating an expression"

This reverts commit d241a1448b.

Change-Id: Ie16c57da2732d8b079108efef100fc956b71f737
Reviewed-on: https://go-review.googlesource.com/11010
Reviewed-by: David Symonds <dsymonds@golang.org>
2015-06-13 00:06:15 +00:00
Robert Griesemer d241a1448b go/types: fix Eval to use correct file set when evaluating an expression
Change-Id: I221bd26cc90755de57c8f1941cabddd14d56584d
Reviewed-on: https://go-review.googlesource.com/10999
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:51:01 +00:00
Robert Griesemer b5429ae521 go/types: fix comment (missed in last commit)
Change-Id: I4ea2a6b89b44b11cbcf771d0aab3e30370f59d31
Reviewed-on: https://go-review.googlesource.com/10996
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-12 23:17:17 +00:00
Robert Griesemer ee0cf325b1 go/types: provide full source file extent to file scope
Change-Id: Ib3472ab9e6b5bae0b03474ea57857fde1afbd43a
Reviewed-on: https://go-review.googlesource.com/10995
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:15:45 +00:00
Robert Griesemer 44761a8f84 go/types: remove unused scope parameter from NewSignature
Change-Id: I93c4185d7eeafde43b6b512b6e574d3332401c09
Reviewed-on: https://go-review.googlesource.com/10994
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:15:00 +00:00
Robert Griesemer 3c2fc37aec go/gccgoimporter: remove incorrect scope passed to NewSignature
Change-Id: I4b9670dc72ef85b852361aa5524a55b82d88e8f2
Reviewed-on: https://go-review.googlesource.com/10993
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:06:12 +00:00
Robert Griesemer 568df9f49c go/types: remove global vars in test
Change-Id: I5fb61a38362a40c706ba5cb8968c387c8dc4aef2
Reviewed-on: https://go-review.googlesource.com/10992
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:05:41 +00:00
Robert Griesemer 665374f1c8 go/types: add pos parameter to Eval; remove New, EvalNode
Scopes now have "extent" information; that is they provide a
range [scope.Pos(), scope.End()) which describes the source
text range covered by the scope. It requires that the incoming
AST has correct position information; also the extent for the
Universe and for package scopes is not set (positions are invalid).

Objects have a new (currently unexported) scopePos position,
which is the position at which the object becomes visible inside
its *Scope.

Scope.LookupParent takes an addition parameter pos. If valid, an
identifier is looked up as if found at position pos. This can be
used to find the object corresponding to an identifier at position
pos after scopes have been completely populated (and thus may
contain the same identifier which may be defined only later in the
source text).

Fixes #9980.

Change-Id: Icb49c44c5c3d4b93c0718ce2a769ec468877709d
Reviewed-on: https://go-review.googlesource.com/10800
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:04:54 +00:00
Alan Donovan ac303766f5 go/ssa/interp: don't run encoding/pem tests in interpreter
since they use quick.Check, which requires the unimplemented
(reflect.Value).SetString.

Also:
- Add reflect.Type.{In,NumIn} methods, whose absence
  was only the proximate cause of the failed test.
- Delete bodies of reflect.Value methods so that it's obvious a
  function that should be intrinsic is missing.

Change-Id: Ib64b8f4953a913f4ead90e376bda70419adb87cb
Reviewed-on: https://go-review.googlesource.com/10796
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-06 15:50:50 +00:00
Robert Griesemer de24c4870a go/types: remove unused return value (minor cleanup)
Change-Id: I37dd83100b7e977e1d5a06ae84a93a40bbd651c3
Reviewed-on: https://go-review.googlesource.com/10773
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-05 18:41:51 +00:00
Robert Griesemer e262ee18f0 go/types/typeutil: add missing copyright notices
Change-Id: I101c033ffc20fde38b0f0b075f559aa10a6e43d0
Reviewed-on: https://go-review.googlesource.com/10772
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-05 18:11:17 +00:00
Robert Griesemer 3f8eecd15b go/types: move MethodSetCache into package go/types/typeutil
Change-Id: Iba5d7c2df533948a5b28373b077cc0476a6745ad
Reviewed-on: https://go-review.googlesource.com/10770
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-05 17:34:01 +00:00
Alan Donovan 8ccf558e8a cmd/callgraph: update flag docstring
And add a TODO.

Change-Id: I51c63b32e9ac4309cdfb8228348a5d528f36a919
Reviewed-on: https://go-review.googlesource.com/10489
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-05-29 17:21:31 +00:00
Robert Griesemer 5e9beacd77 go/types: fix error message for embedded non-interface types in interfaces
Backport of https://go-review.googlesource.com/#/c/10466/ .

Change-Id: Ib88a9707ea8ad6e2dbfaeb2edeb586a968abd508
Reviewed-on: https://go-review.googlesource.com/10468
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-05-28 20:04:54 +00:00
Robert Griesemer 8c8390201d go/types: exclude test/fixedbugs/issue7746.go from tests
This backports an anlogous change made to std repo go/types and
enables running the tests again in a reasonable amount of time.

Change-Id: Ied59f6788b7b180f34c918a3c94d50c892b15f32
Reviewed-on: https://go-review.googlesource.com/10467
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-05-28 19:10:56 +00:00
Alan Donovan 3d1847243e oracle: disable parser bailout
This change sets ParserMode=AllErrors so that the parser is never
allowed to discard the AST and use a dummy one just because it saw too
many errors.

Also, change (*loader.Program).PathEnclosingInterval so that other
clients that forget to set this flag don't panic while calling
fset.File(f.Pos()).Base() on an ast.File f with no position info.

Change-Id: Ie544f169d367d2aa85426212b27063dc72e36fb1
Reviewed-on: https://go-review.googlesource.com/10290
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-05-20 20:27:48 +00:00
Josh Bleecher Snyder 3f8aef80c8 go/ast/astutil: set Pos for import name
Failing to set this when adding a named import
to an existing block at the 0th position
caused the Lparen position to be set to zero.
As a result, the specs were printed as if
they were a single spec, not a group.
This made it appear as if imports had
been swallowed.

See CL 8663 for more context
and the original bug report.

CL 2050 fixed most similar cases
but missed this one.

Change-Id: Ic578fbb8040fa3d3d41db5bde2b839e394801608
Reviewed-on: https://go-review.googlesource.com/10252
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-05-19 23:10:16 +00:00
Alan Donovan 5df6d9290d go/ssa/interp: remove hash/crc32 from test suite, since it uses Examples
Change-Id: Ia87b7f6d589cd22028b437a94355f499fbedd18a
Reviewed-on: https://go-review.googlesource.com/9928
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-05-12 17:41:59 +00:00
Alan Donovan fb47c16287 go/buildutil: fix usage message for -tags flag
Now:

% gorename -h
Usage of ./gorename:
...
  -tags build tags
        a list of build tags to consider...

Change-Id: I46d6906f683407bad6f3dee25c63b139f47e4588
Reviewed-on: https://go-review.googlesource.com/9655
Reviewed-by: Dominik Honnef <dominik@honnef.co>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-05-08 14:48:23 +00:00
David Symonds 863c9c67a8 go/pointer: Remove a mention of the deleted ImportFromBinary option.
Change-Id: I9ca8a5b37afc6ae9603849d233ee6b4976e2b973
Reviewed-on: https://go-review.googlesource.com/9462
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-04-29 01:29:12 +00:00
Alan Donovan ee9a07d373 go/buildutil: TagsFlag provides a flag.Value for setting build.Context.BuildTags from -tags flag.
Add -tags flag to oracle, ssadump, callgraph, gomvpkg, gorename, eg.

Change-Id: I4a818501b2331c4ea589caca37a3ad9d381dc8af
Reviewed-on: https://go-review.googlesource.com/9172
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-23 14:10:21 +00:00
Alan Donovan bc61fa75b3 go/ssa: acquire TestEnclosingFunction from go/loader package.
Not sure how it ended up there...

Change-Id: I0d48025fd6595714b0c52cadf305b3e06e2b9b84
Reviewed-on: https://go-review.googlesource.com/9171
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-21 16:27:33 +00:00
Alan Donovan 41d9a0e7b2 go/loader: rename Example functions to appease godoc
And other minor cosmetic tweaks.

Change-Id: Ic75d405e6eca8f29b7e97de66fb86f1f39bcae1e
Reviewed-on: https://go-review.googlesource.com/9035
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-17 19:40:02 +00:00
Alan Donovan 9c57c19a58 go/loader: eliminate ImportFromBinary option and PackageCreated hook
The loader package now loads, parses, and type-checks a whole program
from source, and that is all.

Also:
- simplified loader logic
- ssa.Create is gone; use ssautil.CreateProgram.
- ssautil.LoadPackage renamed to BuildPackage.
  It is now independent of go/types' Import hook and the Packages map.
- ssadump: -importbin flag removed.
  The value of this flag was that it caused the tool to print IR
  for only a single package; this is now the normal behaviour.

Fixes #9955

Change-Id: I4571118258ab1a46dccece3241b7dc51401a3acc
Reviewed-on: https://go-review.googlesource.com/8953
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-17 18:58:17 +00:00
Alan Donovan 1b6275a2ec go/loader: API examples
Also: make it easier to find packages.  Hide the importMap field
(never used) and expose a (*Program).Package method which searches
importMap and then Created.

Also: move huge comments into doc.go.

Change-Id: Iad96a12524b7c41ad9acd1e806af23171e71fa7c
Reviewed-on: https://go-review.googlesource.com/9030
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-17 18:50:18 +00:00
Alan Donovan 77d380c9e6 go/gcimporter: populate (*types.Package).Imports
All importers should populate the set of imported packages.  In Go 1.5
importer API, there will be no package map from which to compute the
transitive closure of dependencies, and SSA package creation needs
this information.

+ test.

Change-Id: I1c2823b07bf7316aa62c80e2ef2a0755cf6f5384
Reviewed-on: https://go-review.googlesource.com/8924
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-15 18:12:10 +00:00
Alan Donovan 20186168d5 go/ssa/ssautil: break ssa->loader dependency
Remove all dependencies from non-test code in go/ssa to go/loader,
except the deprecated Create function which will be eliminated in
favor of ssautil.CreateProgram in a mechnanical followup.

Add Examples of two main use cases of SSA construction:
loading a complete program from source; and
building a single package, loading its dependencies from import data.

Add tests to ssautil of the two load functions.
Suggestions welcome for better names.

Planned follow-ups:
- replace all references to ssa.Create with ssautil.CreateProgram and eliminate it.
- eliminate support in go/loader for the ImportBinary flag, and the
  PackageCreated hook which is no longer needed since clients can
  create the package themselves (see Example).

Step 1 to fixing issue 9955.

Change-Id: I4e64df67fcd5b7f0c0388047e06cea247fddfec5
Reviewed-on: https://go-review.googlesource.com/8669
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-14 18:01:36 +00:00
Robert Griesemer 069d2f3bcb 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>
2015-04-08 18:15:25 +00:00
Robert Griesemer bf8b6a5c4c go/types: reenable disabled test (backport from std repo go/types)
Change-Id: I93a914dcfc5bd2cfa8078cec683a46225b665e44
Reviewed-on: https://go-review.googlesource.com/8626
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-04-08 16:31:48 +00:00
Alan Donovan 8a634c5831 go/ssa/interp: don't let target calls to runtime.GOMAXPROCS set host state
...otherwise the interpreted program can make the whole test suite
slow.  Just ignore the argument and return the current GOMAXPROCS
value.

Change-Id: Ife2ad6c53e6fdf9feea1d1b231d8d796b3db3a24
Also: add missing intrinsic for os.runtime_beforeExit.
Reviewed-on: https://go-review.googlesource.com/8591
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-07 22:31:19 +00:00
Robert Griesemer 5cf8a6b1aa go/types: remove dependency on go/ast/astutil
This package was only imported for the trivial Unparen function.

Change-Id: I14f8d91bc0afaa6ab3aa797a53e42e56b59ffcbe
Reviewed-on: https://go-review.googlesource.com/8499
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-04-06 19:33:09 +00:00
Alan Donovan 8a9ac1b806 go/loader: limit concurrency of I/O operations during parsing
This is a putative fix for the file descriptor exhaustion problem
described in https://github.com/golang/go/issues/10306.

Change-Id: If603fb9bbaec1b53f6b44d15b2c202e4670035ce
Reviewed-on: https://go-review.googlesource.com/8421
Reviewed-by: Matt Joiner <anacrolix@gmail.com>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-06 15:15:05 +00:00
Alan Donovan d4e7010150 go/pointer: add TODO comment
Change-Id: Ic383036a6b3aa092aa571694bba86d821428f236
Reviewed-on: https://go-review.googlesource.com/8385
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-02 18:06:43 +00:00
Josh Bleecher Snyder 57d2ff39c7 go/ast/astutil: match prefix segments when adding imports
AddImport and AddNamedImport attempt to place new
imports in roughly the correct place--and thus the
correct group--by matching prefixes. Matching prefixes
byte-by-byte led to "regexp" being grouped with "rsc.io/p".
Instead, match prefixes by segments.

Fixes golang/go#9961.

Change-Id: I52b7c58a9a2fbe85c2b5297e50c87d409364bda3
Reviewed-on: https://go-review.googlesource.com/8090
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-03-30 17:57:25 +00:00
Robert Griesemer af0a4481dd go/types: permit type elision from composite literal map keys
Per pending https://go-review.googlesource.com/2591 .
Depends on: https://go-review.googlesource.com/2621 .

Change-Id: I2aa82916454504b5852518b3ef7fc8637126d0c7
Reviewed-on: https://go-review.googlesource.com/2623
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-03-20 22:18:24 +00:00
Alan Donovan bd8de46c84 go/ssa/interp/testdata: remove comment about now-fixed go/types bug
Change-Id: I55372a40c0049368a74247fe1819be384313f838
Reviewed-on: https://go-review.googlesource.com/7666
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-17 17:28:01 +00:00
Alan Donovan 33fcc815f2 go/ssa: fix incorrect SSA code for composite literals
Composite literals are initialized in place where possible, but in
cases the initializer expression refers to the variable that
is being updated

	x = T{a: x.a}

we must ensure that the RHS is fully evaluated before we execute any
stores to x.  This means we need to record the sequence of stores in a
"store buffer" and execute it only once the entire composite literal
has been evaluated.

Fixes issue #10127

Change-Id: If94e3b179beb25feea5b298ed43de6a199aaf347
Reviewed-on: https://go-review.googlesource.com/7533
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-17 14:26:39 +00:00
Robert Griesemer e4a1c78f0f go/types: typecheck loop body even if range clause is broken
Be more tolerant in the presence of incorrect range clauses
if for loops and type-check loop body with minimal assumptions
about iteration variables. (Before, in some cases we would simply
ignore the loop body in such cases).

Fixes #10148.

Change-Id: I0b66f81875348088c1a7fa04ccdcbfe768f2eb6c
Reviewed-on: https://go-review.googlesource.com/7525
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-03-13 23:02:41 +00:00
Alan Donovan 868c429971 go/ssa/interp: fix bug causing subelements of aggregates to change address.
Since all SSA values are immutable, no value copying is required for
any operations except those that load from or store to a variable;
those operations must do an aggregate copy, i.e., descend into struct
and array elements.  All other calls to copyVal have been removed;
they were pieces of duct tape, as I had long suspected.

The descent must be based on the static type information, not the
"shape" of the dynamic value, since two reflect.Value structs may have
different internal shapes.  We clobber the true definition of
reflect.Value's underlying type, replacing it with struct{interface{},
interface{}}, which is close enough to make the load/store functions
work.

+ Test

Change-Id: I5e239d91ed0cb2a669a9f75766024fe1f9a5c347
Reviewed-on: https://go-review.googlesource.com/7532
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-13 18:22:38 +00:00
Alan Donovan 8cc1c75580 go/loader: support relative imports like the go tool does
Config.Cwd sets the base directory; os.Getwd is its default.

+Test.

Change-Id: I213abfb30085cd1306719ed6f94aeae6a3170bc0
Reviewed-on: https://go-review.googlesource.com/7502
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-12 18:51:46 +00:00
Alan Donovan bdcea2c1b3 go/buildutil: use chan (not func) in the ForEachPackage API
The callbacks are intentionally concurrent, making this function very
easy to misuse (most clients so far have got it wrong, even my own).
Using a channel in the API makes the concurrency obvious, the
correct usage easy, and the client control flow simpler.

Change-Id: Ied38c3ed5c98b40eb1b322a984ed9dc092ac0918
Reviewed-on: https://go-review.googlesource.com/3250
Reviewed-by: Sameer Ajmani <sameer@golang.org>
2015-03-05 20:14:20 +00:00
Alan Donovan 9957739054 go/ssa: treat declared init functions less specially
Before this change, declared init functions were not package members;
this choice dates from when go/types did not create Func objects for them.

Now, they have an Object.  They appear in Members, keyed by "init#%d"
(sequence number) for uniqueness.  They can be enumerated.  They can
be looked up from a *types.Func via (*Program).FuncValue.

Caveat: fn.Object.Name() no longer equals fn.Name() in all cases.

NB: incompatible API change!  (Your build will not break though.)

Change-Id: I2de873079fd57329e6c2f55a282940f6699a77a1
Reviewed-on: https://go-review.googlesource.com/6950
Reviewed-by: Robert Griesemer <gri@golang.org>
Reviewed-by: Peter Collingbourne <pcc@google.com>
2015-03-05 20:09:21 +00:00
Robert Griesemer 133ecf9210 go/types: better error message for use of _ in type switch
Change-Id: If690d2d9607b3632451df2681c293835321ed9bd
Reviewed-on: https://go-review.googlesource.com/6413
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-03-02 18:58:57 +00:00
Alan Donovan 8913eaef75 go/loader: name unnamed packages so errors make sense
Add tests for:
- this naming
- missing file in created package

Change-Id: I07c66b66e845c52d4685509c362b34f1f0c92648
Reviewed-on: https://go-review.googlesource.com/6310
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-02-27 22:39:28 +00:00
Alan Donovan 69db398fe0 go/loader: rename SourceImports flag to ImportFromBinary and invert sense
...since the zero value is more useful by far.

This is a breaking API change, obviously.  (One or two tests in this
CL have intentional been left using the zero value, i.e., they now
load source.)

Change-Id: I42287bfcdb1afef8ee84e5eac12534dd0a1fd5d2
Reviewed-on: https://go-review.googlesource.com/5653
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-02-23 23:01:10 +00:00
Alan Donovan 51931f86bf go/loader: define a FindPackage hook for build systems not compatible with "go build".
Google's proprietary build system, for example, does not use the
_test.go suffix to distinguish test from non-test files; this
information is stated explicitly in another form.

Change-Id: I3a8e919dbc556b6d5cfea1d2123da2616bd934d4
Reviewed-on: https://go-review.googlesource.com/5450
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-02-20 17:56:13 +00:00
Alan Donovan f96426939c go/ssa: minor doc tweaks.
Change-Id: I116405d5014e4f2bccfff91e01945e10feacf9ee
Reviewed-on: https://go-review.googlesource.com/5442
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-02-20 16:00:52 +00:00
Alan Donovan 9bdc591373 go/ssa: standardize parsing of BuilderMode flags.
ssadump's -build=G option is now spelled -import; it was never related to ssa.

Change-Id: Ic21cd8b6990c0ffd25651c17a842a63bfa5019cf
Reviewed-on: https://go-review.googlesource.com/5172
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-02-18 18:34:24 +00:00
Robert Griesemer 229cb67603 go/gccgoimporter: disable test case (fix build, at least partially)
Change-Id: I021c4b4525006d27dd63f6eee16a5d219f6ba9dc
Reviewed-on: https://go-review.googlesource.com/4750
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-02-12 21:45:02 +00:00
Robert Griesemer fa3649f71f go/types: don't permit implicit assignments to unexported struct fields via literals
Change-Id: I74eec172ba5a319f91c95e33b047f489dfce0c95
Reviewed-on: https://go-review.googlesource.com/4090
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-02-06 20:42:57 +00:00
Alan Donovan 0dda50d42a go/loader: improve robustness in face of input errors
Before this change, many kinds of error would cause the loader to stop.
    making it brittle when analyzing large codebases, as in "godoc -analysis".

    This change moves operations that used to occur during
    configuration---(*build.Context).Import, loading, and parsing of
    initial packages---into the Load call, and ensures that all failures
    during Loading are reported at the end so that the maximum amount of
    progress is made.

    Also: redesign the tests and add many new cases.

Change-Id: Ia8cd99416af7c5d4a5fe133908adfa83676d401f
Reviewed-on: https://go-review.googlesource.com/3626
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-02-02 20:01:59 +00:00
Robert Griesemer 1afe783e9f go/types: update testdata (fix build)
Change-Id: Ifd38444c7c22f65f6e85fe6233b01703d1d14b4f
Reviewed-on: https://go-review.googlesource.com/3540
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-01-29 22:22:27 +00:00
Alan Donovan d569772660 Extend duplicate check to exported wrappers
Change-Id: I892fca0a374476aa9e65bf26fb03b73d6a0ae75a
Reviewed-on: https://go-review.googlesource.com/1583
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-23 18:36:53 +00:00
Alex Brainman 2ef5a0d23b refactor/rename: make tests pass on windows (fixes build)
- use import path not file path in go/buildutil.FakeContext OpenFile;
- use regexp to compare error messages in TestErrors, because
  they contain windows file paths;
- use OS file path (not unix path), when checking move results
  in TestMoves.

Change-Id: Ib62d344acb551fb612d8a0773ae1ab5f18341294
Reviewed-on: https://go-review.googlesource.com/3171
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-01-23 05:30:55 +00:00
Alan Donovan 96af1504f6 go/ssa: add list-of-tests constant to generated testmain package
And log its value in godoc -analysis.

Related to issue 8968

Change-Id: I96a96922a3fa5c434c69e0faff1cc8ec4686b6f2
Reviewed-on: https://go-review.googlesource.com/3154
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-22 22:45:41 +00:00
Alan Donovan f011631cea go/ssa: simplify TypesWithMethodSets
Details:
- rename (*Program).TypesWithMethodSets() to RuntimeTypes()
- delete (*Package).TypesWithMethodSets() method and simplify
- move code to methods.go
- update test to use

1-2% improvement in space and time (though I barely trust this data
because the GC at tip is in such terrible state).

Change-Id: I38eab78b11e0ad0ff16e0530e775b6ff6a2ab246
Reviewed-on: https://go-review.googlesource.com/3148
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-22 14:03:32 +00:00
Alan Donovan e079f6c632 go/ssa: change import path of synthetic test package to "test$main"
...to avoid namespace conflicts.
Also make its name "main", since it defines func main().

And fix 2 typos.

Change-Id: I7cf7894d6bed134907b3d2742255e5a82426071b
Reviewed-on: https://go-review.googlesource.com/3150
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-21 22:21:01 +00:00
Alan Donovan 4d45c85020 go/types: expose IsInterface predicate, eliminating 6 copies
Change-Id: I3704d7bd7a11f691c66556c1b77ef79a503d2fe9
Reviewed-on: https://go-review.googlesource.com/2173
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-01-21 18:49:27 +00:00
Alan Donovan 771af7e25c go/buildutil: FakeContext: create build.Context of fake file tree, for testing
This refactoring of the tests of go/loader and refactor/rename made it
possible to write some loader tests I wanted, but the new tests reveal
bugs so they're commented out for now.  I will fix them in a follow-up.

Change-Id: Iae3a20681a0a0791076debd4b82bb5ed74b0c577
Reviewed-on: https://go-review.googlesource.com/2825
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-15 22:46:57 +00:00
Alan Donovan 9c9660e35a go/loader: use concurrency to reduce I/O latency and perform typechecking in parallel.
See loader.go comments for orientation.

This is what happens when you use start using Dmitry's new trace tool. :)

Tests:
- added test of cycles
- load/parse/typecheck of 'godoc' is ~2.5x faster
- race detector finds no errors.

Change-Id: Icb5712c7825002342baf471b216252cecd9149d6
Reviewed-on: https://go-review.googlesource.com/1582
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-14 16:10:20 +00:00
Alan Donovan 47f2109c64 go/ssa: slight simplification to setCallFunc
Change-Id: I6b8cc35f779910ebab3db9994bb17456a6df4b94
Reviewed-on: https://go-review.googlesource.com/2742
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-13 17:32:58 +00:00
Peter Collingbourne d3e7567302 go/loader: introduce PackageCreated hook
PackageCreated is a hook called when a types.Package
is created but before it has been populated.

The package's import Path() and Scope() are defined,
but not its Name() since no package declaration has
been seen yet.

Clients may use this to insert synthetic items into
the package scope, for example.

Change-Id: I210a0c4c766f03f715f03f26d5cd765f15f56e04
Reviewed-on: https://go-review.googlesource.com/2138
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-01-13 15:48:33 +00:00
Peter Collingbourne 4f8578d2c0 astutil: move to go/ast/astutil
Change-Id: I9a45bfc07613eb2210081d306d71f0a4d152eda5
Reviewed-on: https://go-review.googlesource.com/2592
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-01-13 15:47:47 +00:00
Alan Donovan 86040b7505 go/types: close scope for each "select" case after its body
Classic Go pitfall: "defer" in a loop does not do what you might expect.

+ test case

Fixes issue 9570
Fixes issue 9569

Change-Id: Iec05420872ef71190083a7192f76c92f54f4a2a1
Reviewed-on: https://go-review.googlesource.com/2655
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-01-12 18:04:11 +00:00
Dmitri Shuralyov c10e262955 go/vcs: fix bug in remote package discovery
The parser was assuming it would find <body> or </head>.
If the entire response is just <meta> tags, it finds EOF and
treats that as an error. It's not.

This is the same change as in https://golang.org/cl/68520044.

Fixes #9556.

Change-Id: If51ed36e7364c15788311039caf8323eb5fe9a6c
Reviewed-on: https://go-review.googlesource.com/2650
Reviewed-by: Minux Ma <minux@golang.org>
2015-01-10 08:10:09 +00:00
Robert Griesemer 4fbaee50fd go/types: revert gofmt -s change to permit building with 1.3
Per request from dsymonds.

Change-Id: I1f034859880df0d8313d67da90457ac56459ed76
Reviewed-on: https://go-review.googlesource.com/2562
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: David Symonds <dsymonds@golang.org>
2015-01-08 20:27:41 +00:00
Robert Griesemer 44ee65f545 go/types: don't allow f()... if f() is multi-valued
Also: Better position for error messages related to wrong use of ... .

Fixes #9473.

Change-Id: I90565f51a42897b7292f651a84a23611a5d8f359
Reviewed-on: https://go-review.googlesource.com/2390
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-01-08 18:10:12 +00:00
Robert Griesemer 4ad370efaa go/types: avoid follow-up error if composite literal type is unknown
Fixes #9182.

Change-Id: I7090e600e9981131db7f323e7ce6419017e95458
Reviewed-on: https://go-review.googlesource.com/2481
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-01-08 17:00:29 +00:00
Peter Collingbourne bcd5efa0ef go/types: make import check optional via a flag in types.Config
It is sometimes useful for API clients to be able to disable the unused
import check, although for good reason this should not be exposed as part of
a user-facing interface. There are at least two use cases that I am aware of:

1) It allows for automated test case reduction tools such as delta or C-Reduce
   to be more easily applied to type checker input. Disabling the check
   makes it possible for the tool to identify and remove code that depends
   on imported packages without any specific knowledge of Go, as the import
   need not be removed simultaneously with the code.

2) Interactive tools (such as REPLs) that may have previously received a
   list of imports and subsequently receive a line of code that may use any
   number of these imports. It is simpler for such tools to import all the
   packages in its list than to try to identify the correct set of imports.

Change-Id: I00091a4e5c8e1bd664efd82a636f255eaaa5a2db
Reviewed-on: https://go-review.googlesource.com/2136
Reviewed-by: Robert Griesemer <gri@golang.org>
2014-12-31 00:06:02 +00:00
Peter Collingbourne 6370cd3a8e go/types: modify Eval, EvalNode to return a TypeAndValue
The new interface makes the functions more useful by allowing clients to
check the various properties that TypeAndValue provides.

Change-Id: I8b41a27316081bea24a18ffe6fa1812e809d6f67
Reviewed-on: https://go-review.googlesource.com/2134
Reviewed-by: Robert Griesemer <gri@golang.org>
2014-12-30 17:21:45 +00:00