mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 07:26:15 +01:00
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
This commit is contained in:
parent
787f808783
commit
0ecbb0a404
@ -103,6 +103,8 @@ gpointer g_try_realloc_n (gpointer mem,
|
|||||||
/* Only one access, please */ \
|
/* Only one access, please */ \
|
||||||
gpointer *_pp = (gpointer *) (pp); \
|
gpointer *_pp = (gpointer *) (pp); \
|
||||||
gpointer _p; \
|
gpointer _p; \
|
||||||
|
/* This assignment is needed to avoid a gcc warning */ \
|
||||||
|
GDestroyNotify _destroy = (GDestroyNotify) (destroy); \
|
||||||
\
|
\
|
||||||
(void) (0 ? (gpointer) *(pp) : 0); \
|
(void) (0 ? (gpointer) *(pp) : 0); \
|
||||||
do \
|
do \
|
||||||
@ -110,7 +112,7 @@ gpointer g_try_realloc_n (gpointer mem,
|
|||||||
while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_pp, _p, NULL)); \
|
while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_pp, _p, NULL)); \
|
||||||
\
|
\
|
||||||
if (_p) \
|
if (_p) \
|
||||||
((GDestroyNotify) (destroy)) (_p); \
|
_destroy (_p); \
|
||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
|
|
||||||
/* Optimise: avoid the call to the (slower) _n function if we can
|
/* Optimise: avoid the call to the (slower) _n function if we can
|
||||||
|
Loading…
Reference in New Issue
Block a user