diff options
author | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-01-07 21:45:00 +0700 |
---|---|---|
committer | Austin Clements <austin@google.com> | 2021-01-07 19:31:03 +0000 |
commit | fa90aaca7d523eaf81c02b48a412cad4ebc57817 (patch) | |
tree | 598c6ea1c6ab7ccd723f7be50e35aab63419ca49 /test | |
parent | 7cee66d4cb6e726c6c37798583ac0b86c8743f82 (diff) | |
download | go-fa90aaca7d523eaf81c02b48a412cad4ebc57817.tar.gz go-fa90aaca7d523eaf81c02b48a412cad4ebc57817.zip |
cmd/compile: fix late expand_calls leaf type for OpStructSelect/OpArraySelect
For the example in #43551, before late call expansion, the OpArg type is
decomposed to int64. But the late call expansion is currently decompose
it to "x.Key" instead.
This CL make expand_calls decompose further for struct { 1-field type }
and array [1]elem.
This matches the previous rules for early decompose args:
(StructSelect (StructMake1 x)) => x
(ArraySelect (ArrayMake1 x)) => x
Fixes #43551
Change-Id: I2f1ebe18cb81cb967f494331c3d237535d2859e7
Reviewed-on: https://go-review.googlesource.com/c/go/+/282332
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/fixedbugs/issue43551.dir/a.go | 13 | ||||
-rw-r--r-- | test/fixedbugs/issue43551.dir/b.go | 14 | ||||
-rw-r--r-- | test/fixedbugs/issue43551.go | 7 |
3 files changed, 34 insertions, 0 deletions
diff --git a/test/fixedbugs/issue43551.dir/a.go b/test/fixedbugs/issue43551.dir/a.go new file mode 100644 index 0000000000..d890dd0c65 --- /dev/null +++ b/test/fixedbugs/issue43551.dir/a.go @@ -0,0 +1,13 @@ +package a + +type S struct { + a Key +} + +func (s S) A() Key { + return s.a +} + +type Key struct { + key int64 +} diff --git a/test/fixedbugs/issue43551.dir/b.go b/test/fixedbugs/issue43551.dir/b.go new file mode 100644 index 0000000000..ba062bf14c --- /dev/null +++ b/test/fixedbugs/issue43551.dir/b.go @@ -0,0 +1,14 @@ +// Copyright 2021 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" + +type S a.S +type Key a.Key + +func (s S) A() Key { + return Key(a.S(s).A()) +} diff --git a/test/fixedbugs/issue43551.go b/test/fixedbugs/issue43551.go new file mode 100644 index 0000000000..b83fbd7af1 --- /dev/null +++ b/test/fixedbugs/issue43551.go @@ -0,0 +1,7 @@ +// compiledir + +// Copyright 2021 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 |