On 02/25/2016 04:15 AM, Pavel Hrdina wrote:
On Wed, Feb 24, 2016 at 02:29:58PM -0700, Eric Blake wrote:
> gcc 6.0 added an annoying warning:
>
> fdstream.c: In function 'virFDStreamWrite':
> fdstream.c:390:29: error: logical 'or' of equal expressions
[-Werror=logical-op]
> if (errno == EAGAIN || errno == EWOULDBLOCK) {
> ^~
> fdstream.c: In function 'virFDStreamRead':
> fdstream.c:440:29: error: logical 'or' of equal expressions
[-Werror=logical-op]
> if (errno == EAGAIN || errno == EWOULDBLOCK) {
> ^~
>
> This makes it impossible to build out-of-the-box on rawhide,
> and we aren't guaranteed that the gcc bug will be fixed in a
> timely manner:
>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602
>
> So work around it by further complicating the logic to thwart the
> compiler.
Personally I don't like this approach. Why don't we take that 6 line reproducer
from GCC BZ and create a m4 macro that will detect that bug in GCC and turn off
the logical-op check? For me this solution is much cleaner than introducing
some ugly workaround in our code just because GCC has a bug.
Killing it for the entire tree seems like a rather heavy hammer. I'd
rather just add #pragma push/pop to ignore the warning around the few
places that it incorrectly triggers, leaving the rest of the tree still
protected (as it does catch real bugs, when we aren't dealing with
sometimes-aliased values coming from headers).
I'll work up a v2 along those lines, so we can compare the two approaches.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org