cmd/compile: fix importing rewritten f(g()) calls

golang.org/cl/166983 started serializing the Ninit field of OCALL
nodes within function inline bodies (necessary to fix a regression in
building crypto/ecdsa with -gcflags=-l=4), but this means the Ninit
field needs to be typechecked when the imported function body is used.

It's unclear why this wasn't necessary for the crypto/ecdsa
regression.

Fixes #30907.

Change-Id: Id5f0bf3c4d17bbd6d5318913b859093c93a0a20c
Reviewed-on: https://go-review.googlesource.com/c/go/+/168199
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Matthew Dempsky 2019-03-18 12:19:26 -07:00
parent 2c423f063b
commit 916e861fd9
4 changed files with 38 additions and 0 deletions

View File

@ -1239,6 +1239,7 @@ func typecheck1(n *Node, top int) (res *Node) {
// call and call like
case OCALL:
typecheckslice(n.Ninit.Slice(), ctxStmt) // imported rewritten f(g()) calls (#30907)
n.Left = typecheck(n.Left, ctxExpr|Etype|ctxCallee)
if n.Left.Diag() {
n.SetDiag(true)

View File

@ -0,0 +1,19 @@
// Copyright 2019 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.
package a
type UUID string
func New() UUID {
return Must(NewRandom())
}
func NewRandom() (UUID, error) {
return "", nil
}
func Must(uuid UUID, err error) UUID {
return uuid
}

View File

@ -0,0 +1,11 @@
// Copyright 2019 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.
package p
import "./a"
func F() {
a.New()
}

View File

@ -0,0 +1,7 @@
// compiledir
// Copyright 2019 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.
package ignored