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