Skip to content

Commit 046bb5c

Browse files
author
Anders Carlsson
committed
Unify two diagnostics into one.
llvm-svn: 102040
1 parent 2e6567a commit 046bb5c

File tree

4 files changed

+17
-19
lines changed

4 files changed

+17
-19
lines changed

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -459,16 +459,15 @@ def err_access :
459459
def err_access_ctor :
460460
Error<"calling a %select{private|protected}0 constructor of class %2">,
461461
NoSFINAE;
462-
def err_access_ctor_base :
463-
Error<"base class %0 has %select{private|protected}1 constructor">,
464-
NoSFINAE;
462+
463+
def err_access_base : Error<
464+
"%select{base class|inherited virtual base class}0 %1 has %select{private|"
465+
"protected}3 %select{constructor|copy constructor|copy assignment operator|"
466+
"destructor}2">, NoSFINAE;
467+
465468
def err_access_ctor_field :
466469
Error<"field of type %1 has %select{private|protected}2 constructor">,
467470
NoSFINAE;
468-
def err_access_ctor_vbase :
469-
Error<"inherited virtual base class %0 has "
470-
"%select{private|protected}1 constructor">,
471-
NoSFINAE;
472471
def err_access_dtor_base :
473472
Error<"base class %0 has %select{private|protected}1 destructor">,
474473
NoSFINAE;
@@ -2932,9 +2931,9 @@ def warn_ivar_use_hidden : Warning<
29322931
def error_ivar_use_in_class_method : Error<
29332932
"instance variable %0 accessed in class method">;
29342933
def error_private_ivar_access : Error<"instance variable %0 is private">,
2935-
NoSFINAE;
2934+
NoSFINAE;
29362935
def error_protected_ivar_access : Error<"instance variable %0 is protected">,
2937-
NoSFINAE;
2936+
NoSFINAE;
29382937
def warn_maynot_respond : Warning<"%0 may not respond to %1">;
29392938
def warn_attribute_method_def : Warning<
29402939
"method attribute can only be specified on method declarations">;

clang/lib/Sema/Sema.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,7 @@ class Sema : public Action {
930930
CXXDestructor = 3
931931
};
932932
void DiagnoseNontrivial(const RecordType* Record, CXXSpecialMember mem);
933+
CXXSpecialMember getSpecialMember(const CXXMethodDecl *MD);
933934

934935
virtual DeclPtrTy ActOnIvar(Scope *S, SourceLocation DeclStart,
935936
DeclPtrTy IntfDecl,

clang/lib/Sema/SemaAccess.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,14 +1143,13 @@ Sema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc,
11431143
AccessEntity.setDiag(diag::err_access_ctor);
11441144
break;
11451145

1146-
case InitializedEntity::EK_Base: {
1147-
unsigned DiagID = Entity.isInheritedVirtualBase() ?
1148-
diag::err_access_ctor_vbase : diag::err_access_ctor_base;
1149-
AccessEntity.setDiag(PDiag(DiagID)
1150-
<< Entity.getBaseSpecifier()->getType());
1146+
case InitializedEntity::EK_Base:
1147+
AccessEntity.setDiag(PDiag(diag::err_access_base)
1148+
<< Entity.isInheritedVirtualBase()
1149+
<< Entity.getBaseSpecifier()->getType()
1150+
<< getSpecialMember(Constructor));
11511151
break;
1152-
}
1153-
1152+
11541153
case InitializedEntity::EK_Member: {
11551154
const FieldDecl *Field = cast<FieldDecl>(Entity.getDecl());
11561155
AccessEntity.setDiag(PDiag(diag::err_access_ctor_field)

clang/lib/Sema/SemaDecl.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -924,8 +924,7 @@ struct GNUCompatibleParamWarning {
924924

925925

926926
/// getSpecialMember - get the special member enum for a method.
927-
static Sema::CXXSpecialMember getSpecialMember(ASTContext &Ctx,
928-
const CXXMethodDecl *MD) {
927+
Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) {
929928
if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) {
930929
if (Ctor->isDefaultConstructor())
931930
return Sema::CXXDefaultConstructor;
@@ -1112,7 +1111,7 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD) {
11121111
} else {
11131112
Diag(NewMethod->getLocation(),
11141113
diag::err_definition_of_implicitly_declared_member)
1115-
<< New << getSpecialMember(Context, OldMethod);
1114+
<< New << getSpecialMember(OldMethod);
11161115
return true;
11171116
}
11181117
}

0 commit comments

Comments
 (0)