diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td index 92c6b0bbffc3..805dcab2e008 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; + InGroup, 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 000000000000..f30e5d45e4dc --- /dev/null +++ b/clang/test/Lexer/Inputs/final-macro-system.h @@ -0,0 +1,4 @@ +// expected-warning@+1{{macro 'SYSTEM_MACRO' has been marked as final and should not be undefined}} +#undef SYSTEM_MACRO +// expected-warning@+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 498773d9dfdf..2992714dd8a5 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@+1 2{{macro marked 'final' here}} +#pragma clang final(SYSTEM_MACRO) +#include