68 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// expected-no-diagnostics3 4// PR5426 - the non-dependent obj would be fully processed and wrapped in a5// CXXConstructExpr at definition time, which would lead to a failure at6// instantiation time.7struct arg {8 arg();9};10 11struct oldstylemove {12 oldstylemove(oldstylemove&);13 oldstylemove(const arg&);14};15 16template <typename T>17void fn(T t, const arg& arg) {18 oldstylemove obj(arg);19}20 21void test() {22 fn(1, arg());23}24 25struct X0 { };26 27struct X1 {28 explicit X1(const X0 &x0 = X0());29};30 31template<typename T>32void f0() {33 X1 x1;34}35 36template void f0<int>();37template void f0<float>();38 39struct NonTrivial {40 NonTrivial();41 ~NonTrivial();42};43 44template<int N> void f1() {45 NonTrivial array[N];46}47template<> void f1<2>();48 49namespace 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 here60 // 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