Bug 531900 – Use __builtin_offsetof for G_STRUCT_OFFSET if building
authorSebastian Dröge <sdroege@src.gnome.org>
Wed, 11 Jun 2008 07:37:45 +0000 (07:37 +0000)
committerSebastian Dröge <sdroege@src.gnome.org>
Wed, 11 Jun 2008 07:37:45 +0000 (07:37 +0000)
with gcc 4.0 or newer
* glib/gmacros.h: Use __builtin_offsetof for G_STRUCT_OFFSET if
building with gcc 4.0 or newer.

svn path=/trunk/; revision=6996

ChangeLog
glib/gmacros.h

index 752ee8e..6ea1d9e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-06-11  Sebastian Dröge  <slomo@circular-chaos.org>
+
+       Bug 531900 – Use __builtin_offsetof for G_STRUCT_OFFSET if building
+       with gcc 4.0 or newer
+
+       * glib/gmacros.h: Use __builtin_offsetof for G_STRUCT_OFFSET if
+       building with gcc 4.0 or newer.
+
 2008-06-11  Tor Lillqvist  <tml@novell.com>
 
        * glib/gmain.c
index 395363d..6317408 100644 (file)
 /* Provide convenience macros for handling structure
  * fields through their offsets.
  */
-#define G_STRUCT_OFFSET(struct_type, member)   \
-    ((glong) ((guint8*) &((struct_type*) 0)->member))
+
+#if defined(__GNUC__)  && __GNUC__ >= 4
+#  define G_STRUCT_OFFSET(struct_type, member) \
+      ((glong) __builtin_offsetof (struct_type, member))
+#else
+#  define G_STRUCT_OFFSET(struct_type, member) \
+      ((glong) ((guint8*) &((struct_type*) 0)->member))
+#endif
+
 #define G_STRUCT_MEMBER_P(struct_p, struct_offset)   \
     ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
 #define G_STRUCT_MEMBER(member_type, struct_p, struct_offset)   \