// Copyright 2015 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 main // The memory profiler can call copy from a slice on the system stack, // which msan used to think meant a reference to uninitialized memory. /* #include #include extern void Nop(char*); // Use weak as a hack to permit defining a function even though we use export. void poison() __attribute__ ((weak)); // Poison the stack. void poison() { char a[1024]; Nop(&a[0]); } */ import "C" import ( "runtime" ) func main() { runtime.MemProfileRate = 1 start(100) } func start(i int) { if i == 0 { return } C.poison() // Tie up a thread. // We won't actually wait for this sleep to complete. go func() { C.sleep(1) }() start(i - 1) } //export Nop func Nop(*C.char) { }