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 &operator=(const ConstCopy&); 6*67e74705SXin Li }; 7*67e74705SXin Li 8*67e74705SXin Li struct NonConstCopy { 9*67e74705SXin Li NonConstCopy(); 10*67e74705SXin Li NonConstCopy &operator=(NonConstCopy&); 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li struct VirtualInheritsNonConstCopy : virtual NonConstCopy { 14*67e74705SXin Li VirtualInheritsNonConstCopy(); 15*67e74705SXin Li VirtualInheritsNonConstCopy &operator=(const VirtualInheritsNonConstCopy&); 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li struct ImplicitNonConstCopy1 : NonConstCopy { // expected-note{{the implicit copy assignment operator}} 19*67e74705SXin Li ImplicitNonConstCopy1(); 20*67e74705SXin Li }; 21*67e74705SXin Li 22*67e74705SXin Li struct ImplicitNonConstCopy2 { // expected-note{{the implicit copy assignment operator}} 23*67e74705SXin Li ImplicitNonConstCopy2(); 24*67e74705SXin Li NonConstCopy ncc; 25*67e74705SXin Li }; 26*67e74705SXin Li 27*67e74705SXin Li struct ImplicitNonConstCopy3 { // expected-note{{the implicit copy assignment operator}} 28*67e74705SXin Li ImplicitNonConstCopy3(); 29*67e74705SXin Li NonConstCopy ncc_array[2][3]; 30*67e74705SXin Li }; 31*67e74705SXin Li 32*67e74705SXin Li struct ImplicitNonConstCopy4 : VirtualInheritsNonConstCopy { 33*67e74705SXin Li ImplicitNonConstCopy4(); 34*67e74705SXin Li }; 35*67e74705SXin Li test_non_const_copy(const ImplicitNonConstCopy1 & cincc1,const ImplicitNonConstCopy2 & cincc2,const ImplicitNonConstCopy3 & cincc3,const ImplicitNonConstCopy4 & cincc4,const VirtualInheritsNonConstCopy & vincc)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 const VirtualInheritsNonConstCopy &vincc) { 41*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy1() = cincc1); // expected-error{{no viable overloaded '='}} 42*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy2() = cincc2); // expected-error{{no viable overloaded '='}} 43*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy3() = cincc3); // expected-error{{no viable overloaded '='}} 44*67e74705SXin Li (void)sizeof(ImplicitNonConstCopy4() = cincc4); // okay 45*67e74705SXin Li (void)sizeof(VirtualInheritsNonConstCopy() = vincc); 46*67e74705SXin Li } 47