[LLVMbugs] [Bug 19909] New: va_arg fails with __int128

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sat May 31 15:58:27 PDT 2014


http://llvm.org/bugs/show_bug.cgi?id=19909

            Bug ID: 19909
           Summary: va_arg fails with __int128
           Product: new-bugs
           Version: trunk
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: nenad at intrepid.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Created attachment 12583
  --> http://llvm.org/bugs/attachment.cgi?id=12583&action=edit
Demonstrate __int128 va_arg failure

The attached example fails on Clang/LLVM trunk (or 3.4 or Apple 3.4) and passes
when compiled with gcc 4.8.2.  The code simple tries to pass multiple __int128
after two ints and a pointer.  I debugged it a bit and it seems that the
"overflow_arg_area" pointer in va_list is wrong by 8 bytes, which might
indicate some alignment problem. 

I also checked how __int128 is passed to the function.  It seems that Clang is
capable of splitting the __int128 where lower part is passed in a register and
upper part on the stack.  GCC does not split __int128 if it does not have 2
registers available.  This might explain the wrong 8 bytes offset for the
"overflow_arg_area" as va_start does not adjust for the split register.

-- 
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/20140531/178eee50/attachment.html>


More information about the llvm-bugs mailing list