[glib: 1/2] glib: annotate static inline functions with G_AVAILABLE-type macros
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/2] glib: annotate static inline functions with G_AVAILABLE-type macros
- Date: Tue, 12 May 2020 12:48:02 +0000 (UTC)
commit 50502987495ad55b5168e23b0c0283924881a8b3
Author: Simon Marchi <simon marchi efficios com>
Date: Fri May 1 15:30:23 2020 -0400
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)
| ^~~~~~~~~~~~~~~~~~~~~~
docs/reference/glib/glib-sections.txt | 6 ++++++
docs/reference/meson.build | 4 +++-
glib/gmacros.h | 1 +
glib/gmain.h | 2 ++
glib/gmem.h | 1 +
glib/gthread.h | 8 ++++++++
glib/gversionmacros.h | 10 ++++++++++
7 files changed, 31 insertions(+), 1 deletion(-)
---
diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt
index b1d78ccc3..6628d2322 100644
--- a/docs/reference/glib/glib-sections.txt
+++ b/docs/reference/glib/glib-sections.txt
@@ -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
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
index 873aa6dc1..7c3e589ab 100644
--- a/docs/reference/meson.build
+++ b/docs/reference/meson.build
@@ -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')
\ No newline at end of file
+subdir('gobject')
diff --git a/glib/gmacros.h b/glib/gmacros.h
index 45a7874ef..7210f0247 100644
--- a/glib/gmacros.h
+++ b/glib/gmacros.h
@@ -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) && \
diff --git a/glib/gmain.h b/glib/gmain.h
index d4776c19b..5c0e524cc 100644
--- a/glib/gmain.h
+++ b/glib/gmain.h
@@ -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)
{
diff --git a/glib/gmem.h b/glib/gmem.h
index 953a0182d..45671073b 100644
--- a/glib/gmem.h
+++ b/glib/gmem.h
@@ -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)
{
diff --git a/glib/gthread.h b/glib/gthread.h
index 980522bba..96f536916 100644
--- a/glib/gthread.h
+++ b/glib/gthread.h
@@ -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)
{
diff --git a/glib/gversionmacros.h b/glib/gversionmacros.h
index fd86ade02..08bf7d042 100644
--- a/glib/gversionmacros.h
+++ b/glib/gversionmacros.h
@@ -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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]