github.com/q45/go@v0.0.0-20151101211701-a4fb8c13db3f/misc/cgo/testsanitizers/msan2.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      abort();
    17    }
    18  }
    19  */
    20  import "C"
    21  
    22  import (
    23  	"unsafe"
    24  )
    25  
    26  func main() {
    27  	a := make([]int32, 10)
    28  	C.f((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a)))
    29  	a[4] = 1
    30  	C.g((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a)))
    31  }