@@ -2447,7 +2447,7 @@ bool VarDecl::isOutOfLine() const {
2447
2447
}
2448
2448
2449
2449
void VarDecl::setInit (Expr *I) {
2450
- if (auto *Eval = Init. dyn_cast <EvaluatedStmt *>()) {
2450
+ if (auto *Eval = dyn_cast_if_present <EvaluatedStmt *>(Init )) {
2451
2451
Eval->~EvaluatedStmt ();
2452
2452
getASTContext ().Deallocate (Eval);
2453
2453
}
@@ -2527,7 +2527,7 @@ bool VarDecl::isUsableInConstantExpressions(const ASTContext &Context) const {
2527
2527
// / form, which contains extra information on the evaluated value of the
2528
2528
// / initializer.
2529
2529
EvaluatedStmt *VarDecl::ensureEvaluatedStmt () const {
2530
- auto *Eval = Init. dyn_cast <EvaluatedStmt *>();
2530
+ auto *Eval = dyn_cast_if_present <EvaluatedStmt *>(Init );
2531
2531
if (!Eval) {
2532
2532
// Note: EvaluatedStmt contains an APValue, which usually holds
2533
2533
// resources not allocated from the ASTContext. We need to do some
@@ -2541,7 +2541,7 @@ EvaluatedStmt *VarDecl::ensureEvaluatedStmt() const {
2541
2541
}
2542
2542
2543
2543
EvaluatedStmt *VarDecl::getEvaluatedStmt () const {
2544
- return Init. dyn_cast <EvaluatedStmt *>();
2544
+ return dyn_cast_if_present <EvaluatedStmt *>(Init );
2545
2545
}
2546
2546
2547
2547
APValue *VarDecl::evaluateValue () const {
@@ -2784,8 +2784,8 @@ SourceLocation VarDecl::getPointOfInstantiation() const {
2784
2784
}
2785
2785
2786
2786
VarTemplateDecl *VarDecl::getDescribedVarTemplate () const {
2787
- return getASTContext (). getTemplateOrSpecializationInfo ( this )
2788
- . dyn_cast <VarTemplateDecl *>( );
2787
+ return dyn_cast_if_present<VarTemplateDecl *>(
2788
+ getASTContext (). getTemplateOrSpecializationInfo ( this ) );
2789
2789
}
2790
2790
2791
2791
void VarDecl::setDescribedVarTemplate (VarTemplateDecl *Template) {
@@ -2875,8 +2875,8 @@ MemberSpecializationInfo *VarDecl::getMemberSpecializationInfo() const {
2875
2875
if (isStaticDataMember ())
2876
2876
// FIXME: Remove ?
2877
2877
// return getASTContext().getInstantiatedFromStaticDataMember(this);
2878
- return getASTContext (). getTemplateOrSpecializationInfo ( this )
2879
- . dyn_cast <MemberSpecializationInfo *>( );
2878
+ return dyn_cast_if_present<MemberSpecializationInfo *>(
2879
+ getASTContext (). getTemplateOrSpecializationInfo ( this ) );
2880
2880
return nullptr ;
2881
2881
}
2882
2882
@@ -4040,11 +4040,11 @@ FunctionDecl *FunctionDecl::getInstantiatedFromMemberFunction() const {
4040
4040
}
4041
4041
4042
4042
MemberSpecializationInfo *FunctionDecl::getMemberSpecializationInfo () const {
4043
- if (auto *MSI =
4044
- TemplateOrSpecialization. dyn_cast <MemberSpecializationInfo *>( ))
4043
+ if (auto *MSI = dyn_cast_if_present<MemberSpecializationInfo *>(
4044
+ TemplateOrSpecialization))
4045
4045
return MSI;
4046
- if (auto *FTSI = TemplateOrSpecialization
4047
- . dyn_cast <FunctionTemplateSpecializationInfo *>( ))
4046
+ if (auto *FTSI = dyn_cast_if_present<FunctionTemplateSpecializationInfo *>(
4047
+ TemplateOrSpecialization ))
4048
4048
return FTSI->getMemberSpecializationInfo ();
4049
4049
return nullptr ;
4050
4050
}
@@ -4062,7 +4062,7 @@ FunctionDecl::setInstantiationOfMemberFunction(ASTContext &C,
4062
4062
4063
4063
FunctionTemplateDecl *FunctionDecl::getDescribedFunctionTemplate () const {
4064
4064
return dyn_cast_if_present<FunctionTemplateDecl>(
4065
- TemplateOrSpecialization. dyn_cast <NamedDecl *>());
4065
+ dyn_cast_if_present <NamedDecl *>(TemplateOrSpecialization ));
4066
4066
}
4067
4067
4068
4068
void FunctionDecl::setDescribedFunctionTemplate (
@@ -4181,40 +4181,40 @@ FunctionDecl::getTemplateInstantiationPattern(bool ForDefinition) const {
4181
4181
}
4182
4182
4183
4183
FunctionTemplateDecl *FunctionDecl::getPrimaryTemplate () const {
4184
- if (FunctionTemplateSpecializationInfo *Info
4185
- = TemplateOrSpecialization
4186
- . dyn_cast <FunctionTemplateSpecializationInfo*>( )) {
4184
+ if (FunctionTemplateSpecializationInfo *Info =
4185
+ dyn_cast_if_present<FunctionTemplateSpecializationInfo *>(
4186
+ TemplateOrSpecialization )) {
4187
4187
return Info->getTemplate ();
4188
4188
}
4189
4189
return nullptr ;
4190
4190
}
4191
4191
4192
4192
FunctionTemplateSpecializationInfo *
4193
4193
FunctionDecl::getTemplateSpecializationInfo () const {
4194
- return TemplateOrSpecialization
4195
- . dyn_cast <FunctionTemplateSpecializationInfo *>( );
4194
+ return dyn_cast_if_present<FunctionTemplateSpecializationInfo *>(
4195
+ TemplateOrSpecialization );
4196
4196
}
4197
4197
4198
4198
const TemplateArgumentList *
4199
4199
FunctionDecl::getTemplateSpecializationArgs () const {
4200
- if (FunctionTemplateSpecializationInfo *Info
4201
- = TemplateOrSpecialization
4202
- . dyn_cast <FunctionTemplateSpecializationInfo*>( )) {
4200
+ if (FunctionTemplateSpecializationInfo *Info =
4201
+ dyn_cast_if_present<FunctionTemplateSpecializationInfo *>(
4202
+ TemplateOrSpecialization )) {
4203
4203
return Info->TemplateArguments ;
4204
4204
}
4205
4205
return nullptr ;
4206
4206
}
4207
4207
4208
4208
const ASTTemplateArgumentListInfo *
4209
4209
FunctionDecl::getTemplateSpecializationArgsAsWritten () const {
4210
- if (FunctionTemplateSpecializationInfo *Info
4211
- = TemplateOrSpecialization
4212
- . dyn_cast <FunctionTemplateSpecializationInfo*>( )) {
4210
+ if (FunctionTemplateSpecializationInfo *Info =
4211
+ dyn_cast_if_present<FunctionTemplateSpecializationInfo *>(
4212
+ TemplateOrSpecialization )) {
4213
4213
return Info->TemplateArgumentsAsWritten ;
4214
4214
}
4215
4215
if (DependentFunctionTemplateSpecializationInfo *Info =
4216
- TemplateOrSpecialization
4217
- . dyn_cast <DependentFunctionTemplateSpecializationInfo *>( )) {
4216
+ dyn_cast_if_present<DependentFunctionTemplateSpecializationInfo *>(
4217
+ TemplateOrSpecialization )) {
4218
4218
return Info->TemplateArgumentsAsWritten ;
4219
4219
}
4220
4220
return nullptr ;
@@ -4239,7 +4239,8 @@ void FunctionDecl::setFunctionTemplateSpecialization(
4239
4239
FunctionTemplateSpecializationInfo::Create (
4240
4240
C, this , Template, TSK, TemplateArgs, TemplateArgsAsWritten,
4241
4241
PointOfInstantiation,
4242
- TemplateOrSpecialization.dyn_cast <MemberSpecializationInfo *>());
4242
+ dyn_cast_if_present<MemberSpecializationInfo *>(
4243
+ TemplateOrSpecialization));
4243
4244
TemplateOrSpecialization = Info;
4244
4245
Template->addSpecialization (Info, InsertPos);
4245
4246
}
@@ -4256,8 +4257,8 @@ void FunctionDecl::setDependentTemplateSpecialization(
4256
4257
4257
4258
DependentFunctionTemplateSpecializationInfo *
4258
4259
FunctionDecl::getDependentSpecializationInfo () const {
4259
- return TemplateOrSpecialization
4260
- . dyn_cast <DependentFunctionTemplateSpecializationInfo *>( );
4260
+ return dyn_cast_if_present<DependentFunctionTemplateSpecializationInfo *>(
4261
+ TemplateOrSpecialization );
4261
4262
}
4262
4263
4263
4264
DependentFunctionTemplateSpecializationInfo *
@@ -4288,12 +4289,13 @@ TemplateSpecializationKind FunctionDecl::getTemplateSpecializationKind() const {
4288
4289
// For a function template specialization, query the specialization
4289
4290
// information object.
4290
4291
if (FunctionTemplateSpecializationInfo *FTSInfo =
4291
- TemplateOrSpecialization
4292
- . dyn_cast <FunctionTemplateSpecializationInfo *>( ))
4292
+ dyn_cast_if_present<FunctionTemplateSpecializationInfo *>(
4293
+ TemplateOrSpecialization ))
4293
4294
return FTSInfo->getTemplateSpecializationKind ();
4294
4295
4295
4296
if (MemberSpecializationInfo *MSInfo =
4296
- TemplateOrSpecialization.dyn_cast <MemberSpecializationInfo *>())
4297
+ dyn_cast_if_present<MemberSpecializationInfo *>(
4298
+ TemplateOrSpecialization))
4297
4299
return MSInfo->getTemplateSpecializationKind ();
4298
4300
4299
4301
// A dependent function template specialization is an explicit specialization,
@@ -4331,15 +4333,16 @@ FunctionDecl::getTemplateSpecializationKindForInstantiation() const {
4331
4333
// of A<int>::f, and that A<int>::f<int> should be implicitly instantiated
4332
4334
// from A::f<int> if a definition is needed.
4333
4335
if (FunctionTemplateSpecializationInfo *FTSInfo =
4334
- TemplateOrSpecialization
4335
- . dyn_cast <FunctionTemplateSpecializationInfo *>( )) {
4336
+ dyn_cast_if_present<FunctionTemplateSpecializationInfo *>(
4337
+ TemplateOrSpecialization )) {
4336
4338
if (auto *MSInfo = FTSInfo->getMemberSpecializationInfo ())
4337
4339
return MSInfo->getTemplateSpecializationKind ();
4338
4340
return FTSInfo->getTemplateSpecializationKind ();
4339
4341
}
4340
4342
4341
4343
if (MemberSpecializationInfo *MSInfo =
4342
- TemplateOrSpecialization.dyn_cast <MemberSpecializationInfo *>())
4344
+ dyn_cast_if_present<MemberSpecializationInfo *>(
4345
+ TemplateOrSpecialization))
4343
4346
return MSInfo->getTemplateSpecializationKind ();
4344
4347
4345
4348
if (isa<DependentFunctionTemplateSpecializationInfo *>(
0 commit comments