mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
glib: annotate static inline functions with G_AVAILABLE-type macros
The public functions exposed as static inlines currently don't have annotations to describe when they were introduced. This means that compiling this file: #include <glib.h> void foo (void) { g_rec_mutex_locker_new (NULL); } with: gcc -c test.c \ -I/tmp/glib/include/glib-2.0 \ -I/tmp/glib/lib/x86_64-linux-gnu/glib-2.0/include \ -Werror \ -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_28 \ -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_28 will not produce any error message, despite using `g_rec_mutex_locker_new`, a function that was introduced after 2.28. This patch adds some annotations to all the publicly exposed static inline functions I could find. I could not use the existing G_AVAILABLE* macros, because they may expand to `extern`. This would then clash with the `static` keyword and produce: ../glib/gthread.h:397:1: error: multiple storage classes in declaration specifiers 397 | static inline GRecMutexLocker * | ^~~~~~ So I opted for adding a new set of macros, GLIB_AVAILABLE_STATIC_INLINE_IN_2_XY. With this patch applied, the example from above produces the expected warning: test.c: In function ‘foo’: test.c:5:3: error: ‘g_rec_mutex_locker_new’ is deprecated: Not available before 2.60 [-Werror=deprecated-declarations] 5 | g_rec_mutex_locker_new (NULL); | ^~~~~~~~~~~~~~~~~~~~~~ In file included from /tmp/glib/include/glib-2.0/glib/gasyncqueue.h:32, from /tmp/glib/include/glib-2.0/glib.h:32, from test.c:1: /tmp/glib/include/glib-2.0/glib/gthread.h:398:1: note: declared here 398 | g_rec_mutex_locker_new (GRecMutex *rec_mutex) | ^~~~~~~~~~~~~~~~~~~~~~
This commit is contained in:
parent
06dc61ad6c
commit
5050298749
@ -207,6 +207,11 @@ GLIB_AVAILABLE_MACRO_IN_2_60
|
||||
GLIB_AVAILABLE_MACRO_IN_2_62
|
||||
GLIB_AVAILABLE_MACRO_IN_2_64
|
||||
GLIB_AVAILABLE_MACRO_IN_2_66
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_64
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_66
|
||||
GLIB_AVAILABLE_TYPE_IN_2_26
|
||||
GLIB_AVAILABLE_TYPE_IN_2_28
|
||||
GLIB_AVAILABLE_TYPE_IN_2_30
|
||||
@ -706,6 +711,7 @@ GLIB_DEPRECATED_FOR
|
||||
GLIB_UNAVAILABLE
|
||||
GLIB_UNAVAILABLE_ENUMERATOR
|
||||
GLIB_UNAVAILABLE_MACRO
|
||||
GLIB_UNAVAILABLE_STATIC_INLINE
|
||||
GLIB_UNAVAILABLE_TYPE
|
||||
G_ANALYZER_ANALYZING
|
||||
G_ANALYZER_NORETURN
|
||||
|
@ -26,6 +26,8 @@ foreach version : stable_2_series_versions
|
||||
'GLIB_DEPRECATED_IN_2_' + version + '_FOR()',
|
||||
'GLIB_DEPRECATED_IN_2_' + version,
|
||||
|
||||
'GLIB_AVAILABLE_STATIC_INLINE_IN_2_' + version,
|
||||
|
||||
'GLIB_AVAILABLE_ENUMERATOR_IN_2_' + version,
|
||||
'GLIB_DEPRECATED_ENUMERATOR_IN_2_' + version + '_FOR()',
|
||||
'GLIB_DEPRECATED_ENUMERATOR_IN_2_' + version,
|
||||
@ -57,4 +59,4 @@ endif
|
||||
|
||||
subdir('gio')
|
||||
subdir('glib')
|
||||
subdir('gobject')
|
||||
subdir('gobject')
|
||||
|
@ -982,6 +982,7 @@
|
||||
#define GLIB_DEPRECATED G_DEPRECATED _GLIB_EXTERN
|
||||
#define GLIB_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _GLIB_EXTERN
|
||||
#define GLIB_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _GLIB_EXTERN
|
||||
#define GLIB_UNAVAILABLE_STATIC_INLINE(maj,min) G_UNAVAILABLE(maj,min)
|
||||
#endif
|
||||
|
||||
#if !defined(GLIB_DISABLE_DEPRECATION_WARNINGS) && \
|
||||
|
@ -499,6 +499,7 @@ typedef void GMainContextPusher GLIB_AVAILABLE_TYPE_IN_2_64;
|
||||
* Since: 2.64
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_64
|
||||
static inline GMainContextPusher *
|
||||
g_main_context_pusher_new (GMainContext *main_context)
|
||||
{
|
||||
@ -520,6 +521,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
* Since: 2.64
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_64
|
||||
static inline void
|
||||
g_main_context_pusher_free (GMainContextPusher *pusher)
|
||||
{
|
||||
|
@ -197,6 +197,7 @@ gpointer g_try_realloc_n (gpointer mem,
|
||||
*
|
||||
* Since: 2.44
|
||||
*/
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
|
||||
static inline gpointer
|
||||
g_steal_pointer (gpointer pp)
|
||||
{
|
||||
|
@ -317,6 +317,7 @@ typedef void GMutexLocker;
|
||||
* Returns: a #GMutexLocker
|
||||
* Since: 2.44
|
||||
*/
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
|
||||
static inline GMutexLocker *
|
||||
g_mutex_locker_new (GMutex *mutex)
|
||||
{
|
||||
@ -334,6 +335,7 @@ g_mutex_locker_new (GMutex *mutex)
|
||||
*
|
||||
* Since: 2.44
|
||||
*/
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
|
||||
static inline void
|
||||
g_mutex_locker_free (GMutexLocker *locker)
|
||||
{
|
||||
@ -391,6 +393,7 @@ typedef void GRecMutexLocker;
|
||||
* Since: 2.60
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
|
||||
static inline GRecMutexLocker *
|
||||
g_rec_mutex_locker_new (GRecMutex *rec_mutex)
|
||||
{
|
||||
@ -410,6 +413,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
* Since: 2.60
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
|
||||
static inline void
|
||||
g_rec_mutex_locker_free (GRecMutexLocker *locker)
|
||||
{
|
||||
@ -499,6 +503,7 @@ typedef void GRWLockWriterLocker;
|
||||
* Since: 2.62
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
|
||||
static inline GRWLockWriterLocker *
|
||||
g_rw_lock_writer_locker_new (GRWLock *rw_lock)
|
||||
{
|
||||
@ -519,6 +524,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
* Since: 2.62
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
|
||||
static inline void
|
||||
g_rw_lock_writer_locker_free (GRWLockWriterLocker *locker)
|
||||
{
|
||||
@ -552,6 +558,7 @@ typedef void GRWLockReaderLocker;
|
||||
* Since: 2.62
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
|
||||
static inline GRWLockReaderLocker *
|
||||
g_rw_lock_reader_locker_new (GRWLock *rw_lock)
|
||||
{
|
||||
@ -572,6 +579,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
* Since: 2.62
|
||||
*/
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
|
||||
static inline void
|
||||
g_rw_lock_reader_locker_free (GRWLockReaderLocker *locker)
|
||||
{
|
||||
|
@ -646,11 +646,13 @@
|
||||
|
||||
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_44
|
||||
# define GLIB_AVAILABLE_IN_2_44 GLIB_UNAVAILABLE(2, 44)
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_44 GLIB_UNAVAILABLE_STATIC_INLINE(2, 44)
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_44 GLIB_UNAVAILABLE_MACRO(2, 44)
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_44 GLIB_UNAVAILABLE_ENUMERATOR(2, 44)
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_44 GLIB_UNAVAILABLE_TYPE(2, 44)
|
||||
#else
|
||||
# define GLIB_AVAILABLE_IN_2_44 _GLIB_EXTERN
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_44
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_44
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_44
|
||||
@ -898,11 +900,13 @@
|
||||
|
||||
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_60
|
||||
# define GLIB_AVAILABLE_IN_2_60 GLIB_UNAVAILABLE(2, 60)
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_60 GLIB_UNAVAILABLE_STATIC_INLINE(2, 60)
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_60 GLIB_UNAVAILABLE_MACRO(2, 60)
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_60 GLIB_UNAVAILABLE_ENUMERATOR(2, 60)
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_60 GLIB_UNAVAILABLE_TYPE(2, 60)
|
||||
#else
|
||||
# define GLIB_AVAILABLE_IN_2_60 _GLIB_EXTERN
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_60
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_60
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_60
|
||||
@ -930,11 +934,13 @@
|
||||
|
||||
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_62
|
||||
# define GLIB_AVAILABLE_IN_2_62 GLIB_UNAVAILABLE(2, 62)
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 GLIB_UNAVAILABLE_STATIC_INLINE(2, 62)
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_62 GLIB_UNAVAILABLE_MACRO(2, 62)
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_62 GLIB_UNAVAILABLE_ENUMERATOR(2, 62)
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_62 GLIB_UNAVAILABLE_TYPE(2, 62)
|
||||
#else
|
||||
# define GLIB_AVAILABLE_IN_2_62 _GLIB_EXTERN
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_62
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_62
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_62
|
||||
@ -962,11 +968,13 @@
|
||||
|
||||
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_64
|
||||
# define GLIB_AVAILABLE_IN_2_64 GLIB_UNAVAILABLE(2, 64)
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_64 GLIB_UNAVAILABLE_STATIC_INLINE(2, 64)
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_64 GLIB_UNAVAILABLE_MACRO(2, 64)
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_64 GLIB_UNAVAILABLE_ENUMERATOR(2, 64)
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_64 GLIB_UNAVAILABLE_TYPE(2, 64)
|
||||
#else
|
||||
# define GLIB_AVAILABLE_IN_2_64 _GLIB_EXTERN
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_64
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_64
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_64
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_64
|
||||
@ -994,11 +1002,13 @@
|
||||
|
||||
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_66
|
||||
# define GLIB_AVAILABLE_IN_2_66 GLIB_UNAVAILABLE(2, 66)
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_66 GLIB_UNAVAILABLE_STATIC_INLINE(2, 66)
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_66 GLIB_UNAVAILABLE_MACRO(2, 66)
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_66 GLIB_UNAVAILABLE_ENUMERATOR(2, 66)
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_66 GLIB_UNAVAILABLE_TYPE(2, 66)
|
||||
#else
|
||||
# define GLIB_AVAILABLE_IN_2_66 _GLIB_EXTERN
|
||||
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_66
|
||||
# define GLIB_AVAILABLE_MACRO_IN_2_66
|
||||
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_66
|
||||
# define GLIB_AVAILABLE_TYPE_IN_2_66
|
||||
|
Loading…
Reference in New Issue
Block a user