[cfe-commits] r169705 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td include/clang/Basic/TargetInfo.h include/clang/Sema/Sema.h lib/Basic/Targets.cpp lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclAttr.cpp lib/Sema/SemaDeclCXX.cpp test/SemaCXX/virtual-override-x64.cpp test/SemaCXX/virtual-override-x86.cpp
Eli Friedman
eli.friedman at gmail.com
Mon Dec 10 15:23:24 PST 2012
On Sun, Dec 9, 2012 at 9:45 AM, Aaron Ballman <aaron at aaronballman.com> 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
More information about the cfe-commits
mailing list