[clang] [ASTMatcher] Fix redundant macro expansion checks in getExpansionLocOfMacro (PR #117143)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 26 05:28:19 PST 2024
================
@@ -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
More information about the cfe-commits
mailing list