[PATCH] D118532: Fix -Wreserved-identifier in presence of system macro

serge via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 31 02:16:57 PST 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGb8290ffa9fd9: Fix -Wreserved-identifier in presence of system macro (authored by serge-sans-paille).

Changed prior to commit:
  https://reviews.llvm.org/D118532?vs=404242&id=404450#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118532/new/

https://reviews.llvm.org/D118532

Files:
  clang/lib/Sema/SemaDecl.cpp
  clang/test/Sema/Inputs/reserved-identifier.h
  clang/test/Sema/reserved-identifier.c


Index: clang/test/Sema/reserved-identifier.c
===================================================================
--- clang/test/Sema/reserved-identifier.c
+++ clang/test/Sema/reserved-identifier.c
@@ -1,4 +1,12 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -Wreserved-identifier -Wno-visibility %s
+// RUN: %clang_cc1 -isystem %S/Inputs -fsyntax-only -verify -Wreserved-identifier -Wno-visibility %s
+
+#include <reserved-identifier.h>
+
+__I_AM_A_SYSTEM_MACRO() // no-warning
+
+void test_system_macro_expansion() {
+  SOME_SYSTEM_MACRO(); // no-warning
+}
 
 #define __oof foo__ // expected-warning {{macro name is a reserved identifier}}
 
@@ -58,7 +66,7 @@
 
 extern char *_strdup(const char *); // expected-warning {{identifier '_strdup' is reserved because it starts with '_' at global scope}}
 
-// Don't warn on redecleration
+// Don't warn on redeclaration
 extern char *_strdup(const char *); // no-warning
 
 void ok() {
Index: clang/test/Sema/Inputs/reserved-identifier.h
===================================================================
--- /dev/null
+++ clang/test/Sema/Inputs/reserved-identifier.h
@@ -0,0 +1,4 @@
+int __i_come_from_a_system_header; // no-warning
+#define __I_AM_A_SYSTEM_MACRO()    // no-warning
+
+#define SOME_SYSTEM_MACRO() int __i_come_from_a_system_macro
Index: clang/lib/Sema/SemaDecl.cpp
===================================================================
--- clang/lib/Sema/SemaDecl.cpp
+++ clang/lib/Sema/SemaDecl.cpp
@@ -5703,6 +5703,13 @@
   return false;
 }
 
+/// Returns true if the declaration is declared in a system header or from a
+/// system macro.
+static bool isFromSystemHeader(SourceManager &SM, const Decl *D) {
+  return SM.isInSystemHeader(D->getLocation()) ||
+         SM.isInSystemMacro(D->getLocation());
+}
+
 void Sema::warnOnReservedIdentifier(const NamedDecl *D) {
   // Avoid warning twice on the same identifier, and don't warn on redeclaration
   // of system decl.
@@ -5710,9 +5717,10 @@
     return;
   ReservedIdentifierStatus Status = D->isReserved(getLangOpts());
   if (Status != ReservedIdentifierStatus::NotReserved &&
-      !Context.getSourceManager().isInSystemHeader(D->getLocation()))
+      !isFromSystemHeader(Context.getSourceManager(), D)) {
     Diag(D->getLocation(), diag::warn_reserved_extern_symbol)
         << D << static_cast<int>(Status);
+  }
 }
 
 Decl *Sema::ActOnDeclarator(Scope *S, Declarator &D) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118532.404450.patch
Type: text/x-patch
Size: 2403 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220131/77f50698/attachment-0001.bin>


More information about the cfe-commits mailing list