diff options
| author | Johan Vikstrom <jvikstrom@google.com> | 2019-08-09 07:35:16 +0000 |
|---|---|---|
| committer | Johan Vikstrom <jvikstrom@google.com> | 2019-08-09 07:35:16 +0000 |
| commit | ef0c3ddc7f4b240461c4ee701dd6712b8068dbd7 (patch) | |
| tree | 2a6e7b287d6f6b52f74f93c72061983ce593d17a | |
| parent | d639f6dff1b38459355df7e944fe77ea541fff03 (diff) | |
| download | bcm5719-llvm-ef0c3ddc7f4b240461c4ee701dd6712b8068dbd7.tar.gz bcm5719-llvm-ef0c3ddc7f4b240461c4ee701dd6712b8068dbd7.zip | |
[clangd] Fixed printTemplateSpecializationArgs not printing partial variable specialization arguments.
Summary:
printTemplateSpecializationArgs was not printing partial variable specialization args. This adds an additional If clause where we check if it's a VariableTemplatePartialSpecializationDecl and returns the ArgumentLocs if that's the case.
Also adds tests for printTemplateSpecializationArgs in ASTTests.cpp.
Reviewers: hokein, ilya-biryukov
Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D65926
llvm-svn: 368403
| -rw-r--r-- | clang-tools-extra/clangd/AST.cpp | 4 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/unittests/ClangdUnitTests.cpp | 2 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/unittests/PrintASTTests.cpp | 9 |
3 files changed, 14 insertions, 1 deletions
diff --git a/clang-tools-extra/clangd/AST.cpp b/clang-tools-extra/clangd/AST.cpp index a51bfdfdc2d..1a9be178b3a 100644 --- a/clang-tools-extra/clangd/AST.cpp +++ b/clang-tools-extra/clangd/AST.cpp @@ -36,6 +36,10 @@ getTemplateSpecializationArgLocs(const NamedDecl &ND) { llvm::dyn_cast<ClassTemplatePartialSpecializationDecl>(&ND)) { if (auto *Args = Cls->getTemplateArgsAsWritten()) return Args->arguments(); + } else if (auto *Var = + llvm::dyn_cast<VarTemplatePartialSpecializationDecl>(&ND)) { + if (auto *Args = Var->getTemplateArgsAsWritten()) + return Args->arguments(); } else if (auto *Var = llvm::dyn_cast<VarTemplateSpecializationDecl>(&ND)) return Var->getTemplateArgsInfo().arguments(); // We return None for ClassTemplateSpecializationDecls because it does not diff --git a/clang-tools-extra/clangd/unittests/ClangdUnitTests.cpp b/clang-tools-extra/clangd/unittests/ClangdUnitTests.cpp index 17cd179987f..ad013e24a16 100644 --- a/clang-tools-extra/clangd/unittests/ClangdUnitTests.cpp +++ b/clang-tools-extra/clangd/unittests/ClangdUnitTests.cpp @@ -188,7 +188,7 @@ TEST(ClangdUnitTest, AllOf(DeclNamed("foo"), WithTemplateArgs("")), AllOf(DeclNamed("i"), WithTemplateArgs("")), AllOf(DeclNamed("d"), WithTemplateArgs("")), - AllOf(DeclNamed("foo"), WithTemplateArgs("<>")), + AllOf(DeclNamed("foo"), WithTemplateArgs("<T *>")), AllOf(DeclNamed("foo"), WithTemplateArgs("<bool>"))})); } diff --git a/clang-tools-extra/clangd/unittests/PrintASTTests.cpp b/clang-tools-extra/clangd/unittests/PrintASTTests.cpp index 05677386ae3..807b3deb12d 100644 --- a/clang-tools-extra/clangd/unittests/PrintASTTests.cpp +++ b/clang-tools-extra/clangd/unittests/PrintASTTests.cpp @@ -95,6 +95,15 @@ INSTANTIATE_TEST_CASE_P(ASTUtilsTests, ASTUtils, struct Bar { friend class Foo<int>; }; template <> struct ^Foo<int> {};)cpp", {"<int>"}}, + { + R"cpp( + template<class T> + T S = T(10); + template <class T> + int ^S<T*> = 0; + template <> + int ^S<double> = 0;)cpp", + {"<T *>", "<double>"}}, })),); } // namespace } // namespace clangd |

