summaryrefslogtreecommitdiffstats
path: root/test/fixedbugs/issue56777.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/fixedbugs/issue56777.go')
-rw-r--r--test/fixedbugs/issue56777.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/fixedbugs/issue56777.go b/test/fixedbugs/issue56777.go
new file mode 100644
index 0000000..8097ce9
--- /dev/null
+++ b/test/fixedbugs/issue56777.go
@@ -0,0 +1,56 @@
+// compile
+
+// Copyright 2022 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 fn(setText []rune, negate bool) int {
+ ranges := []singleRange{}
+
+ if len(setText) > 0 {
+ fillFirst := false
+ l := len(setText)
+ if negate {
+ if setText[0] == 0 {
+ setText = setText[1:]
+ } else {
+ l++
+ fillFirst = true
+ }
+ }
+
+ if l%2 == 0 {
+ ranges = make([]singleRange, l/2)
+ } else {
+ ranges = make([]singleRange, l/2+1)
+ }
+
+ first := true
+ if fillFirst {
+ ranges[0] = singleRange{first: 0}
+ first = false
+ }
+
+ i := 0
+ for _, r := range setText {
+ if first {
+ // lower bound in a new range
+ ranges[i] = singleRange{first: r}
+ first = false
+ } else {
+ ranges[i].last = r - 1
+ i++
+ first = true
+ }
+ }
+ }
+
+ return len(ranges)
+}
+
+type singleRange struct {
+ first rune
+ last rune
+}