github.com/q45/go@v0.0.0-20151101211701-a4fb8c13db3f/misc/cgo/testsanitizers/msan_fail.go (about) 1 package main 2 3 /* 4 #include <string.h> 5 #include <stdint.h> 6 #include <stdlib.h> 7 8 void f(int32_t *p, int n) { 9 int32_t * volatile q = (int32_t *)malloc(sizeof(int32_t) * n); 10 memcpy(p, q, n * sizeof(*p)); 11 free(q); 12 } 13 14 void g(int32_t *p, int n) { 15 if (p[4] != 1) { 16 // We shouldn't get here; msan should stop us first. 17 exit(0); 18 } 19 } 20 */ 21 import "C" 22 23 import ( 24 "unsafe" 25 ) 26 27 func main() { 28 a := make([]int32, 10) 29 C.f((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a))) 30 a[3] = 1 31 C.g((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a))) 32 }