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