1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li // PR5908 5*67e74705SXin Li template <typename Iterator> Test(Iterator it)6*67e74705SXin Livoid Test(Iterator it) { 7*67e74705SXin Li *(it += 1); 8*67e74705SXin Li } 9*67e74705SXin Li 10*67e74705SXin Li namespace PR6045 { 11*67e74705SXin Li template<unsigned int r> 12*67e74705SXin Li class A 13*67e74705SXin Li { 14*67e74705SXin Li static const unsigned int member = r; 15*67e74705SXin Li void f(); 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li template<unsigned int r> 19*67e74705SXin Li const unsigned int A<r>::member; 20*67e74705SXin Li 21*67e74705SXin Li template<unsigned int r> f()22*67e74705SXin Li void A<r>::f() 23*67e74705SXin Li { 24*67e74705SXin Li unsigned k; 25*67e74705SXin Li (void)(k % member); 26*67e74705SXin Li } 27*67e74705SXin Li } 28*67e74705SXin Li 29*67e74705SXin Li namespace PR7198 { 30*67e74705SXin Li struct A 31*67e74705SXin Li { ~APR7198::A32*67e74705SXin Li ~A() { } 33*67e74705SXin Li }; 34*67e74705SXin Li 35*67e74705SXin Li template<typename T> 36*67e74705SXin Li struct B { 37*67e74705SXin Li struct C : A {}; fPR7198::B38*67e74705SXin Li void f() 39*67e74705SXin Li { 40*67e74705SXin Li C c = C(); 41*67e74705SXin Li } 42*67e74705SXin Li }; 43*67e74705SXin Li } 44*67e74705SXin Li 45*67e74705SXin Li namespace PR7724 { myMethod()46*67e74705SXin Li template<typename OT> int myMethod() 47*67e74705SXin Li { return 2 && sizeof(OT); } 48*67e74705SXin Li } 49*67e74705SXin Li 50*67e74705SXin Li namespace test4 { addressof(T & v)51*67e74705SXin Li template <typename T> T *addressof(T &v) { 52*67e74705SXin Li return reinterpret_cast<T*>( 53*67e74705SXin Li &const_cast<char&>(reinterpret_cast<const volatile char &>(v))); 54*67e74705SXin Li } 55*67e74705SXin Li } 56*67e74705SXin Li 57*67e74705SXin Li namespace test5 { 58*67e74705SXin Li template <typename T> class chained_map { 59*67e74705SXin Li int k; lookup() const60*67e74705SXin Li void lookup() const { 61*67e74705SXin Li int &v = (int &)k; 62*67e74705SXin Li } 63*67e74705SXin Li }; 64*67e74705SXin Li } 65*67e74705SXin Li 66*67e74705SXin Li namespace PR8795 { test(_CharT t)67*67e74705SXin Li template <class _CharT> int test(_CharT t) 68*67e74705SXin Li { 69*67e74705SXin Li int data [] = { 70*67e74705SXin Li sizeof(_CharT) > sizeof(char) 71*67e74705SXin Li }; 72*67e74705SXin Li return data[0]; 73*67e74705SXin Li } 74*67e74705SXin Li } 75*67e74705SXin Li 76*67e74705SXin Li template<typename T> struct CastDependentIntToPointer { fCastDependentIntToPointer77*67e74705SXin Li static void* f() { 78*67e74705SXin Li T *x; 79*67e74705SXin Li return ((void*)(((unsigned long)(x)|0x1ul))); 80*67e74705SXin Li } 81*67e74705SXin Li }; 82*67e74705SXin Li 83*67e74705SXin Li // Regression test for crasher in r194540. 84*67e74705SXin Li namespace PR10837 { 85*67e74705SXin Li typedef void t(int); 86*67e74705SXin Li template<typename> struct A { 87*67e74705SXin Li void f(); 88*67e74705SXin Li static t g; 89*67e74705SXin Li }; 90*67e74705SXin Li t *p; f()91*67e74705SXin Li template<typename T> void A<T>::f() { 92*67e74705SXin Li p = g; 93*67e74705SXin Li } 94*67e74705SXin Li template struct A<int>; 95*67e74705SXin Li } 96*67e74705SXin Li 97*67e74705SXin Li namespace PR18152 { 98*67e74705SXin Li template<int N> struct A { 99*67e74705SXin Li static const int n = {N}; 100*67e74705SXin Li }; 101*67e74705SXin Li template struct A<0>; 102*67e74705SXin Li } 103