1// run -race
2
3//go:build cgo && linux && amd64
4
5// Copyright 2020 The Go Authors. All rights reserved.
6// Use of this source code is governed by a BSD-style
7// license that can be found in the LICENSE file.
8
9package main
10
11import (
12	"fmt"
13	"testing"
14	"unsafe"
15)
16
17var buf [2]byte
18var x unsafe.Pointer = unsafe.Pointer(&buf[0])
19
20func main() {
21	n := testing.AllocsPerRun(1000, func() {
22		x = unsafe.Pointer(uintptr(x) + 1)
23		x = unsafe.Pointer(uintptr(x) - 1)
24	})
25	if n > 0 {
26		panic(fmt.Sprintf("too many allocations; want 0 got %f", n))
27	}
28}
29