| // 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) |
| } |