| // Copyright 2026 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. |
| |
| package test |
| |
| import "testing" |
| |
| const arrFooSize = 96 |
| |
| type arrFoo [arrFooSize]int |
| |
| //go:noinline |
| func badCopy(dst, src []int) { |
| p := (*[arrFooSize]int)(dst[:arrFooSize]) |
| q := (*[arrFooSize]int)(src[:arrFooSize]) |
| *p = arrFoo(*q) |
| } |
| |
| //go:noinline |
| func goodCopy(dst, src []int) { |
| p := (*[arrFooSize]int)(dst[:arrFooSize]) |
| q := (*[arrFooSize]int)(src[:arrFooSize]) |
| *p = *q |
| } |
| |
| func TestOverlapedMoveWithNoopIConv(t *testing.T) { |
| h1 := make([]int, arrFooSize+1) |
| h2 := make([]int, arrFooSize+1) |
| for i := range arrFooSize + 1 { |
| h1[i] = i |
| h2[i] = i |
| } |
| badCopy(h1[1:], h1[:arrFooSize]) |
| goodCopy(h2[1:], h2[:arrFooSize]) |
| for i := range arrFooSize + 1 { |
| if h1[i] != h2[i] { |
| t.Errorf("h1 and h2 differ at index %d, expect them to be the same", i) |
| } |
| } |
| } |