1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 342dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl 442dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl// PR5426 - the non-dependent obj would be fully processed and wrapped in a 542dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl// CXXConstructExpr at definition time, which would lead to a failure at 642dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl// instantiation time. 742dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redlstruct arg { 842dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl arg(); 942dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl}; 1042dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl 1142dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redlstruct oldstylemove { 1242dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl oldstylemove(oldstylemove&); 1342dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl oldstylemove(const arg&); 1442dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl}; 1542dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl 1642dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redltemplate <typename T> 1742dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redlvoid fn(T t, const arg& arg) { 1842dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl oldstylemove obj(arg); 1942dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl} 2042dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl 2142dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redlvoid test() { 2242dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl fn(1, arg()); 2342dddbeadb82a918d83c14bdcce47ba8c0ed6fbaSebastian Redl} 240b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor 250b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregorstruct X0 { }; 260b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor 270b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregorstruct X1 { 280b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor explicit X1(const X0 &x0 = X0()); 290b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor}; 300b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor 310b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregortemplate<typename T> 320b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregorvoid f0() { 330b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor X1 x1; 340b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor} 350b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor 360b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregortemplate void f0<int>(); 370b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregortemplate void f0<float>(); 3867fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregor 3967fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregorstruct NonTrivial { 4067fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregor NonTrivial(); 4167fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregor ~NonTrivial(); 4267fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregor}; 4367fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregor 4467fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregortemplate<int N> void f1() { 4567fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregor NonTrivial array[N]; 4667fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregor} 4767fa05b9ed29923b7b905a09cfb95c2ac91b5835Douglas Gregortemplate<> void f1<2>(); 48