diff options
| author | Anders Carlsson <andersca@mac.com> | 2010-04-22 01:17:32 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2010-04-22 01:17:32 +0000 |
| commit | 046bb5cc3fb17d41def0fba7e3e84722b8053d2b (patch) | |
| tree | 911b5742d9a3bcdf2e9831d8f1ef6e2c508ab09c /clang | |
| parent | 2e6567ae605c6b070ace32e8ecc19a36127b04f7 (diff) | |
| download | bcm5719-llvm-046bb5cc3fb17d41def0fba7e3e84722b8053d2b.tar.gz bcm5719-llvm-046bb5cc3fb17d41def0fba7e3e84722b8053d2b.zip | |
Unify two diagnostics into one.
llvm-svn: 102040
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 17 | ||||
| -rw-r--r-- | clang/lib/Sema/Sema.h | 1 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaAccess.cpp | 13 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 5 |
4 files changed, 17 insertions, 19 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index aad880a7dd6..945d046df5d 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -459,16 +459,15 @@ def err_access : def err_access_ctor : Error<"calling a %select{private|protected}0 constructor of class %2">, NoSFINAE; -def err_access_ctor_base : - Error<"base class %0 has %select{private|protected}1 constructor">, - NoSFINAE; + +def err_access_base : Error< + "%select{base class|inherited virtual base class}0 %1 has %select{private|" + "protected}3 %select{constructor|copy constructor|copy assignment operator|" + "destructor}2">, NoSFINAE; + def err_access_ctor_field : Error<"field of type %1 has %select{private|protected}2 constructor">, NoSFINAE; -def err_access_ctor_vbase : - Error<"inherited virtual base class %0 has " - "%select{private|protected}1 constructor">, - NoSFINAE; def err_access_dtor_base : Error<"base class %0 has %select{private|protected}1 destructor">, NoSFINAE; @@ -2932,9 +2931,9 @@ def warn_ivar_use_hidden : Warning< def error_ivar_use_in_class_method : Error< "instance variable %0 accessed in class method">; def error_private_ivar_access : Error<"instance variable %0 is private">, - NoSFINAE; + NoSFINAE; def error_protected_ivar_access : Error<"instance variable %0 is protected">, - NoSFINAE; + NoSFINAE; def warn_maynot_respond : Warning<"%0 may not respond to %1">; def warn_attribute_method_def : Warning< "method attribute can only be specified on method declarations">; diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 5333684522a..1b83ab826d4 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -930,6 +930,7 @@ public: CXXDestructor = 3 }; void DiagnoseNontrivial(const RecordType* Record, CXXSpecialMember mem); + CXXSpecialMember getSpecialMember(const CXXMethodDecl *MD); virtual DeclPtrTy ActOnIvar(Scope *S, SourceLocation DeclStart, DeclPtrTy IntfDecl, diff --git a/clang/lib/Sema/SemaAccess.cpp b/clang/lib/Sema/SemaAccess.cpp index f71d36ad7f3..af0c5b526ce 100644 --- a/clang/lib/Sema/SemaAccess.cpp +++ b/clang/lib/Sema/SemaAccess.cpp @@ -1143,14 +1143,13 @@ Sema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, AccessEntity.setDiag(diag::err_access_ctor); break; - case InitializedEntity::EK_Base: { - unsigned DiagID = Entity.isInheritedVirtualBase() ? - diag::err_access_ctor_vbase : diag::err_access_ctor_base; - AccessEntity.setDiag(PDiag(DiagID) - << Entity.getBaseSpecifier()->getType()); + case InitializedEntity::EK_Base: + AccessEntity.setDiag(PDiag(diag::err_access_base) + << Entity.isInheritedVirtualBase() + << Entity.getBaseSpecifier()->getType() + << getSpecialMember(Constructor)); break; - } - + case InitializedEntity::EK_Member: { const FieldDecl *Field = cast<FieldDecl>(Entity.getDecl()); AccessEntity.setDiag(PDiag(diag::err_access_ctor_field) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index dc59fa4fbfc..35a4710fc9e 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -924,8 +924,7 @@ struct GNUCompatibleParamWarning { /// getSpecialMember - get the special member enum for a method. -static Sema::CXXSpecialMember getSpecialMember(ASTContext &Ctx, - const CXXMethodDecl *MD) { +Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) { if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) { if (Ctor->isDefaultConstructor()) return Sema::CXXDefaultConstructor; @@ -1112,7 +1111,7 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD) { } else { Diag(NewMethod->getLocation(), diag::err_definition_of_implicitly_declared_member) - << New << getSpecialMember(Context, OldMethod); + << New << getSpecialMember(OldMethod); return true; } } |

