[PATCH] D120498: [AST] Test RecursiveASTVisitor's current traversal of templates.

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 25 01:21:41 PST 2022


hokein added inline comments.


================
Comment at: clang/unittests/Tooling/RecursiveASTVisitorTests/Templates.cpp:12
+//
+// shouldVisitTemplateInstantiations() controls traversal of AST nodes that
+// were created by instantiation, rather than by written code. This means:
----------------
I think this is a very useful documentation about the RAV API, instead of staying in the test file, I would suggest moving it to the RAV.h file.


================
Comment at: clang/unittests/Tooling/RecursiveASTVisitorTests/Templates.cpp:18
+//   - Explicit instantiations are a tricky case:
+//     - the "declaration part" (template args, function params etc) was written
+//       and should always be traversed.
----------------
Conceptually, an instantiations create a specific {Class, Var}TemplateSpecializationDecl, functionDecl.

```
template <class T> void foo(T) { }
template void foo<char>(); // Line 2
```

For the statement on line 2 (called `explicit instantiation definition` I think)
- there is no corresponding node in the clang AST, this is a missing feature in clang
- it creates a FunctionDecl, that is `void foo(char) { }`,

does the "declaration part" in the comment refer to the declaration part of the `explicit instantiation definition` (I think so), or the declaration part of the FunctionDecl `void foo(char) {}`? The same question to the definition, my understanding from the comment is the function body of the `void foo(char) {}`, which is `{}`.

We describe the expected behavior, but there are some bugs or unimplemented features in clang, which creates discrepancies. I think this is confusing and hard to follow, not sure how to do here (encoding a bunch of FIXMEs here is not good,  not mentioning them at all is not good neither, can we mention only critical ones?)






Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D120498



More information about the cfe-commits mailing list