1 // Test this without pch. 2 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -include %S/cxx-templates.h -verify %s -ast-dump -o - 3 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -include %S/cxx-templates.h %s -emit-llvm -o - -DNO_ERRORS | FileCheck %s 4 5 // Test with pch. 6 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -x c++-header -emit-pch -o %t %S/cxx-templates.h 7 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -include-pch %t -verify %s -ast-dump -o - 8 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -include-pch %t %s -emit-llvm -o - -error-on-deserialized-decl doNotDeserialize -DNO_ERRORS | FileCheck %s 9 10 // Test with modules. 11 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -fmodules -x c++-header -emit-pch -o %t %S/cxx-templates.h 12 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -fmodules -include-pch %t -verify %s -ast-dump -o - 13 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -fmodules -include-pch %t %s -emit-llvm -o - -error-on-deserialized-decl doNotDeserialize -DNO_ERRORS | FileCheck %s 14 15 // Test with pch and delayed template parsing. 16 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fdelayed-template-parsing -fexceptions -x c++-header -emit-pch -o %t %S/cxx-templates.h 17 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fdelayed-template-parsing -fexceptions -include-pch %t -verify %s -ast-dump -o - 18 // RUN: %clang_cc1 -std=c++11 -triple %itanium_abi_triple -fcxx-exceptions -fdelayed-template-parsing -fexceptions -include-pch %t %s -emit-llvm -o - -DNO_ERRORS | FileCheck %s 19 20 // CHECK: define weak_odr {{.*}}void @_ZN2S4IiE1mEv 21 // CHECK: define linkonce_odr {{.*}}void @_ZN2S3IiE1mEv 22 23 struct A { 24 typedef int type; 25 static void my_f(); 26 template <typename T> 27 static T my_templf(T x) { return x; } 28 }; 29 30 void test(const int (&a6)[17]) { 31 int x = templ_f<int, 5>(3); 32 33 S<char, float>::templ(); 34 S<int, char>::partial(); 35 S<int, float>::explicit_special(); 36 37 Dep<A>::Ty ty; 38 Dep<A> a; 39 a.f(); 40 41 S3<int> s3; 42 s3.m(); 43 44 TS5 ts(0); 45 46 S6<const int[17]>::t2 b6 = a6; 47 } 48 49 template struct S4<int>; 50 51 S7<int[5]> s7_5; 52 53 namespace ZeroLengthExplicitTemplateArgs { 54 template void f<X>(X*); 55 } 56 57 // This used to overwrite memory and crash. 58 namespace Test1 { 59 struct StringHasher { 60 template<typename T, char Converter(T)> static inline unsigned createHash(const T*, unsigned) { 61 return 0; 62 } 63 }; 64 65 struct CaseFoldingHash { 66 static inline char foldCase(char) { 67 return 0; 68 } 69 70 static unsigned hash(const char* data, unsigned length) { 71 return StringHasher::createHash<char, foldCase>(data, length); 72 } 73 }; 74 } 75 76 template< typename D > 77 Foo< D >& Foo< D >::operator=( const Foo& other ) 78 { 79 return *this; 80 } 81 82 namespace TestNestedExpansion { 83 struct Int { 84 Int(int); 85 friend Int operator+(Int, Int); 86 }; 87 Int &g(Int, int, double); 88 Int &test = NestedExpansion<char, char, char>().f(0, 1, 2, Int(3), 4, 5.0); 89 } 90 91 namespace rdar13135282 { 92 void test() { 93 __mt_alloc<> mt = __mt_alloc<>(); 94 } 95 } 96 97 void CallDependentSpecializedFunc(DependentSpecializedFuncClass<int> &x) { 98 DependentSpecializedFunc(x); 99 } 100 101 namespace cyclic_module_load { 102 extern std::valarray<int> x; 103 std::valarray<int> y(x); 104 } 105 106 #ifndef NO_ERRORS 107 // expected-error (at) cxx-templates.h:305 {{incomplete}} 108 template int local_extern::f<int[]>(); // expected-note {{in instantiation of}} 109 #endif 110 template int local_extern::g<int[]>(); 111