diff options
author | Dan Scales <danscales@google.com> | 2021-06-21 17:04:59 -0700 |
---|---|---|
committer | Dan Scales <danscales@google.com> | 2021-06-30 20:51:17 +0000 |
commit | 8767b87ab54acca33c487ee46e237049b663b1c4 (patch) | |
tree | 8b25b008df580260dc1d2fe3509e6b32b33c9f7e /test/typeparam/index.go | |
parent | b47cbc2ffec163f30690613b3a9c3f7f108cd512 (diff) | |
download | go-8767b87ab54acca33c487ee46e237049b663b1c4.tar.gz go-8767b87ab54acca33c487ee46e237049b663b1c4.zip |
[dev.typeparams] cmd/compile: functions to create GC shape types/names for a concrete type
Created functions to create GC shape type and names, based on a proposal
from Keith. Kept unsigned and signed integer types as different, since
they have different shift operations.
Included adding in alignment fields where padding is
required between fields, even though that seems like it will be fairly
uncommon to use.
Added some extra unusual struct typeparams (for testing the gcshape
names/types) in index.go test.
Change-Id: I8132bbd28098bd933435b8972ac5cc0b39f4c0df
Reviewed-on: https://go-review.googlesource.com/c/go/+/329921
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Dan Scales <danscales@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'test/typeparam/index.go')
-rw-r--r-- | test/typeparam/index.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test/typeparam/index.go b/test/typeparam/index.go index cb9b2613c3..80824efac3 100644 --- a/test/typeparam/index.go +++ b/test/typeparam/index.go @@ -26,6 +26,26 @@ type obj struct { x int } +type obj2 struct { + x int8 + y float64 +} + +type obj3 struct { + x int64 + y int8 +} + +type inner struct { + y int64 + z int32 +} + +type obj4 struct { + x int32 + s inner +} + func main() { want := 2 @@ -43,4 +63,20 @@ func main() { if got := Index(vec3, vec3[2]); got != want { panic(fmt.Sprintf("got %d, want %d", got, want)) } + + vec4 := []obj2{obj2{2, 3.0}, obj2{3, 4.0}, obj2{4, 5.0}} + if got := Index(vec4, vec4[2]); got != want { + panic(fmt.Sprintf("got %d, want %d", got, want)) + } + + vec5 := []obj3{obj3{2, 3}, obj3{3, 4}, obj3{4, 5}} + if got := Index(vec5, vec5[2]); got != want { + panic(fmt.Sprintf("got %d, want %d", got, want)) + } + + vec6 := []obj4{obj4{2, inner{3, 4}}, obj4{3, inner{4, 5}}, obj4{4, inner{5, 6}}} + if got := Index(vec6, vec6[2]); got != want { + panic(fmt.Sprintf("got %d, want %d", got, want)) + } } + |