[clang] [Parser][BoundsSafety] Print attribute as macro if it's system defined (PR #107619)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 16 09:56:33 PDT 2024


================
@@ -5055,6 +5058,17 @@ void Parser::ParseLexedCAttribute(LateParsedAttribute &LA, bool EnterScope,
   ParseGNUAttributeArgs(&LA.AttrName, LA.AttrNameLoc, Attrs, nullptr, nullptr,
                         SourceLocation(), ParsedAttr::Form::GNU(), nullptr);
 
+  const auto &SM = PP.getSourceManager();
+  CharSourceRange ExpansionRange = SM.getExpansionRange(LA.AttrNameLoc);
+  StringRef FoundName =
+      Lexer::getSourceText(ExpansionRange, SM, PP.getLangOpts())
+          .split('(')
+          .first;
+  IdentifierInfo *MacroII = PP.getIdentifierInfo(FoundName);
+  for (unsigned i = 0; i < Attrs.size(); ++i)
+    Attrs[i].setMacroIdentifier(MacroII, ExpansionRange.getBegin(),
----------------
erichkeane wrote:

No specific example, but there are tons of macros that folks define to hold a giant collection of attributes (I think we have LLVM_INLINE or something like that which has a handful).  I just want to make sure that if we get that situation that we handle it reasonably.

https://github.com/llvm/llvm-project/pull/107619


More information about the cfe-commits mailing list