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 11package main 12 13import "runtime" 14 15func 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 34func 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 45func main() { 46 poison() 47 bad(false) 48} 49