Patchwork pixman: remove -Wredundand-decls

login
register
mail settings
Submitter Markus Armbruster
Date April 16, 2013, 9 a.m.
Message ID <87d2tuetoj.fsf@blackfin.pond.sub.org>
Download mbox | patch
Permalink /patch/236867/
State New
Headers show

Comments

Markus Armbruster - April 16, 2013, 9 a.m.
Alexey Kardashevskiy <aik@ozlabs.ru> writes:

> On 04/16/2013 01:55 AM, Markus Armbruster wrote:
>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>>
>>> On 04/15/2013 10:57 PM, Markus Armbruster wrote:
>>>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>>>>
>>>>> On 04/15/2013 08:01 PM, Peter Maydell wrote:
>>>>>> On 15 April 2013 10:50, Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
>>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
>>>>>>> error: redundant redeclaration of '__assert_fail'
>>>>>>> [-Werror=redundant-decls]
>>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
>>>>>>> note: previous declaration of '__assert_fail' was here
>>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:72:13:
>>>>>>> error: redundant redeclaration of '__assert_perror_fail'
>>>>>>> [-Werror=redundant-decls]
>>>>>>
>>>>>> This copy of assert.h seems to be broken. The declarations
>>>>>> should be guarded (by _ASSERT_H_DECLS in my system's copy).
>>>>>
>>>>> Debian? It uses eglibc which is fork (or clone?) of glibc.
>>>>>
>>>>>> If it's widespread we might have to work around this.
>>>>>
>>>>> It is in fedora 18 and glibc's git master branch. Why "if"?
>>>>
>>>> It's in Fedora 17, too, but I *don't* get a warning.  Suspecting your
>>>> compiler.  --version?
>>>
>>>
>>> powerpc64-linux-gcc 4.6.3, 4.7.2, 4.8.0, all the same. I'll try to
>>> track it down tomorrow why it all works when host and target are the
>>> same (pretty sure this is the cse) but I just do not get it... It is
>>> just me who sees obvious error in assert.h which is caused by
>>> -Wno-redundant-decls? Even if you do not hit this now, you will get
>>> there eventually.
>>
>> I don't doubt your gcc+libc is in error.  I just don't want to lose a
>> useful warning because of that.
>>
>> Workaround: configure --disable-werror
>
> This workaround does NOT work if pragmas used. "#pragma GCC diagnostic
> error "-Wredundant-decls"" re-enables warnings as errors.

Bummer.  Could you try the appended patch?
Alexey Kardashevskiy - April 16, 2013, 10:54 a.m.
On 04/16/2013 07:00 PM, Markus Armbruster wrote:
> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>
>> On 04/16/2013 01:55 AM, Markus Armbruster wrote:
>>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>>>
>>>> On 04/15/2013 10:57 PM, Markus Armbruster wrote:
>>>>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>>>>>
>>>>>> On 04/15/2013 08:01 PM, Peter Maydell wrote:
>>>>>>> On 15 April 2013 10:50, Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
>>>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
>>>>>>>> error: redundant redeclaration of '__assert_fail'
>>>>>>>> [-Werror=redundant-decls]
>>>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
>>>>>>>> note: previous declaration of '__assert_fail' was here
>>>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:72:13:
>>>>>>>> error: redundant redeclaration of '__assert_perror_fail'
>>>>>>>> [-Werror=redundant-decls]
>>>>>>>
>>>>>>> This copy of assert.h seems to be broken. The declarations
>>>>>>> should be guarded (by _ASSERT_H_DECLS in my system's copy).
>>>>>>
>>>>>> Debian? It uses eglibc which is fork (or clone?) of glibc.
>>>>>>
>>>>>>> If it's widespread we might have to work around this.
>>>>>>
>>>>>> It is in fedora 18 and glibc's git master branch. Why "if"?
>>>>>
>>>>> It's in Fedora 17, too, but I *don't* get a warning.  Suspecting your
>>>>> compiler.  --version?
>>>>
>>>>
>>>> powerpc64-linux-gcc 4.6.3, 4.7.2, 4.8.0, all the same. I'll try to
>>>> track it down tomorrow why it all works when host and target are the
>>>> same (pretty sure this is the cse) but I just do not get it... It is
>>>> just me who sees obvious error in assert.h which is caused by
>>>> -Wno-redundant-decls? Even if you do not hit this now, you will get
>>>> there eventually.
>>>
>>> I don't doubt your gcc+libc is in error.  I just don't want to lose a
>>> useful warning because of that.
>>>
>>> Workaround: configure --disable-werror
>>
>> This workaround does NOT work if pragmas used. "#pragma GCC diagnostic
>> error "-Wredundant-decls"" re-enables warnings as errors.
>
> Bummer.  Could you try the appended patch?

Tried, works, thanks!
Kevin Wolf - April 16, 2013, 11:51 a.m.
Am 16.04.2013 um 11:00 hat Markus Armbruster geschrieben:
> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
> 
> > On 04/16/2013 01:55 AM, Markus Armbruster wrote:
> >> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
> >>
> >>> On 04/15/2013 10:57 PM, Markus Armbruster wrote:
> >>>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
> >>>>
> >>>>> On 04/15/2013 08:01 PM, Peter Maydell wrote:
> >>>>>> On 15 April 2013 10:50, Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
> >>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
> >>>>>>> error: redundant redeclaration of '__assert_fail'
> >>>>>>> [-Werror=redundant-decls]
> >>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
> >>>>>>> note: previous declaration of '__assert_fail' was here
> >>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:72:13:
> >>>>>>> error: redundant redeclaration of '__assert_perror_fail'
> >>>>>>> [-Werror=redundant-decls]
> >>>>>>
> >>>>>> This copy of assert.h seems to be broken. The declarations
> >>>>>> should be guarded (by _ASSERT_H_DECLS in my system's copy).
> >>>>>
> >>>>> Debian? It uses eglibc which is fork (or clone?) of glibc.
> >>>>>
> >>>>>> If it's widespread we might have to work around this.
> >>>>>
> >>>>> It is in fedora 18 and glibc's git master branch. Why "if"?
> >>>>
> >>>> It's in Fedora 17, too, but I *don't* get a warning.  Suspecting your
> >>>> compiler.  --version?
> >>>
> >>>
> >>> powerpc64-linux-gcc 4.6.3, 4.7.2, 4.8.0, all the same. I'll try to
> >>> track it down tomorrow why it all works when host and target are the
> >>> same (pretty sure this is the cse) but I just do not get it... It is
> >>> just me who sees obvious error in assert.h which is caused by
> >>> -Wno-redundant-decls? Even if you do not hit this now, you will get
> >>> there eventually.
> >>
> >> I don't doubt your gcc+libc is in error.  I just don't want to lose a
> >> useful warning because of that.
> >>
> >> Workaround: configure --disable-werror
> >
> > This workaround does NOT work if pragmas used. "#pragma GCC diagnostic
> > error "-Wredundant-decls"" re-enables warnings as errors.
> 
> Bummer.  Could you try the appended patch?
> 
> diff --git a/configure b/configure
> index 0788e27..41097a2 100755
> --- a/configure
> +++ b/configure
> @@ -3244,8 +3244,10 @@ fi
>  
>  pragma_disable_unused_but_set=no
>  cat > $TMPC << EOF
> +#pragma GCC diagnostic push
>  #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
>  #pragma GCC diagnostic ignored "-Wstrict-prototypes"
> +#pragma GCC diagnostic pop

Breaks gcc < 4.6, which doesn't have push/pop yet.

Kevin
Markus Armbruster - April 16, 2013, 12:12 p.m.
Kevin Wolf <kwolf@redhat.com> writes:

> Am 16.04.2013 um 11:00 hat Markus Armbruster geschrieben:
>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>> 
>> > On 04/16/2013 01:55 AM, Markus Armbruster wrote:
>> >> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>> >>
>> >>> On 04/15/2013 10:57 PM, Markus Armbruster wrote:
>> >>>> Alexey Kardashevskiy <aik@ozlabs.ru> writes:
>> >>>>
>> >>>>> On 04/15/2013 08:01 PM, Peter Maydell wrote:
>> >>>>>> On 15 April 2013 10:50, Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
>> >>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
>> >>>>>>> error: redundant redeclaration of '__assert_fail'
>> >>>>>>> [-Werror=redundant-decls]
>> >>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:67:13:
>> >>>>>>> note: previous declaration of '__assert_fail' was here
>> >>>>>>> /home/alexey/pcipassthru/qemu-impreza/../lib4qemu/usr/include/assert.h:72:13:
>> >>>>>>> error: redundant redeclaration of '__assert_perror_fail'
>> >>>>>>> [-Werror=redundant-decls]
>> >>>>>>
>> >>>>>> This copy of assert.h seems to be broken. The declarations
>> >>>>>> should be guarded (by _ASSERT_H_DECLS in my system's copy).
>> >>>>>
>> >>>>> Debian? It uses eglibc which is fork (or clone?) of glibc.
>> >>>>>
>> >>>>>> If it's widespread we might have to work around this.
>> >>>>>
>> >>>>> It is in fedora 18 and glibc's git master branch. Why "if"?
>> >>>>
>> >>>> It's in Fedora 17, too, but I *don't* get a warning.  Suspecting your
>> >>>> compiler.  --version?
>> >>>
>> >>>
>> >>> powerpc64-linux-gcc 4.6.3, 4.7.2, 4.8.0, all the same. I'll try to
>> >>> track it down tomorrow why it all works when host and target are the
>> >>> same (pretty sure this is the cse) but I just do not get it... It is
>> >>> just me who sees obvious error in assert.h which is caused by
>> >>> -Wno-redundant-decls? Even if you do not hit this now, you will get
>> >>> there eventually.
>> >>
>> >> I don't doubt your gcc+libc is in error.  I just don't want to lose a
>> >> useful warning because of that.
>> >>
>> >> Workaround: configure --disable-werror
>> >
>> > This workaround does NOT work if pragmas used. "#pragma GCC diagnostic
>> > error "-Wredundant-decls"" re-enables warnings as errors.
>> 
>> Bummer.  Could you try the appended patch?
>> 
>> diff --git a/configure b/configure
>> index 0788e27..41097a2 100755
>> --- a/configure
>> +++ b/configure
>> @@ -3244,8 +3244,10 @@ fi
>>  
>>  pragma_disable_unused_but_set=no
>>  cat > $TMPC << EOF
>> +#pragma GCC diagnostic push
>>  #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
>>  #pragma GCC diagnostic ignored "-Wstrict-prototypes"
>> +#pragma GCC diagnostic pop
>
> Breaks gcc < 4.6, which doesn't have push/pop yet.

The patch to configure makes sure push/pop works before we use it.  When
your gcc is too old, warnings aren't suppressed, and you may have to
--disable-werror.  I prefer that over breaking --disable-werror for
everyone.

Patch

diff --git a/configure b/configure
index 0788e27..41097a2 100755
--- a/configure
+++ b/configure
@@ -3244,8 +3244,10 @@  fi
 
 pragma_disable_unused_but_set=no
 cat > $TMPC << EOF
+#pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#pragma GCC diagnostic pop
 
 int main(void) {
     return 0;
diff --git a/coroutine-ucontext.c b/coroutine-ucontext.c
index 867a662..4bf2cde 100644
--- a/coroutine-ucontext.c
+++ b/coroutine-ucontext.c
@@ -169,6 +169,7 @@  Coroutine *qemu_coroutine_new(void)
 #ifdef CONFIG_VALGRIND_H
 #ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
 /* Work around an unused variable in the valgrind.h macro... */
+#pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
 #endif
 static inline void valgrind_stack_deregister(CoroutineUContext *co)
@@ -176,7 +177,7 @@  static inline void valgrind_stack_deregister(CoroutineUContext *co)
     VALGRIND_STACK_DEREGISTER(co->valgrind_stack_id);
 }
 #ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
-#pragma GCC diagnostic error "-Wunused-but-set-variable"
+#pragma GCC diagnostic pop
 #endif
 #endif
 
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
index b032f52..882e2a3 100644
--- a/include/ui/qemu-pixman.h
+++ b/include/ui/qemu-pixman.h
@@ -8,11 +8,12 @@ 
 
 /* pixman-0.16.0 headers have a redundant declaration */
 #ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
+#pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wredundant-decls"
 #endif
 #include <pixman.h>
 #ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
-#pragma GCC diagnostic error "-Wredundant-decls"
+#pragma GCC diagnostic pop
 #endif
 
 #include "qemu/typedefs.h"
diff --git a/ui/gtk.c b/ui/gtk.c
index 1e105e2..c2c6e38 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -38,11 +38,12 @@ 
 
 #ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
 /* Work around an -Wstrict-prototypes warning in GTK headers */
+#pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
 #endif
 #include <gtk/gtk.h>
 #ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
-#pragma GCC diagnostic error "-Wstrict-prototypes"
+#pragma GCC diagnostic pop
 #endif