tools/go
Alan Donovan 4700b7a612 go/callgraph: fix asymptote trap in DeleteSyntheticNodes.
The previous implementation would cause the graph to contain
many duplicate edges resulting in very large cross products,
so that for some inputs (and random map iteration orders) the
running time of DeleteSyntheticNodes was many minutes---more
than the pointer analysis!

Duplicate edges can arise from an interface call that
dispatches to several different wrapper functions each
wrapping the same declared method.

For example, in the callgraph for go/types, a call to
Object.Pos() dispatches to the synthetic functions (*Type).Pos
and (*Var).Pos, each of which wrap (*object).Pos().  After
DeleteSyntheticNodes, Object.Pos() appeared to call
(*object).Pos() twice.

This change builds the set of all edges and avoids adding
edges already in the set.

Also, document findings.

LGTM=crawshaw
R=crawshaw
CC=golang-codereviews
https://golang.org/cl/96100043
2014-05-08 14:03:06 -04:00
..
callgraph go/callgraph: fix asymptote trap in DeleteSyntheticNodes. 2014-05-08 14:03:06 -04:00
exact go.tools/go/exact: tweaked documentation 2014-04-16 13:07:59 -07:00
gccgoimporter go.tools/go/gccgoimporter: use gccgo -dumpversion 2014-04-17 13:40:42 -07:00
gcimporter go.tools/go/types: internal cleanups 2014-02-20 14:52:21 -08:00
importer go.tools/go/importer: record low-level encoding format 2014-03-31 09:49:52 -07:00
loader go.tools: remove dead code 2014-04-25 15:08:13 -04:00
pointer go.tools: fix various typos 2014-05-02 14:38:08 -07:00
ssa go.tools: fix various typos 2014-05-02 14:38:08 -07:00
types go.tools/go/types: add API test of Selection mechanism. 2014-05-07 18:35:43 -04:00
vcs go.tools/vcs: allow compilation with go 1.0 2013-10-04 11:46:57 +10:00