Skip to content

Unable to override calling convention for individual functions when using -mrtd #10963

@DimitryAndric

Description

@DimitryAndric
Bugzilla Link 10591
Resolution FIXED
Resolved on Aug 05, 2011 11:37
Version trunk
OS All
CC @efriedma-quic,@pwo

Extended Description

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzilla

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions