eduucaldas added a comment. There are some refinements to do, to generate a complete syntax tree. Namely tag decltype-name-specifier and simple-template-specifier children with roles, to allow for accessors.
================ Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:838-842 + // TODO: Build `SimpleTemplateNameSpecifier` children and implement + // accessors to them. + // Be aware, we cannot do that simply by calling `TraverseTypeLoc`, + // some `TypeLoc`s have inside them the previous name specifier and + // we want to treat them independently. ---------------- Let's generate the syntax tree for the nested-name-specifier: ``` T::template U<int>::X:: ``` `T` and `X` are just identifier-name-specifiers. They are easy. `template U<int>` however is a simple-template-name-specifier. ``` simple-template-name-specifier : template_opt simple-template-id ``` We could generate it by traversing the corresponding semantic node. But this node is a `DependentTemplateSpecializationTypeLoc` and it covers `T::template U<int>`. The traversal would then cover `T::` and thus generate a crash. As such, we should treat simple-template-name-specifier in a less generic way. ================ Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:849-850 + const auto TL = NNSLoc.getTypeLoc().castAs<DecltypeTypeLoc>(); + if (!RecursiveASTVisitor::TraverseDecltypeTypeLoc(TL)) + return nullptr; + auto *NS = new (allocator()) syntax::DecltypeNameSpecifier; ---------------- eduucaldas wrote: > Since we are overriding the TraverseNestedNameSpecifierLoc that previously > fired TraverseTypeLoc we fire it when building a NameSpecifier. As opposed to simple-template-name-specifier, we can here use a normal traversal to build the decltype-name-specifier because this specifier doesn't cross boundaries of name specifiers Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D85439/new/ https://reviews.llvm.org/D85439 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits