mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: support structural typing in unified IR
This CL updates unified IR to look at the structural type of a composite literal type, rather than merely the underlying type, to determine if it's a structure. This fixes a number of currently failing regress test cases. Updates #50833. Change-Id: I11c040c77ec86c23e8ffefcf1ce1aed548687dc5 Reviewed-on: https://go-review.googlesource.com/c/go/+/381074 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Trust: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
db48840cfc
commit
f4aa021985
2 changed files with 3 additions and 5 deletions
|
|
@ -1218,6 +1218,7 @@ func (w *writer) expr(expr syntax.Expr) {
|
|||
}
|
||||
|
||||
obj := obj.(*types2.Var)
|
||||
assert(!obj.IsField())
|
||||
assert(targs.Len() == 0)
|
||||
|
||||
w.code(exprLocal)
|
||||
|
|
@ -1337,10 +1338,11 @@ func (w *writer) compLit(lit *syntax.CompositeLit) {
|
|||
w.typ(tv.Type)
|
||||
|
||||
typ := tv.Type
|
||||
// TODO(mdempsky): Use types2.StructuralType here too? See #50833.
|
||||
if ptr, ok := typ.Underlying().(*types2.Pointer); ok {
|
||||
typ = ptr.Elem()
|
||||
}
|
||||
str, isStruct := typ.Underlying().(*types2.Struct)
|
||||
str, isStruct := types2.StructuralType(typ).(*types2.Struct)
|
||||
|
||||
w.len(len(lit.ElemList))
|
||||
for i, elem := range lit.ElemList {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue