Skip to content

Commit d09e09b

Browse files
wdvxdr1123mdempsky
authored andcommitted
cmd/compile: fixing writebarrier.go for -G=3
This is caused by some nodes didn't carry the real line number. Noder1 wraps these node with ir.ParenExpr. To fix this issue, wraps this node like what noder1 does. Change-Id: I212cad09b93b8bf1a7adfad416d229d15711918a Reviewed-on: https://go-review.googlesource.com/c/go/+/349769 Reviewed-by: Matthew Dempsky <[email protected]> Run-TryBot: Matthew Dempsky <[email protected]> TryBot-Result: Go Bot <[email protected]> Trust: Keith Randall <[email protected]>
1 parent bcdc61d commit d09e09b

File tree

5 files changed

+14
-7
lines changed

5 files changed

+14
-7
lines changed

Diff for: src/cmd/compile/internal/noder/expr.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,10 @@ func (g *irgen) compLit(typ types2.Type, lit *syntax.CompositeLit) ir.Node {
390390
} else {
391391
key = g.expr(elem.Key)
392392
}
393-
exprs[i] = ir.NewKeyExpr(g.pos(elem), key, g.expr(elem.Value))
393+
value := wrapname(g.pos(elem.Value), g.expr(elem.Value))
394+
exprs[i] = ir.NewKeyExpr(g.pos(elem), key, value)
394395
default:
395-
exprs[i] = g.expr(elem)
396+
exprs[i] = wrapname(g.pos(elem), g.expr(elem))
396397
}
397398
}
398399

Diff for: src/cmd/compile/internal/noder/noder.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -1537,7 +1537,7 @@ func (p *noder) mkname(name *syntax.Name) ir.Node {
15371537
return mkname(p.name(name))
15381538
}
15391539

1540-
func (p *noder) wrapname(n syntax.Node, x ir.Node) ir.Node {
1540+
func wrapname(pos src.XPos, x ir.Node) ir.Node {
15411541
// These nodes do not carry line numbers.
15421542
// Introduce a wrapper node to give them the correct line.
15431543
switch x.Op() {
@@ -1547,13 +1547,17 @@ func (p *noder) wrapname(n syntax.Node, x ir.Node) ir.Node {
15471547
}
15481548
fallthrough
15491549
case ir.ONAME, ir.ONONAME, ir.OPACK:
1550-
p := ir.NewParenExpr(p.pos(n), x)
1550+
p := ir.NewParenExpr(pos, x)
15511551
p.SetImplicit(true)
15521552
return p
15531553
}
15541554
return x
15551555
}
15561556

1557+
func (p *noder) wrapname(n syntax.Node, x ir.Node) ir.Node {
1558+
return wrapname(p.pos(n), x)
1559+
}
1560+
15571561
func (p *noder) setlineno(n syntax.Node) {
15581562
if n != nil {
15591563
base.Pos = p.pos(n)

Diff for: src/cmd/compile/internal/noder/stmt.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (g *irgen) stmt(stmt syntax.Stmt) ir.Node {
3737
case *syntax.BlockStmt:
3838
return ir.NewBlockStmt(g.pos(stmt), g.blockStmt(stmt))
3939
case *syntax.ExprStmt:
40-
return g.expr(stmt.X)
40+
return wrapname(g.pos(stmt.X), g.expr(stmt.X))
4141
case *syntax.SendStmt:
4242
n := ir.NewSendStmt(g.pos(stmt), g.expr(stmt.Chan), g.expr(stmt.Value))
4343
if n.Chan.Type().HasTParam() || n.Value.Type().HasTParam() {

Diff for: src/cmd/compile/internal/noder/transform.go

+4
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,10 @@ func assignconvfn(n ir.Node, t *types.Type) ir.Node {
404404
return n
405405
}
406406

407+
if n.Op() == ir.OPAREN {
408+
n = n.(*ir.ParenExpr).X
409+
}
410+
407411
if types.IdenticalStrict(n.Type(), t) {
408412
return n
409413
}

Diff for: test/run.go

-2
Original file line numberDiff line numberDiff line change
@@ -2184,8 +2184,6 @@ var types2Failures32Bit = setOf(
21842184
)
21852185

21862186
var g3Failures = setOf(
2187-
"writebarrier.go", // correct diagnostics, but different lines (probably irgen's fault)
2188-
21892187
"typeparam/nested.go", // -G=3 doesn't support function-local types with generics
21902188
)
21912189

0 commit comments

Comments
 (0)