aboutsummaryrefslogtreecommitdiff
path: root/test/Parser/DelayedTemplateParsing.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2014-11-24 09:15:30 +0000
committerDimitry Andric <dim@FreeBSD.org>2014-11-24 09:15:30 +0000
commit9f4dbff6669c8037f3b036bcf580d14f1a4f12a5 (patch)
tree47df2c12b57214af6c31e47404b005675b8b7ffc /test/Parser/DelayedTemplateParsing.cpp
parentf73d5f23a889b93d89ddef61ac0995df40286bb8 (diff)
downloadsrc-9f4dbff6669c8037f3b036bcf580d14f1a4f12a5.tar.gz
src-9f4dbff6669c8037f3b036bcf580d14f1a4f12a5.zip
Vendor import of clang RELEASE_350/final tag r216957 (effectively, 3.5.0 release):vendor/clang/clang-release_350-r216957
Notes
Notes: svn path=/vendor/clang/dist/; revision=274958 svn path=/vendor/clang/clang-release_350-r216957/; revision=274959; tag=vendor/clang/clang-release_350-r216957
Diffstat (limited to 'test/Parser/DelayedTemplateParsing.cpp')
-rw-r--r--test/Parser/DelayedTemplateParsing.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/Parser/DelayedTemplateParsing.cpp b/test/Parser/DelayedTemplateParsing.cpp
index 73128c49f247..eff31208c83e 100644
--- a/test/Parser/DelayedTemplateParsing.cpp
+++ b/test/Parser/DelayedTemplateParsing.cpp
@@ -121,3 +121,63 @@ constexpr T Fun(T A) { return T(0); }
constexpr int Var = Fun(20);
}
+template <typename T>
+auto invalidTrailingRetType() -> Bogus {} // expected-error {{unknown type name 'Bogus'}}
+
+namespace PR19613 {
+
+struct HeapTypeConfig {
+ static void from_bitset();
+};
+
+template <class Config>
+struct TypeImpl {
+ struct BitsetType;
+
+ static void Any() {
+ BitsetType::New();
+ }
+};
+
+template<class Config>
+struct TypeImpl<Config>::BitsetType {
+ static void New() {
+ Config::from_bitset();
+ }
+};
+
+static void f() {
+ TypeImpl<HeapTypeConfig>::Any();
+}
+
+template<typename A> struct S {
+ template<typename B> struct T;
+};
+template<typename A> template<typename B> struct S<A>::T {
+ template<typename C, typename D> struct U;
+ template<typename C> struct U<C, C> {
+ template<typename E> static int f() {
+ return sizeof(A) + sizeof(B) + sizeof(C) + sizeof(E);
+ }
+ };
+};
+
+static void g() {
+ S<int>::T<int>::U<int,int>::f<int>();
+}
+
+template<typename T> struct SS {
+ template<typename U> struct X;
+ template<typename U> struct X<U*>;
+};
+template<typename T> template<typename U> struct SS<T>::X<U*> {
+ static int f() {
+ return sizeof(T) + sizeof(U);
+ }
+};
+
+static void h() {
+ SS<int>::X<int*>::f();
+}
+
+}