-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[clang] Migrate away from PointerUnion::{is,get} (NFC) #119724
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang] Migrate away from PointerUnion::{is,get} (NFC) #119724
Conversation
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.
@llvm/pr-subscribers-clang-codegen Author: Kazu Hirata (kazutakahirata) ChangesNote that PointerUnion::{is,get} have been soft deprecated in // FIXME: Replace the uses of is(), get() and dyn_cast() with I'm not touching PointerUnion::dyn_cast for now because it's a bit Full diff: https://github.com/llvm/llvm-project/pull/119724.diff 11 Files Affected:
diff --git a/clang/include/clang/Basic/FileEntry.h b/clang/include/clang/Basic/FileEntry.h
index ba6dfa69f214d8..da5ba909742936 100644
--- a/clang/include/clang/Basic/FileEntry.h
+++ b/clang/include/clang/Basic/FileEntry.h
@@ -68,7 +68,7 @@ class FileEntryRef {
StringRef getNameAsRequested() const { return ME->first(); }
const FileEntry &getFileEntry() const {
- return *getBaseMapEntry().second->V.get<FileEntry *>();
+ return *cast<FileEntry *>(getBaseMapEntry().second->V);
}
// This function is used if the buffer size needs to be increased
@@ -361,7 +361,7 @@ bool FileEntryRef::isNamedPipe() const { return getFileEntry().isNamedPipe(); }
void FileEntryRef::closeFile() const { getFileEntry().closeFile(); }
void FileEntryRef::updateFileEntryBufferSize(unsigned BufferSize) {
- getBaseMapEntry().second->V.get<FileEntry *>()->setSize(BufferSize);
+ cast<FileEntry *>(getBaseMapEntry().second->V)->setSize(BufferSize);
}
} // end namespace clang
diff --git a/clang/include/clang/Basic/IdentifierTable.h b/clang/include/clang/Basic/IdentifierTable.h
index ae9ebd9f59154e..33d1cdb46f108b 100644
--- a/clang/include/clang/Basic/IdentifierTable.h
+++ b/clang/include/clang/Basic/IdentifierTable.h
@@ -1012,7 +1012,7 @@ class Selector {
}
MultiKeywordSelector *getMultiKeywordSelector() const {
- return InfoPtr.getPointer().get<MultiKeywordSelector *>();
+ return cast<MultiKeywordSelector *>(InfoPtr.getPointer());
}
unsigned getIdentifierInfoFlag() const {
@@ -1020,7 +1020,7 @@ class Selector {
// IMPORTANT NOTE: We have to reconstitute this data rather than use the
// value directly from the PointerIntPair. See the comments in `InfoPtr`
// for more details.
- if (InfoPtr.getPointer().is<MultiKeywordSelector *>())
+ if (isa<MultiKeywordSelector *>(InfoPtr.getPointer()))
new_flags |= MultiArg;
return new_flags;
}
diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h
index 22cbd0d90ee432..4fa5fbdb5a7f63 100644
--- a/clang/include/clang/Sema/ParsedAttr.h
+++ b/clang/include/clang/Sema/ParsedAttr.h
@@ -392,19 +392,17 @@ class ParsedAttr final
}
bool isArgExpr(unsigned Arg) const {
- return Arg < NumArgs && getArg(Arg).is<Expr*>();
+ return Arg < NumArgs && isa<Expr *>(getArg(Arg));
}
- Expr *getArgAsExpr(unsigned Arg) const {
- return getArg(Arg).get<Expr*>();
- }
+ Expr *getArgAsExpr(unsigned Arg) const { return cast<Expr *>(getArg(Arg)); }
bool isArgIdent(unsigned Arg) const {
- return Arg < NumArgs && getArg(Arg).is<IdentifierLoc*>();
+ return Arg < NumArgs && isa<IdentifierLoc *>(getArg(Arg));
}
IdentifierLoc *getArgAsIdent(unsigned Arg) const {
- return getArg(Arg).get<IdentifierLoc*>();
+ return cast<IdentifierLoc *>(getArg(Arg));
}
const AvailabilityChange &getAvailabilityIntroduced() const {
diff --git a/clang/include/clang/Sema/SemaConcept.h b/clang/include/clang/Sema/SemaConcept.h
index 4b1abccb7741a1..fa5309a597b3a5 100644
--- a/clang/include/clang/Sema/SemaConcept.h
+++ b/clang/include/clang/Sema/SemaConcept.h
@@ -210,17 +210,17 @@ bool subsumes(const NormalForm &PDNF, const NormalForm &QCNF,
bool Found = false;
for (NormalFormConstraint Pia : Pi) {
for (NormalFormConstraint Qjb : Qj) {
- if (Pia.is<FoldExpandedConstraint *>() &&
- Qjb.is<FoldExpandedConstraint *>()) {
- if (Pia.get<FoldExpandedConstraint *>()->subsumes(
- *Qjb.get<FoldExpandedConstraint *>(), E)) {
+ if (isa<FoldExpandedConstraint *>(Pia) &&
+ isa<FoldExpandedConstraint *>(Qjb)) {
+ if (cast<FoldExpandedConstraint *>(Pia)->subsumes(
+ *cast<FoldExpandedConstraint *>(Qjb), E)) {
Found = true;
break;
}
- } else if (Pia.is<AtomicConstraint *>() &&
- Qjb.is<AtomicConstraint *>()) {
- if (E(*Pia.get<AtomicConstraint *>(),
- *Qjb.get<AtomicConstraint *>())) {
+ } else if (isa<AtomicConstraint *>(Pia) &&
+ isa<AtomicConstraint *>(Qjb)) {
+ if (E(*cast<AtomicConstraint *>(Pia),
+ *cast<AtomicConstraint *>(Qjb))) {
Found = true;
break;
}
diff --git a/clang/include/clang/Sema/SemaInternal.h b/clang/include/clang/Sema/SemaInternal.h
index 41d05b2bfb078e..27cda71989726d 100644
--- a/clang/include/clang/Sema/SemaInternal.h
+++ b/clang/include/clang/Sema/SemaInternal.h
@@ -75,7 +75,7 @@ getDepthAndIndex(UnexpandedParameterPack UPP) {
if (const auto *TTP = UPP.first.dyn_cast<const TemplateTypeParmType *>())
return std::make_pair(TTP->getDepth(), TTP->getIndex());
- return getDepthAndIndex(UPP.first.get<NamedDecl *>());
+ return getDepthAndIndex(cast<NamedDecl *>(UPP.first));
}
class TypoCorrectionConsumer : public VisibleDeclConsumer {
diff --git a/clang/include/clang/Sema/Template.h b/clang/include/clang/Sema/Template.h
index 6872d04cc4dfb9..aca11bff84b9c9 100644
--- a/clang/include/clang/Sema/Template.h
+++ b/clang/include/clang/Sema/Template.h
@@ -486,10 +486,10 @@ enum class TemplateSubstitutionKind : char {
const Decl *D = I->first;
llvm::PointerUnion<Decl *, DeclArgumentPack *> &Stored =
newScope->LocalDecls[D];
- if (I->second.is<Decl *>()) {
- Stored = I->second.get<Decl *>();
+ if (isa<Decl *>(I->second)) {
+ Stored = cast<Decl *>(I->second);
} else {
- DeclArgumentPack *OldPack = I->second.get<DeclArgumentPack *>();
+ DeclArgumentPack *OldPack = cast<DeclArgumentPack *>(I->second);
DeclArgumentPack *NewPack = new DeclArgumentPack(*OldPack);
Stored = NewPack;
newScope->ArgumentPacks.push_back(NewPack);
diff --git a/clang/lib/APINotes/APINotesManager.cpp b/clang/lib/APINotes/APINotesManager.cpp
index 039d09fa7cf575..70d96c735503fd 100644
--- a/clang/lib/APINotes/APINotesManager.cpp
+++ b/clang/lib/APINotes/APINotesManager.cpp
@@ -374,9 +374,9 @@ APINotesManager::findAPINotes(SourceLocation Loc) {
++NumDirectoryCacheHits;
// We've been redirected to another directory for answers. Follow it.
- if (Known->second && Known->second.is<DirectoryEntryRef>()) {
+ if (Known->second && isa<DirectoryEntryRef>(Known->second)) {
DirsVisited.insert(*Dir);
- Dir = Known->second.get<DirectoryEntryRef>();
+ Dir = cast<DirectoryEntryRef>(Known->second);
continue;
}
diff --git a/clang/lib/Analysis/ThreadSafetyCommon.cpp b/clang/lib/Analysis/ThreadSafetyCommon.cpp
index cbcfefdc525490..211e940ce8b861 100644
--- a/clang/lib/Analysis/ThreadSafetyCommon.cpp
+++ b/clang/lib/Analysis/ThreadSafetyCommon.cpp
@@ -326,7 +326,7 @@ til::SExpr *SExprBuilder::translateDeclRefExpr(const DeclRefExpr *DRE,
}
assert(I == 0);
- return Ctx->FunArgs.get<til::SExpr *>();
+ return cast<til::SExpr *>(Ctx->FunArgs);
}
}
// Map the param back to the param of the original function declaration
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index f44b5e4c4b6389..f0b6f7be6c84f5 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -324,9 +324,9 @@ llvm::Expected<FileEntryRef> FileManager::getFileRef(StringRef Filename,
*SeenFileEntries
.insert({Status.getName(), FileEntryRef::MapValue(*UFE, DirInfo)})
.first;
- assert(Redirection.second->V.is<FileEntry *>() &&
+ assert(isa<FileEntry *>(Redirection.second->V) &&
"filename redirected to a non-canonical filename?");
- assert(Redirection.second->V.get<FileEntry *>() == UFE &&
+ assert(cast<FileEntry *>(Redirection.second->V) == UFE &&
"filename from getStatValue() refers to wrong file");
// Cache the redirection in the previously-inserted entry, still available
@@ -400,7 +400,7 @@ FileEntryRef FileManager::getVirtualFileRef(StringRef Filename, off_t Size,
FileEntryRef::MapValue Value = *NamedFileEnt.second;
if (LLVM_LIKELY(isa<FileEntry *>(Value.V)))
return FileEntryRef(NamedFileEnt);
- return FileEntryRef(*Value.V.get<const FileEntryRef::MapEntry *>());
+ return FileEntryRef(*cast<const FileEntryRef::MapEntry *>(Value.V));
}
// We've not seen this before, or the file is cached as non-existent.
@@ -620,7 +620,7 @@ void FileManager::GetUniqueIDMapping(
for (const auto &Entry : SeenFileEntries) {
// Only return files that exist and are not redirected.
- if (!Entry.getValue() || !Entry.getValue()->V.is<FileEntry *>())
+ if (!Entry.getValue() || !isa<FileEntry *>(Entry.getValue()->V))
continue;
FileEntryRef FE(Entry);
// Add this file if it's the first one with the UID, or if its name is
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 2deb91f27e37b9..90809ef90858c5 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -4085,7 +4085,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
CGF.Builder.CreateConstGEP(DependenciesArray, *P), KmpDependInfoTy);
} else {
assert(E && "Expected a non-null expression");
- LValue &PosLVal = *Pos.get<LValue *>();
+ LValue &PosLVal = *cast<LValue *>(Pos);
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
Base = CGF.MakeAddrLValue(
CGF.Builder.CreateGEP(CGF, DependenciesArray, Idx), KmpDependInfoTy);
@@ -4113,7 +4113,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
if (unsigned *P = Pos.dyn_cast<unsigned *>()) {
++(*P);
} else {
- LValue &PosLVal = *Pos.get<LValue *>();
+ LValue &PosLVal = *cast<LValue *>(Pos);
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
Idx = CGF.Builder.CreateNUWAdd(Idx,
llvm::ConstantInt::get(Idx->getType(), 1));
diff --git a/clang/lib/Index/IndexDecl.cpp b/clang/lib/Index/IndexDecl.cpp
index 19cff0398e21e3..6c971bf0f381b3 100644
--- a/clang/lib/Index/IndexDecl.cpp
+++ b/clang/lib/Index/IndexDecl.cpp
@@ -666,7 +666,7 @@ class IndexingDeclVisitor : public ConstDeclVisitor<IndexingDeclVisitor, bool> {
Template = D->getSpecializedTemplateOrPartial();
const Decl *SpecializationOf =
isa<ClassTemplateDecl *>(Template)
- ? (Decl *)Template.get<ClassTemplateDecl *>()
+ ? (Decl *)cast<ClassTemplateDecl *>(Template)
: cast<ClassTemplatePartialSpecializationDecl *>(Template);
if (!D->isThisDeclarationADefinition())
IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), D);
|
@llvm/pr-subscribers-clang Author: Kazu Hirata (kazutakahirata) ChangesNote that PointerUnion::{is,get} have been soft deprecated in // FIXME: Replace the uses of is(), get() and dyn_cast() with I'm not touching PointerUnion::dyn_cast for now because it's a bit Full diff: https://github.com/llvm/llvm-project/pull/119724.diff 11 Files Affected:
diff --git a/clang/include/clang/Basic/FileEntry.h b/clang/include/clang/Basic/FileEntry.h
index ba6dfa69f214d8..da5ba909742936 100644
--- a/clang/include/clang/Basic/FileEntry.h
+++ b/clang/include/clang/Basic/FileEntry.h
@@ -68,7 +68,7 @@ class FileEntryRef {
StringRef getNameAsRequested() const { return ME->first(); }
const FileEntry &getFileEntry() const {
- return *getBaseMapEntry().second->V.get<FileEntry *>();
+ return *cast<FileEntry *>(getBaseMapEntry().second->V);
}
// This function is used if the buffer size needs to be increased
@@ -361,7 +361,7 @@ bool FileEntryRef::isNamedPipe() const { return getFileEntry().isNamedPipe(); }
void FileEntryRef::closeFile() const { getFileEntry().closeFile(); }
void FileEntryRef::updateFileEntryBufferSize(unsigned BufferSize) {
- getBaseMapEntry().second->V.get<FileEntry *>()->setSize(BufferSize);
+ cast<FileEntry *>(getBaseMapEntry().second->V)->setSize(BufferSize);
}
} // end namespace clang
diff --git a/clang/include/clang/Basic/IdentifierTable.h b/clang/include/clang/Basic/IdentifierTable.h
index ae9ebd9f59154e..33d1cdb46f108b 100644
--- a/clang/include/clang/Basic/IdentifierTable.h
+++ b/clang/include/clang/Basic/IdentifierTable.h
@@ -1012,7 +1012,7 @@ class Selector {
}
MultiKeywordSelector *getMultiKeywordSelector() const {
- return InfoPtr.getPointer().get<MultiKeywordSelector *>();
+ return cast<MultiKeywordSelector *>(InfoPtr.getPointer());
}
unsigned getIdentifierInfoFlag() const {
@@ -1020,7 +1020,7 @@ class Selector {
// IMPORTANT NOTE: We have to reconstitute this data rather than use the
// value directly from the PointerIntPair. See the comments in `InfoPtr`
// for more details.
- if (InfoPtr.getPointer().is<MultiKeywordSelector *>())
+ if (isa<MultiKeywordSelector *>(InfoPtr.getPointer()))
new_flags |= MultiArg;
return new_flags;
}
diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h
index 22cbd0d90ee432..4fa5fbdb5a7f63 100644
--- a/clang/include/clang/Sema/ParsedAttr.h
+++ b/clang/include/clang/Sema/ParsedAttr.h
@@ -392,19 +392,17 @@ class ParsedAttr final
}
bool isArgExpr(unsigned Arg) const {
- return Arg < NumArgs && getArg(Arg).is<Expr*>();
+ return Arg < NumArgs && isa<Expr *>(getArg(Arg));
}
- Expr *getArgAsExpr(unsigned Arg) const {
- return getArg(Arg).get<Expr*>();
- }
+ Expr *getArgAsExpr(unsigned Arg) const { return cast<Expr *>(getArg(Arg)); }
bool isArgIdent(unsigned Arg) const {
- return Arg < NumArgs && getArg(Arg).is<IdentifierLoc*>();
+ return Arg < NumArgs && isa<IdentifierLoc *>(getArg(Arg));
}
IdentifierLoc *getArgAsIdent(unsigned Arg) const {
- return getArg(Arg).get<IdentifierLoc*>();
+ return cast<IdentifierLoc *>(getArg(Arg));
}
const AvailabilityChange &getAvailabilityIntroduced() const {
diff --git a/clang/include/clang/Sema/SemaConcept.h b/clang/include/clang/Sema/SemaConcept.h
index 4b1abccb7741a1..fa5309a597b3a5 100644
--- a/clang/include/clang/Sema/SemaConcept.h
+++ b/clang/include/clang/Sema/SemaConcept.h
@@ -210,17 +210,17 @@ bool subsumes(const NormalForm &PDNF, const NormalForm &QCNF,
bool Found = false;
for (NormalFormConstraint Pia : Pi) {
for (NormalFormConstraint Qjb : Qj) {
- if (Pia.is<FoldExpandedConstraint *>() &&
- Qjb.is<FoldExpandedConstraint *>()) {
- if (Pia.get<FoldExpandedConstraint *>()->subsumes(
- *Qjb.get<FoldExpandedConstraint *>(), E)) {
+ if (isa<FoldExpandedConstraint *>(Pia) &&
+ isa<FoldExpandedConstraint *>(Qjb)) {
+ if (cast<FoldExpandedConstraint *>(Pia)->subsumes(
+ *cast<FoldExpandedConstraint *>(Qjb), E)) {
Found = true;
break;
}
- } else if (Pia.is<AtomicConstraint *>() &&
- Qjb.is<AtomicConstraint *>()) {
- if (E(*Pia.get<AtomicConstraint *>(),
- *Qjb.get<AtomicConstraint *>())) {
+ } else if (isa<AtomicConstraint *>(Pia) &&
+ isa<AtomicConstraint *>(Qjb)) {
+ if (E(*cast<AtomicConstraint *>(Pia),
+ *cast<AtomicConstraint *>(Qjb))) {
Found = true;
break;
}
diff --git a/clang/include/clang/Sema/SemaInternal.h b/clang/include/clang/Sema/SemaInternal.h
index 41d05b2bfb078e..27cda71989726d 100644
--- a/clang/include/clang/Sema/SemaInternal.h
+++ b/clang/include/clang/Sema/SemaInternal.h
@@ -75,7 +75,7 @@ getDepthAndIndex(UnexpandedParameterPack UPP) {
if (const auto *TTP = UPP.first.dyn_cast<const TemplateTypeParmType *>())
return std::make_pair(TTP->getDepth(), TTP->getIndex());
- return getDepthAndIndex(UPP.first.get<NamedDecl *>());
+ return getDepthAndIndex(cast<NamedDecl *>(UPP.first));
}
class TypoCorrectionConsumer : public VisibleDeclConsumer {
diff --git a/clang/include/clang/Sema/Template.h b/clang/include/clang/Sema/Template.h
index 6872d04cc4dfb9..aca11bff84b9c9 100644
--- a/clang/include/clang/Sema/Template.h
+++ b/clang/include/clang/Sema/Template.h
@@ -486,10 +486,10 @@ enum class TemplateSubstitutionKind : char {
const Decl *D = I->first;
llvm::PointerUnion<Decl *, DeclArgumentPack *> &Stored =
newScope->LocalDecls[D];
- if (I->second.is<Decl *>()) {
- Stored = I->second.get<Decl *>();
+ if (isa<Decl *>(I->second)) {
+ Stored = cast<Decl *>(I->second);
} else {
- DeclArgumentPack *OldPack = I->second.get<DeclArgumentPack *>();
+ DeclArgumentPack *OldPack = cast<DeclArgumentPack *>(I->second);
DeclArgumentPack *NewPack = new DeclArgumentPack(*OldPack);
Stored = NewPack;
newScope->ArgumentPacks.push_back(NewPack);
diff --git a/clang/lib/APINotes/APINotesManager.cpp b/clang/lib/APINotes/APINotesManager.cpp
index 039d09fa7cf575..70d96c735503fd 100644
--- a/clang/lib/APINotes/APINotesManager.cpp
+++ b/clang/lib/APINotes/APINotesManager.cpp
@@ -374,9 +374,9 @@ APINotesManager::findAPINotes(SourceLocation Loc) {
++NumDirectoryCacheHits;
// We've been redirected to another directory for answers. Follow it.
- if (Known->second && Known->second.is<DirectoryEntryRef>()) {
+ if (Known->second && isa<DirectoryEntryRef>(Known->second)) {
DirsVisited.insert(*Dir);
- Dir = Known->second.get<DirectoryEntryRef>();
+ Dir = cast<DirectoryEntryRef>(Known->second);
continue;
}
diff --git a/clang/lib/Analysis/ThreadSafetyCommon.cpp b/clang/lib/Analysis/ThreadSafetyCommon.cpp
index cbcfefdc525490..211e940ce8b861 100644
--- a/clang/lib/Analysis/ThreadSafetyCommon.cpp
+++ b/clang/lib/Analysis/ThreadSafetyCommon.cpp
@@ -326,7 +326,7 @@ til::SExpr *SExprBuilder::translateDeclRefExpr(const DeclRefExpr *DRE,
}
assert(I == 0);
- return Ctx->FunArgs.get<til::SExpr *>();
+ return cast<til::SExpr *>(Ctx->FunArgs);
}
}
// Map the param back to the param of the original function declaration
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index f44b5e4c4b6389..f0b6f7be6c84f5 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -324,9 +324,9 @@ llvm::Expected<FileEntryRef> FileManager::getFileRef(StringRef Filename,
*SeenFileEntries
.insert({Status.getName(), FileEntryRef::MapValue(*UFE, DirInfo)})
.first;
- assert(Redirection.second->V.is<FileEntry *>() &&
+ assert(isa<FileEntry *>(Redirection.second->V) &&
"filename redirected to a non-canonical filename?");
- assert(Redirection.second->V.get<FileEntry *>() == UFE &&
+ assert(cast<FileEntry *>(Redirection.second->V) == UFE &&
"filename from getStatValue() refers to wrong file");
// Cache the redirection in the previously-inserted entry, still available
@@ -400,7 +400,7 @@ FileEntryRef FileManager::getVirtualFileRef(StringRef Filename, off_t Size,
FileEntryRef::MapValue Value = *NamedFileEnt.second;
if (LLVM_LIKELY(isa<FileEntry *>(Value.V)))
return FileEntryRef(NamedFileEnt);
- return FileEntryRef(*Value.V.get<const FileEntryRef::MapEntry *>());
+ return FileEntryRef(*cast<const FileEntryRef::MapEntry *>(Value.V));
}
// We've not seen this before, or the file is cached as non-existent.
@@ -620,7 +620,7 @@ void FileManager::GetUniqueIDMapping(
for (const auto &Entry : SeenFileEntries) {
// Only return files that exist and are not redirected.
- if (!Entry.getValue() || !Entry.getValue()->V.is<FileEntry *>())
+ if (!Entry.getValue() || !isa<FileEntry *>(Entry.getValue()->V))
continue;
FileEntryRef FE(Entry);
// Add this file if it's the first one with the UID, or if its name is
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 2deb91f27e37b9..90809ef90858c5 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -4085,7 +4085,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
CGF.Builder.CreateConstGEP(DependenciesArray, *P), KmpDependInfoTy);
} else {
assert(E && "Expected a non-null expression");
- LValue &PosLVal = *Pos.get<LValue *>();
+ LValue &PosLVal = *cast<LValue *>(Pos);
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
Base = CGF.MakeAddrLValue(
CGF.Builder.CreateGEP(CGF, DependenciesArray, Idx), KmpDependInfoTy);
@@ -4113,7 +4113,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
if (unsigned *P = Pos.dyn_cast<unsigned *>()) {
++(*P);
} else {
- LValue &PosLVal = *Pos.get<LValue *>();
+ LValue &PosLVal = *cast<LValue *>(Pos);
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
Idx = CGF.Builder.CreateNUWAdd(Idx,
llvm::ConstantInt::get(Idx->getType(), 1));
diff --git a/clang/lib/Index/IndexDecl.cpp b/clang/lib/Index/IndexDecl.cpp
index 19cff0398e21e3..6c971bf0f381b3 100644
--- a/clang/lib/Index/IndexDecl.cpp
+++ b/clang/lib/Index/IndexDecl.cpp
@@ -666,7 +666,7 @@ class IndexingDeclVisitor : public ConstDeclVisitor<IndexingDeclVisitor, bool> {
Template = D->getSpecializedTemplateOrPartial();
const Decl *SpecializationOf =
isa<ClassTemplateDecl *>(Template)
- ? (Decl *)Template.get<ClassTemplateDecl *>()
+ ? (Decl *)cast<ClassTemplateDecl *>(Template)
: cast<ClassTemplatePartialSpecializationDecl *>(Template);
if (!D->isThisDeclarationADefinition())
IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), D);
|
@llvm/pr-subscribers-clang-analysis Author: Kazu Hirata (kazutakahirata) ChangesNote that PointerUnion::{is,get} have been soft deprecated in // FIXME: Replace the uses of is(), get() and dyn_cast() with I'm not touching PointerUnion::dyn_cast for now because it's a bit Full diff: https://github.com/llvm/llvm-project/pull/119724.diff 11 Files Affected:
diff --git a/clang/include/clang/Basic/FileEntry.h b/clang/include/clang/Basic/FileEntry.h
index ba6dfa69f214d8..da5ba909742936 100644
--- a/clang/include/clang/Basic/FileEntry.h
+++ b/clang/include/clang/Basic/FileEntry.h
@@ -68,7 +68,7 @@ class FileEntryRef {
StringRef getNameAsRequested() const { return ME->first(); }
const FileEntry &getFileEntry() const {
- return *getBaseMapEntry().second->V.get<FileEntry *>();
+ return *cast<FileEntry *>(getBaseMapEntry().second->V);
}
// This function is used if the buffer size needs to be increased
@@ -361,7 +361,7 @@ bool FileEntryRef::isNamedPipe() const { return getFileEntry().isNamedPipe(); }
void FileEntryRef::closeFile() const { getFileEntry().closeFile(); }
void FileEntryRef::updateFileEntryBufferSize(unsigned BufferSize) {
- getBaseMapEntry().second->V.get<FileEntry *>()->setSize(BufferSize);
+ cast<FileEntry *>(getBaseMapEntry().second->V)->setSize(BufferSize);
}
} // end namespace clang
diff --git a/clang/include/clang/Basic/IdentifierTable.h b/clang/include/clang/Basic/IdentifierTable.h
index ae9ebd9f59154e..33d1cdb46f108b 100644
--- a/clang/include/clang/Basic/IdentifierTable.h
+++ b/clang/include/clang/Basic/IdentifierTable.h
@@ -1012,7 +1012,7 @@ class Selector {
}
MultiKeywordSelector *getMultiKeywordSelector() const {
- return InfoPtr.getPointer().get<MultiKeywordSelector *>();
+ return cast<MultiKeywordSelector *>(InfoPtr.getPointer());
}
unsigned getIdentifierInfoFlag() const {
@@ -1020,7 +1020,7 @@ class Selector {
// IMPORTANT NOTE: We have to reconstitute this data rather than use the
// value directly from the PointerIntPair. See the comments in `InfoPtr`
// for more details.
- if (InfoPtr.getPointer().is<MultiKeywordSelector *>())
+ if (isa<MultiKeywordSelector *>(InfoPtr.getPointer()))
new_flags |= MultiArg;
return new_flags;
}
diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h
index 22cbd0d90ee432..4fa5fbdb5a7f63 100644
--- a/clang/include/clang/Sema/ParsedAttr.h
+++ b/clang/include/clang/Sema/ParsedAttr.h
@@ -392,19 +392,17 @@ class ParsedAttr final
}
bool isArgExpr(unsigned Arg) const {
- return Arg < NumArgs && getArg(Arg).is<Expr*>();
+ return Arg < NumArgs && isa<Expr *>(getArg(Arg));
}
- Expr *getArgAsExpr(unsigned Arg) const {
- return getArg(Arg).get<Expr*>();
- }
+ Expr *getArgAsExpr(unsigned Arg) const { return cast<Expr *>(getArg(Arg)); }
bool isArgIdent(unsigned Arg) const {
- return Arg < NumArgs && getArg(Arg).is<IdentifierLoc*>();
+ return Arg < NumArgs && isa<IdentifierLoc *>(getArg(Arg));
}
IdentifierLoc *getArgAsIdent(unsigned Arg) const {
- return getArg(Arg).get<IdentifierLoc*>();
+ return cast<IdentifierLoc *>(getArg(Arg));
}
const AvailabilityChange &getAvailabilityIntroduced() const {
diff --git a/clang/include/clang/Sema/SemaConcept.h b/clang/include/clang/Sema/SemaConcept.h
index 4b1abccb7741a1..fa5309a597b3a5 100644
--- a/clang/include/clang/Sema/SemaConcept.h
+++ b/clang/include/clang/Sema/SemaConcept.h
@@ -210,17 +210,17 @@ bool subsumes(const NormalForm &PDNF, const NormalForm &QCNF,
bool Found = false;
for (NormalFormConstraint Pia : Pi) {
for (NormalFormConstraint Qjb : Qj) {
- if (Pia.is<FoldExpandedConstraint *>() &&
- Qjb.is<FoldExpandedConstraint *>()) {
- if (Pia.get<FoldExpandedConstraint *>()->subsumes(
- *Qjb.get<FoldExpandedConstraint *>(), E)) {
+ if (isa<FoldExpandedConstraint *>(Pia) &&
+ isa<FoldExpandedConstraint *>(Qjb)) {
+ if (cast<FoldExpandedConstraint *>(Pia)->subsumes(
+ *cast<FoldExpandedConstraint *>(Qjb), E)) {
Found = true;
break;
}
- } else if (Pia.is<AtomicConstraint *>() &&
- Qjb.is<AtomicConstraint *>()) {
- if (E(*Pia.get<AtomicConstraint *>(),
- *Qjb.get<AtomicConstraint *>())) {
+ } else if (isa<AtomicConstraint *>(Pia) &&
+ isa<AtomicConstraint *>(Qjb)) {
+ if (E(*cast<AtomicConstraint *>(Pia),
+ *cast<AtomicConstraint *>(Qjb))) {
Found = true;
break;
}
diff --git a/clang/include/clang/Sema/SemaInternal.h b/clang/include/clang/Sema/SemaInternal.h
index 41d05b2bfb078e..27cda71989726d 100644
--- a/clang/include/clang/Sema/SemaInternal.h
+++ b/clang/include/clang/Sema/SemaInternal.h
@@ -75,7 +75,7 @@ getDepthAndIndex(UnexpandedParameterPack UPP) {
if (const auto *TTP = UPP.first.dyn_cast<const TemplateTypeParmType *>())
return std::make_pair(TTP->getDepth(), TTP->getIndex());
- return getDepthAndIndex(UPP.first.get<NamedDecl *>());
+ return getDepthAndIndex(cast<NamedDecl *>(UPP.first));
}
class TypoCorrectionConsumer : public VisibleDeclConsumer {
diff --git a/clang/include/clang/Sema/Template.h b/clang/include/clang/Sema/Template.h
index 6872d04cc4dfb9..aca11bff84b9c9 100644
--- a/clang/include/clang/Sema/Template.h
+++ b/clang/include/clang/Sema/Template.h
@@ -486,10 +486,10 @@ enum class TemplateSubstitutionKind : char {
const Decl *D = I->first;
llvm::PointerUnion<Decl *, DeclArgumentPack *> &Stored =
newScope->LocalDecls[D];
- if (I->second.is<Decl *>()) {
- Stored = I->second.get<Decl *>();
+ if (isa<Decl *>(I->second)) {
+ Stored = cast<Decl *>(I->second);
} else {
- DeclArgumentPack *OldPack = I->second.get<DeclArgumentPack *>();
+ DeclArgumentPack *OldPack = cast<DeclArgumentPack *>(I->second);
DeclArgumentPack *NewPack = new DeclArgumentPack(*OldPack);
Stored = NewPack;
newScope->ArgumentPacks.push_back(NewPack);
diff --git a/clang/lib/APINotes/APINotesManager.cpp b/clang/lib/APINotes/APINotesManager.cpp
index 039d09fa7cf575..70d96c735503fd 100644
--- a/clang/lib/APINotes/APINotesManager.cpp
+++ b/clang/lib/APINotes/APINotesManager.cpp
@@ -374,9 +374,9 @@ APINotesManager::findAPINotes(SourceLocation Loc) {
++NumDirectoryCacheHits;
// We've been redirected to another directory for answers. Follow it.
- if (Known->second && Known->second.is<DirectoryEntryRef>()) {
+ if (Known->second && isa<DirectoryEntryRef>(Known->second)) {
DirsVisited.insert(*Dir);
- Dir = Known->second.get<DirectoryEntryRef>();
+ Dir = cast<DirectoryEntryRef>(Known->second);
continue;
}
diff --git a/clang/lib/Analysis/ThreadSafetyCommon.cpp b/clang/lib/Analysis/ThreadSafetyCommon.cpp
index cbcfefdc525490..211e940ce8b861 100644
--- a/clang/lib/Analysis/ThreadSafetyCommon.cpp
+++ b/clang/lib/Analysis/ThreadSafetyCommon.cpp
@@ -326,7 +326,7 @@ til::SExpr *SExprBuilder::translateDeclRefExpr(const DeclRefExpr *DRE,
}
assert(I == 0);
- return Ctx->FunArgs.get<til::SExpr *>();
+ return cast<til::SExpr *>(Ctx->FunArgs);
}
}
// Map the param back to the param of the original function declaration
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index f44b5e4c4b6389..f0b6f7be6c84f5 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -324,9 +324,9 @@ llvm::Expected<FileEntryRef> FileManager::getFileRef(StringRef Filename,
*SeenFileEntries
.insert({Status.getName(), FileEntryRef::MapValue(*UFE, DirInfo)})
.first;
- assert(Redirection.second->V.is<FileEntry *>() &&
+ assert(isa<FileEntry *>(Redirection.second->V) &&
"filename redirected to a non-canonical filename?");
- assert(Redirection.second->V.get<FileEntry *>() == UFE &&
+ assert(cast<FileEntry *>(Redirection.second->V) == UFE &&
"filename from getStatValue() refers to wrong file");
// Cache the redirection in the previously-inserted entry, still available
@@ -400,7 +400,7 @@ FileEntryRef FileManager::getVirtualFileRef(StringRef Filename, off_t Size,
FileEntryRef::MapValue Value = *NamedFileEnt.second;
if (LLVM_LIKELY(isa<FileEntry *>(Value.V)))
return FileEntryRef(NamedFileEnt);
- return FileEntryRef(*Value.V.get<const FileEntryRef::MapEntry *>());
+ return FileEntryRef(*cast<const FileEntryRef::MapEntry *>(Value.V));
}
// We've not seen this before, or the file is cached as non-existent.
@@ -620,7 +620,7 @@ void FileManager::GetUniqueIDMapping(
for (const auto &Entry : SeenFileEntries) {
// Only return files that exist and are not redirected.
- if (!Entry.getValue() || !Entry.getValue()->V.is<FileEntry *>())
+ if (!Entry.getValue() || !isa<FileEntry *>(Entry.getValue()->V))
continue;
FileEntryRef FE(Entry);
// Add this file if it's the first one with the UID, or if its name is
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 2deb91f27e37b9..90809ef90858c5 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -4085,7 +4085,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
CGF.Builder.CreateConstGEP(DependenciesArray, *P), KmpDependInfoTy);
} else {
assert(E && "Expected a non-null expression");
- LValue &PosLVal = *Pos.get<LValue *>();
+ LValue &PosLVal = *cast<LValue *>(Pos);
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
Base = CGF.MakeAddrLValue(
CGF.Builder.CreateGEP(CGF, DependenciesArray, Idx), KmpDependInfoTy);
@@ -4113,7 +4113,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
if (unsigned *P = Pos.dyn_cast<unsigned *>()) {
++(*P);
} else {
- LValue &PosLVal = *Pos.get<LValue *>();
+ LValue &PosLVal = *cast<LValue *>(Pos);
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
Idx = CGF.Builder.CreateNUWAdd(Idx,
llvm::ConstantInt::get(Idx->getType(), 1));
diff --git a/clang/lib/Index/IndexDecl.cpp b/clang/lib/Index/IndexDecl.cpp
index 19cff0398e21e3..6c971bf0f381b3 100644
--- a/clang/lib/Index/IndexDecl.cpp
+++ b/clang/lib/Index/IndexDecl.cpp
@@ -666,7 +666,7 @@ class IndexingDeclVisitor : public ConstDeclVisitor<IndexingDeclVisitor, bool> {
Template = D->getSpecializedTemplateOrPartial();
const Decl *SpecializationOf =
isa<ClassTemplateDecl *>(Template)
- ? (Decl *)Template.get<ClassTemplateDecl *>()
+ ? (Decl *)cast<ClassTemplateDecl *>(Template)
: cast<ClassTemplatePartialSpecializationDecl *>(Template);
if (!D->isThisDeclarationADefinition())
IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), D);
|
@nikic Please take a look at the revised patch. Thanks! |
Note that PointerUnion::{is,get} have been soft deprecated in
PointerUnion.h:
// FIXME: Replace the uses of is(), get() and dyn_cast() with
// isa, cast and the llvm::dyn_cast
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.