On Tue, Oct 2, 2018 at 12:02 PM, Hans Wennborg <h...@chromium.org> wrote: > I'm confused about what implicitly deleted means. In this code for example: > > struct S { > S(const S&) = default; > S& operator=(const S&) = default; > const int x; > }; > > void f(S &s) { > S t = s; > } > > Clang will warn that operator= is implicitly deleted. > > But it seems the code still works fine, whereas if operator= were > actually deleted it would not compile. So what does implicitly deleted > mean then?
Oh, I see, my example is wrong. The assignment operator really is deleted and it uses the copy constructor instead. > > > On Fri, Sep 28, 2018 at 3:16 AM, Richard Smith via cfe-commits > <cfe-commits@lists.llvm.org> wrote: >> Author: rsmith >> Date: Thu Sep 27 18:16:43 2018 >> New Revision: 343285 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=343285&view=rev >> Log: >> [cxx2a] P0641R2: (Some) type mismatches on defaulted functions only >> render the function deleted instead of rendering the program ill-formed. >> >> This change also adds an enabled-by-default warning for the case where >> an explicitly-defaulted special member function of a non-template class >> is implicitly deleted by the type checking rules. (This fires either due >> to this language change or due to pre-C++20 reasons for the member being >> implicitly deleted). I've tested this on a large codebase and found only >> bugs (where the program means something that's clearly different from >> what the programmer intended), so this is enabled by default, but we >> should revisit this if there are problems with this being enabled by >> default. >> >> Modified: >> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> cfe/trunk/lib/Sema/SemaDeclCXX.cpp >> cfe/trunk/test/CXX/class.derived/class.abstract/p16.cpp >> cfe/trunk/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp >> cfe/trunk/test/CXX/drs/dr6xx.cpp >> cfe/trunk/test/CXX/special/class.copy/p12-0x.cpp >> cfe/trunk/test/CXX/special/class.copy/p23-cxx11.cpp >> cfe/trunk/test/CXX/special/class.ctor/p5-0x.cpp >> cfe/trunk/test/CXX/special/class.dtor/p5-0x.cpp >> cfe/trunk/test/SemaCUDA/implicit-member-target.cu >> cfe/trunk/test/SemaCXX/cxx0x-deleted-default-ctor.cpp >> cfe/trunk/test/SemaCXX/cxx17-compat.cpp >> cfe/trunk/test/SemaCXX/dr1301.cpp >> cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp >> cfe/trunk/test/SemaTemplate/exception-spec-crash.cpp >> cfe/trunk/www/cxx_status.html >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Sep 27 18:16:43 >> 2018 >> @@ -7760,9 +7760,19 @@ def err_incorrect_defaulted_exception_sp >> def err_incorrect_defaulted_constexpr : Error< >> "defaulted definition of %sub{select_special_member_kind}0 " >> "is not constexpr">; >> +def warn_defaulted_method_deleted : Warning< >> + "explicitly defaulted %sub{select_special_member_kind}0 is implicitly " >> + "deleted">, InGroup<DiagGroup<"defaulted-function-deleted">>; >> def err_out_of_line_default_deletes : Error< >> "defaulting this %sub{select_special_member_kind}0 " >> "would delete it after its first declaration">; >> +def note_deleted_type_mismatch : Note< >> + "function is implicitly deleted because its declared type does not match " >> + "the type of an implicit %sub{select_special_member_kind}0">; >> +def warn_cxx17_compat_defaulted_method_type_mismatch : Warning< >> + "explicitly defaulting this %sub{select_special_member_kind}0 with a type >> " >> + "different from the implicit type is incompatible with C++ standards >> before " >> + "C++2a">, InGroup<CXXPre2aCompat>, DefaultIgnore; >> def warn_vbase_moved_multiple_times : Warning< >> "defaulted move assignment operator of %0 will move assign virtual base " >> "class %1 multiple times">, InGroup<DiagGroup<"multiple-move-vbase">>; >> >> Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Thu Sep 27 18:16:43 2018 >> @@ -6451,20 +6451,29 @@ void Sema::CheckExplicitlyDefaultedSpeci >> // copy operation can take a non-const reference) as an implicit >> // declaration, and >> // -- not have default arguments. >> + // C++2a changes the second bullet to instead delete the function if it's >> + // defaulted on its first declaration, unless it's "an assignment >> operator, >> + // and its return type differs or its parameter type is not a reference". >> + bool DeleteOnTypeMismatch = getLangOpts().CPlusPlus2a && First; >> + bool ShouldDeleteForTypeMismatch = false; >> unsigned ExpectedParams = 1; >> if (CSM == CXXDefaultConstructor || CSM == CXXDestructor) >> ExpectedParams = 0; >> if (MD->getNumParams() != ExpectedParams) { >> - // This also checks for default arguments: a copy or move constructor >> with a >> + // This checks for default arguments: a copy or move constructor with a >> // default argument is classified as a default constructor, and >> assignment >> // operations and destructors can't have default arguments. >> Diag(MD->getLocation(), diag::err_defaulted_special_member_params) >> << CSM << MD->getSourceRange(); >> HadError = true; >> } else if (MD->isVariadic()) { >> - Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic) >> - << CSM << MD->getSourceRange(); >> - HadError = true; >> + if (DeleteOnTypeMismatch) >> + ShouldDeleteForTypeMismatch = true; >> + else { >> + Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic) >> + << CSM << MD->getSourceRange(); >> + HadError = true; >> + } >> } >> >> const FunctionProtoType *Type = MD->getType()->getAs<FunctionProtoType>(); >> @@ -6489,9 +6498,13 @@ void Sema::CheckExplicitlyDefaultedSpeci >> >> // A defaulted special member cannot have cv-qualifiers. >> if (Type->getTypeQuals()) { >> - Diag(MD->getLocation(), diag::err_defaulted_special_member_quals) >> - << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus14; >> - HadError = true; >> + if (DeleteOnTypeMismatch) >> + ShouldDeleteForTypeMismatch = true; >> + else { >> + Diag(MD->getLocation(), diag::err_defaulted_special_member_quals) >> + << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus14; >> + HadError = true; >> + } >> } >> } >> >> @@ -6504,23 +6517,30 @@ void Sema::CheckExplicitlyDefaultedSpeci >> HasConstParam = ReferentType.isConstQualified(); >> >> if (ReferentType.isVolatileQualified()) { >> - Diag(MD->getLocation(), >> - diag::err_defaulted_special_member_volatile_param) << CSM; >> - HadError = true; >> + if (DeleteOnTypeMismatch) >> + ShouldDeleteForTypeMismatch = true; >> + else { >> + Diag(MD->getLocation(), >> + diag::err_defaulted_special_member_volatile_param) << CSM; >> + HadError = true; >> + } >> } >> >> if (HasConstParam && !CanHaveConstParam) { >> - if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) { >> + if (DeleteOnTypeMismatch) >> + ShouldDeleteForTypeMismatch = true; >> + else if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) { >> Diag(MD->getLocation(), >> diag::err_defaulted_special_member_copy_const_param) >> << (CSM == CXXCopyAssignment); >> // FIXME: Explain why this special member can't be const. >> + HadError = true; >> } else { >> Diag(MD->getLocation(), >> diag::err_defaulted_special_member_move_const_param) >> << (CSM == CXXMoveAssignment); >> + HadError = true; >> } >> - HadError = true; >> } >> } else if (ExpectedParams) { >> // A copy assignment operator can take its argument by value, but a >> @@ -6582,14 +6602,27 @@ void Sema::CheckExplicitlyDefaultedSpeci >> EPI)); >> } >> >> - if (ShouldDeleteSpecialMember(MD, CSM)) { >> + if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) { >> if (First) { >> SetDeclDeleted(MD, MD->getLocation()); >> + if (!inTemplateInstantiation() && !HadError) { >> + Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM; >> + if (ShouldDeleteForTypeMismatch) { >> + Diag(MD->getLocation(), diag::note_deleted_type_mismatch) << CSM; >> + } else { >> + ShouldDeleteSpecialMember(MD, CSM, nullptr, /*Diagnose*/true); >> + } >> + } >> + if (ShouldDeleteForTypeMismatch && !HadError) { >> + Diag(MD->getLocation(), >> + diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM; >> + } >> } else { >> // C++11 [dcl.fct.def.default]p4: >> // [For a] user-provided explicitly-defaulted function [...] if >> such a >> // function is implicitly defined as deleted, the program is >> ill-formed. >> Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM; >> + assert(!ShouldDeleteForTypeMismatch && "deleted non-first decl"); >> ShouldDeleteSpecialMember(MD, CSM, nullptr, /*Diagnose*/true); >> HadError = true; >> } >> >> Modified: cfe/trunk/test/CXX/class.derived/class.abstract/p16.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/class.derived/class.abstract/p16.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/CXX/class.derived/class.abstract/p16.cpp (original) >> +++ cfe/trunk/test/CXX/class.derived/class.abstract/p16.cpp Thu Sep 27 >> 18:16:43 2018 >> @@ -44,8 +44,8 @@ struct G : D {}; >> // expected-error@-3 {{deleted function 'operator=' cannot override a >> non-deleted function}} >> // expected-note@-4 {{while declaring the implicit move assignment operator >> for 'G'}} >> // expected-note@-5 {{move assignment operator of 'G' is implicitly deleted >> because base class 'D' has an inaccessible move assignment operator}} >> -struct H : D { >> - H &operator=(H&&) = default; >> +struct H : D { // expected-note {{deleted because base class 'D' has an >> inaccessible move assignment}} >> + H &operator=(H&&) = default; // expected-warning {{implicitly deleted}} >> // expected-error@-1 {{deleted function 'operator=' cannot override a >> non-deleted function}} >> // expected-note@-3 {{move assignment operator of 'H' is implicitly >> deleted because base class 'D' has an inaccessible move assignment operator}} >> ~H(); >> >> Modified: cfe/trunk/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp >> (original) >> +++ cfe/trunk/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp Thu >> Sep 27 18:16:43 2018 >> @@ -1,15 +1,30 @@ >> // RUN: %clang_cc1 -verify %s -std=c++11 >> +// RUN: %clang_cc1 -verify %s -std=c++17 >> +// RUN: %clang_cc1 -verify %s -std=c++2a >> >> // A function that is explicitly defaulted shall >> struct A { >> // -- be a special member function, >> A(int) = default; // expected-error {{only special member functions may >> be defaulted}} >> + A(A) = default; // expected-error {{must pass its first argument by >> reference}} >> >> // -- have the same declared function type as if it had been implicitly >> // declared >> void operator=(const A &) = default; // expected-error {{must return 'A >> &'}} >> - A(...) = default; // expected-error {{cannot be variadic}} >> - A(const A &, ...) = default; // expected-error {{cannot be variadic}} >> + A(...) = default; >> + A(const A &, ...) = default; >> + A &operator=(const A&) const = default; >> + A &operator=(A) const = default; // expected-error {{must be an lvalue >> refe}} >> +#if __cplusplus <= 201703L >> + // expected-error@-5 {{cannot be variadic}} >> + // expected-error@-5 {{cannot be variadic}} >> + // expected-error@-5 {{may not have 'const'}} >> + // expected-error@-5 {{may not have 'const'}} >> +#else >> + // expected-warning@-10 {{implicitly deleted}} expected-note@-10 >> {{declared type does not match the type of an implicit default constructor}} >> + // expected-warning@-10 {{implicitly deleted}} expected-note@-10 >> {{declared type does not match the type of an implicit copy constructor}} >> + // expected-warning@-10 {{implicitly deleted}} expected-note@-10 >> {{declared type does not match the type of an implicit copy assignment}} >> +#endif >> >> // (except for possibly differing ref-qualifiers >> A &operator=(A &&) & = default; >> @@ -23,3 +38,35 @@ struct A { >> A(double = 0.0) = default; // expected-error {{cannot have default >> arguments}} >> A(const A & = 0) = default; // expected-error {{cannot have default >> arguments}} >> }; >> + >> +struct A2 { >> + A2(...); >> + A2(const A2 &, ...); >> + A2 &operator=(const A2&) const; >> +}; >> +A2::A2(...) = default; // expected-error {{cannot be variadic}} >> +A2::A2(const A2&, ...) = default; // expected-error {{cannot be variadic}} >> +A2 &A2::operator=(const A2&) const = default; // expected-error {{may not >> have 'const'}} >> + >> +struct B { >> + B(B&); >> + B &operator=(B&); >> +}; >> +struct C : B { >> + C(const C&) = default; >> + C &operator=(const C&) = default; >> +#if __cplusplus <= 201703L >> + // expected-error@-3 {{is const, but a member or base requires it to be >> non-const}} >> + // expected-error@-3 {{is const, but a member or base requires it to be >> non-const}} >> +#else >> + // expected-warning@-6 {{implicitly deleted}} expected-note@-6 {{type >> does not match}} >> + // expected-warning@-6 {{implicitly deleted}} expected-note@-6 {{type >> does not match}} >> +#endif >> +}; >> + >> +struct D : B { // expected-note 2{{base class}} >> + D(const D&); >> + D &operator=(const D&); >> +}; >> +D::D(const D&) = default; // expected-error {{would delete}} expected-error >> {{is const, but}} >> +D &D::operator=(const D&) = default; // expected-error {{would delete}} >> expected-error {{is const, but}} >> >> Modified: cfe/trunk/test/CXX/drs/dr6xx.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/drs/dr6xx.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/CXX/drs/dr6xx.cpp (original) >> +++ cfe/trunk/test/CXX/drs/dr6xx.cpp Thu Sep 27 18:16:43 2018 >> @@ -757,8 +757,8 @@ namespace dr666 { // dr666: yes >> #if __cplusplus >= 201103L >> namespace dr667 { // dr667: yes >> struct A { >> - A() = default; >> - int &r; >> + A() = default; // expected-warning {{explicitly defaulted default >> constructor is implicitly deleted}} >> + int &r; // expected-note {{because field 'r' of reference type 'int &' >> would not be initialized}} >> }; >> static_assert(!__is_trivially_constructible(A), ""); >> >> >> Modified: cfe/trunk/test/CXX/special/class.copy/p12-0x.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.copy/p12-0x.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/CXX/special/class.copy/p12-0x.cpp (original) >> +++ cfe/trunk/test/CXX/special/class.copy/p12-0x.cpp Thu Sep 27 18:16:43 2018 >> @@ -1,4 +1,4 @@ >> -// RUN: %clang_cc1 -std=c++11 -verify %s >> +// RUN: %clang_cc1 -std=c++11 -verify %s -Wno-defaulted-function-deleted >> >> // expected-no-diagnostics >> >> >> Modified: cfe/trunk/test/CXX/special/class.copy/p23-cxx11.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.copy/p23-cxx11.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/CXX/special/class.copy/p23-cxx11.cpp (original) >> +++ cfe/trunk/test/CXX/special/class.copy/p23-cxx11.cpp Thu Sep 27 18:16:43 >> 2018 >> @@ -1,4 +1,4 @@ >> -// RUN: %clang_cc1 -verify %s -std=c++11 >> +// RUN: %clang_cc1 -verify %s -std=c++11 -Wno-defaulted-function-deleted >> >> struct Trivial {}; >> >> >> Modified: cfe/trunk/test/CXX/special/class.ctor/p5-0x.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.ctor/p5-0x.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/CXX/special/class.ctor/p5-0x.cpp (original) >> +++ cfe/trunk/test/CXX/special/class.ctor/p5-0x.cpp Thu Sep 27 18:16:43 2018 >> @@ -1,4 +1,4 @@ >> -// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 >> +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 >> -Wno-defaulted-function-deleted >> >> struct DefaultedDefCtor1 {}; >> struct DefaultedDefCtor2 { DefaultedDefCtor2() = default; }; >> >> Modified: cfe/trunk/test/CXX/special/class.dtor/p5-0x.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.dtor/p5-0x.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/CXX/special/class.dtor/p5-0x.cpp (original) >> +++ cfe/trunk/test/CXX/special/class.dtor/p5-0x.cpp Thu Sep 27 18:16:43 2018 >> @@ -1,4 +1,4 @@ >> -// RUN: %clang_cc1 -verify -std=c++11 %s >> +// RUN: %clang_cc1 -verify -std=c++11 %s -Wno-defaulted-function-deleted >> >> struct NonTrivDtor { >> ~NonTrivDtor(); >> >> Modified: cfe/trunk/test/SemaCUDA/implicit-member-target.cu >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCUDA/implicit-member-target.cu?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaCUDA/implicit-member-target.cu (original) >> +++ cfe/trunk/test/SemaCUDA/implicit-member-target.cu Thu Sep 27 18:16:43 >> 2018 >> @@ -1,4 +1,4 @@ >> -// RUN: %clang_cc1 -std=gnu++11 -fsyntax-only -verify %s >> +// RUN: %clang_cc1 -std=gnu++11 -fsyntax-only -verify %s >> -Wno-defaulted-function-deleted >> >> #include "Inputs/cuda.h" >> >> >> Modified: cfe/trunk/test/SemaCXX/cxx0x-deleted-default-ctor.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx0x-deleted-default-ctor.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/cxx0x-deleted-default-ctor.cpp (original) >> +++ cfe/trunk/test/SemaCXX/cxx0x-deleted-default-ctor.cpp Thu Sep 27 >> 18:16:43 2018 >> @@ -59,7 +59,7 @@ struct good_const { >> good_const gc; >> >> struct no_default { >> - no_default() = delete; // expected-note 4{{deleted here}} >> + no_default() = delete; // expected-note 5{{deleted here}} >> }; >> struct no_dtor { >> ~no_dtor() = delete; // expected-note 2{{deleted here}} >> @@ -108,8 +108,8 @@ struct has_friend { >> has_friend hf; >> >> struct defaulted_delete { >> - no_default nd; // expected-note {{because field 'nd' has a deleted >> default constructor}} >> - defaulted_delete() = default; // expected-note{{implicitly deleted here}} >> + no_default nd; // expected-note 2{{because field 'nd' has a deleted >> default constructor}} >> + defaulted_delete() = default; // expected-note{{implicitly deleted here}} >> expected-warning {{implicitly deleted}} >> }; >> defaulted_delete dd; // expected-error {{call to implicitly-deleted default >> constructor}} >> >> >> Modified: cfe/trunk/test/SemaCXX/cxx17-compat.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx17-compat.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/cxx17-compat.cpp (original) >> +++ cfe/trunk/test/SemaCXX/cxx17-compat.cpp Thu Sep 27 18:16:43 2018 >> @@ -1,5 +1,5 @@ >> // RUN: %clang_cc1 -fsyntax-only -std=c++17 -pedantic -verify %s >> -// RUN: %clang_cc1 -fsyntax-only -std=c++2a -Wc++17-compat-pedantic -verify >> %s >> +// RUN: %clang_cc1 -fsyntax-only -std=c++2a -Wc++17-compat-pedantic -verify >> %s -Wno-defaulted-function-deleted >> >> struct A {}; >> int (A::*pa)() const&; >> @@ -42,3 +42,15 @@ void copy_lambda() { Lambda = Lambda; } >> #else >> // expected-warning@-4 {{assignment of lambda is incompatible with C++ >> standards before C++2a}} >> #endif >> + >> +struct DefaultDeleteWrongTypeBase { >> + DefaultDeleteWrongTypeBase(DefaultDeleteWrongTypeBase&); >> +}; >> +struct DefaultDeleteWrongType : DefaultDeleteWrongTypeBase { >> + DefaultDeleteWrongType(const DefaultDeleteWrongType&) = default; >> +#if __cplusplus <= 201703L >> + // expected-error@-2 {{a member or base requires it to be non-const}} >> +#else >> + // expected-warning@-4 {{explicitly defaulting this copy constructor >> with a type different from the implicit type is incompatible with C++ >> standards before C++2a}} >> +#endif >> +}; >> >> Modified: cfe/trunk/test/SemaCXX/dr1301.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/dr1301.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/dr1301.cpp (original) >> +++ cfe/trunk/test/SemaCXX/dr1301.cpp Thu Sep 27 18:16:43 2018 >> @@ -6,7 +6,7 @@ struct A { // expected-note 2{{candidate >> int a = A().n; // expected-error {{no matching constructor}} >> >> struct B { >> - B() = delete; // expected-note 3{{here}} >> + B() = delete; // expected-note 4{{here}} >> int n; >> }; >> int b = B().n; // expected-error {{call to deleted}} >> @@ -17,8 +17,8 @@ struct C { >> int c = C().b.n; // expected-error {{call to implicitly-deleted default}} >> >> struct D { >> - D() = default; // expected-note {{here}} >> - B b; // expected-note {{'b' has a deleted default constructor}} >> + D() = default; // expected-note {{here}} expected-warning {{implicitly >> deleted}} >> + B b; // expected-note 2{{'b' has a deleted default constructor}} >> }; >> int d = D().b.n; // expected-error {{call to implicitly-deleted default}} >> >> >> Modified: cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp (original) >> +++ cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp Thu Sep 27 >> 18:16:43 2018 >> @@ -6,8 +6,8 @@ struct S { >> void operator delete(void*, double); >> } s; // expected-error {{attempt to use a deleted function}} >> >> -struct T { // expected-note{{virtual destructor requires an unambiguous, >> accessible 'operator delete'}} >> - virtual ~T() = default; // expected-note {{explicitly defaulted function >> was implicitly deleted here}} >> +struct T { // expected-note 2{{virtual destructor requires an unambiguous, >> accessible 'operator delete'}} >> + virtual ~T() = default; // expected-note {{explicitly defaulted function >> was implicitly deleted here}} expected-warning {{implicitly deleted}} >> void operator delete(void*, int); >> void operator delete(void*, double); >> } t; // expected-error {{attempt to use a deleted function}} >> >> Modified: cfe/trunk/test/SemaTemplate/exception-spec-crash.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/exception-spec-crash.cpp?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaTemplate/exception-spec-crash.cpp (original) >> +++ cfe/trunk/test/SemaTemplate/exception-spec-crash.cpp Thu Sep 27 18:16:43 >> 2018 >> @@ -1,5 +1,5 @@ >> -// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s >> -// RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -DCXX_EXCEPTIONS >> -fsyntax-only -verify %s >> +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s >> -Wno-defaulted-function-deleted >> +// RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -DCXX_EXCEPTIONS >> -fsyntax-only -verify %s -Wno-defaulted-function-deleted >> >> template <class _Tp> struct is_nothrow_move_constructible { >> static const bool value = false; >> >> Modified: cfe/trunk/www/cxx_status.html >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_status.html?rev=343285&r1=343284&r2=343285&view=diff >> ============================================================================== >> --- cfe/trunk/www/cxx_status.html (original) >> +++ cfe/trunk/www/cxx_status.html Thu Sep 27 18:16:43 2018 >> @@ -884,7 +884,7 @@ as the draft C++2a standard evolves. >> <tr> >> <td><tt>const</tt> mismatch with defaulted copy constructor</td> >> <td><a href="http://wg21.link/p0641r2">P0641R2</a></td> >> - <td class="none" align="center">No</td> >> + <td class="svn" align="center">SVN</td> >> </tr> >> <tr> >> <td rowspan="3">Consistent comparison >> (<tt>operator<=></tt>)</td> >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits