[clang] [AST] Migrate away from PointerUnion::{is, get} (NFC) (PR #117469)
Kazu Hirata via cfe-commits
cfe-commits at lists.llvm.org
Sat Nov 23 23:04:17 PST 2024
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/117469
Note that PointerUnion::{is,get} have been soft deprecated in
PointerUnion.h:
// FIXME: Replace the uses of is(), get() and dyn_cast() with
// isa<T>, cast<T> and the llvm::dyn_cast<T>
I'm not touching PointerUnion::dyn_cast for now because it's a bit
complicated; we could blindly migrate it to dyn_cast_if_present, but
we should probably use dyn_cast when the operand is known to be
non-null.
>From 74d11c6fbf8969ea2134c7db3f24fed403f99a22 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sat, 23 Nov 2024 22:50:26 -0800
Subject: [PATCH] [AST] Migrate away from PointerUnion::{is,get} (NFC)
Note that PointerUnion::{is,get} have been soft deprecated in
PointerUnion.h:
// FIXME: Replace the uses of is(), get() and dyn_cast() with
// isa<T>, cast<T> and the llvm::dyn_cast<T>
I'm not touching PointerUnion::dyn_cast for now because it's a bit
complicated; we could blindly migrate it to dyn_cast_if_present, but
we should probably use dyn_cast when the operand is known to be
non-null.
---
clang/lib/AST/ASTConcept.cpp | 6 ++---
clang/lib/AST/ASTContext.cpp | 6 ++---
clang/lib/AST/ByteCode/Compiler.cpp | 2 +-
clang/lib/AST/ByteCode/Program.cpp | 2 +-
clang/lib/AST/Decl.cpp | 34 ++++++++++++++---------------
clang/lib/AST/DeclCXX.cpp | 6 ++---
clang/lib/AST/DeclFriend.cpp | 3 +--
clang/lib/AST/DeclTemplate.cpp | 8 +++----
clang/lib/AST/ExprCXX.cpp | 10 ++++-----
clang/lib/AST/ExprConcepts.cpp | 3 +--
clang/lib/AST/ParentMapContext.cpp | 22 +++++++++----------
clang/lib/AST/TemplateName.cpp | 8 +++----
12 files changed, 54 insertions(+), 56 deletions(-)
diff --git a/clang/lib/AST/ASTConcept.cpp b/clang/lib/AST/ASTConcept.cpp
index bdc713ca3e791e..f7ee0fb3ee92da 100644
--- a/clang/lib/AST/ASTConcept.cpp
+++ b/clang/lib/AST/ASTConcept.cpp
@@ -22,11 +22,11 @@ static void
CreateUnsatisfiedConstraintRecord(const ASTContext &C,
const UnsatisfiedConstraintRecord &Detail,
UnsatisfiedConstraintRecord *TrailingObject) {
- if (Detail.is<Expr *>())
- new (TrailingObject) UnsatisfiedConstraintRecord(Detail.get<Expr *>());
+ if (auto *E = dyn_cast<Expr *>(Detail))
+ new (TrailingObject) UnsatisfiedConstraintRecord(E);
else {
auto &SubstitutionDiagnostic =
- *Detail.get<std::pair<SourceLocation, StringRef> *>();
+ *cast<std::pair<SourceLocation, StringRef> *>(Detail);
StringRef Message = C.backupStr(SubstitutionDiagnostic.second);
auto *NewSubstDiag = new (C) std::pair<SourceLocation, StringRef>(
SubstitutionDiagnostic.first, Message);
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 23df7878a3bf29..3e6f0d628ca926 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -374,10 +374,10 @@ static const Decl &adjustDeclToTemplate(const Decl &D) {
llvm::PointerUnion<ClassTemplateDecl *,
ClassTemplatePartialSpecializationDecl *>
PU = CTSD->getSpecializedTemplateOrPartial();
- return PU.is<ClassTemplateDecl *>()
- ? *static_cast<const Decl *>(PU.get<ClassTemplateDecl *>())
+ return isa<ClassTemplateDecl *>(PU)
+ ? *static_cast<const Decl *>(cast<ClassTemplateDecl *>(PU))
: *static_cast<const Decl *>(
- PU.get<ClassTemplatePartialSpecializationDecl *>());
+ cast<ClassTemplatePartialSpecializationDecl *>(PU));
}
// Class is instantiated from a member definition of a class template?
diff --git a/clang/lib/AST/ByteCode/Compiler.cpp b/clang/lib/AST/ByteCode/Compiler.cpp
index 7cf2519d6a71fb..3d8215ffc8c228 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -4033,7 +4033,7 @@ unsigned Compiler<Emitter>::allocateLocalPrimitive(DeclTy &&Src, PrimType Ty,
// (int){12} in C. Consider using Expr::isTemporaryObject() instead
// or isa<MaterializeTemporaryExpr>().
Descriptor *D = P.createDescriptor(Src, Ty, Descriptor::InlineDescMD, IsConst,
- Src.is<const Expr *>());
+ isa<const Expr *>(Src));
Scope::Local Local = this->createLocal(D);
if (auto *VD = dyn_cast_if_present<ValueDecl>(Src.dyn_cast<const Decl *>()))
Locals.insert({VD, Local});
diff --git a/clang/lib/AST/ByteCode/Program.cpp b/clang/lib/AST/ByteCode/Program.cpp
index 590ee19de6d2f0..c98a3506b0a90b 100644
--- a/clang/lib/AST/ByteCode/Program.cpp
+++ b/clang/lib/AST/ByteCode/Program.cpp
@@ -158,7 +158,7 @@ unsigned Program::getOrCreateDummy(const DeclTy &D) {
if (const auto *E = D.dyn_cast<const Expr *>()) {
QT = E->getType();
} else {
- const ValueDecl *VD = cast<ValueDecl>(D.get<const Decl *>());
+ const ValueDecl *VD = cast<ValueDecl>(cast<const Decl *>(D));
IsWeak = VD->isWeak();
QT = VD->getType();
if (const auto *RT = QT->getAs<ReferenceType>())
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index bfeb4827f79587..741e908cf9bc56 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -1991,7 +1991,7 @@ void DeclaratorDecl::setQualifierInfo(NestedNameSpecifierLoc QualifierLoc) {
// Make sure the extended decl info is allocated.
if (!hasExtInfo()) {
// Save (non-extended) type source info pointer.
- auto *savedTInfo = DeclInfo.get<TypeSourceInfo*>();
+ auto *savedTInfo = cast<TypeSourceInfo *>(DeclInfo);
// Allocate external info struct.
DeclInfo = new (getASTContext()) ExtInfo;
// Restore savedTInfo into (extended) decl info.
@@ -2010,7 +2010,7 @@ void DeclaratorDecl::setTrailingRequiresClause(Expr *TrailingRequiresClause) {
// Make sure the extended decl info is allocated.
if (!hasExtInfo()) {
// Save (non-extended) type source info pointer.
- auto *savedTInfo = DeclInfo.get<TypeSourceInfo*>();
+ auto *savedTInfo = cast<TypeSourceInfo *>(DeclInfo);
// Allocate external info struct.
DeclInfo = new (getASTContext()) ExtInfo;
// Restore savedTInfo into (extended) decl info.
@@ -2026,7 +2026,7 @@ void DeclaratorDecl::setTemplateParameterListsInfo(
// Make sure the extended decl info is allocated.
if (!hasExtInfo()) {
// Save (non-extended) type source info pointer.
- auto *savedTInfo = DeclInfo.get<TypeSourceInfo*>();
+ auto *savedTInfo = cast<TypeSourceInfo *>(DeclInfo);
// Allocate external info struct.
DeclInfo = new (getASTContext()) ExtInfo;
// Restore savedTInfo into (extended) decl info.
@@ -2534,7 +2534,7 @@ EvaluatedStmt *VarDecl::ensureEvaluatedStmt() const {
// work to avoid leaking those, but we do so in VarDecl::evaluateValue
// where we can detect whether there's anything to clean up or not.
Eval = new (getASTContext()) EvaluatedStmt;
- Eval->Value = Init.get<Stmt *>();
+ Eval->Value = cast<Stmt *>(Init);
Init = Eval;
}
return Eval;
@@ -3017,7 +3017,7 @@ void ParmVarDecl::setUninstantiatedDefaultArg(Expr *arg) {
Expr *ParmVarDecl::getUninstantiatedDefaultArg() {
assert(hasUninstantiatedDefaultArg() &&
"Wrong kind of initialization expression!");
- return cast_if_present<Expr>(Init.get<Stmt *>());
+ return cast_if_present<Expr>(cast<Stmt *>(Init));
}
bool ParmVarDecl::hasDefaultArg() const {
@@ -4010,12 +4010,12 @@ FunctionDecl::TemplatedKind FunctionDecl::getTemplatedKind() const {
"No other valid types in NamedDecl");
return TK_FunctionTemplate;
}
- if (TemplateOrSpecialization.is<MemberSpecializationInfo *>())
+ if (isa<MemberSpecializationInfo *>(TemplateOrSpecialization))
return TK_MemberSpecialization;
- if (TemplateOrSpecialization.is<FunctionTemplateSpecializationInfo *>())
+ if (isa<FunctionTemplateSpecializationInfo *>(TemplateOrSpecialization))
return TK_FunctionTemplateSpecialization;
- if (TemplateOrSpecialization.is
- <DependentFunctionTemplateSpecializationInfo*>())
+ if (isa<DependentFunctionTemplateSpecializationInfo *>(
+ TemplateOrSpecialization))
return TK_DependentFunctionTemplateSpecialization;
llvm_unreachable("Did we miss a TemplateOrSpecialization type?");
@@ -4062,9 +4062,9 @@ void FunctionDecl::setDescribedFunctionTemplate(
}
bool FunctionDecl::isFunctionTemplateSpecialization() const {
- return TemplateOrSpecialization.is<FunctionTemplateSpecializationInfo *>() ||
- TemplateOrSpecialization
- .is<DependentFunctionTemplateSpecializationInfo *>();
+ return isa<FunctionTemplateSpecializationInfo *>(TemplateOrSpecialization) ||
+ isa<DependentFunctionTemplateSpecializationInfo *>(
+ TemplateOrSpecialization);
}
void FunctionDecl::setInstantiatedFromDecl(FunctionDecl *FD) {
@@ -4216,7 +4216,7 @@ void FunctionDecl::setFunctionTemplateSpecialization(
const TemplateArgumentListInfo *TemplateArgsAsWritten,
SourceLocation PointOfInstantiation) {
assert((TemplateOrSpecialization.isNull() ||
- TemplateOrSpecialization.is<MemberSpecializationInfo *>()) &&
+ isa<MemberSpecializationInfo *>(TemplateOrSpecialization)) &&
"Member function is already a specialization");
assert(TSK != TSK_Undeclared &&
"Must specify the type of function template specialization");
@@ -4287,8 +4287,8 @@ TemplateSpecializationKind FunctionDecl::getTemplateSpecializationKind() const {
// A dependent function template specialization is an explicit specialization,
// except when it's a friend declaration.
- if (TemplateOrSpecialization
- .is<DependentFunctionTemplateSpecializationInfo *>() &&
+ if (isa<DependentFunctionTemplateSpecializationInfo *>(
+ TemplateOrSpecialization) &&
getFriendObjectKind() == FOK_None)
return TSK_ExplicitSpecialization;
@@ -4331,8 +4331,8 @@ FunctionDecl::getTemplateSpecializationKindForInstantiation() const {
TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo *>())
return MSInfo->getTemplateSpecializationKind();
- if (TemplateOrSpecialization
- .is<DependentFunctionTemplateSpecializationInfo *>() &&
+ if (isa<DependentFunctionTemplateSpecializationInfo *>(
+ TemplateOrSpecialization) &&
getFriendObjectKind() == FOK_None)
return TSK_ExplicitSpecialization;
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 39c548e9c22539..25560faae8672b 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -2733,14 +2733,14 @@ int64_t CXXCtorInitializer::getID(const ASTContext &Context) const {
TypeLoc CXXCtorInitializer::getBaseClassLoc() const {
if (isBaseInitializer())
- return Initializee.get<TypeSourceInfo*>()->getTypeLoc();
+ return cast<TypeSourceInfo *>(Initializee)->getTypeLoc();
else
return {};
}
const Type *CXXCtorInitializer::getBaseClass() const {
if (isBaseInitializer())
- return Initializee.get<TypeSourceInfo*>()->getType().getTypePtr();
+ return cast<TypeSourceInfo *>(Initializee)->getType().getTypePtr();
else
return nullptr;
}
@@ -2752,7 +2752,7 @@ SourceLocation CXXCtorInitializer::getSourceLocation() const {
if (isAnyMemberInitializer())
return getMemberLocation();
- if (const auto *TSInfo = Initializee.get<TypeSourceInfo *>())
+ if (const auto *TSInfo = cast<TypeSourceInfo *>(Initializee))
return TSInfo->getTypeLoc().getBeginLoc();
return {};
diff --git a/clang/lib/AST/DeclFriend.cpp b/clang/lib/AST/DeclFriend.cpp
index d003842bfb7c74..6bfc2eb62b2843 100644
--- a/clang/lib/AST/DeclFriend.cpp
+++ b/clang/lib/AST/DeclFriend.cpp
@@ -36,8 +36,7 @@ FriendDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
SourceLocation EllipsisLoc,
ArrayRef<TemplateParameterList *> FriendTypeTPLists) {
#ifndef NDEBUG
- if (Friend.is<NamedDecl *>()) {
- const auto *D = Friend.get<NamedDecl*>();
+ if (const auto *D = dyn_cast<NamedDecl *>(Friend)) {
assert(isa<FunctionDecl>(D) ||
isa<CXXRecordDecl>(D) ||
isa<FunctionTemplateDecl>(D) ||
diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp
index f487032a37ab73..1da3f26bf23cd5 100644
--- a/clang/lib/AST/DeclTemplate.cpp
+++ b/clang/lib/AST/DeclTemplate.cpp
@@ -992,7 +992,7 @@ ClassTemplateSpecializationDecl::getSpecializedTemplate() const {
if (const auto *PartialSpec =
SpecializedTemplate.dyn_cast<SpecializedPartialSpecialization*>())
return PartialSpec->PartialSpecialization->getSpecializedTemplate();
- return SpecializedTemplate.get<ClassTemplateDecl*>();
+ return cast<ClassTemplateDecl *>(SpecializedTemplate);
}
SourceRange
@@ -1008,7 +1008,7 @@ ClassTemplateSpecializationDecl::getSourceRange() const {
if (const auto *CTPSD =
Pattern.dyn_cast<ClassTemplatePartialSpecializationDecl *>())
return CTPSD->getSourceRange();
- return Pattern.get<ClassTemplateDecl *>()->getSourceRange();
+ return cast<ClassTemplateDecl *>(Pattern)->getSourceRange();
}
case TSK_ExplicitSpecialization: {
SourceRange Range = CXXRecordDecl::getSourceRange();
@@ -1404,7 +1404,7 @@ VarTemplateDecl *VarTemplateSpecializationDecl::getSpecializedTemplate() const {
if (const auto *PartialSpec =
SpecializedTemplate.dyn_cast<SpecializedPartialSpecialization *>())
return PartialSpec->PartialSpecialization->getSpecializedTemplate();
- return SpecializedTemplate.get<VarTemplateDecl *>();
+ return cast<VarTemplateDecl *>(SpecializedTemplate);
}
SourceRange VarTemplateSpecializationDecl::getSourceRange() const {
@@ -1419,7 +1419,7 @@ SourceRange VarTemplateSpecializationDecl::getSourceRange() const {
if (const auto *VTPSD =
Pattern.dyn_cast<VarTemplatePartialSpecializationDecl *>())
return VTPSD->getSourceRange();
- VarTemplateDecl *VTD = Pattern.get<VarTemplateDecl *>();
+ VarTemplateDecl *VTD = cast<VarTemplateDecl *>(Pattern);
if (hasInit()) {
if (VarTemplateDecl *Definition = VTD->getDefinition())
return Definition->getSourceRange();
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp
index 0ce129de85f03f..678c9245ab46e6 100644
--- a/clang/lib/AST/ExprCXX.cpp
+++ b/clang/lib/AST/ExprCXX.cpp
@@ -162,7 +162,7 @@ QualType CXXTypeidExpr::getTypeOperand(const ASTContext &Context) const {
assert(isTypeOperand() && "Cannot call getTypeOperand for typeid(expr)");
Qualifiers Quals;
return Context.getUnqualifiedArrayType(
- Operand.get<TypeSourceInfo *>()->getType().getNonReferenceType(), Quals);
+ cast<TypeSourceInfo *>(Operand)->getType().getNonReferenceType(), Quals);
}
static bool isGLValueFromPointerDeref(const Expr *E) {
@@ -216,7 +216,7 @@ QualType CXXUuidofExpr::getTypeOperand(ASTContext &Context) const {
assert(isTypeOperand() && "Cannot call getTypeOperand for __uuidof(expr)");
Qualifiers Quals;
return Context.getUnqualifiedArrayType(
- Operand.get<TypeSourceInfo *>()->getType().getNonReferenceType(), Quals);
+ cast<TypeSourceInfo *>(Operand)->getType().getNonReferenceType(), Quals);
}
// CXXScalarValueInitExpr
@@ -1829,11 +1829,11 @@ void MaterializeTemporaryExpr::setExtendingDecl(ValueDecl *ExtendedBy,
// We may need to allocate extra storage for the mangling number and the
// extended-by ValueDecl.
- if (!State.is<LifetimeExtendedTemporaryDecl *>())
+ if (!isa<LifetimeExtendedTemporaryDecl *>(State))
State = LifetimeExtendedTemporaryDecl::Create(
- cast<Expr>(State.get<Stmt *>()), ExtendedBy, ManglingNumber);
+ cast<Expr>(cast<Stmt *>(State)), ExtendedBy, ManglingNumber);
- auto ES = State.get<LifetimeExtendedTemporaryDecl *>();
+ auto ES = cast<LifetimeExtendedTemporaryDecl *>(State);
ES->ExtendingDecl = ExtendedBy;
ES->ManglingNumber = ManglingNumber;
}
diff --git a/clang/lib/AST/ExprConcepts.cpp b/clang/lib/AST/ExprConcepts.cpp
index 6efe73ea085a79..e6afcdd5dc3e86 100644
--- a/clang/lib/AST/ExprConcepts.cpp
+++ b/clang/lib/AST/ExprConcepts.cpp
@@ -94,8 +94,7 @@ ConceptSpecializationExpr::Create(const ASTContext &C, ConceptReference *Loc,
const TypeConstraint *
concepts::ExprRequirement::ReturnTypeRequirement::getTypeConstraint() const {
assert(isTypeConstraint());
- auto TPL =
- TypeConstraintInfo.getPointer().get<TemplateParameterList *>();
+ auto TPL = cast<TemplateParameterList *>(TypeConstraintInfo.getPointer());
return cast<TemplateTypeParmDecl>(TPL->getParam(0))
->getTypeConstraint();
}
diff --git a/clang/lib/AST/ParentMapContext.cpp b/clang/lib/AST/ParentMapContext.cpp
index 9723c0cfa83bbe..919dd2320abcc0 100644
--- a/clang/lib/AST/ParentMapContext.cpp
+++ b/clang/lib/AST/ParentMapContext.cpp
@@ -107,7 +107,7 @@ class ParentMapContext::ParentMap {
return DynTypedNode::create(*D);
if (const auto *S = U.dyn_cast<const Stmt *>())
return DynTypedNode::create(*S);
- return *U.get<DynTypedNode *>();
+ return *cast<DynTypedNode *>(U);
}
template <typename NodeTy, typename MapTy>
@@ -127,17 +127,17 @@ class ParentMapContext::ParentMap {
ParentMap(ASTContext &Ctx);
~ParentMap() {
for (const auto &Entry : PointerParents) {
- if (Entry.second.is<DynTypedNode *>()) {
- delete Entry.second.get<DynTypedNode *>();
- } else if (Entry.second.is<ParentVector *>()) {
- delete Entry.second.get<ParentVector *>();
+ if (auto *DTN = dyn_cast<DynTypedNode *>(Entry.second)) {
+ delete DTN;
+ } else if (auto *PV = dyn_cast<ParentVector *>(Entry.second)) {
+ delete PV;
}
}
for (const auto &Entry : OtherParents) {
- if (Entry.second.is<DynTypedNode *>()) {
- delete Entry.second.get<DynTypedNode *>();
- } else if (Entry.second.is<ParentVector *>()) {
- delete Entry.second.get<ParentVector *>();
+ if (auto *DTN = dyn_cast<DynTypedNode *>(Entry.second)) {
+ delete DTN;
+ } else if (auto *PV = dyn_cast<ParentVector *>(Entry.second)) {
+ delete PV;
}
}
}
@@ -392,14 +392,14 @@ class ParentMapContext::ParentMap::ASTVisitor
else
NodeOrVector = new DynTypedNode(ParentStack.back());
} else {
- if (!NodeOrVector.template is<ParentVector *>()) {
+ if (!isa<ParentVector *>(NodeOrVector)) {
auto *Vector = new ParentVector(
1, getSingleDynTypedNodeFromParentMap(NodeOrVector));
delete NodeOrVector.template dyn_cast<DynTypedNode *>();
NodeOrVector = Vector;
}
- auto *Vector = NodeOrVector.template get<ParentVector *>();
+ auto *Vector = cast<ParentVector *>(NodeOrVector);
// Skip duplicates for types that have memoization data.
// We must check that the type has memoization data before calling
// llvm::is_contained() because DynTypedNode::operator== can't compare all
diff --git a/clang/lib/AST/TemplateName.cpp b/clang/lib/AST/TemplateName.cpp
index c500507fecdf59..7d6275caedc4f5 100644
--- a/clang/lib/AST/TemplateName.cpp
+++ b/clang/lib/AST/TemplateName.cpp
@@ -151,13 +151,13 @@ TemplateName::NameKind TemplateName::getKind() const {
return Template;
}
- if (Storage.is<DependentTemplateName *>())
+ if (isa<DependentTemplateName *>(Storage))
return DependentTemplate;
- if (Storage.is<QualifiedTemplateName *>())
+ if (isa<QualifiedTemplateName *>(Storage))
return QualifiedTemplate;
- UncommonTemplateNameStorage *uncommon
- = Storage.get<UncommonTemplateNameStorage*>();
+ UncommonTemplateNameStorage *uncommon =
+ cast<UncommonTemplateNameStorage *>(Storage);
if (uncommon->getAsOverloadedStorage())
return OverloadedTemplate;
if (uncommon->getAsAssumedTemplateName())
More information about the cfe-commits
mailing list