[llvm-branch-commits] [clang] [clang][test] add testing for the AST matcher reference (PR #94248)

Julian Schmidt via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jun 4 16:45:11 PDT 2024


================
@@ -330,35 +377,46 @@ AST_POLYMORPHIC_MATCHER_P(isExpandedFromMacro,
 
 /// Matches declarations.
 ///
-/// Examples matches \c X, \c C, and the friend declaration inside \c C;
+/// Given
 /// \code
 ///   void X();
 ///   class C {
-///     friend X;
+///     friend void X();
 ///   };
 /// \endcode
+/// \compile_args{-std=c++}
+/// The matcher \matcher{decl()}
+/// matches \match{void X()}, \match{type=name;count=2$C}
+/// and \match{count=2$friend void X()}.
----------------
5chmidti wrote:

```
|-FunctionDecl <line:1:1, col:8> col:6 X 'void ()'
`-CXXRecordDecl <line:2:1, line:4:1> line:2:7 class C definition
  |-DefinitionData pass_in_registers empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init
  | |-DefaultConstructor exists trivial constexpr needs_implicit defaulted_is_constexpr
  | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param
  | |-MoveConstructor exists simple trivial needs_implicit
  | |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param
  | |-MoveAssignment exists simple trivial needs_implicit
  | `-Destructor simple irrelevant trivial needs_implicit
  |-CXXRecordDecl <col:1, col:7> col:7 implicit class C
  `-FriendDecl <line:3:5, col:19> col:17
    `-FunctionDecl parent 0xf23a388 prev 0xf284370 <col:5, col:19> col:17 friend X 'void ()'
```

> Can you explain `\match{type=name;count=2$C}`?

That is the `implicit class C` in the AST above. I couldn't access it from the top-level `C` and I couldn't find a way from the `implicit class C` back to the top-level one, so I don't know how to call it. I thought it would be a decl but not a definition, however, `getDefinition` returns a `nullptr` for the `implicit class C`.

> should we add a comment explaining that other match?

Certainly. I'll read the documentation again to see if there are more cases like this that could be improved as well.

https://github.com/llvm/llvm-project/pull/94248


More information about the llvm-branch-commits mailing list