================ @@ -697,27 +698,61 @@ static bool isTokenAtLoc(const SourceManager &SM, const LangOptions &LangOpts, return !Invalid && Text == TokenText; } -std::optional<SourceLocation> -getExpansionLocOfMacro(StringRef MacroName, SourceLocation Loc, - const ASTContext &Context) { +namespace { +struct SourceLocationHash { + std::size_t operator()(const SourceLocation &Loc) const { + return Loc.getHashValue(); + } +}; + +struct SourceLocationEqual { + bool operator()(const SourceLocation &LHS, const SourceLocation &RHS) const { + return LHS == RHS; + } +}; + +} // namespace + +static std::optional<SourceLocation> getExpansionLocOfMacroRecursive( + StringRef MacroName, SourceLocation Loc, const ASTContext &Context, + std::unordered_set<SourceLocation, SourceLocationHash, SourceLocationEqual> + &CheckedLocations) { auto &SM = Context.getSourceManager(); const LangOptions &LangOpts = Context.getLangOpts(); while (Loc.isMacroID()) { + if (CheckedLocations.count(Loc)) { + return std::nullopt; + } ---------------- AaronBallman wrote:
```suggestion if (CheckedLocations.count(Loc)) return std::nullopt; ``` We have very odd coding style rules, sorry. :-) https://llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-statement-bodies-of-if-else-loop-statements https://github.com/llvm/llvm-project/pull/117143 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits