[glib/glib-2-64: 1/2] gthread: ignore deprecated declarations in static inline functions



commit 5ee80104accad108dfc6549e4e7627c9fb90bec1
Author: Simon Marchi <simon marchi efficios com>
Date:   Fri Apr 24 11:46:39 2020 -0400

    gthread: ignore deprecated declarations in static inline functions
    
    With a trivial file that just includes glib.h:
    
        #include <glib.h>
    
    Compiled with:
    
        gcc -c test.c \
          -I /tmp/glib/include/glib-2.0/ \
          -I /tmp/glib/lib/x86_64-linux-gnu/glib-2.0/include \
          -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_28 \
          -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_28 \
          -fmax-errors=1 \
          -Werror
    
    We get:
    
        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: In function ‘g_rec_mutex_locker_new’:
        /tmp/glib/include/glib-2.0/glib/gthread.h:396:3: error: ‘g_rec_mutex_lock’ is deprecated: Not 
available before 2.32 [-Werror=deprecated-declarations]
          396 |   g_rec_mutex_lock (rec_mutex);
              |   ^~~~~~~~~~~~~~~~
        /tmp/glib/include/glib-2.0/glib/gthread.h:196:17: note: declared here
          196 | void            g_rec_mutex_lock                (GRecMutex      *rec_mutex);
              |                 ^~~~~~~~~~~~~~~~
        compilation terminated due to -fmax-errors=1.
    
    The problem is that the code in the static inline functions uses
    g_rec_mutex_lock, introduced after 2.28.  This code is compiled
    regardless of if it's actually used or not.
    
    Suppress the warning by using G_GNUC_BEGIN_IGNORE_DEPRECATIONS /
    G_GNUC_END_IGNORE_DEPRECATIONS.  There are precedents for doing that,
    for example g_main_context_pusher_new in gmain.h.
    
    Tested by building with all variations of GLIB_VERSION_MIN_REQUIRED /
    GLIB_VERSION_MAX_ALLOWED:
    
        for i in $(seq 26 2 64); do
          gcc -c test.c \
            -I/tmp/glib/include/glib-2.0 \
            -I/tmp/glib/lib/x86_64-linux-gnu/glib-2.0/include \
            -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_$i \
            -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_$i \
            -fmax-errors=1 \
            -Werror
        done
    
    Fixes: #2094

 glib/gthread.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)
---
diff --git a/glib/gthread.h b/glib/gthread.h
index a8c7ac777..980522bba 100644
--- a/glib/gthread.h
+++ b/glib/gthread.h
@@ -390,12 +390,14 @@ typedef void GRecMutexLocker;
  * Returns: a #GRecMutexLocker
  * Since: 2.60
  */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 static inline GRecMutexLocker *
 g_rec_mutex_locker_new (GRecMutex *rec_mutex)
 {
   g_rec_mutex_lock (rec_mutex);
   return (GRecMutexLocker *) rec_mutex;
 }
+G_GNUC_END_IGNORE_DEPRECATIONS
 
 /**
  * g_rec_mutex_locker_free:
@@ -407,11 +409,13 @@ g_rec_mutex_locker_new (GRecMutex *rec_mutex)
  *
  * Since: 2.60
  */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 static inline void
 g_rec_mutex_locker_free (GRecMutexLocker *locker)
 {
   g_rec_mutex_unlock ((GRecMutex *) locker);
 }
+G_GNUC_END_IGNORE_DEPRECATIONS
 
 /**
  * GRWLockWriterLocker:
@@ -494,12 +498,14 @@ typedef void GRWLockWriterLocker;
  * Returns: a #GRWLockWriterLocker
  * Since: 2.62
  */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 static inline GRWLockWriterLocker *
 g_rw_lock_writer_locker_new (GRWLock *rw_lock)
 {
   g_rw_lock_writer_lock (rw_lock);
   return (GRWLockWriterLocker *) rw_lock;
 }
+G_GNUC_END_IGNORE_DEPRECATIONS
 
 /**
  * g_rw_lock_writer_locker_free:
@@ -512,11 +518,13 @@ g_rw_lock_writer_locker_new (GRWLock *rw_lock)
  *
  * Since: 2.62
  */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 static inline void
 g_rw_lock_writer_locker_free (GRWLockWriterLocker *locker)
 {
   g_rw_lock_writer_unlock ((GRWLock *) locker);
 }
+G_GNUC_END_IGNORE_DEPRECATIONS
 
 /**
  * GRWLockReaderLocker:
@@ -543,12 +551,14 @@ typedef void GRWLockReaderLocker;
  * Returns: a #GRWLockReaderLocker
  * Since: 2.62
  */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 static inline GRWLockReaderLocker *
 g_rw_lock_reader_locker_new (GRWLock *rw_lock)
 {
   g_rw_lock_reader_lock (rw_lock);
   return (GRWLockReaderLocker *) rw_lock;
 }
+G_GNUC_END_IGNORE_DEPRECATIONS
 
 /**
  * g_rw_lock_reader_locker_free:
@@ -561,11 +571,13 @@ g_rw_lock_reader_locker_new (GRWLock *rw_lock)
  *
  * Since: 2.62
  */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 static inline void
 g_rw_lock_reader_locker_free (GRWLockReaderLocker *locker)
 {
   g_rw_lock_reader_unlock ((GRWLock *) locker);
 }
+G_GNUC_END_IGNORE_DEPRECATIONS
 
 G_END_DECLS
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]