[clang] [LifetimeSafety] Cache lifetimebound macro lookup. NFC. (PR #205250)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 22 22:06:45 PDT 2026
================
@@ -442,21 +442,94 @@ class LifetimeSafetySemaHelperImpl : public LifetimeSafetySemaHelper {
}
private:
+ struct LifetimeBoundMacroCache {
+ bool IsBuilt = false;
+ SmallVector<const IdentifierInfo *> Candidates;
+ };
+
+ void buildLifetimeBoundMacroCache(LifetimeBoundMacroCache &Cache,
+ ArrayRef<TokenValue> Tokens) {
+ if (Cache.IsBuilt)
+ return;
+
+ const Preprocessor &PP = S.getPreprocessor();
+ // Collect macro names that were ever defined as a lifetimebound attribute.
+ for (const auto &M : PP.macros()) {
+ const IdentifierInfo *II = M.first;
+ const MacroDirective *MD = PP.getLocalMacroDirectiveHistory(II);
+ if (!MD)
+ continue;
+
+ // Include earlier matching definitions to handle redefinitions.
+ for (MacroDirective::DefInfo Def = MD->getDefinition(); Def;
+ Def = Def.getPreviousDefinition()) {
+ const MacroInfo *MI = Def.getMacroInfo();
+ if (MI->isObjectLike() && Tokens.size() == MI->getNumTokens() &&
----------------
NeKon69 wrote:
I remember we had some plans for adding lifetimebound(2) kind of annotations, so this first check might interfere with that, but that's a long shot (since most of this won't work anyways with parameters to lifetimebound as their spelling will differ), so probably should be fine.
https://github.com/llvm/llvm-project/pull/205250
More information about the cfe-commits
mailing list