aaron.ballman added inline comments.

================
Comment at: clang/include/clang/ASTMatchers/ASTMatchers.h:3115
+
+  if (Finder->getASTContext().getParentMapContext().getTraversalKind() !=
+          TK_AsIs &&
----------------
steveire wrote:
> aaron.ballman wrote:
> > Given how often this gets repeated (and what a mouthful it is), how about 
> > adding a static helper function `ClassifyTraversal()` (or some such) that 
> > returns the traversal kind given a `Finder`? (Alternatively, 
> > `isTraversalAsIs()` or some specific traversal behavior.)
> Done in D91144.
Thanks! Just an FYI, but it looks like the changes in D91144 are reflected in 
this review. I don't mind but wanted to mention it in case it causes you 
problems when trying to apply the commits to master.


================
Comment at: clang/include/clang/ASTMatchers/ASTMatchers.h:5466
+            TK_AsIs &&
+        FD->isDefaulted())
+      return false;
----------------
steveire wrote:
> aaron.ballman wrote:
> > In general (not specific to this matcher), I'd like to see some tests for 
> > explicitly defaulted functions vs implicitly defaulted ones. e.g., I think 
> > we should handle these differently, shouldn't we?
> > ```
> > struct S {}; // Has implicitly defaulted constructor
> > struct T {
> >   T() = default; // Has explicitly defaulted constructor
> > };
> > ```
> > Specific to this matcher, I am a bit concerned about the behavior of 
> > answering "isDefinition" based on whether a function is defaulted or not. 
> > The user has already gotten some `FunctionDecl` object, so why would the 
> > implicit vs explicit nature of the declaration matter for deciding whether 
> > the node is a definition? The behavior with `hasBody` makes sense to me 
> > because the body may be implicitly provided, but whether something is or is 
> > not a definition is a different kind of question.
> > 
> I agree for both `isDefinition` and `isInline`. `hasBody` is the one to use 
> for these cases.
Awesome, thanks for verifying!


================
Comment at: clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp:2368
   NonTrivial m_nt;
-  HasCtorInits() : NoSpecialMethods(), m_i(42) {}
 };
----------------
Was this originally testing behavior with explicitly initializing an implicitly 
generated ctor (since that's also an implicit node)? Perhaps this change should 
be reverted and we make a second test?


================
Comment at: clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp:2422
+        hasType(cxxRecordDecl(hasName("NoSpecialMethods"))),
+        callee(cxxMethodDecl(isCopyAssignmentOperator()).bind("callTarget")));
+    EXPECT_TRUE(matches(Code, traverse(TK_AsIs, M)));
----------------
You can drop the `.bind()` I believe.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90984/new/

https://reviews.llvm.org/D90984

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to