[PATCH] D134416: Allow getting template args for ClassTemplateSpecializations
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 22 09:21:00 PDT 2022
aaron.ballman added a comment.
Mostly nits from me (FWIW, we use `auto` when the type is explicitly spelled out in the initialization and we don't usually use `else` after an unconditional `return` as a matter of coding style.) In terms of the test coverage, I would probably make a new test modeled after https://github.com/llvm/llvm-project/blob/main/clang/test/Index/cxx14-lambdas.cpp.
================
Comment at: clang/include/clang-c/Index.h:3594-3595
/**
- *Returns the number of template args of a function decl representing a
- * template specialization.
+ *Returns the number of template args of a function, struct, or class decl
+ *representing a template specialization.
*
----------------
Since we're in the area already...
================
Comment at: clang/tools/libclang/CXCursor.cpp:1357
+ CXCursorKind kind = clang_getCursorKind(C);
+ if (kind != CXCursor_FunctionDecl && kind != CXCursor_StructDecl &&
+ kind != CXCursor_ClassDecl &&
----------------
`CXCursor_StructDecl` is interesting -- does that only get used in C or will it also show up in C++? If it's C-only, we can drop that bit.
================
Comment at: clang/tools/libclang/CXCursor.cpp:1363
- const FunctionDecl *FD =
- llvm::dyn_cast_or_null<clang::FunctionDecl>(getCursorDecl(C));
- if (!FD) {
- return -1;
- }
-
- const FunctionTemplateSpecializationInfo *SpecInfo =
- FD->getTemplateSpecializationInfo();
- if (!SpecInfo) {
+ if (const FunctionDecl *FD =
+ llvm::dyn_cast_if_present<clang::FunctionDecl>(getCursorDecl(C))) {
----------------
================
Comment at: clang/tools/libclang/CXCursor.cpp:1370-1379
+ return SpecInfo->TemplateArguments->size();
+ } else if (const ClassTemplateSpecializationDecl *SD =
+ llvm::dyn_cast_if_present<
+ clang::ClassTemplateSpecializationDecl>(
+ getCursorDecl(C))) {
+ return SD->getTemplateArgs().size();
+ } else {
----------------
================
Comment at: clang/tools/libclang/CXCursor.cpp:1403
+ CXCursorKind kind = clang_getCursorKind(C);
+ if (kind != CXCursor_FunctionDecl && kind != CXCursor_StructDecl &&
+ kind != CXCursor_ClassDecl &&
----------------
Same question here about struct decl as above.
================
Comment at: clang/tools/libclang/CXCursor.cpp:1409
- const FunctionDecl *FD =
- llvm::dyn_cast_or_null<clang::FunctionDecl>(getCursorDecl(C));
- if (!FD) {
- return CXGetTemplateArgumentStatus_BadFunctionDeclCast;
- }
+ if (const FunctionDecl *FD =
+ llvm::dyn_cast_if_present<clang::FunctionDecl>(getCursorDecl(C))) {
----------------
================
Comment at: clang/tools/libclang/CXCursor.cpp:1423-1439
+ return 0;
+ } else if (const ClassTemplateSpecializationDecl *SD =
+ llvm::dyn_cast_if_present<
+ clang::ClassTemplateSpecializationDecl>(
+ getCursorDecl(C))) {
+ if (I >= SD->getTemplateArgs().size()) {
+ printf("INVALID INDEX\n");
----------------
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D134416/new/
https://reviews.llvm.org/D134416
More information about the cfe-commits
mailing list