diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
commit | 9f4dbff6669c8037f3b036bcf580d14f1a4f12a5 (patch) | |
tree | 47df2c12b57214af6c31e47404b005675b8b7ffc /test/Parser/DelayedTemplateParsing.cpp | |
parent | f73d5f23a889b93d89ddef61ac0995df40286bb8 (diff) | |
download | src-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.cpp | 60 |
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(); +} + +} |