Home | History | Annotate | Download | only in SemaTemplate
      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