]> Cypherpunks.ru repositories - gostls13.git/blobdiff - test/nilptr3.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / nilptr3.go
index 4615b90845ae70692f19821ef372cdf075fe8c26..2cc510beb635df01ae75e92ee06d51212e1ef34d 100644 (file)
@@ -1,8 +1,6 @@
 // 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
+
+//go:build !wasm && !aix
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -52,15 +50,15 @@ func f1() {
        _ = *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() {
@@ -78,12 +76,12 @@ 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"
@@ -99,7 +97,7 @@ func f3(x *[10000]int) {
        _ = x[9999] // ERROR "generated nil check"
 
        for {
-               if x[9999] != 0 { // ERROR "generated nil check"
+               if x[9999] != 0 { // ERROR "removed nil check"
                        break
                }
        }
@@ -107,11 +105,11 @@ func f3(x *[10000]int) {
        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 {
@@ -126,7 +124,7 @@ func f3(x *[10000]int) {
        // 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() {
@@ -135,7 +133,7 @@ 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"
 }
@@ -145,9 +143,9 @@ func f3b() {
        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
@@ -157,41 +155,41 @@ func f4(x *[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 {
@@ -214,3 +212,45 @@ func p1() 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"
+}