1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li struct ConstCopy { 4*67e74705SXin Li ConstCopy(); 5*67e74705SXin Li ConstCopy(const ConstCopy&); 6*67e74705SXin Li }; 7*67e74705SXin Li 8*67e74705SXin Li struct NonConstCopy { 9*67e74705SXin Li NonConstCopy(); 10*67e74705SXin Li NonConstCopy(NonConstCopy&); 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li struct VirtualInheritsNonConstCopy : virtual NonConstCopy { 14*67e74705SXin Li VirtualInheritsNonConstCopy(); 15*67e74705SXin Li VirtualInheritsNonConstCopy(const VirtualInheritsNonConstCopy&); 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li struct ImplicitNonConstCopy1 : NonConstCopy { // expected-note {{candidate constructor}} 19*67e74705SXin Li ImplicitNonConstCopy1(); // expected-note {{candidate constructor}} 20*67e74705SXin Li }; 21*67e74705SXin Li 22*67e74705SXin Li struct ImplicitNonConstCopy2 { // expected-note {{candidate constructor}} 23*67e74705SXin Li ImplicitNonConstCopy2(); // expected-note {{candidate constructor}} 24*67e74705SXin Li NonConstCopy ncc; 25*67e74705SXin Li }; 26*67e74705SXin Li 27*67e74705SXin Li struct ImplicitNonConstCopy3 { // expected-note {{candidate constructor}} 28*67e74705SXin Li ImplicitNonConstCopy3(); // expected-note {{candidate constructor}} 29*67e74705SXin Li NonConstCopy ncc_array[2][3]; 30*67e74705SXin Li }; 31*67e74705SXin Li 32*67e74705SXin Li struct ImplicitNonConstCopy4 : VirtualInheritsNonConstCopy { // expected-note {{candidate constructor}} 33*67e74705SXin Li ImplicitNonConstCopy4(); // expected-note {{candidate constructor}} 34*67e74705SXin Li }; 35*67e74705SXin Li test_non_const_copy(const ImplicitNonConstCopy1 & cincc1,const ImplicitNonConstCopy2 & cincc2,const ImplicitNonConstCopy3 & cincc3,const ImplicitNonConstCopy4 & cincc4)36*67e74705SXin Livoid test_non_const_copy(const ImplicitNonConstCopy1 &cincc1, 37*67e74705SXin Li const ImplicitNonConstCopy2 &cincc2, 38*67e74705SXin Li const ImplicitNonConstCopy3 &cincc3, 39*67e74705SXin Li const ImplicitNonConstCopy4 &cincc4) { 40*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy1(cincc1)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy1' to 'ImplicitNonConstCopy1'}} 41*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy2(cincc2)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy2' to 'ImplicitNonConstCopy2'}} 42*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy3(cincc3)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy3' to 'ImplicitNonConstCopy3'}} 43*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy4(cincc4)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy4' to 'ImplicitNonConstCopy4'}} 44*67e74705SXin Li } 45