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

           Summary: Unable to override calling convention for individual
                    functions when using -mrtd
           Product: new-bugs
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]


When you compile a program with -mrtd, the default calling convention
will be switched to stdcall.  However, you should be able to override
this for individual functions, as stated here:

http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Function-Attributes.html#index-mrtd-2410

"cdecl -- On the Intel 386, the cdecl attribute causes the compiler to
assume that the calling function will pop off the stack space used to
pass arguments. This is useful to override the effects of the -mrtd
switch."

However, it looks like clang forces every function to have the stdcall
convention, and then errors out whenever you attempt to override it for
a particular function:

  void __attribute__((cdecl)) foo(int i) {}
  void bar(int i) {}

This compiles fine using 'gcc -mrtd -c', but 'clang -mrtd -c' complains:

  convtest.c:1:21: error: cdecl and stdcall attributes are not compatible
  void __attribute__((cdecl)) foo(int i) {}
              ^
  1 error generated.

It would be nice if we could get similar behaviour from clang.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- 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

Reply via email to