qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] clang 3.5.0 errors


From: John Snow
Subject: Re: [Qemu-devel] clang 3.5.0 errors
Date: Wed, 18 Mar 2015 18:22:00 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0



On 03/18/2015 04:28 PM, Peter Maydell wrote:
On 18 March 2015 at 19:22, John Snow <address@hidden> wrote:
There's one case of error here that's interesting that ccache unearths:

we use a gnu extension to give return values to compound statement blocks,
then wrap these blocks into macros as if they were functions.

The practical outcome here is that these blocks have return codes that we
often don't check, so clang will spit out "unused value" warnings if we
compile these after preprocessing, like ccache will tend to do.

This warning is potentially valid: if these calls can fail, we should
probably either be asserting that a failure did not occur OR we should
switch to a variant without a return code, if failure is impossible in these
locations.

An example of this is in linux-user/elfload.c where we define the
NEW_AUX_ENT() macro which in turn uses the put_user_ual(val, sp) macro. When
this is expanded, it turns into a compound statement where we discard the
expression result, so clang whines.

Of course, this all goes away if you disable ccache, but is it worth
adjusting this particular usage anyway?

I agree that ideally we wouldn't do that, but why is this
only visible via ccache? If ccache creates warnings that
aren't visible when directly running the c compiler then
that's a bug in ccache even if the warnings are in theory
interesting.


You're asking the hard questions.

My hunch is that when the macro is functionaized like it is, clang's static analysis treats it as such and decides not to warn about not checking the return code, much like it won't for real functions.

When it's flattened, it loses its semantic nature as a function and it becomes more of a "useless statement" warning.

It's definitely a bug in ccache, clang or both.

I just found this particular instance of a ccache-provoked warning interesting because it does have some validity to it and I wanted to raise the issue.

If nobody cares, then, well. Nobody cares.

More mechanical, less-interesting clang fixes will hit the list shortly.

--js



reply via email to

[Prev in Thread] Current Thread [Next in Thread]