C++-11 [qoi]. Do not warn on missing 'verride' on use of
authorFariborz Jahanian <fjahanian@apple.com>
Fri, 31 Oct 2014 19:56:27 +0000 (19:56 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Fri, 31 Oct 2014 19:56:27 +0000 (19:56 +0000)
macros in user code when macros themselves are defined
in a system header. rdar://18295240

llvm-svn: 220992

clang/lib/Sema/SemaDeclCXX.cpp
clang/test/SemaCXX/Inputs/override-system-header.h [new file with mode: 0644]
clang/test/SemaCXX/override-in-system-header.cpp [new file with mode: 0644]

index 47a8492..adbcafe 100644 (file)
@@ -1905,6 +1905,12 @@ void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D) {
       isa<CXXDestructorDecl>(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/clang/test/SemaCXX/Inputs/override-system-header.h b/clang/test/SemaCXX/Inputs/override-system-header.h
new file mode 100644 (file)
index 0000000..9a1bde5
--- /dev/null
@@ -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/clang/test/SemaCXX/override-in-system-header.cpp b/clang/test/SemaCXX/override-in-system-header.cpp
new file mode 100644 (file)
index 0000000..88c53e4
--- /dev/null
@@ -0,0 +1,17 @@
+// RUN: %clang_cc1 -std=c++11 -isystem %S/Inputs %s -verify
+// expected-no-diagnostics
+// rdar://18295240
+
+#include <override-system-header.h>
+
+struct A
+{
+  virtual void x();
+  END_COM_MAP;
+};
+struct B : A
+{
+  virtual void x() override;
+  END_COM_MAP;
+};