[PATCH] D136684: [clang][ASTImporter] Remove use of ParentMapContext.
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 26 07:26:54 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa688b5f92a17: [clang][ASTImporter] Remove use of ParentMapContext. (authored by balazske).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136684/new/
https://reviews.llvm.org/D136684
Files:
clang/lib/AST/ASTImporter.cpp
Index: clang/lib/AST/ASTImporter.cpp
===================================================================
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -34,7 +34,6 @@
#include "clang/AST/LambdaCapture.h"
#include "clang/AST/NestedNameSpecifier.h"
#include "clang/AST/OperationKinds.h"
-#include "clang/AST/ParentMapContext.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
@@ -3230,16 +3229,19 @@
return false;
}
-// Returns true if the statement S has a parent declaration that has a
-// DeclContext that is inside (or equal to) DC. In a specific use case if DC is
-// a FunctionDecl, check if statement S resides in the body of the function.
+// Check if there is a declaration that has 'DC' as parent context and is
+// referenced from statement 'S' or one of its children. The search is done in
+// BFS order through children of 'S'.
static bool isAncestorDeclContextOf(const DeclContext *DC, const Stmt *S) {
- ParentMapContext &ParentC = DC->getParentASTContext().getParentMapContext();
- DynTypedNodeList Parents = ParentC.getParents(*S);
- while (!Parents.empty()) {
- if (const Decl *PD = Parents.begin()->get<Decl>())
- return isAncestorDeclContextOf(DC, PD);
- Parents = ParentC.getParents(*Parents.begin());
+ SmallVector<const Stmt *> ToProcess;
+ ToProcess.push_back(S);
+ while (!ToProcess.empty()) {
+ const Stmt *CurrentS = ToProcess.pop_back_val();
+ ToProcess.append(CurrentS->child_begin(), CurrentS->child_end());
+ if (const auto *DeclRef = dyn_cast<DeclRefExpr>(CurrentS))
+ if (const Decl *D = DeclRef->getDecl())
+ if (isAncestorDeclContextOf(DC, D))
+ return true;
}
return false;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136684.470812.patch
Type: text/x-patch
Size: 1744 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221026/54c7c6f7/attachment.bin>
More information about the cfe-commits
mailing list