[libvirt] [PATCH 1/2] build: cleanup GCC < 4.6 -Wlogical-op workaround

Martin Kletzander mkletzan at redhat.com
Mon Apr 11 09:30:25 UTC 2016


On Sun, Apr 10, 2016 at 06:37:58PM +0200, Pavel Hrdina wrote:
>Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
>---
> m4/virt-compile-warnings.m4 |  2 +-
> src/internal.h              | 10 ++++++++++
> src/util/virbuffer.c        | 11 +++--------
> src/util/virstring.c        |  9 +--------
> src/util/virsysinfo.c       | 13 ++-----------
> 5 files changed, 17 insertions(+), 28 deletions(-)
>
>diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
>index 3dd0665..1b0a2cf 100644
>--- a/m4/virt-compile-warnings.m4
>+++ b/m4/virt-compile-warnings.m4
>@@ -236,7 +236,7 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
>
>     if test "$gl_cv_warn_c__Wlogical_op" = yes &&
>        test "$lv_cv_gcc_wlogical_op_broken" = yes; then
>-      AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP], 1,
>+      AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP_STRCHR], 1,
>        [Define to 1 if gcc -Wlogical-op reports false positives on strchr])
>     fi
> ])
>diff --git a/src/internal.h b/src/internal.h
>index 9ebaf3c..bc3126f 100644
>--- a/src/internal.h
>+++ b/src/internal.h
>@@ -253,6 +253,16 @@
> #  define VIR_WARNINGS_RESET
> # endif
>
>+/* Workaround bogus GCC < 4.6 that produces false -Wlogical-op warnings for
>+ * strchr(). Those old GCCs doesn't support push/pop. */

s/doesn't/don't/

>+# if BROKEN_GCC_WLOGICALOP_STRCHR
>+#  define VIR_WARNINGS_NO_WLOGICALOP_STRCHR                \
>+    _Pragma ("GCC diagnostic ignored \"-Wlogical-op\"")
>+# else
>+#  define VIR_WARNINGS_NO_WLOGICALOP_STRCHR
>+# endif
>+
>+
> /*
>  * Use this when passing possibly-NULL strings to printf-a-likes.
>  */
>diff --git a/src/util/virbuffer.c b/src/util/virbuffer.c
>index 43cd1a7..d582e7d 100644
>--- a/src/util/virbuffer.c
>+++ b/src/util/virbuffer.c
>@@ -417,14 +417,9 @@ virBufferVasprintf(virBufferPtr buf, const char *format, va_list argptr)
>     buf->use += count;
> }
>
>-/* Work around spurious strchr() diagnostics given by -Wlogical-op
>- * for gcc < 4.6.  Doing it via a local pragma keeps the damage
>- * smaller than disabling it on the package level.  Unfortunately, the
>- * affected GCCs don't allow diagnostic push/pop which would have
>- * further reduced the impact. */

To make the damage as small as possible, we could create a
src/util/virstrchr.c file in which this would be disabled, create
something like virStrChr() in it and then disable the use of strchr()
everywhere else in the code with syntax-check as we did with some other
string functions.  Was that discussed as well or should I send it as a
follow-up?

>-#if BROKEN_GCC_WLOGICALOP
>-# pragma GCC diagnostic ignored "-Wlogical-op"
>-#endif
>+
>+VIR_WARNINGS_NO_WLOGICALOP_STRCHR
>+
>
> /**
>  * virBufferEscapeString:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160411/74088881/attachment-0001.sig>


More information about the libvir-list mailing list