// compile // Copyright 2021 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 44739: cmd/compile: incorrect offset in MOVD // load/store on ppc64/ppc64le causes assembler error. // Test other 8 byte loads and stores where the // compile time offset is not aligned to 8, as // well as cases where the offset is not known // until link time (e.g. gostrings). package main import ( "fmt" ) type T struct { x [4]byte y [8]byte } var st T const ( gostring1 = "abc" gostring2 = "defghijk" gostring3 = "lmnopqrs" ) func f(a T, _ byte, b T) bool { // initialization of a,b // tests unaligned store return a.y == b.y } func g(a T) { // test load of unaligned // 8 byte gostring, store // to unaligned static copy(a.y[:], gostring2) } func main() { var t1, t2 T // test copy to automatic storage, // load of unaligned gostring. copy(st.y[:], gostring2) copy(t1.y[:], st.y[:]) copy(t2.y[:], gostring3) // test initialization of params if !f(t1, 'a', t2) { // gostring1 added so it has a use fmt.Printf("FAIL: %s\n", gostring1) } }