|  | // +build cgo,linux,amd64 | 
|  | // run -race | 
|  |  | 
|  | // 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. | 
|  |  | 
|  | // Test that CL 281293 doesn't interfere with race detector | 
|  | // instrumentation. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import "fmt" | 
|  |  | 
|  | const N = 2e6 | 
|  |  | 
|  | type Big = [N]int | 
|  |  | 
|  | var sink interface{} | 
|  |  | 
|  | func main() { | 
|  | g(0, f(0)) | 
|  |  | 
|  | x1 := f(1) | 
|  | sink = &x1 | 
|  | g(1, x1) | 
|  | g(7, f(7)) | 
|  | g(1, x1) | 
|  |  | 
|  | x3 := f(3) | 
|  | sink = &x3 | 
|  | g(1, x1) | 
|  | g(3, x3) | 
|  |  | 
|  | h(f(0), x1, f(2), x3, f(4)) | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func f(k int) (x Big) { | 
|  | for i := range x { | 
|  | x[i] = k*N + i | 
|  | } | 
|  | return | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func g(k int, x Big) { | 
|  | for i := range x { | 
|  | if x[i] != k*N+i { | 
|  | panic(fmt.Sprintf("x%d[%d] = %d", k, i, x[i])) | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func h(x0, x1, x2, x3, x4 Big) { | 
|  | g(0, x0) | 
|  | g(1, x1) | 
|  | g(2, x2) | 
|  | g(3, x3) | 
|  | g(4, x4) | 
|  | } |