mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 20:52:22 +00:00
77 lines
2.0 KiB
C
77 lines
2.0 KiB
C
|
|
#line 1 "cgo-builtin-prolog"
|
|
#include <stddef.h> /* for ptrdiff_t and size_t below */
|
|
|
|
/* Define intgo when compiling with GCC. */
|
|
typedef ptrdiff_t intgo;
|
|
|
|
typedef struct { const char *p; intgo n; } _GoString_;
|
|
typedef struct { char *p; intgo n; intgo c; } _GoBytes_;
|
|
_GoString_ GoString(char *p);
|
|
_GoString_ GoStringN(char *p, int l);
|
|
_GoBytes_ GoBytes(void *p, int n);
|
|
char *CString(_GoString_);
|
|
void *CBytes(_GoBytes_);
|
|
void *_CMalloc(size_t);
|
|
|
|
__attribute__ ((unused))
|
|
static size_t _GoStringLen(_GoString_ s) { return s.n; }
|
|
|
|
__attribute__ ((unused))
|
|
static const char *_GoStringPtr(_GoString_ s) { return s.p; }
|
|
|
|
#line 6 "/Users/chai/go/src/github.com/chai2010/advanced-go-programming-book/examples/ch2-05-internal/02-go-call-c-func/main.go"
|
|
int sum(int a, int b) { return a+b; }
|
|
|
|
#line 1 "cgo-generated-wrapper"
|
|
|
|
|
|
#line 1 "cgo-gcc-prolog"
|
|
/*
|
|
If x and y are not equal, the type will be invalid
|
|
(have a negative array count) and an inscrutable error will come
|
|
out of the compiler and hopefully mention "name".
|
|
*/
|
|
#define __cgo_compile_assert_eq(x, y, name) typedef char name[(x-y)*(x-y)*-2+1];
|
|
|
|
/* Check at compile time that the sizes we use match our expectations. */
|
|
#define __cgo_size_assert(t, n) __cgo_compile_assert_eq(sizeof(t), n, _cgo_sizeof_##t##_is_not_##n)
|
|
|
|
__cgo_size_assert(char, 1)
|
|
__cgo_size_assert(short, 2)
|
|
__cgo_size_assert(int, 4)
|
|
typedef long long __cgo_long_long;
|
|
__cgo_size_assert(__cgo_long_long, 8)
|
|
__cgo_size_assert(float, 4)
|
|
__cgo_size_assert(double, 8)
|
|
|
|
extern char* _cgo_topofstack(void);
|
|
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
|
|
|
|
#define CGO_NO_SANITIZE_THREAD
|
|
#define _cgo_tsan_acquire()
|
|
#define _cgo_tsan_release()
|
|
|
|
CGO_NO_SANITIZE_THREAD
|
|
void
|
|
_cgo_506f45f9fa85_Cfunc_sum(void *v)
|
|
{
|
|
struct {
|
|
int p0;
|
|
int p1;
|
|
int r;
|
|
char __pad12[4];
|
|
} __attribute__((__packed__)) *a = v;
|
|
char *stktop = _cgo_topofstack();
|
|
__typeof__(a->r) r;
|
|
_cgo_tsan_acquire();
|
|
r = sum(a->p0, a->p1);
|
|
_cgo_tsan_release();
|
|
a = (void*)((char*)a + (_cgo_topofstack() - stktop));
|
|
a->r = r;
|
|
}
|
|
|