]> granicus.if.org Git - clang/commitdiff
Unify two diagnostics into one.
authorAnders Carlsson <andersca@mac.com>
Thu, 22 Apr 2010 01:17:32 +0000 (01:17 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 22 Apr 2010 01:17:32 +0000 (01:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102040 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/Sema.h
lib/Sema/SemaAccess.cpp
lib/Sema/SemaDecl.cpp

index aad880a7dd6a416ae43d385f881b8720a21f2cd3..945d046df5db4c70e8aca17a8e5a00b8bf5dbe03 100644 (file)
@@ -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">;
index 5333684522a5ba6013f8c8977c3890d8b7dfb2fb..1b83ab826d4d4e33cc4c70434f5d305bd8452aa3 100644 (file)
@@ -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,
index f71d36ad7f3328d656aacf364a04c33bacaf2c9a..af0c5b526cea2bb4e32834e509bac3ff3d2cdfb3 100644 (file)
@@ -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)
index dc59fa4fbfc1839d61c44503960e3c8183566c6b..35a4710fc9edc2a6efd69178fa5be452d1f5bfba 100644 (file)
@@ -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;
         }
       }