mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 23:46:15 +01:00
Merge branch 'th/gtype-cast-align-warning' into 'main'
gtype: avoid "-Wcast-align" warning with optimized G_TYPE_CHECK_INSTANCE_CAST() See merge request GNOME/glib!3139
This commit is contained in:
commit
953f4fc25f
@ -2520,8 +2520,8 @@ const gchar * g_type_name_from_class (GTypeClass *g_class);
|
||||
|
||||
/* --- implementation bits --- */
|
||||
#if defined(G_DISABLE_CAST_CHECKS) || defined(__OPTIMIZE__)
|
||||
# define _G_TYPE_CIC(ip, gt, ct) ((ct*) ip)
|
||||
# define _G_TYPE_CCC(cp, gt, ct) ((ct*) cp)
|
||||
# define _G_TYPE_CIC(ip, gt, ct) ((ct*) (void *) ip)
|
||||
# define _G_TYPE_CCC(cp, gt, ct) ((ct*) (void *) cp)
|
||||
#else
|
||||
# define _G_TYPE_CIC(ip, gt, ct) \
|
||||
((ct*) (void *) g_type_check_instance_cast ((GTypeInstance*) ip, gt))
|
||||
|
@ -76,7 +76,13 @@ gobject_tests = {
|
||||
'signalgroup' : {},
|
||||
'testing' : {},
|
||||
'type-flags' : {},
|
||||
'objects-refcount1' : {},
|
||||
'objects-refcount1' : {
|
||||
'c_args': cc.get_supported_arguments([
|
||||
'-DG_DISABLE_CAST_CHECKS',
|
||||
'-Werror',
|
||||
'-Wcast-align=strict',
|
||||
]),
|
||||
},
|
||||
'objects-refcount2' : {'suite' : ['slow']},
|
||||
'properties-refcount1' : {},
|
||||
'properties-refcount2' : {'suite' : ['slow']},
|
||||
|
@ -15,10 +15,27 @@
|
||||
typedef struct _GTest GTest;
|
||||
typedef struct _GTestClass GTestClass;
|
||||
|
||||
#if G_GNUC_CHECK_VERSION (4, 0)
|
||||
/* Increase the alignment of GTest to check whether
|
||||
* G_TYPE_CHECK_INSTANCE_CAST() would trigger a "-Wcast-align=strict" warning.
|
||||
* That would happen, when trying to cast a "GObject*" to "GTest*", if latter
|
||||
* has larger alignment.
|
||||
*
|
||||
* Note that merely adding a int64 field to GTest does not increase the
|
||||
* alignment above 4 bytes on i386, hence use the __attribute__((__aligned__())).
|
||||
*/
|
||||
#define _GTest_increase_alignment __attribute__((__aligned__(__alignof(gint64))))
|
||||
#else
|
||||
#define _GTest_increase_alignment
|
||||
#endif
|
||||
|
||||
struct _GTest
|
||||
{
|
||||
GObject object;
|
||||
};
|
||||
|
||||
/* See _GTest_increase_alignment. */
|
||||
long double increase_alignment2;
|
||||
} _GTest_increase_alignment;
|
||||
|
||||
struct _GTestClass
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user