[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