1*67e74705SXin Li // RUN: %clang_cc1 -chain-include %s -chain-include %s -fsyntax-only %s 2*67e74705SXin Li // Just don't crash. 3*67e74705SXin Li #if !defined(RUN1) 4*67e74705SXin Li #define RUN1 5*67e74705SXin Li 6*67e74705SXin Li struct CXXRecordDecl { CXXRecordDecl(int); }; 7*67e74705SXin Li 8*67e74705SXin Li template <typename T, typename U> cast(U u)9*67e74705SXin LiT cast(U u) { 10*67e74705SXin Li return reinterpret_cast<T&>(u); 11*67e74705SXin Li } 12*67e74705SXin Li test1()13*67e74705SXin Livoid test1() { 14*67e74705SXin Li cast<float>(1); 15*67e74705SXin Li } 16*67e74705SXin Li 17*67e74705SXin Li #elif !defined(RUN2) 18*67e74705SXin Li #define RUN2 19*67e74705SXin Li 20*67e74705SXin Li template <typename T> test2(T)21*67e74705SXin Livoid test2(T) { 22*67e74705SXin Li cast<CXXRecordDecl>(1.0f); 23*67e74705SXin Li } 24*67e74705SXin Li 25*67e74705SXin Li #else 26*67e74705SXin Li test3()27*67e74705SXin Livoid test3() { 28*67e74705SXin Li cast<CXXRecordDecl>(1.0f); 29*67e74705SXin Li test2(1); 30*67e74705SXin Li } 31*67e74705SXin Li 32*67e74705SXin Li #endif 33