[clang] [clang] Migrate away from PointerUnion::dyn_cast (NFC) (PR #225614)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 23 00:17:45 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Kazu Hirata (kazutakahirata)
<details>
<summary>Changes</summary>
Note that PointerUnion::dyn_cast has 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>
Literal migration would result in dyn_cast_if_present (see the
definition of PointerUnion::dyn_cast), but this patch uses dyn_cast on
UnexpandedParameterPack::first because it is always nonnull.
Specifically, UnexpandedParameterPack is constructed only in the
following places, all of which store a nonnull pointer in first, and
first is never modified afterward:
- CollectUnexpandedParameterPacksVisitor::addUnexpanded in
SemaTemplateVariadic.cpp
- TransformLambdaExpr in TreeTransform.h
- TransformSizeOfPackExpr in TreeTransform.h
Assisted-by: Antigravity
---
Full diff: https://github.com/llvm/llvm-project/pull/225614.diff
4 Files Affected:
- (modified) clang/lib/Sema/SemaTemplate.cpp (+1-1)
- (modified) clang/lib/Sema/SemaTemplateInstantiate.cpp (+1-1)
- (modified) clang/lib/Sema/SemaTemplateVariadic.cpp (+14-19)
- (modified) clang/lib/Sema/TreeTransform.h (+1-1)
``````````diff
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 466515550381a..593bfb051dfa1 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -5958,7 +5958,7 @@ bool Sema::CheckTemplateArgumentList(
llvm::SmallVector<UnexpandedParameterPack> Unexpanded;
collectUnexpandedParameterPacks(TL.getPatternLoc(), Unexpanded);
for (const auto &UPP : Unexpanded) {
- auto *TST = UPP.first.dyn_cast<const TemplateSpecializationType *>();
+ auto *TST = dyn_cast<const TemplateSpecializationType *>(UPP.first);
if (!TST)
continue;
assert(isPackProducingBuiltinTemplateName(TST->getTemplateName()));
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index bbca1267461e4..06ea12ca7bd73 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -3406,7 +3406,7 @@ PreparePackForExpansion(Sema &S, const CXXBaseSpecifier &Base,
// that required a substituion first.
bool SawPackTypes =
llvm::any_of(Unexpanded, [](UnexpandedParameterPack P) {
- return P.first.dyn_cast<const SubstBuiltinTemplatePackType *>();
+ return isa<const SubstBuiltinTemplatePackType *>(P.first);
});
if (!SawPackTypes) {
Info.Expand = false;
diff --git a/clang/lib/Sema/SemaTemplateVariadic.cpp b/clang/lib/Sema/SemaTemplateVariadic.cpp
index 3235750f408ff..bbac53b5b2acf 100644
--- a/clang/lib/Sema/SemaTemplateVariadic.cpp
+++ b/clang/lib/Sema/SemaTemplateVariadic.cpp
@@ -505,10 +505,10 @@ Sema::DiagnoseUnexpandedParameterPacks(SourceLocation Loc,
for (unsigned I = 0, N = Unexpanded.size(); I != N; ++I) {
IdentifierInfo *Name = nullptr;
- if (const TemplateTypeParmType *TTP
- = Unexpanded[I].first.dyn_cast<const TemplateTypeParmType *>())
+ if (const TemplateTypeParmType *TTP =
+ dyn_cast<const TemplateTypeParmType *>(Unexpanded[I].first))
Name = TTP->getIdentifier();
- else if (NamedDecl *ND = Unexpanded[I].first.dyn_cast<NamedDecl *>())
+ else if (NamedDecl *ND = dyn_cast<NamedDecl *>(Unexpanded[I].first))
Name = ND->getIdentifier();
if (Name && NamesKnown.insert(Name).second)
@@ -583,7 +583,7 @@ bool Sema::DiagnoseUnexpandedParameterPackInRequiresExpr(RequiresExpr *RE) {
llvm::SmallPtrSet<NamedDecl *, 8> ParmSet(llvm::from_range, Parms);
SmallVector<UnexpandedParameterPack, 2> UnexpandedParms;
for (auto Parm : Unexpanded)
- if (ParmSet.contains(Parm.first.dyn_cast<NamedDecl *>()))
+ if (ParmSet.contains(dyn_cast<NamedDecl *>(Parm.first)))
UnexpandedParms.push_back(Parm);
if (UnexpandedParms.empty())
return false;
@@ -875,13 +875,12 @@ bool Sema::CheckParameterPacksForExpansion(
FunctionParmPackExpr *BindingPack = nullptr;
std::optional<unsigned> NumPrecomputedArguments;
- if (auto *TTP = ParmPack.first.dyn_cast<const TemplateTypeParmType *>()) {
+ if (auto *TTP = dyn_cast<const TemplateTypeParmType *>(ParmPack.first)) {
Depth = TTP->getDepth();
Index = TTP->getIndex();
Name = TTP->getIdentifier();
- } else if (auto *TST =
- ParmPack.first
- .dyn_cast<const TemplateSpecializationType *>()) {
+ } else if (auto *TST = dyn_cast<const TemplateSpecializationType *>(
+ ParmPack.first)) {
assert(isPackProducingBuiltinTemplateName(TST->getTemplateName()));
// Delay expansion, substitution is required to know the size.
ShouldExpand = false;
@@ -896,9 +895,8 @@ bool Sema::CheckParameterPacksForExpansion(
: EllipsisLoc,
diag::err_unsupported_builtin_template_pack_expansion)
<< TST->getTemplateName();
- } else if (auto *S =
- ParmPack.first
- .dyn_cast<const SubstBuiltinTemplatePackType *>()) {
+ } else if (auto *S = dyn_cast<const SubstBuiltinTemplatePackType *>(
+ ParmPack.first)) {
Name = nullptr;
NumPrecomputedArguments = S->getNumArgs();
} else {
@@ -1088,20 +1086,17 @@ UnsignedOrNone Sema::getNumArgumentsInExpansionFromUnexpanded(
unsigned Index;
if (const TemplateTypeParmType *TTP =
- Unexpanded[I].first.dyn_cast<const TemplateTypeParmType *>()) {
+ dyn_cast<const TemplateTypeParmType *>(Unexpanded[I].first)) {
Depth = TTP->getDepth();
Index = TTP->getIndex();
- } else if (auto *TST =
- Unexpanded[I]
- .first.dyn_cast<const TemplateSpecializationType *>()) {
+ } else if (auto *TST = dyn_cast<const TemplateSpecializationType *>(
+ Unexpanded[I].first)) {
// This is a dependent pack, we are not ready to expand it yet.
assert(isPackProducingBuiltinTemplateName(TST->getTemplateName()));
(void)TST;
return std::nullopt;
- } else if (auto *PST =
- Unexpanded[I]
- .first
- .dyn_cast<const SubstBuiltinTemplatePackType *>()) {
+ } else if (auto *PST = dyn_cast<const SubstBuiltinTemplatePackType *>(
+ Unexpanded[I].first)) {
assert((!Result || *Result == PST->getNumArgs()) &&
"inconsistent pack sizes");
Result = PST->getNumArgs();
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 942fb586b1f23..8cd2e2e62a81c 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -5466,7 +5466,7 @@ bool TreeTransform<Derived>::PreparePackForExpansion(TemplateArgumentLoc In,
// that required a substituion first.
bool SawPackTypes =
llvm::any_of(Unexpanded, [](UnexpandedParameterPack P) {
- return P.first.dyn_cast<const SubstBuiltinTemplatePackType *>();
+ return isa<const SubstBuiltinTemplatePackType *>(P.first);
});
if (!SawPackTypes) {
Info.Expand = false;
``````````
</details>
https://github.com/llvm/llvm-project/pull/225614
More information about the cfe-commits
mailing list