[LLVMdev] updated code size comparison

Török Edwin edwintorok at gmail.com
Wed Jan 20 12:58:15 PST 2010


On 01/20/2010 10:49 PM, John Regehr wrote:
>> Indeed, but can't an analysis find at least one value for each variable
>> where the behavior is not undefined?
>> Such a value must exist, or the entire function is useless if it always
>> has undefined behavior.
>
> Good point :).
>
>> Sure, testing on 1 such value (or a random) value won't prove that the
>> result is correct, but may help finding trivial
>> miscompilations like the neon_helper case.
>
> Are you absolutely sure it's a miscompilation?  I have already shot
> myself in the foot a couple times on the GCC mailing list or bugzilla
> by pointing out a bug that turned out to be code with subtle undefined
> behavior...

Well if it is not then it is a qemu bug, so it is a bug in either case,
you just have to report it to another bugzilla ;)
The code does conversions by assigning to one union member and reading
from another.
AFAIK that was a GCC language extension, maybe they don't support it in
the latest release, or accidentaly broke it. I don't know.

Someone should reduce a testcase for gcc-head to see exactly what it is
about. My gcc (4.4) doesn't miscompile it.

Either way I'd rather see a warning from gcc when it decides to optimize
the entire function away.

>
>> Alternatively a testcase could be manually constructed for the top 10
>> functions in the size comparison charts,
>> and see whether they are miscompiled. Repeat until top 10 has no
>> miscompilations.
>
> Tell you what: if I get enough test cases like this, I'll write the
> test harness supporting it.  I don't have time to do this kind of code
> inspection myself.

Makes sense.

>
> There has been talk (I don't remember where) about a Clang option for
> detecting undefined behavior.  Is there any progress on this?  This
> could be used to enable automated random testing.

*Yes, -fcatch-undefined-behavior.
http://clang.llvm.org/docs/UsersManual.html#codegen
*
Best regards,
--Edwin



More information about the llvm-dev mailing list