github.com/zach-klippenstein/go@v0.0.0-20150108044943-fcfbeb3adf58/test/fixedbugs/issue8155.go (about)

     1  // run
     2  
     3  // Copyright 2014 The Go Authors.  All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Issue 8155.
     8  // Alignment of stack prologue zeroing was wrong on 64-bit Native Client
     9  // (because of 32-bit pointers).
    10  
    11  package main
    12  
    13  import "runtime"
    14  
    15  func bad(b bool) uintptr {
    16  	var p **int
    17  	var x1 uintptr
    18  	x1 = 1
    19  	if b {
    20  		var x [11]*int
    21  		p = &x[0]
    22  	}
    23  	if b {
    24  		var x [1]*int
    25  		p = &x[0]
    26  	}
    27  	runtime.GC()
    28  	if p != nil {
    29  		x1 = uintptr(**p)
    30  	}
    31  	return x1
    32  }
    33  
    34  func poison() uintptr {
    35  	runtime.GC()
    36  	var x [20]uintptr
    37  	var s uintptr
    38  	for i := range x {
    39  		x[i] = uintptr(i+1)
    40  		s += x[i]
    41  	}
    42  	return s
    43  }
    44  
    45  func main() {
    46  	poison()
    47  	bad(false)
    48  }