| // 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) { | 
 |     abort(); | 
 |   } | 
 | } | 
 | */ | 
 | import "C" | 
 |  | 
 | import ( | 
 | 	"unsafe" | 
 | ) | 
 |  | 
 | func main() { | 
 | 	a := make([]int32, 10) | 
 | 	C.f((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a))) | 
 | 	a[4] = 1 | 
 | 	C.g((*C.int32_t)(unsafe.Pointer(&a[0])), C.int(len(a))) | 
 | } |