Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 1652e4a

Browse files
committed
Rename IsExplicitSpecialization -> IsMemberSpecialization when we're talking
about member specializations to avoid ambiguous and confusing terminology. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@294622 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 85d7bd3 commit 1652e4a

File tree

4 files changed

+48
-50
lines changed

4 files changed

+48
-50
lines changed

include/clang/Sema/Sema.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -1784,7 +1784,7 @@ class Sema {
17841784
// Returns true if the function declaration is a redeclaration
17851785
bool CheckFunctionDeclaration(Scope *S,
17861786
FunctionDecl *NewFD, LookupResult &Previous,
1787-
bool IsExplicitSpecialization);
1787+
bool IsMemberSpecialization);
17881788
bool shouldLinkDependentDeclWithPrevious(Decl *D, Decl *OldDecl);
17891789
void CheckMain(FunctionDecl *FD, const DeclSpec &D);
17901790
void CheckMSVCRTEntryPoint(FunctionDecl *FD);
@@ -5918,7 +5918,7 @@ class Sema {
59185918
SourceLocation DeclStartLoc, SourceLocation DeclLoc,
59195919
const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId,
59205920
ArrayRef<TemplateParameterList *> ParamLists,
5921-
bool IsFriend, bool &IsExplicitSpecialization, bool &Invalid);
5921+
bool IsFriend, bool &IsMemberSpecialization, bool &Invalid);
59225922

59235923
DeclResult CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
59245924
SourceLocation KWLoc, CXXScopeSpec &SS,

lib/Sema/SemaDecl.cpp

+31-31
Original file line numberDiff line numberDiff line change
@@ -6108,7 +6108,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
61086108
}
61096109
}
61106110

6111-
bool IsExplicitSpecialization = false;
6111+
bool IsMemberSpecialization = false;
61126112
bool IsVariableTemplateSpecialization = false;
61136113
bool IsPartialSpecialization = false;
61146114
bool IsVariableTemplate = false;
@@ -6186,7 +6186,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
61866186
? D.getName().TemplateId
61876187
: nullptr,
61886188
TemplateParamLists,
6189-
/*never a friend*/ false, IsExplicitSpecialization, Invalid);
6189+
/*never a friend*/ false, IsMemberSpecialization, Invalid);
61906190

61916191
if (TemplateParams) {
61926192
if (!TemplateParams->size() &&
@@ -6412,7 +6412,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
64126412
<< (IsPartialSpecialization ? 1 : 0)
64136413
<< FixItHint::CreateRemoval(
64146414
D.getDeclSpec().getModulePrivateSpecLoc());
6415-
else if (IsExplicitSpecialization)
6415+
else if (IsMemberSpecialization)
64166416
Diag(NewVD->getLocation(), diag::err_module_private_specialization)
64176417
<< 2
64186418
<< FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
@@ -6527,7 +6527,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
65276527
// declaration has linkage).
65286528
FilterLookupForScope(Previous, OriginalDC, S, shouldConsiderLinkage(NewVD),
65296529
D.getCXXScopeSpec().isNotEmpty() ||
6530-
IsExplicitSpecialization ||
6530+
IsMemberSpecialization ||
65316531
IsVariableTemplateSpecialization);
65326532

65336533
// Check whether the previous declaration is in the same block scope. This
@@ -6542,7 +6542,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
65426542
D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous));
65436543
} else {
65446544
// If this is an explicit specialization of a static data member, check it.
6545-
if (IsExplicitSpecialization && !NewVD->isInvalidDecl() &&
6545+
if (IsMemberSpecialization && !NewVD->isInvalidDecl() &&
65466546
CheckMemberSpecialization(NewVD, Previous))
65476547
NewVD->setInvalidDecl();
65486548

@@ -6657,7 +6657,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
66576657
if (D.isRedeclaration() && !Previous.empty()) {
66586658
checkDLLAttributeRedeclaration(
66596659
*this, dyn_cast<NamedDecl>(Previous.getRepresentativeDecl()), NewVD,
6660-
IsExplicitSpecialization, D.isFunctionDefinition());
6660+
IsMemberSpecialization, D.isFunctionDefinition());
66616661
}
66626662

66636663
if (NewTemplate) {
@@ -7936,7 +7936,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
79367936

79377937
bool isFriend = false;
79387938
FunctionTemplateDecl *FunctionTemplate = nullptr;
7939-
bool isExplicitSpecialization = false;
7939+
bool isMemberSpecialization = false;
79407940
bool isFunctionTemplateSpecialization = false;
79417941

79427942
bool isDependentClassScopeExplicitSpecialization = false;
@@ -7992,7 +7992,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
79927992
}
79937993

79947994
SetNestedNameSpecifier(NewFD, D);
7995-
isExplicitSpecialization = false;
7995+
isMemberSpecialization = false;
79967996
isFunctionTemplateSpecialization = false;
79977997
if (D.isInvalidType())
79987998
NewFD->setInvalidDecl();
@@ -8007,7 +8007,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
80078007
D.getName().getKind() == UnqualifiedId::IK_TemplateId
80088008
? D.getName().TemplateId
80098009
: nullptr,
8010-
TemplateParamLists, isFriend, isExplicitSpecialization,
8010+
TemplateParamLists, isFriend, isMemberSpecialization,
80118011
Invalid)) {
80128012
if (TemplateParams->size() > 0) {
80138013
// This is a function template
@@ -8340,7 +8340,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
83408340
// Filter out previous declarations that don't match the scope.
83418341
FilterLookupForScope(Previous, OriginalDC, S, shouldConsiderLinkage(NewFD),
83428342
D.getCXXScopeSpec().isNotEmpty() ||
8343-
isExplicitSpecialization ||
8343+
isMemberSpecialization ||
83448344
isFunctionTemplateSpecialization);
83458345

83468346
// Handle GNU asm-label extension (encoded as an attribute).
@@ -8490,7 +8490,6 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
84908490

84918491
if (!getLangOpts().CPlusPlus) {
84928492
// Perform semantic checking on the function declaration.
8493-
bool isExplicitSpecialization=false;
84948493
if (!NewFD->isInvalidDecl() && NewFD->isMain())
84958494
CheckMain(NewFD, D.getDeclSpec());
84968495

@@ -8499,7 +8498,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
84998498

85008499
if (!NewFD->isInvalidDecl())
85018500
D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
8502-
isExplicitSpecialization));
8501+
isMemberSpecialization));
85038502
else if (!Previous.empty())
85048503
// Recover gracefully from an invalid redeclaration.
85058504
D.setRedeclaration(true);
@@ -8634,7 +8633,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
86348633
<< FixItHint::CreateRemoval(
86358634
D.getDeclSpec().getStorageClassSpecLoc());
86368635
}
8637-
} else if (isExplicitSpecialization && isa<CXXMethodDecl>(NewFD)) {
8636+
} else if (isMemberSpecialization && isa<CXXMethodDecl>(NewFD)) {
86388637
if (CheckMemberSpecialization(NewFD, Previous))
86398638
NewFD->setInvalidDecl();
86408639
}
@@ -8649,7 +8648,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
86498648

86508649
if (!NewFD->isInvalidDecl())
86518650
D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
8652-
isExplicitSpecialization));
8651+
isMemberSpecialization));
86538652
else if (!Previous.empty())
86548653
// Recover gracefully from an invalid redeclaration.
86558654
D.setRedeclaration(true);
@@ -8755,7 +8754,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
87558754
} else if (!D.isFunctionDefinition() &&
87568755
isa<CXXMethodDecl>(NewFD) && NewFD->isOutOfLine() &&
87578756
!isFriend && !isFunctionTemplateSpecialization &&
8758-
!isExplicitSpecialization) {
8757+
!isMemberSpecialization) {
87598758
// An out-of-line member function declaration must also be a
87608759
// definition (C++ [class.mfct]p2).
87618760
// Note that this is not the case for explicit specializations of
@@ -8816,7 +8815,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
88168815
if (D.isRedeclaration() && !Previous.empty()) {
88178816
checkDLLAttributeRedeclaration(
88188817
*this, dyn_cast<NamedDecl>(Previous.getRepresentativeDecl()), NewFD,
8819-
isExplicitSpecialization || isFunctionTemplateSpecialization,
8818+
isMemberSpecialization || isFunctionTemplateSpecialization,
88208819
D.isFunctionDefinition());
88218820
}
88228821

@@ -8941,15 +8940,16 @@ bool Sema::shouldLinkDependentDeclWithPrevious(Decl *D, Decl *PrevDecl) {
89418940
/// that have been instantiated via C++ template instantiation (called
89428941
/// via InstantiateDecl).
89438942
///
8944-
/// \param IsExplicitSpecialization whether this new function declaration is
8945-
/// an explicit specialization of the previous declaration.
8943+
/// \param IsMemberSpecialization whether this new function declaration is
8944+
/// a member specialization (that replaces any definition provided by the
8945+
/// previous declaration).
89468946
///
89478947
/// This sets NewFD->isInvalidDecl() to true if there was an error.
89488948
///
89498949
/// \returns true if the function declaration is a redeclaration.
89508950
bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
89518951
LookupResult &Previous,
8952-
bool IsExplicitSpecialization) {
8952+
bool IsMemberSpecialization) {
89538953
assert(!NewFD->getReturnType()->isVariablyModifiedType() &&
89548954
"Variably modified return types are not handled here");
89558955

@@ -9099,7 +9099,7 @@ bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
90999099

91009100
// If this is an explicit specialization of a member that is a function
91019101
// template, mark it as a member specialization.
9102-
if (IsExplicitSpecialization &&
9102+
if (IsMemberSpecialization &&
91039103
NewTemplateDecl->getInstantiatedFromMemberTemplate()) {
91049104
NewTemplateDecl->setMemberSpecialization();
91059105
assert(OldTemplateDecl->isMemberSpecialization());
@@ -12843,8 +12843,8 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1284312843
TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
1284412844
bool ScopedEnum = ScopedEnumKWLoc.isValid();
1284512845

12846-
// FIXME: Check explicit specializations more carefully.
12847-
bool isExplicitSpecialization = false;
12846+
// FIXME: Check member specializations more carefully.
12847+
bool isMemberSpecialization = false;
1284812848
bool Invalid = false;
1284912849

1285012850
// We only need to do this matching if we have template parameters
@@ -12855,7 +12855,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1285512855
if (TemplateParameterList *TemplateParams =
1285612856
MatchTemplateParametersToScopeSpecifier(
1285712857
KWLoc, NameLoc, SS, nullptr, TemplateParameterLists,
12858-
TUK == TUK_Friend, isExplicitSpecialization, Invalid)) {
12858+
TUK == TUK_Friend, isMemberSpecialization, Invalid)) {
1285912859
if (Kind == TTK_Enum) {
1286012860
Diag(KWLoc, diag::err_enum_template);
1286112861
return nullptr;
@@ -12882,7 +12882,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1288212882
// The "template<>" header is extraneous.
1288312883
Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
1288412884
<< TypeWithKeyword::getTagTypeKindName(Kind) << Name;
12885-
isExplicitSpecialization = true;
12885+
isMemberSpecialization = true;
1288612886
}
1288712887
}
1288812888
}
@@ -13202,7 +13202,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1320213202
if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {
1320313203
auto *OldTag = dyn_cast<TagDecl>(PrevDecl);
1320413204
if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend &&
13205-
isDeclInScope(Shadow, SearchDC, S, isExplicitSpecialization) &&
13205+
isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) &&
1320613206
!(OldTag && isAcceptableTagRedeclContext(
1320713207
*this, OldTag->getDeclContext(), SearchDC))) {
1320813208
Diag(KWLoc, diag::err_using_decl_conflict_reverse);
@@ -13222,7 +13222,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1322213222
// rementions the tag), reuse the decl.
1322313223
if (TUK == TUK_Reference || TUK == TUK_Friend ||
1322413224
isDeclInScope(DirectPrevDecl, SearchDC, S,
13225-
SS.isNotEmpty() || isExplicitSpecialization)) {
13225+
SS.isNotEmpty() || isMemberSpecialization)) {
1322613226
// Make sure that this wasn't declared as an enum and now used as a
1322713227
// struct or something similar.
1322813228
if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind,
@@ -13327,7 +13327,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1332713327
// is from an implicit instantiation, don't emit an error
1332813328
// here; we'll catch this in the general case below.
1332913329
bool IsExplicitSpecializationAfterInstantiation = false;
13330-
if (isExplicitSpecialization) {
13330+
if (isMemberSpecialization) {
1333113331
if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Def))
1333213332
IsExplicitSpecializationAfterInstantiation =
1333313333
RD->getTemplateSpecializationKind() !=
@@ -13421,7 +13421,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1342113421

1342213422
// Otherwise, only diagnose if the declaration is in scope.
1342313423
} else if (!isDeclInScope(DirectPrevDecl, SearchDC, S,
13424-
SS.isNotEmpty() || isExplicitSpecialization)) {
13424+
SS.isNotEmpty() || isMemberSpecialization)) {
1342513425
// do nothing
1342613426

1342713427
// Diagnose implicit declarations introduced by elaborated types.
@@ -13553,7 +13553,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1355313553
// for explicit specializations, because they have similar checking
1355413554
// (with more specific diagnostics) in the call to
1355513555
// CheckMemberSpecialization, below.
13556-
if (!isExplicitSpecialization &&
13556+
if (!isMemberSpecialization &&
1355713557
(TUK == TUK_Definition || TUK == TUK_Declaration) &&
1355813558
diagnoseQualifiedDeclaration(SS, DC, OrigName, Loc))
1355913559
Invalid = true;
@@ -13584,7 +13584,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1358413584
}
1358513585

1358613586
if (ModulePrivateLoc.isValid()) {
13587-
if (isExplicitSpecialization)
13587+
if (isMemberSpecialization)
1358813588
Diag(New->getLocation(), diag::err_module_private_specialization)
1358913589
<< 2
1359013590
<< FixItHint::CreateRemoval(ModulePrivateLoc);
@@ -13597,7 +13597,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1359713597

1359813598
// If this is a specialization of a member class (of a class template),
1359913599
// check the specialization.
13600-
if (isExplicitSpecialization && CheckMemberSpecialization(New, Previous))
13600+
if (isMemberSpecialization && CheckMemberSpecialization(New, Previous))
1360113601
Invalid = true;
1360213602

1360313603
// If we're declaring or defining a tag in function prototype scope in C,

lib/Sema/SemaDeclCXX.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -10143,7 +10143,7 @@ void Sema::CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD) {
1014310143
R.resolveKind();
1014410144
R.suppressDiagnostics();
1014510145

10146-
CheckFunctionDeclaration(S, FD, R, /*IsExplicitSpecialization*/false);
10146+
CheckFunctionDeclaration(S, FD, R, /*IsMemberSpecialization*/false);
1014710147
}
1014810148

1014910149
CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
@@ -13478,13 +13478,13 @@ Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
1347813478
MultiTemplateParamsArg TempParamLists) {
1347913479
TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
1348013480

13481-
bool isExplicitSpecialization = false;
13481+
bool IsMemberSpecialization = false;
1348213482
bool Invalid = false;
1348313483

1348413484
if (TemplateParameterList *TemplateParams =
1348513485
MatchTemplateParametersToScopeSpecifier(
1348613486
TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true,
13487-
isExplicitSpecialization, Invalid)) {
13487+
IsMemberSpecialization, Invalid)) {
1348813488
if (TemplateParams->size() > 0) {
1348913489
// This is a declaration of a class template.
1349013490
if (Invalid)
@@ -13499,7 +13499,7 @@ Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
1349913499
// The "template<>" header is extraneous.
1350013500
Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
1350113501
<< TypeWithKeyword::getTagTypeKindName(Kind) << Name;
13502-
isExplicitSpecialization = true;
13502+
IsMemberSpecialization = true;
1350313503
}
1350413504
}
1350513505

0 commit comments

Comments
 (0)