From 4f98f2cb1544199a0fcd9ad5bbc79bf87b27d912 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Mon, 3 Nov 2014 19:46:18 +0000 Subject: [PATCH] Further restrict issuance of 'override' warning if method is argument to a macro which is defined in system header. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221172 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclCXX.cpp | 12 +++++++----- test/SemaCXX/Inputs/override-system-header.h | 3 +++ test/SemaCXX/override-in-system-header.cpp | 2 ++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 0fae8c86d1..c115745196 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -1905,12 +1905,14 @@ void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D) { isa(MD)) return; - if (MD->getLocation().isMacroID()) { - SourceLocation MacroLoc = getSourceManager().getSpellingLoc(MD->getLocation()); - if (getSourceManager().isInSystemHeader(MacroLoc)) + SourceLocation Loc = MD->getLocation(); + SourceLocation SpellingLoc = Loc; + if (getSourceManager().isMacroArgExpansion(Loc)) + SpellingLoc = getSourceManager().getImmediateExpansionRange(Loc).first; + SpellingLoc = getSourceManager().getSpellingLoc(SpellingLoc); + if (SpellingLoc.isValid() && getSourceManager().isInSystemHeader(SpellingLoc)) return; - } - + if (MD->size_overridden_methods() > 0) { Diag(MD->getLocation(), diag::warn_function_marked_not_override_overriding) << MD->getDeclName(); diff --git a/test/SemaCXX/Inputs/override-system-header.h b/test/SemaCXX/Inputs/override-system-header.h index 9a1bde5a26..9831ab7952 100644 --- a/test/SemaCXX/Inputs/override-system-header.h +++ b/test/SemaCXX/Inputs/override-system-header.h @@ -1,3 +1,6 @@ // override-system-header.h to test out 'override' warning. // rdar://18295240 #define END_COM_MAP virtual unsigned AddRef(void) = 0; + +#define STDMETHOD(method) virtual void method +#define IFACEMETHOD(method) STDMETHOD(method) diff --git a/test/SemaCXX/override-in-system-header.cpp b/test/SemaCXX/override-in-system-header.cpp index 88c53e4430..689585e0cf 100644 --- a/test/SemaCXX/override-in-system-header.cpp +++ b/test/SemaCXX/override-in-system-header.cpp @@ -8,10 +8,12 @@ struct A { virtual void x(); END_COM_MAP; + IFACEMETHOD(Initialize)(); }; struct B : A { virtual void x() override; END_COM_MAP; + IFACEMETHOD(Initialize)(); }; -- 2.50.1