15bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl// RUN: %clang_cc1 -chain-include %s -chain-include %s -fsyntax-only %s
25bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl// Just don't crash.
35bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl#if !defined(RUN1)
45bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl#define RUN1
55bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
65bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redlstruct CXXRecordDecl { CXXRecordDecl(int); };
75bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
85bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redltemplate <typename T, typename U>
95bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian RedlT cast(U u) {
105bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl  return reinterpret_cast<T&>(u);
115bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl}
125bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
135bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redlvoid test1() {
145bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl  cast<float>(1);
155bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl}
165bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
175bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl#elif !defined(RUN2)
185bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl#define RUN2
195bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
205bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redltemplate <typename T>
215bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redlvoid test2(T) {
225bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl  cast<CXXRecordDecl>(1.0f);
235bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl}
245bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
255bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl#else
265bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
275bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redlvoid test3() {
285bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl  cast<CXXRecordDecl>(1.0f);
295bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl  test2(1);
305bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl}
315bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl
325bbcdbf36f8cf79d99703ef20848c55960065e43Sebastian Redl#endif
33