xref: /aosp_15_r20/external/clang/test/PCH/cxx-chain-function-template.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li T cast(U u) {
10*67e74705SXin Li   return reinterpret_cast<T&>(u);
11*67e74705SXin Li }
12*67e74705SXin Li 
test1()13*67e74705SXin Li void 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 Li void 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 Li void test3() {
28*67e74705SXin Li   cast<CXXRecordDecl>(1.0f);
29*67e74705SXin Li   test2(1);
30*67e74705SXin Li }
31*67e74705SXin Li 
32*67e74705SXin Li #endif
33