1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s 21f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt 31f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct non_trivial { 41f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt non_trivial(); 51f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt non_trivial(const non_trivial&); 61f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt non_trivial& operator = (const non_trivial&); 71f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt ~non_trivial(); 81f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 91f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt 106c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithunion bad_union { 116c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith non_trivial nt; // expected-note {{non-trivial default constructor}} 121f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 13e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_union u; // expected-error {{call to implicitly-deleted default constructor}} 146c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithunion bad_union2 { // expected-note {{all data members are const-qualified}} 151f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt const int i; 161f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 17e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_union2 u2; // expected-error {{call to implicitly-deleted default constructor}} 181f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt 196c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct bad_anon { 201f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt union { 216c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith non_trivial nt; // expected-note {{non-trivial default constructor}} 221f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt }; 231f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 24e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_anon a; // expected-error {{call to implicitly-deleted default constructor}} 256c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct bad_anon2 { 266c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith union { // expected-note {{all data members of an anonymous union member are const-qualified}} 271f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt const int i; 281f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt }; 291f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 30e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_anon2 a2; // expected-error {{call to implicitly-deleted default constructor}} 311f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt 321f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt// This would be great except that we implement 331f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntunion good_union { 341f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt const int i; 351f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt float f; 361f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 371f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntgood_union gu; 381f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct good_anon { 391f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt union { 401f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt const int i; 411f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt float f; 421f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt }; 431f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 441f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntgood_anon ga; 451f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt 461f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct good : non_trivial { 471f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt non_trivial nt; 481f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt}; 491f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntgood g; 50f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 516c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct bad_const { 526c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith const good g; // expected-note {{field 'g' of const-qualified type 'const good' would not be initialized}} 53f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 54e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_const bc; // expected-error {{call to implicitly-deleted default constructor}} 55f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 56f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntstruct good_const { 57f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt const non_trivial nt; 58f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 59f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntgood_const gc; 60f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 61f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntstruct no_default { 625bdaac5454d93d1dcdc2319818497b685be56fcfRichard Smith no_default() = delete; // expected-note 3{{deleted here}} 63f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 64f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntstruct no_dtor { 656c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith ~no_dtor() = delete; // expected-note 2{{deleted here}} 66f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 67f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 686c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct bad_field_default { 696c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith no_default nd; // expected-note {{field 'nd' has a deleted default constructor}} 70f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 71e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_field_default bfd; // expected-error {{call to implicitly-deleted default constructor}} 726c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct bad_base_default : no_default { // expected-note {{base class 'no_default' has a deleted default constructor}} 73f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 74e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_base_default bbd; // expected-error {{call to implicitly-deleted default constructor}} 75f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 766c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct bad_field_dtor { 776c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith no_dtor nd; // expected-note {{field 'nd' has a deleted destructor}} 78f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 79e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_field_dtor bfx; // expected-error {{call to implicitly-deleted default constructor}} 806c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct bad_base_dtor : no_dtor { // expected-note {{base class 'no_dtor' has a deleted destructor}} 81f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 82e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorbad_base_dtor bbx; // expected-error {{call to implicitly-deleted default constructor}} 83f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 84f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntstruct ambiguous_default { 85f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt ambiguous_default(); 86f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt ambiguous_default(int = 2); 87f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 886c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct has_amb_field { 896c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith ambiguous_default ad; // expected-note {{field 'ad' has multiple default constructors}} 90f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 91e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorhas_amb_field haf; // expected-error {{call to implicitly-deleted default constructor}} 92f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 93f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntclass inaccessible_default { 94f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt inaccessible_default(); 95f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 966c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct has_inacc_field { 976c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith inaccessible_default id; // expected-note {{field 'id' has an inaccessible default constructor}} 98f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 99e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorhas_inacc_field hif; // expected-error {{call to implicitly-deleted default constructor}} 100f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 101f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntclass friend_default { 102f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt friend struct has_friend; 103f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt friend_default(); 104f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 105f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntstruct has_friend { 106f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt friend_default fd; 107f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 108f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunthas_friend hf; 109f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 1106c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct defaulted_delete { 1115bdaac5454d93d1dcdc2319818497b685be56fcfRichard Smith no_default nd; // expected-note {{because field 'nd' has a deleted default constructor}} 1125bdaac5454d93d1dcdc2319818497b685be56fcfRichard Smith defaulted_delete() = default; // expected-note{{implicitly deleted here}} 113f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 114e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregordefaulted_delete dd; // expected-error {{call to implicitly-deleted default constructor}} 115f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt 116f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntstruct late_delete { 117f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt no_default nd; 118f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt late_delete(); 119f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Hunt}; 120f1922d299be143f65b9c349e7f7b4ed5d0a90965Sean Huntlate_delete::late_delete() = default; // expected-error {{would delete it}} 12116ee8191ca6953e173c983e3175a8d7504b5baaeRichard Smith 12216ee8191ca6953e173c983e3175a8d7504b5baaeRichard Smith// See also rdar://problem/8125400. 12316ee8191ca6953e173c983e3175a8d7504b5baaeRichard Smithnamespace empty { 124221c27f0d34c5938d84bbb8fafe1c3e3f1f87f2eDouglas Gregor static union {}; 125221c27f0d34c5938d84bbb8fafe1c3e3f1f87f2eDouglas Gregor static union { union {}; }; 12616ee8191ca6953e173c983e3175a8d7504b5baaeRichard Smith static union { struct {}; }; 127221c27f0d34c5938d84bbb8fafe1c3e3f1f87f2eDouglas Gregor static union { union { union {}; }; }; 12816ee8191ca6953e173c983e3175a8d7504b5baaeRichard Smith static union { union { struct {}; }; }; 129221c27f0d34c5938d84bbb8fafe1c3e3f1f87f2eDouglas Gregor static union { struct { union {}; }; }; 13016ee8191ca6953e173c983e3175a8d7504b5baaeRichard Smith static union { struct { struct {}; }; }; 13116ee8191ca6953e173c983e3175a8d7504b5baaeRichard Smith} 132