]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: Install testcases for flag constant Ops
authorXiangdong Ji <xiangdong.ji@arm.com>
Thu, 18 Jun 2020 03:36:12 +0000 (03:36 +0000)
committerCherry Zhang <cherryyz@google.com>
Fri, 28 Aug 2020 16:40:32 +0000 (16:40 +0000)
Flag constant Ops on arm and arm64 are under refactoring, this change adds
a couple of testcases that verify the behavior of 'noov' branches.

Updates #39505
Updates #38740
Updates #39303
Change-Id: I493344b52276900cd296c32da494d72932dfc9be
Reviewed-on: https://go-review.googlesource.com/c/go/+/238677
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

test/fixedbugs/issue39505.go [new file with mode: 0644]
test/fixedbugs/issue39505b.go [new file with mode: 0644]

diff --git a/test/fixedbugs/issue39505.go b/test/fixedbugs/issue39505.go
new file mode 100644 (file)
index 0000000..711b562
--- /dev/null
@@ -0,0 +1,31 @@
+// compile
+
+// Copyright 2020 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 p
+
+func f() {
+       if len([]int{})-1 < len([]int{}) {
+       }
+
+       var st struct {
+               i int
+       }
+       g := func() string {
+               return ""
+       }
+       h := func(string) string {
+               return g() + g()
+       }
+       s, i := "", 0
+
+       st.i = len(s)
+       i = len(h(s[i+0:i+1])) + len(s[len(s)+1:i+1])
+       s = s[(len(s[i+1:len(s)+1])+1):len(h(""))+1] + (s[i+1 : len([]int{})+i])
+       i = 1 + len([]int{len([]string{s[i+len([]int{}) : len(s)+i]})})
+
+       var ch chan int
+       ch <- len(h("")) - len(s)
+}
diff --git a/test/fixedbugs/issue39505b.go b/test/fixedbugs/issue39505b.go
new file mode 100644 (file)
index 0000000..ecf1ab6
--- /dev/null
@@ -0,0 +1,183 @@
+// run
+
+// Copyright 2020 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 main
+
+func main() {
+       ff := []func(){lt_f1, lt_f2, lt_f3, lt_f4, lt_f5, lt_f6, lt_f7, lt_f8, lt_f9,
+               gt_f1, gt_f2, gt_f3, le_f1, le_f2, le_f3, ge_f1, ge_f2, ge_f3}
+
+       for _, f := range ff {
+               f()
+       }
+}
+
+func lt_f1() {
+       const c = 1
+       var a = 0
+       var v *int = &a
+       if *v-c < len([]int{}) {
+       } else {
+               panic("bad")
+       }
+}
+
+func lt_f2() {
+       const c = 10
+       var a = 0
+       var v *int = &a
+       if *v+c < len([]int{}) {
+               panic("bad")
+       }
+}
+
+func lt_f3() {
+       const c = -10
+       var a = 0
+       var v *int = &a
+       if *v|0xff+c < len([]int{}) {
+               panic("bad")
+       }
+}
+
+func lt_f4() {
+       const c = 10
+       var a = 0
+       var v *int = &a
+       if *v|0x0f+c < len([]int{}) {
+               panic("bad")
+       }
+}
+
+func lt_f5() {
+       const c int32 = 1
+       var a int32 = 0
+       var v *int32 = &a
+       if *v-c < int32(len([]int32{})) {
+       } else {
+               panic("bad")
+       }
+}
+
+func lt_f6() {
+       const c int32 = 10
+       var a int32 = 0
+       var v *int32 = &a
+       if *v+c < int32(len([]int32{})) {
+               panic("bad")
+       }
+}
+
+func lt_f7() {
+       const c int32 = -10
+       var a int32 = 0
+       var v *int32 = &a
+       if *v|0xff+c < int32(len([]int{})) {
+               panic("bad")
+       }
+}
+
+func lt_f8() {
+       const c int32 = 10
+       var a int32 = 0
+       var v *int32 = &a
+       if *v|0x0f+c < int32(len([]int{})) {
+               panic("bad")
+       }
+}
+
+func lt_f9() {
+       const c int32 = -10
+       var a int32 = 0
+       var v *int32 = &a
+       if *v|0x0a+c < int32(len([]int{})) {
+               panic("bad")
+       }
+}
+
+func gt_f1() {
+       const c = 1
+       var a = 0
+       var v *int = &a
+       if len([]int{}) > *v-c {
+       } else {
+               panic("bad")
+       }
+}
+
+func gt_f2() {
+       const c = 10
+       var a = 0
+       var v *int = &a
+       if len([]int{}) > *v|0x0f+c {
+               panic("bad")
+       }
+}
+
+func gt_f3() {
+       const c int32 = 10
+       var a int32 = 0
+       var v *int32 = &a
+       if int32(len([]int{})) > *v|0x0f+c {
+               panic("bad")
+       }
+}
+
+func le_f1() {
+       const c = -10
+       var a = 0
+       var v *int = &a
+       if *v|0xff+c <= len([]int{}) {
+               panic("bad")
+       }
+}
+
+func le_f2() {
+       const c = 0xf
+       var a = 0
+       var v *int = &a
+       if *v|0xf-c <= len([]int{}) {
+       } else {
+               panic("bad")
+       }
+}
+
+func le_f3() {
+       const c int32 = -10
+       var a int32 = 0
+       var v *int32 = &a
+       if *v|0xff+c <= int32(len([]int{})) {
+               panic("bad")
+       }
+}
+
+func ge_f1() {
+       const c = -10
+       var a = 0
+       var v *int = &a
+       if len([]int{}) >= *v|0xff+c {
+               panic("bad")
+       }
+}
+
+func ge_f2() {
+       const c int32 = 10
+       var a int32 = 0
+       var v *int32 = &a
+       if int32(len([]int{})) >= *v|0x0f+c {
+               panic("bad")
+       }
+}
+
+func ge_f3() {
+       const c = -10
+       var a = 0
+       var v *int = &a
+       if len([]int{}) >= *v|0x0a+c {
+       } else {
+               panic("bad")
+       }
+}