[glib] g_clear_pointer: work around gcc helpfulness



commit 0ecbb0a4045877936d872fb8aaedd49baa4d89ef
Author: Dan Winship <danw gnome org>
Date:   Thu May 10 13:29:39 2012 -0400

    g_clear_pointer: work around gcc helpfulness
    
    gcc gets upset when we do "((GDestroyNotify) destroy) (_p)" because
    it's non-portable. But we don't care; we already know glib wouldn't
    work on any platform where different pointer types have different
    calling conventions. So tweak the code to avoid the warning.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=674634

 glib/gmem.h |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
---
diff --git a/glib/gmem.h b/glib/gmem.h
index 597bfdf..c50f46e 100644
--- a/glib/gmem.h
+++ b/glib/gmem.h
@@ -103,6 +103,8 @@ gpointer g_try_realloc_n  (gpointer	 mem,
     /* Only one access, please */                                              \
     gpointer *_pp = (gpointer *) (pp);                                         \
     gpointer _p;                                                               \
+    /* This assignment is needed to avoid a gcc warning */                     \
+    GDestroyNotify _destroy = (GDestroyNotify) (destroy);                      \
                                                                                \
     (void) (0 ? (gpointer) *(pp) : 0);                                         \
     do                                                                         \
@@ -110,7 +112,7 @@ gpointer g_try_realloc_n  (gpointer	 mem,
     while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_pp, _p, NULL)); \
                                                                                \
     if (_p)                                                                    \
-      ((GDestroyNotify) (destroy)) (_p);                                       \
+      _destroy (_p);                                                           \
   } G_STMT_END
 
 /* Optimise: avoid the call to the (slower) _n function if we can



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]