object: Fix CALLBACK macros with GCC 12
GCC 12 produces weird code when a callback is called directly (e.g. parse_bool() via parse_option() in vici_config.c). Instead of the actual pointer, it explicitly passes 0 as first argument, which likely causes a segmentation fault. It doesn't happen when called indirectly via function pointer that has void* as first argument, which this patch kinda replicates for direct calls to avoid the issue. Closes strongswan/strongswan#1053
This commit is contained in:
@@ -120,7 +120,7 @@
|
|||||||
#define CALLBACK(name, ret, param1, ...) \
|
#define CALLBACK(name, ret, param1, ...) \
|
||||||
static ret _cb_##name(union {void *_generic; param1;} \
|
static ret _cb_##name(union {void *_generic; param1;} \
|
||||||
__attribute__((transparent_union)), ##__VA_ARGS__); \
|
__attribute__((transparent_union)), ##__VA_ARGS__); \
|
||||||
static typeof(_cb_##name) *name = (typeof(_cb_##name)*)_cb_##name; \
|
static ret (*name)(void*, ##__VA_ARGS__) = _cb_##name; \
|
||||||
static ret _cb_##name(param1, ##__VA_ARGS__)
|
static ret _cb_##name(param1, ##__VA_ARGS__)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
__attribute__((transparent_union)), \
|
__attribute__((transparent_union)), \
|
||||||
union {void *_generic; param2;} \
|
union {void *_generic; param2;} \
|
||||||
__attribute__((transparent_union)), ##__VA_ARGS__); \
|
__attribute__((transparent_union)), ##__VA_ARGS__); \
|
||||||
static typeof(_cb_##name) *name = (typeof(_cb_##name)*)_cb_##name; \
|
static ret (*name)(void*, void*, ##__VA_ARGS__) = _cb_##name; \
|
||||||
static ret _cb_##name(param1, param2, ##__VA_ARGS__)
|
static ret _cb_##name(param1, param2, ##__VA_ARGS__)
|
||||||
|
|
||||||
#endif /** OBJECT_H_ @} */
|
#endif /** OBJECT_H_ @} */
|
||||||
|
|||||||
Reference in New Issue
Block a user