CC_Default is used when there is no specified calling convention, but the answer to "what is the default calling convention" shouldn't be "it's default." So the changes clarified that -- the default calling convention (when no convention is specified) is CC_Default, but when you ask the target "what is your default calling convention", the answer is a concrete calling convention.
I do believe the usage is correct this way. ~Aaron On Mon, Dec 10, 2012 at 6:23 PM, Eli Friedman <[email protected]> wrote: > On Sun, Dec 9, 2012 at 9:45 AM, Aaron Ballman <[email protected]> wrote: >> Author: aaronballman >> Date: Sun Dec 9 11:45:41 2012 >> New Revision: 169705 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=169705&view=rev >> Log: >> Virtual method overrides can no longer have mismatched calling conventions. >> This fixes PR14339. >> >> Added: >> cfe/trunk/test/SemaCXX/virtual-override-x64.cpp >> cfe/trunk/test/SemaCXX/virtual-override-x86.cpp >> Modified: >> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> cfe/trunk/include/clang/Basic/TargetInfo.h >> cfe/trunk/include/clang/Sema/Sema.h >> cfe/trunk/lib/Basic/Targets.cpp >> cfe/trunk/lib/Sema/SemaDecl.cpp >> cfe/trunk/lib/Sema/SemaDeclAttr.cpp >> cfe/trunk/lib/Sema/SemaDeclCXX.cpp >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=169705&r1=169704&r2=169705&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Sun Dec 9 11:45:41 >> 2012 >> @@ -1135,6 +1135,10 @@ >> "than the function it overrides}1,2">; >> def note_overridden_virtual_function : Note< >> "overridden virtual function is here">; >> +def err_conflicting_overriding_cc_attributes : Error< >> + "virtual function %0 has different calling convention attributes " >> + "%diff{($) than the function it overrides (which has calling convention >> $)|" >> + "than the function it overrides}1,2">; >> >> def err_covariant_return_inaccessible_base : Error< >> "invalid covariant return for virtual function: %1 is a " >> >> Modified: cfe/trunk/include/clang/Basic/TargetInfo.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=169705&r1=169704&r2=169705&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Basic/TargetInfo.h (original) >> +++ cfe/trunk/include/clang/Basic/TargetInfo.h Sun Dec 9 11:45:41 2012 >> @@ -742,13 +742,19 @@ >> >> bool isBigEndian() const { return BigEndian; } >> >> + enum CallingConvMethodType { >> + CCMT_Unknown, >> + CCMT_Member, >> + CCMT_NonMember >> + }; >> + >> /// \brief Gets the default calling convention for the given target and >> /// declaration context. >> - virtual CallingConv getDefaultCallingConv() const { >> + virtual CallingConv getDefaultCallingConv(CallingConvMethodType MT) const >> { >> // Not all targets will specify an explicit calling convention that we >> can >> // express. This will always do the right thing, even though it's not >> // an explicit calling convention. >> - return CC_Default; >> + return CC_C; >> } > > You're messing with the usage of CC_Default in a really weird way. In > what cases do we still use it? Are you sure it still works the way > it's supposed to? > > -Eli _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
