The traversal used by the write barrier insertion phase can sometimes
wind up visiting new statements inserted during the traversal, which
then results in duplicate / redundant write barrier guards. Example
program to reproduce:
package small
type S struct {
N *S
K int
}
var G *S = &S{N: nil, K: 101}
This patch changes the traversal code to keep track of statements
already added and avoid processing them again later in the traversal.
Fixes golang/go#25867
Reviewed-on: https://go-review.googlesource.com/118637
From-SVN: r261568
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| LICENSE | Loading commit data... | |
| MERGE | Loading commit data... | |
| PATENTS | Loading commit data... | |
| README | Loading commit data... | |
| ast-dump.cc | Loading commit data... | |
| ast-dump.h | Loading commit data... | |
| backend.h | Loading commit data... | |
| escape.cc | Loading commit data... | |
| escape.h | Loading commit data... | |
| export.cc | Loading commit data... | |
| export.h | Loading commit data... | |
| expressions.cc | Loading commit data... | |
| expressions.h | Loading commit data... | |
| go-diagnostics.cc | Loading commit data... | |
| go-diagnostics.h | Loading commit data... | |
| go-dump.cc | Loading commit data... | |
| go-dump.h | Loading commit data... | |
| go-encode-id.cc | Loading commit data... | |
| go-encode-id.h | Loading commit data... | |
| go-linemap.h | Loading commit data... | |
| go-optimize.cc | Loading commit data... | |
| go-optimize.h | Loading commit data... | |
| go-sha1.h | Loading commit data... | |
| go.cc | Loading commit data... | |
| gogo.cc | Loading commit data... | |
| gogo.h | Loading commit data... | |
| import-archive.cc | Loading commit data... | |
| import.cc | Loading commit data... | |
| import.h | Loading commit data... | |
| lex.cc | Loading commit data... | |
| lex.h | Loading commit data... | |
| names.cc | Loading commit data... | |
| operator.h | Loading commit data... | |
| parse.cc | Loading commit data... | |
| parse.h | Loading commit data... | |
| runtime.cc | Loading commit data... | |
| runtime.def | Loading commit data... | |
| runtime.h | Loading commit data... | |
| statements.cc | Loading commit data... | |
| statements.h | Loading commit data... | |
| string-dump.h | Loading commit data... | |
| types.cc | Loading commit data... | |
| types.h | Loading commit data... | |
| unsafe.cc | Loading commit data... | |
| wb.cc | Loading commit data... |