[libvirt] Compiler warnings

Wen Congyang wency at cn.fujitsu.com
Tue Oct 18 02:02:36 UTC 2011


At 10/18/2011 01:03 AM, Eric Blake Write:
> On 10/17/2011 10:17 AM, Alex Jia wrote:
>> Eric,
>> It's latest libvirt upstream, current commit id is commit 0a71c79.
>>
>> # rpm -q glibc
>> glibc-2.12-1.42.el6.x86_64
>>
> 
>> 430         if (strchr(toescape, *cur))
> 
>>>>      CC     libvirt_util_la-buf.lo
>>>> util/buf.c: In function 'virBufferEscape':
>>>> util/buf.c:430: warning: logical '&&' with non-zero constant will
>>>> always
>>>> evaluate as true [-Wlogical-op]
> 
> Something's screwy.  There's no && in that line, unless strchr() is a
> macro based on your particular compilation flags.  I'm suspecting that
> this is a case of -D_FORTIFY_SOURCE going awry.  I don't see how this
> could possibly be a libvirt issue; more likely, it is an issue with the
> choice of compiler flags you are using, coupled with an issue in the
> system headers causing the preprocessor to expand strchr() into
> something that tickles a spurious gcc warning.
> 

Yes, strchr() is a macro, I use -E, and get the following:

    while (*cur != 0) {
        if ((__extension__ (__builtin_constant_p (*cur) && !__builtin_constant_p (toescape) && (*cur) == '\0' ? (char *) __rawmemchr (toescape, *cur) : __builtin_strchr (toescape, *cur))))
            *out++ = '\\';
        *out++ = *cur;
        cur++;
    }
    *out = 0;

Thanks
Wen Congyang




More information about the libvir-list mailing list