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: [email protected]
Reporter: [email protected]
CC: [email protected]
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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs