mirror of
https://github.com/golang/go
synced 2024-11-14 18:10:27 -07:00
880a689124
The runtime is not instrumented, but the calls to msanread in the runtime can sometimes refer to the system stack. An example is the call to copy in stkbucket in mprof.go. Depending on what C code has done, the system stack may appear uninitialized to msan. Change-Id: Ic21705b9ac504ae5cf7601a59189302f072e7db1 Reviewed-on: https://go-review.googlesource.com/16660 Reviewed-by: David Crawshaw <crawshaw@golang.org>
37 lines
702 B
Go
37 lines
702 B
Go
// 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
|
|
|
|
/*
|
|
#include <string.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
void f(int32_t *p, int n) {
|
|
int32_t * volatile q = (int32_t *)malloc(sizeof(int32_t) * n);
|
|
memcpy(p, q, n * sizeof(*p));
|
|
free(q);
|
|
}
|
|
|
|
void g(int32_t *p, int n) {
|
|
if (p[4] != 1) {
|
|
// We shouldn't get here; msan should stop us first.
|
|
exit(0);
|
|
}
|
|
}
|
|
*/
|
|
import "C"
|
|
|
|
import (
|
|
"unsafe"
|
|
)
|
|
|
|
func main() {
|
|
a := make([]int32, 10)
|
|
C.f((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a)))
|
|
a[3] = 1
|
|
C.g((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a)))
|
|
}
|