[clang] 3e7ad1f - Emit final macro diagnostics in system headers

Chris Bieneman via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 11 11:52:05 PST 2021


Author: Chris Bieneman
Date: 2021-11-11T13:51:26-06:00
New Revision: 3e7ad1f2b2c0a753749eaba88d369d6032a50764

URL: https://github.com/llvm/llvm-project/commit/3e7ad1f2b2c0a753749eaba88d369d6032a50764
DIFF: https://github.com/llvm/llvm-project/commit/3e7ad1f2b2c0a753749eaba88d369d6032a50764.diff

LOG: Emit final macro diagnostics in system headers

Final macro diagnostics should log from system headers.

As planned, final macros are hard-mode. They always log diagnostics.

Added: 
    clang/test/Lexer/Inputs/final-macro-system.h

Modified: 
    clang/include/clang/Basic/DiagnosticLexKinds.td
    clang/test/Lexer/final-macro.c

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td
index 92c6b0bbffc30..805dcab2e0084 100644
--- a/clang/include/clang/Basic/DiagnosticLexKinds.td
+++ b/clang/include/clang/Basic/DiagnosticLexKinds.td
@@ -564,7 +564,7 @@ def note_pp_macro_annotation :
 def warn_pragma_final_macro :
   ExtWarn<"macro %0 has been marked as final and should not be "
           "%select{undefined|redefined}1">,
-  InGroup<FinalMacro>;
+  InGroup<FinalMacro>,  ShowInSystemHeader;
 
 // - #pragma execution_character_set(...)
 def warn_pragma_exec_charset_expected :

diff  --git a/clang/test/Lexer/Inputs/final-macro-system.h b/clang/test/Lexer/Inputs/final-macro-system.h
new file mode 100644
index 0000000000000..f30e5d45e4dcd
--- /dev/null
+++ b/clang/test/Lexer/Inputs/final-macro-system.h
@@ -0,0 +1,4 @@
+// expected-warning at +1{{macro 'SYSTEM_MACRO' has been marked as final and should not be undefined}}
+#undef SYSTEM_MACRO
+// expected-warning at +1{{macro 'SYSTEM_MACRO' has been marked as final and should not be redefined}}
+#define SYSTEM_MACRO WoahMoar

diff  --git a/clang/test/Lexer/final-macro.c b/clang/test/Lexer/final-macro.c
index 498773d9dfdf5..2992714dd8a5a 100644
--- a/clang/test/Lexer/final-macro.c
+++ b/clang/test/Lexer/final-macro.c
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -Wfinal-macro %s -fsyntax-only -verify
+// RUN: %clang_cc1 -Wfinal-macro %s -fsyntax-only -isystem %S/Inputs -verify
 
 // Test warning production
 #define Foo 1
@@ -43,3 +43,8 @@
 // no diagnostics triggered by these pragmas.
 #pragma clang deprecated(Foo)
 #pragma clang restrict_expansion(Foo)
+
+#define SYSTEM_MACRO Woah
+// expected-note at +1 2{{macro marked 'final' here}}
+#pragma clang final(SYSTEM_MACRO)
+#include <final-macro-system.h>


        


More information about the cfe-commits mailing list