diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 3 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 5 | ||||
-rw-r--r-- | clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/default-constructor-initializers.cpp | 6 |
4 files changed, 9 insertions, 7 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 9d39389f519..fdd644235e5 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -720,8 +720,9 @@ def err_param_default_argument_member_template_redecl : Error< "default arguments cannot be added to an out-of-line definition of a member " "of a %select{class template|class template partial specialization|nested " "class in a template}0">; +def note_field_decl : Note<"member is declared here">; def err_defining_default_ctor : Error< - "cannot define the implicit default constructor for %0, because %select{base class|member}1 " + "cannot define the implicit default constructor for %0, because %select{base class|member's type}1 " "%2 does not have any default constructor">; def note_previous_class_decl : Note< "%0 declared here">; diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index e00cbf8978b..abe20408ccd 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2852,7 +2852,7 @@ void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation, MarkDeclarationReferenced(CurrentLocation, BaseCtor); else { Diag(CurrentLocation, diag::err_defining_default_ctor) - << Context.getTagDeclType(ClassDecl) << 1 + << Context.getTagDeclType(ClassDecl) << 0 << Context.getTagDeclType(BaseClassDecl); Diag(BaseClassDecl->getLocation(), diag::note_previous_class_decl) << Context.getTagDeclType(BaseClassDecl); @@ -2874,8 +2874,9 @@ void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation, MarkDeclarationReferenced(CurrentLocation, FieldCtor); else { Diag(CurrentLocation, diag::err_defining_default_ctor) - << Context.getTagDeclType(ClassDecl) << 0 << + << Context.getTagDeclType(ClassDecl) << 1 << Context.getTagDeclType(FieldClassDecl); + Diag((*Field)->getLocation(), diag::note_field_decl); Diag(FieldClassDecl->getLocation(), diag::note_previous_class_decl) << Context.getTagDeclType(FieldClassDecl); err = true; diff --git a/clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp b/clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp index a09cccd1fd0..8d91068f9b9 100644 --- a/clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp +++ b/clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp @@ -13,7 +13,7 @@ struct X { // expected-note{{here}} void g() { } struct Inner { - T value; + T value; // expected-note {{member is declared here}} }; static T value; diff --git a/clang/test/SemaCXX/default-constructor-initializers.cpp b/clang/test/SemaCXX/default-constructor-initializers.cpp index a6db6a7d9a4..6cbb978dbb9 100644 --- a/clang/test/SemaCXX/default-constructor-initializers.cpp +++ b/clang/test/SemaCXX/default-constructor-initializers.cpp @@ -11,15 +11,15 @@ struct X2 : X1 { // expected-note {{'struct X2' declared here}} \ struct X3 : public X2 { }; -X3 x3; // expected-error {{cannot define the implicit default constructor for 'struct X3', because member 'struct X2' does not have any default constructor}} +X3 x3; // expected-error {{cannot define the implicit default constructor for 'struct X3', because base class 'struct X2' does not have any default constructor}} struct X4 { - X2 x2; + X2 x2; // expected-note {{member is declared here}} X2 & rx2; // expected-note {{declared at}} }; -X4 x4; // expected-error {{cannot define the implicit default constructor for 'struct X4', because base class 'struct X2' does not have any default constructor}} \ +X4 x4; // expected-error {{cannot define the implicit default constructor for 'struct X4', because member's type 'struct X2' does not have any default constructor}} \ // expected-error {{cannot define the implicit default constructor for 'struct X4', because reference member 'rx2' cannot be default-initialized}} |