#define tcon_type(x, canary) void *
#endif
+/**
+ * tcon_sizeof - the size of type within a container
+ * @x: the structure containing the TCON.
+ * @canary: which canary to check against.
+ */
+#define tcon_sizeof(x, canary) sizeof((x)->_tcon[0].canary)
+
/**
* tcon_ptr_type - pointer to the type within a container (or void *)
* @x: the structure containing the TCON.
--- /dev/null
+#include <ccan/tcon/tcon.h>
+#include <ccan/build_assert/build_assert.h>
+#include <stdlib.h>
+
+struct container {
+ void *p;
+};
+
+struct int_container {
+ struct container raw;
+ TCON(int tc);
+};
+
+struct charp_and_int_container {
+ struct container raw;
+ TCON(int tc1; char *tc2);
+};
+
+int main(int argc, char *argv[])
+{
+ struct int_container icon;
+ struct charp_and_int_container cicon;
+ TCON_WRAP(struct container, int tc) iconw;
+ TCON_WRAP(struct container, int tc1; char *tc2) ciconw;
+
+ BUILD_ASSERT(tcon_sizeof(&icon, tc) == sizeof(int));
+ BUILD_ASSERT(tcon_sizeof(&cicon, tc1) == sizeof(int));
+ BUILD_ASSERT(tcon_sizeof(&cicon, tc2) == sizeof(char *));
+
+ BUILD_ASSERT(tcon_sizeof(&iconw, tc) == sizeof(int));
+ BUILD_ASSERT(tcon_sizeof(&ciconw, tc1) == sizeof(int));
+ BUILD_ASSERT(tcon_sizeof(&ciconw, tc2) == sizeof(char *));
+
+ return 0;
+}