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