[clang] Optimize -Wunsafe-buffer-usage. (PR #124554)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 29 02:19:14 PST 2025
================
@@ -79,21 +81,39 @@ static std::string getDREAncestorString(const DeclRefExpr *DRE,
} // namespace
#endif /* NDEBUG */
-namespace clang::ast_matchers {
+class CustomMatcher {
+public:
+ virtual bool matches(const DynTypedNode &DynNode, ASTContext &Ctx,
+ const UnsafeBufferUsageHandler &Handler) = 0;
+ virtual ~CustomMatcher() = default;
+};
+
+struct MatchResult {
+public:
+ std::map<std::string, DynTypedNode>
+ Nodes; // DynTypedNode needed to store different types of Nodes, not
+ // necessarily sharing the same base.
+
+ template <typename T> const T *getNodeAs(StringRef ID) const {
+ auto It = Nodes.find(std::string(ID));
+ if (It == Nodes.end()) {
+ return nullptr;
+ }
+ return It->second.get<T>();
+ }
+};
+
// A `RecursiveASTVisitor` that traverses all descendants of a given node "n"
// except for those belonging to a different callable of "n".
class MatchDescendantVisitor : public DynamicRecursiveASTVisitor {
public:
// Creates an AST visitor that matches `Matcher` on all
// descendants of a given node "n" except for the ones
// belonging to a different callable of "n".
- MatchDescendantVisitor(const internal::DynTypedMatcher *Matcher,
- internal::ASTMatchFinder *Finder,
- internal::BoundNodesTreeBuilder *Builder,
- internal::ASTMatchFinder::BindKind Bind,
+ MatchDescendantVisitor(CustomMatcher &Matcher, bool BindAll,
const bool ignoreUnevaluatedContext)
- : Matcher(Matcher), Finder(Finder), Builder(Builder), Bind(Bind),
- Matches(false), ignoreUnevaluatedContext(ignoreUnevaluatedContext) {
+ : Matcher(&Matcher), BindAll(BindAll), Matches(false),
----------------
ivanaivanovska wrote:
Changed to FindAll.
https://github.com/llvm/llvm-project/pull/124554
More information about the cfe-commits
mailing list