]> granicus.if.org Git - strace/commitdiff
Ignore warnings about overridden initialization of hwaddr_sizes
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 16 Sep 2018 11:44:01 +0000 (11:44 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 16 Sep 2018 11:44:01 +0000 (11:44 +0000)
As hwaddr_sizes array is explicitly initialized this way,
ignore potential warnings reported by gcc -Woverride-init
and clang -Winitializer-overrides.

* gcc_compat.h (CLANG_PREREQ): New macro.
(DIAG_PUSH_IGNORE_OVERRIDE_INIT, DIAG_POP_IGNORE_OVERRIDE_INIT): New
macros non-trivially defined for gcc >= 4.2 and clang >= 2.8.
* sock.c (print_ifreq): Use them to ignore warnings about overridden
initialization of hwaddr_sizes array.

Closes: https://github.com/strace/strace/issues/77
gcc_compat.h
sock.c

index 251080bb518b89ddcac5aff1d6f14229bea0fee3..066b40e854f14bbea8ca24bfb6752234f289356b 100644 (file)
 # define GNUC_PREREQ(maj, min) \
        ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
 #else
-# define __attribute__(x)      /* empty */
 # define GNUC_PREREQ(maj, min) 0
 #endif
 
+#if defined __clang__ && defined __clang_major__ && defined __clang_minor__
+# define CLANG_PREREQ(maj, min)        \
+       ((__clang_major__ << 16) + __clang_minor__ >= ((maj) << 16) + (min))
+#else
+# define CLANG_PREREQ(maj, min)        0
+#endif
+
+#if !(GNUC_PREREQ(2, 0) || CLANG_PREREQ(1, 0))
+# define __attribute__(x)      /* empty */
+#endif
+
 #if GNUC_PREREQ(2, 5)
 # define ATTRIBUTE_NORETURN    __attribute__((__noreturn__))
 #else
 # define ATTRIBUTE_FALLTHROUGH ((void) 0)
 #endif
 
+#if CLANG_PREREQ(2, 8)
+# define DIAG_PUSH_IGNORE_OVERRIDE_INIT                                        \
+       _Pragma("clang diagnostic push");                               \
+       _Pragma("clang diagnostic ignored \"-Winitializer-overrides\"");
+# define DIAG_POP_IGNORE_OVERRIDE_INIT                                 \
+       _Pragma("clang diagnostic pop");
+#elif GNUC_PREREQ(4, 2)
+# define DIAG_PUSH_IGNORE_OVERRIDE_INIT                                        \
+       _Pragma("GCC diagnostic push");                                 \
+       _Pragma("GCC diagnostic ignored \"-Woverride-init\"");
+# define DIAG_POP_IGNORE_OVERRIDE_INIT                                 \
+       _Pragma("GCC diagnostic pop");
+#else
+# define DIAG_PUSH_IGNORE_OVERRIDE_INIT        /* empty */
+# define DIAG_POP_IGNORE_OVERRIDE_INIT /* empty */
+#endif
+
 #if GNUC_PREREQ(6, 0)
 # define DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE                         \
        _Pragma("GCC diagnostic push");                                 \
diff --git a/sock.c b/sock.c
index a477bcea3ce3d13bd162f0bc3195338cbfd20671..f17045e0b8d1f0aff89ca4c8de090800dadb6b7e 100644 (file)
--- a/sock.c
+++ b/sock.c
@@ -57,6 +57,8 @@ print_ifname(const char *ifname)
        print_quoted_string(ifname, IFNAMSIZ + 1, QUOTE_0_TERMINATED);
 }
 
+DIAG_PUSH_IGNORE_OVERRIDE_INIT
+
 static void
 print_ifreq(struct tcb *const tcp, const unsigned int code,
            const kernel_ulong_t arg, const struct_ifreq *const ifr)
@@ -202,6 +204,8 @@ print_ifreq(struct tcb *const tcp, const unsigned int code,
        }
 }
 
+DIAG_POP_IGNORE_OVERRIDE_INIT
+
 static unsigned int
 print_ifc_len(int len)
 {