// errorcheck -0 -d=nil
-// Fails on ppc64x because of incomplete optimization.
-// See issues 9058.
-// Same reason for mips64x and s390x.
-// +build !ppc64,!ppc64le,!mips64,!mips64le,!amd64,!s390x,!arm,!amd64p32,!386
+
+//go:build !wasm && !aix
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
_ = *arrayp // ERROR "generated nil check"
// 0-byte indirect doesn't suffice.
- // we don't registerize globals, so there are no removed repeated nil checks.
- _ = *array0p // ERROR "generated nil check"
+ // we don't registerize globals, so there are no removed.* nil checks.
_ = *array0p // ERROR "generated nil check"
+ _ = *array0p // ERROR "removed nil check"
- _ = *intp // ERROR "generated nil check"
- _ = *arrayp // ERROR "generated nil check"
+ _ = *intp // ERROR "removed nil check"
+ _ = *arrayp // ERROR "removed nil check"
_ = *structp // ERROR "generated nil check"
_ = *emptyp // ERROR "generated nil check"
- _ = *arrayp // ERROR "generated nil check"
+ _ = *arrayp // ERROR "removed nil check"
}
func f2() {
_ = *intp // ERROR "generated nil check"
_ = *arrayp // ERROR "generated nil check"
_ = *array0p // ERROR "generated nil check"
- _ = *array0p // ERROR "removed repeated nil check"
- _ = *intp // ERROR "removed repeated nil check"
- _ = *arrayp // ERROR "removed repeated nil check"
+ _ = *array0p // ERROR "removed.* nil check"
+ _ = *intp // ERROR "removed.* nil check"
+ _ = *arrayp // ERROR "removed.* nil check"
_ = *structp // ERROR "generated nil check"
_ = *emptyp // ERROR "generated nil check"
- _ = *arrayp // ERROR "removed repeated nil check"
+ _ = *arrayp // ERROR "removed.* nil check"
_ = *bigarrayp // ERROR "generated nil check" ARM removed nil check before indirect!!
_ = *bigstructp // ERROR "generated nil check"
_ = *empty1p // ERROR "generated nil check"
_ = x[9999] // ERROR "generated nil check"
for {
- if x[9999] != 0 { // ERROR "generated nil check"
+ if x[9999] != 0 { // ERROR "removed nil check"
break
}
}
x = fx10k()
_ = x[9999] // ERROR "generated nil check"
if b {
- _ = x[9999] // ERROR "removed repeated nil check"
+ _ = x[9999] // ERROR "removed.* nil check"
} else {
- _ = x[9999] // ERROR "removed repeated nil check"
+ _ = x[9999] // ERROR "removed.* nil check"
}
- _ = x[9999] // ERROR "generated nil check"
+ _ = x[9999] // ERROR "removed nil check"
x = fx10k()
if b {
// x wasn't going to change across the function call.
// But it's a little complex to do and in practice doesn't
// matter enough.
- _ = x[9999] // ERROR "generated nil check"
+ _ = x[9999] // ERROR "removed nil check"
}
func f3a() {
z := fx10k()
_ = &x[9] // ERROR "generated nil check"
y = z
- _ = &x[9] // ERROR "removed repeated nil check"
+ _ = &x[9] // ERROR "removed.* nil check"
x = y
_ = &x[9] // ERROR "generated nil check"
}
y := fx10k()
_ = &x[9] // ERROR "generated nil check"
y = x
- _ = &x[9] // ERROR "removed repeated nil check"
+ _ = &x[9] // ERROR "removed.* nil check"
x = y
- _ = &x[9] // ERROR "removed repeated nil check"
+ _ = &x[9] // ERROR "removed.* nil check"
}
func fx10() *[10]int
// and the offset is small enough that if x is nil, the address will still be
// in the first unmapped page of memory.
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "generated nil check" // bug: would like to remove this check (but nilcheck and load are in different blocks)
for {
- if x[9] != 0 { // ERROR "removed nil check before indirect"
+ if x[9] != 0 { // ERROR "removed nil check"
break
}
}
x = fx10()
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "generated nil check" // bug would like to remove before indirect
if b {
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "removed nil check"
} else {
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "removed nil check"
}
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "removed nil check"
x = fx10()
if b {
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "generated nil check" // bug would like to remove before indirect
} else {
_ = &x[9] // ERROR "generated nil check"
}
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "generated nil check" // bug would like to remove before indirect
fx10()
- _ = x[9] // ERROR "removed nil check before indirect"
+ _ = x[9] // ERROR "removed nil check"
x = fx10()
y := fx10()
_ = &x[9] // ERROR "generated nil check"
y = x
- _ = &x[9] // ERROR "removed repeated nil check"
+ _ = &x[9] // ERROR "removed[a-z ]* nil check"
x = y
- _ = &x[9] // ERROR "removed repeated nil check"
+ _ = &x[9] // ERROR "removed[a-z ]* nil check"
}
func m1(m map[int][80]byte) byte {
p := new([100]byte)
return p[5] // ERROR "removed nil check"
}
+
+type SS struct {
+ x byte
+}
+
+type TT struct {
+ SS
+}
+
+func f(t *TT) *byte {
+ // See issue 17242.
+ s := &t.SS // ERROR "generated nil check"
+ return &s.x // ERROR "removed nil check"
+}
+
+// make sure not to do nil check for newobject
+func f7() (*Struct, float64) {
+ t := new(Struct)
+ p := &t.Y // ERROR "removed nil check"
+ return t, *p // ERROR "removed nil check"
+}
+
+func f9() []int {
+ x := new([1]int)
+ x[0] = 1 // ERROR "removed nil check"
+ y := x[:] // ERROR "removed nil check"
+ return y
+}
+
+// See issue 42673.
+func f10(p **int) int {
+ return * // ERROR "removed nil check"
+ /* */
+ *p // ERROR "removed nil check"
+}
+
+func f11(x []byte) {
+ p := (*[0]byte)(x)
+ _ = *p // ERROR "generated nil check"
+ q := (*[4]byte)(x)
+ _ = *q // ERROR "removed nil check"
+}