aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDan Scales <danscales@google.com>2021-06-21 17:04:59 -0700
committerDan Scales <danscales@google.com>2021-06-30 20:51:17 +0000
commit8767b87ab54acca33c487ee46e237049b663b1c4 (patch)
tree8b25b008df580260dc1d2fe3509e6b32b33c9f7e /test
parentb47cbc2ffec163f30690613b3a9c3f7f108cd512 (diff)
downloadgo-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')
-rw-r--r--test/typeparam/index.go36
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))
+ }
}
+