| // compile -d=ssa/check/on | |
| // Copyright 2020 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 36723: fail to compile on PPC64 when SSA check is on. | |
| package p | |
| import "unsafe" | |
| type T struct { | |
| a, b, c, d uint8 | |
| x [10]int32 | |
| } | |
| func F(p *T, i uintptr) int32 { | |
| // load p.x[i] using unsafe, derived from runtime.pcdatastart | |
| _ = *p | |
| return *(*int32)(add(unsafe.Pointer(&p.d), unsafe.Sizeof(p.d)+i*unsafe.Sizeof(p.x[0]))) | |
| } | |
| func add(p unsafe.Pointer, x uintptr) unsafe.Pointer { | |
| return unsafe.Pointer(uintptr(p) + x) | |
| } |