Commit 2e4b6599 authored by Ian Lance Taylor's avatar Ian Lance Taylor

cmd/compile: recognize embedded field in inlined function

There was already special code to recognize "?" in hidden_structdcl,
which is used for inlined types and variables.  This recognizes "?" in
structdcl as well, a case that arises when a struct type appears
within an inlined function body.

Fixes #10219.

Change-Id: Ic5257ae54f817e0d4a189c2294dcd633c9f2101a
Reviewed-on: https://go-review.googlesource.com/12241
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
parent 749b391c
......@@ -1632,7 +1632,7 @@ structdcl:
var n *Node
l = $1;
if l == nil {
if l == nil || l.N.Sym.Name == "?" {
// ? symbol, during import (list1(nil) == nil)
n = $2;
if n.Op == OIND {
......
......@@ -2791,7 +2791,7 @@ yydefault:
var n *Node
l = yyDollar[1].list
if l == nil {
if l == nil || l.N.Sym.Name == "?" {
// ? symbol, during import (list1(nil) == nil)
n = yyDollar[2].node
if n.Op == OIND {
......
// Copyright 2015 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 m struct {
S string
}
var g = struct {
m
P string
}{
m{"a"},
"",
}
type S struct{}
func (s *S) M(p string) {
r := g
r.P = p
}
// Copyright 2015 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 b
import "./a"
func F() *a.S {
return &a.S{}
}
// Copyright 2015 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 c
import "./b"
func F() {
s := b.F()
s.M("c")
}
// compiledir
// Copyright 2015 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.
// Issue 10219: failure of inlinable function that uses embedded types
// in an anonymous struct via :=.
package ignored
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment