Skip to content

Commit d3d5a30

Browse files
committed
[clang][NFC] Remove const_cast from ParseClassSpecifier
1 parent 502ccd8 commit d3d5a30

File tree

6 files changed

+45
-42
lines changed

6 files changed

+45
-42
lines changed

clang/include/clang/Parse/Parser.h

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2480,24 +2480,23 @@ class Parser : public CodeCompletionHandler {
24802480
bool trySkippingFunctionBody();
24812481

24822482
bool ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS,
2483-
const ParsedTemplateInfo &TemplateInfo,
2484-
AccessSpecifier AS, DeclSpecContext DSC,
2485-
ParsedAttributes &Attrs);
2483+
ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS,
2484+
DeclSpecContext DSC, ParsedAttributes &Attrs);
24862485
DeclSpecContext
24872486
getDeclSpecContextFromDeclaratorContext(DeclaratorContext Context);
2488-
void ParseDeclarationSpecifiers(
2489-
DeclSpec &DS,
2490-
const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
2491-
AccessSpecifier AS = AS_none,
2492-
DeclSpecContext DSC = DeclSpecContext::DSC_normal,
2493-
LateParsedAttrList *LateAttrs = nullptr) {
2487+
void
2488+
ParseDeclarationSpecifiers(DeclSpec &DS, ParsedTemplateInfo &TemplateInfo,
2489+
AccessSpecifier AS = AS_none,
2490+
DeclSpecContext DSC = DeclSpecContext::DSC_normal,
2491+
LateParsedAttrList *LateAttrs = nullptr) {
24942492
return ParseDeclarationSpecifiers(DS, TemplateInfo, AS, DSC, LateAttrs,
24952493
getImplicitTypenameContext(DSC));
24962494
}
2497-
void ParseDeclarationSpecifiers(
2498-
DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS,
2499-
DeclSpecContext DSC, LateParsedAttrList *LateAttrs,
2500-
ImplicitTypenameContext AllowImplicitTypename);
2495+
void
2496+
ParseDeclarationSpecifiers(DeclSpec &DS, ParsedTemplateInfo &TemplateInfo,
2497+
AccessSpecifier AS, DeclSpecContext DSC,
2498+
LateParsedAttrList *LateAttrs,
2499+
ImplicitTypenameContext AllowImplicitTypename);
25012500

25022501
SourceLocation ParsePackIndexingType(DeclSpec &DS);
25032502
void AnnotateExistingIndexedTypeNamePack(ParsedType T,
@@ -3308,7 +3307,7 @@ class Parser : public CodeCompletionHandler {
33083307
// C++ 9: classes [class] and C structs/unions.
33093308
bool isValidAfterTypeSpecifier(bool CouldBeBitfield);
33103309
void ParseClassSpecifier(tok::TokenKind TagTokKind, SourceLocation TagLoc,
3311-
DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo,
3310+
DeclSpec &DS, ParsedTemplateInfo &TemplateInfo,
33123311
AccessSpecifier AS, bool EnteringContext,
33133312
DeclSpecContext DSC, ParsedAttributes &Attributes);
33143313
void SkipCXXMemberSpecification(SourceLocation StartLoc,
@@ -3330,7 +3329,7 @@ class Parser : public CodeCompletionHandler {
33303329
VirtSpecifiers &VS);
33313330
DeclGroupPtrTy ParseCXXClassMemberDeclaration(
33323331
AccessSpecifier AS, ParsedAttributes &Attr,
3333-
const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
3332+
ParsedTemplateInfo &TemplateInfo,
33343333
ParsingDeclRAIIObject *DiagsFromTParams = nullptr);
33353334
DeclGroupPtrTy
33363335
ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS,

clang/lib/Parse/ParseDecl.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2845,10 +2845,11 @@ Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(
28452845
void Parser::ParseSpecifierQualifierList(
28462846
DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename,
28472847
AccessSpecifier AS, DeclSpecContext DSC) {
2848+
ParsedTemplateInfo TemplateInfo;
28482849
/// specifier-qualifier-list is a subset of declaration-specifiers. Just
28492850
/// parse declaration-specifiers and complain about extra stuff.
28502851
/// TODO: diagnose attribute-specifiers and alignment-specifiers.
2851-
ParseDeclarationSpecifiers(DS, ParsedTemplateInfo(), AS, DSC, nullptr,
2852+
ParseDeclarationSpecifiers(DS, TemplateInfo, AS, DSC, nullptr,
28522853
AllowImplicitTypename);
28532854

28542855
// Validate declspec for type-name.
@@ -2927,7 +2928,7 @@ static bool isValidAfterIdentifierInDeclarator(const Token &T) {
29272928
/// other pieces of declspec after it, it returns true.
29282929
///
29292930
bool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS,
2930-
const ParsedTemplateInfo &TemplateInfo,
2931+
ParsedTemplateInfo &TemplateInfo,
29312932
AccessSpecifier AS, DeclSpecContext DSC,
29322933
ParsedAttributes &Attrs) {
29332934
assert(Tok.is(tok::identifier) && "should have identifier");
@@ -3489,7 +3490,7 @@ Parser::DiagnoseMissingSemiAfterTagDefinition(DeclSpec &DS, AccessSpecifier AS,
34893490
/// 'friend': [C++ dcl.friend]
34903491
/// 'constexpr': [C++0x dcl.constexpr]
34913492
void Parser::ParseDeclarationSpecifiers(
3492-
DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS,
3493+
DeclSpec &DS, ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS,
34933494
DeclSpecContext DSContext, LateParsedAttrList *LateAttrs,
34943495
ImplicitTypenameContext AllowImplicitTypename) {
34953496
if (DS.getSourceRange().isInvalid()) {
@@ -7736,8 +7737,9 @@ void Parser::ParseParameterDeclarationClause(
77367737
Diag(ThisLoc, diag::err_requires_expr_explicit_object_parameter);
77377738
}
77387739

7739-
ParseDeclarationSpecifiers(DS, /*TemplateInfo=*/ParsedTemplateInfo(),
7740-
AS_none, DeclSpecContext::DSC_normal,
7740+
ParsedTemplateInfo TemplateInfo;
7741+
ParseDeclarationSpecifiers(DS, TemplateInfo, AS_none,
7742+
DeclSpecContext::DSC_normal,
77417743
/*LateAttrs=*/nullptr, AllowImplicitTypename);
77427744

77437745
DS.takeAttributesFrom(ArgDeclSpecAttrs);

clang/lib/Parse/ParseDeclCXX.cpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,7 +1661,7 @@ bool Parser::isValidAfterTypeSpecifier(bool CouldBeBitfield) {
16611661
/// 'union'
16621662
void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
16631663
SourceLocation StartLoc, DeclSpec &DS,
1664-
const ParsedTemplateInfo &TemplateInfo,
1664+
ParsedTemplateInfo &TemplateInfo,
16651665
AccessSpecifier AS, bool EnteringContext,
16661666
DeclSpecContext DSC,
16671667
ParsedAttributes &Attributes) {
@@ -1861,18 +1861,14 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
18611861
TemplateParams->pop_back();
18621862
} else {
18631863
TemplateParams = nullptr;
1864-
const_cast<ParsedTemplateInfo &>(TemplateInfo).Kind =
1865-
ParsedTemplateInfo::NonTemplate;
1864+
TemplateInfo.Kind = ParsedTemplateInfo::NonTemplate;
18661865
}
18671866
} else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {
18681867
// Pretend this is just a forward declaration.
18691868
TemplateParams = nullptr;
1870-
const_cast<ParsedTemplateInfo &>(TemplateInfo).Kind =
1871-
ParsedTemplateInfo::NonTemplate;
1872-
const_cast<ParsedTemplateInfo &>(TemplateInfo).TemplateLoc =
1873-
SourceLocation();
1874-
const_cast<ParsedTemplateInfo &>(TemplateInfo).ExternLoc =
1875-
SourceLocation();
1869+
TemplateInfo.Kind = ParsedTemplateInfo::NonTemplate;
1870+
TemplateInfo.TemplateLoc = SourceLocation();
1871+
TemplateInfo.ExternLoc = SourceLocation();
18761872
}
18771873
};
18781874

@@ -2804,11 +2800,9 @@ void Parser::MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(
28042800
/// constant-initializer:
28052801
/// '=' constant-expression
28062802
///
2807-
Parser::DeclGroupPtrTy
2808-
Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
2809-
ParsedAttributes &AccessAttrs,
2810-
const ParsedTemplateInfo &TemplateInfo,
2811-
ParsingDeclRAIIObject *TemplateDiags) {
2803+
Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(
2804+
AccessSpecifier AS, ParsedAttributes &AccessAttrs,
2805+
ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {
28122806
assert(getLangOpts().CPlusPlus &&
28132807
"ParseCXXClassMemberDeclaration should only be called in C++ mode");
28142808
if (Tok.is(tok::at)) {
@@ -3525,8 +3519,10 @@ Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(
35253519
case tok::kw_private:
35263520
// FIXME: We don't accept GNU attributes on access specifiers in OpenCL mode
35273521
// yet.
3528-
if (getLangOpts().OpenCL && !NextToken().is(tok::colon))
3529-
return ParseCXXClassMemberDeclaration(AS, AccessAttrs);
3522+
if (getLangOpts().OpenCL && !NextToken().is(tok::colon)) {
3523+
ParsedTemplateInfo TemplateInfo;
3524+
return ParseCXXClassMemberDeclaration(AS, AccessAttrs, TemplateInfo);
3525+
}
35303526
[[fallthrough]];
35313527
case tok::kw_public:
35323528
case tok::kw_protected: {
@@ -3582,7 +3578,8 @@ Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(
35823578
ConsumeAnnotationToken();
35833579
return nullptr;
35843580
}
3585-
return ParseCXXClassMemberDeclaration(AS, AccessAttrs);
3581+
ParsedTemplateInfo TemplateInfo;
3582+
return ParseCXXClassMemberDeclaration(AS, AccessAttrs, TemplateInfo);
35863583
}
35873584
}
35883585

@@ -5167,8 +5164,9 @@ void Parser::ParseMicrosoftIfExistsClassDeclaration(
51675164
continue;
51685165
}
51695166

5167+
ParsedTemplateInfo TemplateInfo;
51705168
// Parse all the comma separated declarators.
5171-
ParseCXXClassMemberDeclaration(CurAS, AccessAttrs);
5169+
ParseCXXClassMemberDeclaration(CurAS, AccessAttrs, TemplateInfo);
51725170
}
51735171

51745172
Braces.consumeClose();

clang/lib/Parse/ParseObjc.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,7 +1533,8 @@ Decl *Parser::ParseObjCMethodDecl(SourceLocation mLoc,
15331533
cStyleParamWarned = true;
15341534
}
15351535
DeclSpec DS(AttrFactory);
1536-
ParseDeclarationSpecifiers(DS);
1536+
ParsedTemplateInfo TemplateInfo;
1537+
ParseDeclarationSpecifiers(DS, TemplateInfo);
15371538
// Parse the declarator.
15381539
Declarator ParmDecl(DS, ParsedAttributesView::none(),
15391540
DeclaratorContext::Prototype);
@@ -2588,7 +2589,8 @@ StmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {
25882589
Scope::AtCatchScope);
25892590
if (Tok.isNot(tok::ellipsis)) {
25902591
DeclSpec DS(AttrFactory);
2591-
ParseDeclarationSpecifiers(DS);
2592+
ParsedTemplateInfo TemplateInfo;
2593+
ParseDeclarationSpecifiers(DS, TemplateInfo);
25922594
Declarator ParmDecl(DS, ParsedAttributesView::none(),
25932595
DeclaratorContext::ObjCCatch);
25942596
ParseDeclarator(ParmDecl);

clang/lib/Parse/ParseTemplate.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,8 @@ Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {
907907
// FIXME: The type should probably be restricted in some way... Not all
908908
// declarators (parts of declarators?) are accepted for parameters.
909909
DeclSpec DS(AttrFactory);
910-
ParseDeclarationSpecifiers(DS, ParsedTemplateInfo(), AS_none,
910+
ParsedTemplateInfo TemplateInfo;
911+
ParseDeclarationSpecifiers(DS, TemplateInfo, AS_none,
911912
DeclSpecContext::DSC_template_param);
912913

913914
// Parse this as a typename.

clang/lib/Parse/Parser.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1562,7 +1562,8 @@ void Parser::ParseKNRParamDeclarations(Declarator &D) {
15621562

15631563
// Parse the common declaration-specifiers piece.
15641564
DeclSpec DS(AttrFactory);
1565-
ParseDeclarationSpecifiers(DS);
1565+
ParsedTemplateInfo TemplateInfo;
1566+
ParseDeclarationSpecifiers(DS, TemplateInfo);
15661567

15671568
// C99 6.9.1p6: 'each declaration in the declaration list shall have at
15681569
// least one declarator'.

0 commit comments

Comments
 (0)