diff --git a/gobject/gtype.h b/gobject/gtype.h
index 8a1bff2..7d7e72f 100644
--- a/gobject/gtype.h
+++ b/gobject/gtype.h
@@ -1580,7 +1580,12 @@ type_name##_get_type (void) \
  */
 #define G_DEFINE_BOXED_TYPE_WITH_CODE(TypeName, type_name, copy_func, free_func, _C_) _G_DEFINE_BOXED_TYPE_BEGIN (TypeName, type_name, copy_func, free_func) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()

-#if !defined (__cplusplus) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
+/**
+ * Transparent unions do not work on older versions of GCC.
+ * In addition, Apple's GCC, which otherwise supports transparent unions, has specific issues
+ * with 64-bit pointers on PPC64 only.
+ */
+#if !defined (__cplusplus) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) && !defined (__ppc64__))
 #define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \
 GType \
 type_name##_get_type (void) \
