|  | // run | 
|  |  | 
|  | // Copyright 2014 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. | 
|  |  | 
|  | // Issue 8155. | 
|  | // Alignment of stack prologue zeroing was wrong on 64-bit Native Client | 
|  | // (because of 32-bit pointers). | 
|  |  | 
|  | package main | 
|  |  | 
|  | import "runtime" | 
|  |  | 
|  | func bad(b bool) uintptr { | 
|  | var p **int | 
|  | var x1 uintptr | 
|  | x1 = 1 | 
|  | if b { | 
|  | var x [11]*int | 
|  | p = &x[0] | 
|  | } | 
|  | if b { | 
|  | var x [1]*int | 
|  | p = &x[0] | 
|  | } | 
|  | runtime.GC() | 
|  | if p != nil { | 
|  | x1 = uintptr(**p) | 
|  | } | 
|  | return x1 | 
|  | } | 
|  |  | 
|  | func poison() uintptr { | 
|  | runtime.GC() | 
|  | var x [20]uintptr | 
|  | var s uintptr | 
|  | for i := range x { | 
|  | x[i] = uintptr(i+1) | 
|  | s += x[i] | 
|  | } | 
|  | return s | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | poison() | 
|  | bad(false) | 
|  | } |