mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
5050298749
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) | ^~~~~~~~~~~~~~~~~~~~~~ |
||
---|---|---|
.. | ||
reference | ||
CODEOWNERS | ||
debugging.txt | ||
macros.txt |