[LLVMbugs] [Bug 23437] New: Possible miscompile with arm64

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed May 6 11:36:42 PDT 2015


            Bug ID: 23437
           Summary: Possible miscompile with arm64
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: AArch64
          Assignee: unassignedbugs at nondot.org
          Reporter: nicolasweber at gmx.de
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

This assert fails when building with trunk clang when targeting arm64:

$ cat test.cc
#include <assert.h>

int main(int argc, char **argv) {
  const struct {
    const char* to_escape;
    const char* escaped;
  } cases[] = {
    {"\xe5\xc4\x4f\x05\xb6\xfd\0", "\\u00E5\\u00C4O\\u0005\\u00B6\\u00FD"},

  assert((unsigned char)cases[0].to_escape[0] == 0xe5);
  return 0;
$ Release+Asserts/bin/clang++ -isysroot
-O0 -gdwarf-2 -fvisibility=hidden -miphoneos-version-min=7.0 -arch arm64
-std=c++11 -stdlib=libc++ -fno-rtti -fno-exceptions -fvisibility-inlines-hidden
-fno-threadsafe-statics  -fcolor-diagnostics -fstack-protector-all  -c test.cc
-o test.o
$ Release+Asserts/bin/clang++ -Wl,-search_paths_first -Wl,-ObjC
-miphoneos-version-min=7.0 -isysroot
-arch arm64 -L. -stdlib=libc++ -o foo test.o

Here's the disassembly of the relevant bits of main:

0000000100007e60         stp        x29, x30, [sp, #0xfffffff0]!               
; XREF=0x1000000d0
0000000100007e64         mov        x29, sp
0000000100007e68         sub        sp, sp, #0x20
0000000100007e6c         adrp       x8, #0x100008000                           
; imp___got____stack_chk_guard
0000000100007e70         add        x8, x8, #0x28                              
; __ZZ4mainE5cases

0000000100007e74         adrp       x10, #0x100008000                          
 ; imp___got____stack_chk_guard
0000000100007e78         ldr        x10, [x10]
0000000100007e7c         ldr        x10, [x10]
0000000100007e80         mov        x2, x10
0000000100007e84         stur       x10, [x29, #0xfffffff8]
0000000100007e88         stur       wzr, [x29, #0xfffffff4]
0000000100007e8c         str        w0, [sp, #0x10]
0000000100007e90         str        x1, [sp, #0x8]
0000000100007e94         ldr        x8, [x8]
0000000100007e98         ldrb       w0, [x8]

0000000100007e9c         cmp        w0, #0xe5
0000000100007ea0         cset       w0, eq

0000000100007ea4         eor        w0, w0, #0x1

0000000100007ea8         cmp        w0, #0x0
0000000100007eac         str        x2, [sp]
0000000100007eb0         b.eq       0x100007ed4

0000000100007eb4         adrp       x8, #0x100007000                           
; 0x100007000 (__mh_execute_header + 0x7000)
0000000100007eb8         add        x0, x8, #0xf78                             
; "main"
0000000100007ebc         adrp       x8, #0x100007000                           
; 0x100007000 (__mh_execute_header + 0x7000)
0000000100007ec0         add        x1, x8, #0xf7d                             
; "test.cc"
0000000100007ec4         orr        w2, wzr, #0x10
0000000100007ec8         adrp       x8, #0x100007000                           
; 0x100007000 (__mh_execute_header + 0x7000), argument #1 for method
0000000100007ecc         add        x3, x8, #0xf85                             
; "(unsigned char)cases[0].to_escape[0] == 0xe5"
0000000100007ed0         bl         imp___stubs____assert_rtn

I can't read arm64 well enough to say if that makes sense.

The assert doesn't fire with xcode's clang, so maybe it's a somewhat recent

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150506/4231d8e9/attachment.html>

More information about the llvm-bugs mailing list