Home | History | Annotate | Download | only in fixedbugs
      1 // compile
      2 
      3 // Copyright 2017 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 19137: folding address into load/store causes
      8 // odd offset on ARM64.
      9 
     10 package p
     11 
     12 type T struct {
     13 	p *int
     14 	a [2]byte
     15 	b [6]byte // not 4-byte aligned
     16 }
     17 
     18 func f(b [6]byte) T {
     19 	var x [1000]int // a large stack frame
     20 	_ = x
     21 	return T{b: b}
     22 }
     23 
     24 // Arg symbol's base address may be not at an aligned offset to
     25 // SP. Folding arg's address into load/store may cause odd offset.
     26 func move(a, b [20]byte) [20]byte {
     27 	var x [1000]int // a large stack frame
     28 	_ = x
     29 	return b // b is not 8-byte aligned to SP
     30 }
     31 func zero() ([20]byte, [20]byte) {
     32 	var x [1000]int // a large stack frame
     33 	_ = x
     34 	return [20]byte{}, [20]byte{} // the second return value is not 8-byte aligned to SP
     35 }
     36 
     37 // Issue 21992: unaligned offset between 256 and 504 and handled
     38 // incorrectly.
     39 type T2 struct {
     40 	a [257]byte
     41 	// fields below are not 8-, 4-, 2-byte aligned
     42 	b [8]byte
     43 	c [4]byte
     44 	d [2]byte
     45 }
     46 
     47 func f2(x *T2) {
     48 	x.b = [8]byte{}
     49 	x.c = [4]byte{}
     50 	x.d = [2]byte{}
     51 }
     52