http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56561



             Bug #: 56561

           Summary: Miscompilation with -Os -arm

    Classification: Unclassified

           Product: gcc

           Version: 4.6.3

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: target

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: mh+...@glandium.org





Created attachment 29609

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29609

Testcase



(originally posted on http://gcc.gnu.org/ml/gcc/2013-03/msg00051.html)



At Mozilla, we've encountered a GCC 4.6 miscompilation in the ARMv6

build of Firefox for Android. We'd like to evaluate whether this bug is

hitting us in more places than the one we spotted. To that end, we'd

need to know what particular bug in GCC leads to this miscompilation.



The attached file is the preprocessed source, slightly simplified, and with

enough additions to allow it to be self-contained and with a main() that is

able to act on the miscompilation being there or not.



I was able to reproduce the miscompilation with both the GCC 4.6 from the

Android NDK r8d and 4.6.3 from Debian unstable. It apparently happens

for any -march, with -marm, but not -mthumb. It happens at -Os but not

-O2.



The problematic assembly looks like the following. It corresponds to

the C code after the second call to DER_SetUInteger in sftk_mkPrivKey::



  bl      DER_SetUInteger(PLT)

  mov     r3, #0

  cmp     sl, r3

  movne   r0, #2

  moveq   r0, r3



sl/r10 is never set anywhere in the function, so we're getting random

behaviour.



This doesn't happen with GCC 4.7, which suggests it may be a known bug.

Any ideas?



(On an ARM host:)

$ gcc -o pkcs11 pkcs11.i -marm -Os -fno-inline

./pkcs11

$ ./pkcs11

FAIL

$ gcc -o pkcs11 pkcs11.i -marm -O2 -fno-inline

./pkcs11

$ ./pkcs11

PASS

Reply via email to