diff options
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 7 | ||||
-rw-r--r-- | clang/test/SemaCXX/virtual-override.cpp | 3 |
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 1a4ced78708..76623a90d56 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -12058,6 +12058,13 @@ bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, if (NewCC == OldCC) return false; + // If the calling conventions mismatch because the new function is static, + // suppress the calling convention mismatch error; the error about static + // function override (err_static_overrides_virtual from + // Sema::CheckFunctionDeclaration) is more clear. + if (New->getStorageClass() == SC_Static) + return false; + Diag(New->getLocation(), diag::err_conflicting_overriding_cc_attributes) << New->getDeclName() << New->getType() << Old->getType(); diff --git a/clang/test/SemaCXX/virtual-override.cpp b/clang/test/SemaCXX/virtual-override.cpp index b477438ee98..48444a65aed 100644 --- a/clang/test/SemaCXX/virtual-override.cpp +++ b/clang/test/SemaCXX/virtual-override.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 +// RUN: %clang_cc1 -fsyntax-only -cxx-abi itanium -verify %s -std=c++11 +// RUN: %clang_cc1 -fsyntax-only -cxx-abi microsoft -verify %s -std=c++11 namespace T1 { class A { |