]> 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 a62b26240709d4bab16bd800b15e0033796fa5e8..2cc510beb635df01ae75e92ee06d51212e1ef34d 100644 (file)
@@ -1,9 +1,8 @@
 // errorcheck -0 -d=nil
-// Fails on ppc64x and arm64 because of incomplete optimization.
-// See issues 9058 and 10105.
-// +build !ppc64,!ppc64le,!arm64
 
-// Copyright 2013 The Go Authors.  All rights reserved.
+//go:build !wasm && !aix
+
+// Copyright 2013 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.
 
@@ -51,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() {
@@ -77,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"
@@ -98,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
                }
        }
@@ -106,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 {
@@ -125,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() {
@@ -134,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"
 }
@@ -144,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
@@ -156,39 +155,102 @@ 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 {
+       v := m[3] // ERROR "removed nil check"
+       return v[5]
+}
+func m2(m map[int][800]byte) byte {
+       v := m[3] // ERROR "removed nil check"
+       return v[5]
+}
+func m3(m map[int][80]byte) (byte, bool) {
+       v, ok := m[3] // ERROR "removed nil check"
+       return v[5], ok
+}
+func m4(m map[int][800]byte) (byte, bool) {
+       v, ok := m[3] // ERROR "removed nil check"
+       return v[5], ok
+}
+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"
 }