18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// RUN: %clang_cc1 -fsyntax-only -verify %s 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct ConstCopy { 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ConstCopy(); 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ConstCopy &operator=(const ConstCopy&); 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct NonConstCopy { 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project NonConstCopy(); 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project NonConstCopy &operator=(NonConstCopy&); 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct VirtualInheritsNonConstCopy : virtual NonConstCopy { 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project VirtualInheritsNonConstCopy(); 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project VirtualInheritsNonConstCopy &operator=(const VirtualInheritsNonConstCopy&); 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct ImplicitNonConstCopy1 : NonConstCopy { // expected-note{{the implicit copy assignment operator}} 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ImplicitNonConstCopy1(); 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct ImplicitNonConstCopy2 { // expected-note{{the implicit copy assignment operator}} 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ImplicitNonConstCopy2(); 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project NonConstCopy ncc; 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct ImplicitNonConstCopy3 { // expected-note{{the implicit copy assignment operator}} 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ImplicitNonConstCopy3(); 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project NonConstCopy ncc_array[2][3]; 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct ImplicitNonConstCopy4 : VirtualInheritsNonConstCopy { 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ImplicitNonConstCopy4(); 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid test_non_const_copy(const ImplicitNonConstCopy1 &cincc1, 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const ImplicitNonConstCopy2 &cincc2, 385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const ImplicitNonConstCopy3 &cincc3, 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const ImplicitNonConstCopy4 &cincc4, 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const VirtualInheritsNonConstCopy &vincc) { 415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner (void)sizeof(ImplicitNonConstCopy1() = cincc1); // expected-error{{no viable overloaded '='}} 425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner (void)sizeof(ImplicitNonConstCopy2() = cincc2); // expected-error{{no viable overloaded '='}} 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (void)sizeof(ImplicitNonConstCopy3() = cincc3); // expected-error{{no viable overloaded '='}} 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (void)sizeof(ImplicitNonConstCopy4() = cincc4); // okay 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (void)sizeof(VirtualInheritsNonConstCopy() = vincc); 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner