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