Source file test/fixedbugs/issue44739.go

     1  // compile
     2  
     3  // Copyright 2021 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 44739: cmd/compile: incorrect offset in MOVD
     8  // load/store on ppc64/ppc64le causes assembler error.
     9  
    10  // Test other 8 byte loads and stores where the
    11  // compile time offset is not aligned to 8, as
    12  // well as cases where the offset is not known
    13  // until link time (e.g. gostrings).
    14  
    15  package main
    16  
    17  import (
    18  	"fmt"
    19  )
    20  
    21  type T struct {
    22  	x [4]byte
    23  	y [8]byte
    24  }
    25  
    26  var st T
    27  
    28  const (
    29  	gostring1 = "abc"
    30  	gostring2 = "defghijk"
    31  	gostring3 = "lmnopqrs"
    32  )
    33  
    34  func f(a T, _ byte, b T) bool {
    35  	// initialization of a,b
    36  	// tests unaligned store
    37  	return a.y == b.y
    38  }
    39  
    40  func g(a T) {
    41  	// test load of unaligned
    42  	// 8 byte gostring, store
    43  	// to unaligned static
    44  	copy(a.y[:], gostring2)
    45  }
    46  
    47  func main() {
    48  	var t1, t2 T
    49  
    50  	// test copy to automatic storage,
    51  	// load of unaligned gostring.
    52  	copy(st.y[:], gostring2)
    53  	copy(t1.y[:], st.y[:])
    54  	copy(t2.y[:], gostring3)
    55  	// test initialization of params
    56  	if !f(t1, 'a', t2) {
    57  		// gostring1 added so it has a use
    58  		fmt.Printf("FAIL: %s\n", gostring1)
    59  	}
    60  }
    61  
    62  

View as plain text