1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li // PR5426 - the non-dependent obj would be fully processed and wrapped in a 5*67e74705SXin Li // CXXConstructExpr at definition time, which would lead to a failure at 6*67e74705SXin Li // instantiation time. 7*67e74705SXin Li struct arg { 8*67e74705SXin Li arg(); 9*67e74705SXin Li }; 10*67e74705SXin Li 11*67e74705SXin Li struct oldstylemove { 12*67e74705SXin Li oldstylemove(oldstylemove&); 13*67e74705SXin Li oldstylemove(const arg&); 14*67e74705SXin Li }; 15*67e74705SXin Li 16*67e74705SXin Li template <typename T> fn(T t,const arg & arg)17*67e74705SXin Livoid fn(T t, const arg& arg) { 18*67e74705SXin Li oldstylemove obj(arg); 19*67e74705SXin Li } 20*67e74705SXin Li test()21*67e74705SXin Livoid test() { 22*67e74705SXin Li fn(1, arg()); 23*67e74705SXin Li } 24*67e74705SXin Li 25*67e74705SXin Li struct X0 { }; 26*67e74705SXin Li 27*67e74705SXin Li struct X1 { 28*67e74705SXin Li explicit X1(const X0 &x0 = X0()); 29*67e74705SXin Li }; 30*67e74705SXin Li 31*67e74705SXin Li template<typename T> f0()32*67e74705SXin Livoid f0() { 33*67e74705SXin Li X1 x1; 34*67e74705SXin Li } 35*67e74705SXin Li 36*67e74705SXin Li template void f0<int>(); 37*67e74705SXin Li template void f0<float>(); 38*67e74705SXin Li 39*67e74705SXin Li struct NonTrivial { 40*67e74705SXin Li NonTrivial(); 41*67e74705SXin Li ~NonTrivial(); 42*67e74705SXin Li }; 43*67e74705SXin Li f1()44*67e74705SXin Litemplate<int N> void f1() { 45*67e74705SXin Li NonTrivial array[N]; 46*67e74705SXin Li } 47*67e74705SXin Li template<> void f1<2>(); 48*67e74705SXin Li 49*67e74705SXin Li namespace PR20346 { 50*67e74705SXin Li struct S { short inner_s; }; 51*67e74705SXin Li 52*67e74705SXin Li struct outer_struct { 53*67e74705SXin Li wchar_t arr[32]; 54*67e74705SXin Li S outer_s; 55*67e74705SXin Li }; 56*67e74705SXin Li 57*67e74705SXin Li template <class T> OpenFileSession()58*67e74705SXin Li void OpenFileSession() { 59*67e74705SXin Li // Ensure that we don't think the ImplicitValueInitExpr generated here 60*67e74705SXin Li // during the initial parse only initializes the first array element! 61*67e74705SXin Li outer_struct asdfasdf = {}; 62*67e74705SXin Li }; 63*67e74705SXin Li foo()64*67e74705SXin Li void foo() { 65*67e74705SXin Li OpenFileSession<int>(); 66*67e74705SXin Li } 67*67e74705SXin Li } 68