[pulseaudio-discuss] Notes on pulse latest GCC 6 warnings

Arun Raghavan arun at arunraghavan.net
Mon Jun 20 02:56:36 UTC 2016


On Sat, 18 Jun 2016, at 07:07 PM, Ahmed S. Darwish wrote:
> Hi :-)
> 
> Compiling pulse master with gcc v6.1.1 emits several warnings from
> the `padsp' utility. I was going to send a fixing patch, but upon
> further inspection most of them seems to be problems either from
> GCC itself, or from its zealous interpreatation of glibc headers.
> 
> Do we want to release a v9.0 with such warnings? Your input is
> appreciated...
> 
> 
> ==> GCC -Wlogical-op not probably understanding macros
> ------------------------------------------------------
> 
> The first warning is the following:
> 
>    utils/padsp.c: In function ‘sndstat_open’:
>    utils/padsp.c:1440:9: warning: logical ‘and’ of equal expressions
>    [-Wlogical-op]
>             && flags != (O_RDONLY|O_LARGEFILE)
>             ^~
> 
> and it comes from below if condition:
> 
>        if (flags != O_RDONLY
>    #ifdef O_LARGEFILE
>            && flags != (O_RDONLY|O_LARGEFILE)
>    #endif
>           )
> 
> Since O_RDONLY and O_LARGEFILE effectively have the value of
> _zero_ in modern Linux systems, thus it complains because we are
> effectively doing:
> 
>    if (flags != 0 && flags != 0)
> 
> Nonetheless, gcc should've been smart enough to detect we're
> comparing flags with different macros. Other projects also raised
> a similar concern, and this is tracked in the following GCC
> bugzilla entry:
> 
>    "Over-ambitious logical-op warning on EAGAIN vs EWOULDBLOCK"
>    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602
> 
> 
> ==> GCC's tough interpreatation of __nonnull arguments
> ------------------------------------------------------
> 
> The second class of warnigns is the following:
> 
>    utils/padsp.c: In function ‘access’:
>    utils/padsp.c:2450:8: warning: nonnull argument ‘pathname’ compared to
>    NULL [-Wnonnull-compare]
>         if (!pathname ||
>            ^
>    ... and similar other 7 warnings ...
> 
> Here padsp is re-implementing libc's access(3) function. GCC is
> complaining because glibc's declaration of access() marks the
> first string parameter with gcc's __attribute__((nonnull)):
> 
>    /* /usr/include/unistd.h */
>    extern int access (const char *__name, int __type) __THROW __nonnull
>    ((1));
> 
> The same warnings are also issued for padsp's re-implementation
> of stat(), stat64(), __xstat(), etc.
> 
> This is even more strange because the GCC nonnull attribute docs
> state that "The compiler may also choose to make optimizations
> based on the knowledge that certain function arguments will not be
> null":
> 
>    https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Common-Function-Attributes.html
> 
> And this is stated to be the main reason of the new GCC 6 warning.
> Namely, that GCC __will optimize away__ the NULL checks and the
> main reason of this warning is to warn the developer about that:
> 
>    "GCC might optimize such checks away so warn the user when the
>    function contains such comparisions."
>    https://gcc.gnu.org/ml/gcc-patches/2015-09/msg00621.html
> 
>    "So the new warning essentially says 'you promised this check
>    is redundant and it will be removed'."
>    https://gnu.wildebeest.org/blog/mjw/2016/02/15/looking-forward-to-gcc6-many-new-warnings/#comment-5716
> 
> So what is the suggested action for pulse here? For now, we're at
> odds with the system call headers provided by glibc.

I don't think I want to try to fix these for 9.0 (which I hope to roll
out today). GCC 6 does seem to have become a bit overzealous, so I'd
rather see if that changes by 10.0.

I'm interested to hear packagers' opinions about this too, though.

-- Arun


More information about the pulseaudio-discuss mailing list