// Copyright 2020 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 // Test passing C struct to exported Go function. /* #include #include // T is a C struct with alignment padding after b. // The padding bytes are not considered initialized by MSAN. // It is big enough to be passed on stack in C ABI (and least // on AMD64). typedef struct { char b; uintptr_t x, y; } T; extern void F(T); // Use weak as a hack to permit defining a function even though we use export. void CF(int x) __attribute__ ((weak)); void CF(int x) { T *t = malloc(sizeof(T)); t->b = (char)x; t->x = x; t->y = x; F(*t); } */ import "C" //export F func F(t C.T) { println(t.b, t.x, t.y) } func main() { C.CF(C.int(0)) }