[cfe-commits] [Windows] Use thiscall as the default calling convention for class methods
John McCall
rjmccall at apple.com
Fri May 11 10:55:27 PDT 2012
On May 11, 2012, at 6:58 AM, Timur Iskhodzhanov wrote:
> Can you please review the attached patch?
>
> In two words what it does is
> it overrides the CC_Default calling convention with
> context.getDefaultMethodCallConv()
> for all the used method definitions and calls.
>
> What I personally don't like is that the method declarations are
> stored with CC_Default and we have to replace that with
> context.getDefaultMethodCallConv() wherever we use it.
> Unfortunately, we can't change the CC in the global declarations storage.
> I'd prefer to put the declarations into the storage with the right CC
> but not sure:
> a) if we should do it
> b) how to do it
> c) it's possible at all
I don't think modifying the AST is the right thing to do here anyway;
CC_Default is really the right way to model this.
> OTOH, it looks like there are only two places we need to alter the
> calling convention: method call and method definition :)
> So maybe I'm trying too hard to generalize...
I mostly like your patch, but I think it'd be slightly better to make the
terminal arrangeFunctionType take some sort of "function kind"
parameter (function vs. C++ instance method) and then have
ClangCallConvToLLVMCallConv consider that when mapping
CC_Default.
Also, please put this in a more generically-named test, something like
microsoft-abi-methods.cpp. I'm sure there will be other changes that
we'll want to test for as time goes on.
Also, please test:
- declarations of instance methods using CC_Default
- declarations of instance methods with an explicit CC
- declarations of static methods (to make sure they aren't thiscall)
- direct calls to instance methods using CC_Default
- direct calls to instance methods with an explicit CC
- direct calls to static methods using instance call syntax
John.
More information about the cfe-commits
mailing list