From 79ac9731ab5c5a20dc68ec83d83b312137921302 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 31 Oct 2014 19:56:27 +0000 Subject: [PATCH] C++-11 [qoi]. Do not warn on missing 'verride' on use of macros in user code when macros themselves are defined in a system header. rdar://18295240 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220992 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclCXX.cpp | 6 ++++++ test/SemaCXX/Inputs/override-system-header.h | 3 +++ test/SemaCXX/override-in-system-header.cpp | 17 +++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 test/SemaCXX/Inputs/override-system-header.h create mode 100644 test/SemaCXX/override-in-system-header.cpp diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 47a8492726..adbcafe433 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -1905,6 +1905,12 @@ void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D) { isa(MD)) return; + if (MD->getLocation().isMacroID()) { + SourceLocation MacroLoc = getSourceManager().getSpellingLoc(MD->getLocation()); + if (getSourceManager().isInSystemHeader(MacroLoc)) + 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 new file mode 100644 index 0000000000..9a1bde5a26 --- /dev/null +++ b/test/SemaCXX/Inputs/override-system-header.h @@ -0,0 +1,3 @@ +// override-system-header.h to test out 'override' warning. +// rdar://18295240 +#define END_COM_MAP virtual unsigned AddRef(void) = 0; diff --git a/test/SemaCXX/override-in-system-header.cpp b/test/SemaCXX/override-in-system-header.cpp new file mode 100644 index 0000000000..88c53e4430 --- /dev/null +++ b/test/SemaCXX/override-in-system-header.cpp @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -std=c++11 -isystem %S/Inputs %s -verify +// expected-no-diagnostics +// rdar://18295240 + +#include + +struct A +{ + virtual void x(); + END_COM_MAP; +}; + +struct B : A +{ + virtual void x() override; + END_COM_MAP; +}; -- 2.40.0