diff options
author | Aleksei Sidorin <a.sidorin@samsung.com> | 2018-02-14 11:18:00 +0000 |
---|---|---|
committer | Aleksei Sidorin <a.sidorin@samsung.com> | 2018-02-14 11:18:00 +0000 |
commit | 4c05f1427134a524e1c84ccd57f59a96ffdffe59 (patch) | |
tree | a68dd867c600c4f830b320a19f0c78b9668f80ac /clang/test | |
parent | 918f60056a57aa2aa1322ff3a6207b79e40a56e3 (diff) | |
download | bcm5719-llvm-4c05f1427134a524e1c84ccd57f59a96ffdffe59.tar.gz bcm5719-llvm-4c05f1427134a524e1c84ccd57f59a96ffdffe59.zip |
[ASTImporter] Fix lexical DC for templated decls; support VarTemplatePartialSpecDecl
Also minor refactoring in related functions was done.
Differential Revision: https://reviews.llvm.org/D43012
llvm-svn: 325116
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/ASTMerge/var-cpp/Inputs/var1.cpp | 17 | ||||
-rw-r--r-- | clang/test/ASTMerge/var-cpp/test.cpp | 9 |
2 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/ASTMerge/var-cpp/Inputs/var1.cpp b/clang/test/ASTMerge/var-cpp/Inputs/var1.cpp new file mode 100644 index 00000000000..e29db9d43fb --- /dev/null +++ b/clang/test/ASTMerge/var-cpp/Inputs/var1.cpp @@ -0,0 +1,17 @@ + +template <typename T> +constexpr T my_pi = T(3.1415926535897932385L); // variable template + +template <> constexpr char my_pi<char> = '3'; // variable template specialization + +template <typename T> +struct Wrapper { + template <typename U> static constexpr U my_const = U(1); + // Variable template partial specialization with member variable. + template <typename U> static constexpr U *my_const<const U *> = (U *)(0); +}; + +constexpr char a[] = "hello"; + +template <> template <> +constexpr const char *Wrapper<float>::my_const<const char *> = a; diff --git a/clang/test/ASTMerge/var-cpp/test.cpp b/clang/test/ASTMerge/var-cpp/test.cpp new file mode 100644 index 00000000000..28d38d58124 --- /dev/null +++ b/clang/test/ASTMerge/var-cpp/test.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -emit-pch -std=c++17 -o %t.1.ast %S/Inputs/var1.cpp +// RUN: %clang_cc1 -std=c++17 -ast-merge %t.1.ast -fsyntax-only %s 2>&1 + +static_assert(my_pi<double> == (double)3.1415926535897932385L); +static_assert(my_pi<char> == '3'); + +static_assert(Wrapper<int>::my_const<float> == 1.f); +static_assert(Wrapper<char>::my_const<const float *> == nullptr); +static_assert(Wrapper<float>::my_const<const char *> == a); |