mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
cmd/compile/internal/types2: use correct value of iota
Fixes #52438. Change-Id: I5cbf8c448dba037e9e0c5fe8f209401d6bf7d43f Reviewed-on: https://go-review.googlesource.com/c/go/+/401134 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
This commit is contained in:
parent
302f5ed21d
commit
104742fdda
@ -735,7 +735,7 @@ func (check *Checker) declStmt(list []syntax.Decl) {
|
|||||||
top := len(check.delayed)
|
top := len(check.delayed)
|
||||||
|
|
||||||
// iota is the index of the current constDecl within the group
|
// iota is the index of the current constDecl within the group
|
||||||
if first < 0 || list[index-1].(*syntax.ConstDecl).Group != s.Group {
|
if first < 0 || s.Group == nil || list[index-1].(*syntax.ConstDecl).Group != s.Group {
|
||||||
first = index
|
first = index
|
||||||
last = nil
|
last = nil
|
||||||
}
|
}
|
||||||
|
@ -340,7 +340,7 @@ func (check *Checker) collectObjects() {
|
|||||||
|
|
||||||
case *syntax.ConstDecl:
|
case *syntax.ConstDecl:
|
||||||
// iota is the index of the current constDecl within the group
|
// iota is the index of the current constDecl within the group
|
||||||
if first < 0 || file.DeclList[index-1].(*syntax.ConstDecl).Group != s.Group {
|
if first < 0 || s.Group == nil || file.DeclList[index-1].(*syntax.ConstDecl).Group != s.Group {
|
||||||
first = index
|
first = index
|
||||||
last = nil
|
last = nil
|
||||||
}
|
}
|
||||||
|
@ -349,6 +349,25 @@ const _ = unsafe.Sizeof(func() {
|
|||||||
assert(iota == 0)
|
assert(iota == 0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// issue #52438
|
||||||
|
const i1 = iota
|
||||||
|
const i2 = iota
|
||||||
|
const i3 = iota
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
assert(i1 == 0)
|
||||||
|
assert(i2 == 0)
|
||||||
|
assert(i3 == 0)
|
||||||
|
|
||||||
|
const i4 = iota
|
||||||
|
const i5 = iota
|
||||||
|
const i6 = iota
|
||||||
|
|
||||||
|
assert(i4 == 0)
|
||||||
|
assert(i5 == 0)
|
||||||
|
assert(i6 == 0)
|
||||||
|
}
|
||||||
|
|
||||||
// untyped constants must not get arbitrarily large
|
// untyped constants must not get arbitrarily large
|
||||||
const prec = 512 // internal maximum precision for integers
|
const prec = 512 // internal maximum precision for integers
|
||||||
const maxInt = (1<<(prec/2) - 1) * (1<<(prec/2) + 1) // == 1<<prec - 1
|
const maxInt = (1<<(prec/2) - 1) * (1<<(prec/2) + 1) // == 1<<prec - 1
|
||||||
|
19
src/go/types/testdata/check/const0.go
vendored
19
src/go/types/testdata/check/const0.go
vendored
@ -349,6 +349,25 @@ const _ = unsafe.Sizeof(func() {
|
|||||||
assert(iota == 0)
|
assert(iota == 0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// issue #52438
|
||||||
|
const i1 = iota
|
||||||
|
const i2 = iota
|
||||||
|
const i3 = iota
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
assert(i1 == 0)
|
||||||
|
assert(i2 == 0)
|
||||||
|
assert(i3 == 0)
|
||||||
|
|
||||||
|
const i4 = iota
|
||||||
|
const i5 = iota
|
||||||
|
const i6 = iota
|
||||||
|
|
||||||
|
assert(i4 == 0)
|
||||||
|
assert(i5 == 0)
|
||||||
|
assert(i6 == 0)
|
||||||
|
}
|
||||||
|
|
||||||
// untyped constants must not get arbitrarily large
|
// untyped constants must not get arbitrarily large
|
||||||
const prec = 512 // internal maximum precision for integers
|
const prec = 512 // internal maximum precision for integers
|
||||||
const maxInt = (1<<(prec/2) - 1) * (1<<(prec/2) + 1) // == 1<<prec - 1
|
const maxInt = (1<<(prec/2) - 1) * (1<<(prec/2) + 1) // == 1<<prec - 1
|
||||||
|
39
test/fixedbugs/issue52438.go
Normal file
39
test/fixedbugs/issue52438.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// run
|
||||||
|
|
||||||
|
// 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 main
|
||||||
|
|
||||||
|
const c1 = iota
|
||||||
|
const c2 = iota
|
||||||
|
|
||||||
|
const c3 = 0 + iota<<8
|
||||||
|
const c4 = 1 + iota<<8
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if c1 != 0 {
|
||||||
|
panic(c1)
|
||||||
|
}
|
||||||
|
if c2 != 0 {
|
||||||
|
panic(c2)
|
||||||
|
}
|
||||||
|
|
||||||
|
if c3 != 0 {
|
||||||
|
panic(c3)
|
||||||
|
}
|
||||||
|
if c4 != 1 {
|
||||||
|
panic(c4)
|
||||||
|
}
|
||||||
|
|
||||||
|
const c5 = iota
|
||||||
|
const c6 = iota
|
||||||
|
|
||||||
|
if c5 != 0 {
|
||||||
|
panic(c5)
|
||||||
|
}
|
||||||
|
if c6 != 0 {
|
||||||
|
panic(c6)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user