static void _swig_gopanic(const char *p) { struct { const char *p; } SWIGSTRUCTPACKED a; a.p = p; crosscall2(_cgo_panic, &a, (int) sizeof a); }
void callPanic(void) { struct { const char *p; } a; a.p = "panic from C"; crosscall2(_cgo_panic, &a, sizeof a); *(int*)1 = 1; }
void callCgoAllocate(void) { int i; struct { size_t n; void *ret; } a; List *l, *head, **tail; // Make sure this doesn't crash. // And make sure it returns non-nil. a.n = 0; a.ret = 0; crosscall2(_cgo_allocate, &a, sizeof a); if(a.ret == 0) { fprintf(stderr, "callCgoAllocate: alloc 0 returned nil\n"); exit(2); } head = 0; tail = &head; for(i=0; i<100; i++) { a.n = sizeof *l; crosscall2(_cgo_allocate, &a, sizeof a); l = a.ret; l->x = i; l->next = 0; *tail = l; tail = &l->next; } gc(); l = head; for(i=0; i<100; i++) { if(l->x != i) { fprintf(stderr, "callCgoAllocate: lost memory\n"); exit(2); } l = l->next; } if(l != 0) { fprintf(stderr, "callCgoAllocate: lost memory\n"); exit(2); } }
CGO_NO_SANITIZE_THREAD void helloSlice(GoSlice p0) { __SIZE_TYPE__ _cgo_ctxt = _cgo_wait_runtime_init_done(); struct { GoSlice p0; } __attribute__((__packed__)) a; a.p0 = p0; _cgo_tsan_release(); crosscall2(_cgoexp_16f1900c27a8_helloSlice, &a, 24, _cgo_ctxt); _cgo_tsan_acquire(); _cgo_release_context(_cgo_ctxt); }