Skip to content

Commit 96b0096

Browse files
committed
[Clang][P1061] Remove ResolvedUnexpandedPackExpr
1 parent a323e05 commit 96b0096

21 files changed

+3
-218
lines changed

clang/include/clang/AST/ExprCXX.h

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5318,59 +5318,6 @@ class BuiltinBitCastExpr final
53185318
}
53195319
};
53205320

5321-
// Represents an unexpanded pack where the list of expressions are
5322-
// known. These are used when structured bindings introduce a pack.
5323-
class ResolvedUnexpandedPackExpr final
5324-
: public Expr,
5325-
private llvm::TrailingObjects<ResolvedUnexpandedPackExpr, Expr *> {
5326-
friend class ASTStmtReader;
5327-
friend class ASTStmtWriter;
5328-
friend TrailingObjects;
5329-
5330-
SourceLocation BeginLoc;
5331-
unsigned NumExprs;
5332-
5333-
ResolvedUnexpandedPackExpr(SourceLocation BL, QualType QT, unsigned NumExprs);
5334-
5335-
public:
5336-
static ResolvedUnexpandedPackExpr *CreateDeserialized(ASTContext &C,
5337-
unsigned NumExprs);
5338-
static ResolvedUnexpandedPackExpr *
5339-
Create(ASTContext &C, SourceLocation BeginLoc, QualType T, unsigned NumExprs);
5340-
static ResolvedUnexpandedPackExpr *Create(ASTContext &C,
5341-
SourceLocation BeginLoc, QualType T,
5342-
llvm::ArrayRef<Expr *> Exprs);
5343-
5344-
unsigned getNumExprs() const { return NumExprs; }
5345-
5346-
llvm::MutableArrayRef<Expr *> getExprs() {
5347-
return {getTrailingObjects<Expr *>(), NumExprs};
5348-
}
5349-
5350-
llvm::ArrayRef<Expr *> getExprs() const {
5351-
return {getTrailingObjects<Expr *>(), NumExprs};
5352-
}
5353-
5354-
Expr *getExpansion(unsigned Idx) { return getExprs()[Idx]; }
5355-
Expr *getExpansion(unsigned Idx) const { return getExprs()[Idx]; }
5356-
5357-
// Iterators
5358-
child_range children() {
5359-
return child_range((Stmt **)getTrailingObjects<Expr *>(),
5360-
(Stmt **)getTrailingObjects<Expr *>() + getNumExprs());
5361-
}
5362-
5363-
SourceLocation getBeginLoc() const LLVM_READONLY { return BeginLoc; }
5364-
SourceLocation getEndLoc() const LLVM_READONLY { return BeginLoc; }
5365-
5366-
// Returns the resolved pack of a decl or nullptr
5367-
static ResolvedUnexpandedPackExpr *getFromDecl(Decl *);
5368-
5369-
static bool classof(const Stmt *T) {
5370-
return T->getStmtClass() == ResolvedUnexpandedPackExprClass;
5371-
}
5372-
};
5373-
53745321
} // namespace clang
53755322

53765323
#endif // LLVM_CLANG_AST_EXPRCXX_H

clang/include/clang/AST/RecursiveASTVisitor.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2950,7 +2950,6 @@ DEF_TRAVERSE_STMT(FunctionParmPackExpr, {})
29502950
DEF_TRAVERSE_STMT(CXXFoldExpr, {})
29512951
DEF_TRAVERSE_STMT(AtomicExpr, {})
29522952
DEF_TRAVERSE_STMT(CXXParenListInitExpr, {})
2953-
DEF_TRAVERSE_STMT(ResolvedUnexpandedPackExpr, {})
29542953

29552954
DEF_TRAVERSE_STMT(MaterializeTemporaryExpr, {
29562955
if (S->getLifetimeExtendedTemporaryDecl()) {

clang/include/clang/Basic/StmtNodes.td

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ def MaterializeTemporaryExpr : StmtNode<Expr>;
163163
def LambdaExpr : StmtNode<Expr>;
164164
def CXXFoldExpr : StmtNode<Expr>;
165165
def CXXParenListInitExpr: StmtNode<Expr>;
166-
def ResolvedUnexpandedPackExpr : StmtNode<Expr>;
167166

168167
// C++ Coroutines expressions
169168
def CoroutineSuspendExpr : StmtNode<Expr, 1>;

clang/include/clang/Sema/Sema.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,7 @@ void threadSafetyCleanup(BeforeSet *Cache);
232232

233233
// FIXME: No way to easily map from TemplateTypeParmTypes to
234234
// TemplateTypeParmDecls, so we have this horrible PointerUnion.
235-
typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType *, NamedDecl *,
236-
ResolvedUnexpandedPackExpr *>,
235+
typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType *, NamedDecl *>,
237236
SourceLocation>
238237
UnexpandedParameterPack;
239238

clang/include/clang/Serialization/ASTBitCodes.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1908,7 +1908,6 @@ enum StmtCode {
19081908
EXPR_PACK_EXPANSION, // PackExpansionExpr
19091909
EXPR_PACK_INDEXING, // PackIndexingExpr
19101910
EXPR_SIZEOF_PACK, // SizeOfPackExpr
1911-
EXPR_RESOLVED_UNEXPANDED_PACK, // ResolvedUnexpandedPackExpr
19121911
EXPR_SUBST_NON_TYPE_TEMPLATE_PARM, // SubstNonTypeTemplateParmExpr
19131912
EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK, // SubstNonTypeTemplateParmPackExpr
19141913
EXPR_FUNCTION_PARM_PACK, // FunctionParmPackExpr

clang/lib/AST/Expr.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3659,7 +3659,6 @@ bool Expr::HasSideEffects(const ASTContext &Ctx,
36593659
case PackIndexingExprClass:
36603660
case HLSLOutArgExprClass:
36613661
case OpenACCAsteriskSizeExprClass:
3662-
case ResolvedUnexpandedPackExprClass:
36633662
// These never have a side-effect.
36643663
return false;
36653664

clang/lib/AST/ExprCXX.cpp

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1965,52 +1965,3 @@ CXXFoldExpr::CXXFoldExpr(QualType T, UnresolvedLookupExpr *Callee,
19651965
SubExprs[SubExpr::RHS] = RHS;
19661966
setDependence(computeDependence(this));
19671967
}
1968-
1969-
ResolvedUnexpandedPackExpr::ResolvedUnexpandedPackExpr(SourceLocation BL,
1970-
QualType QT,
1971-
unsigned NumExprs)
1972-
: Expr(ResolvedUnexpandedPackExprClass, QT, VK_PRValue, OK_Ordinary),
1973-
BeginLoc(BL), NumExprs(NumExprs) {
1974-
// C++ [temp.dep.expr]p3
1975-
// An id-expression is type-dependent if it is
1976-
// - associated by name lookup with a pack
1977-
setDependence(ExprDependence::TypeValueInstantiation |
1978-
ExprDependence::UnexpandedPack);
1979-
}
1980-
1981-
ResolvedUnexpandedPackExpr *
1982-
ResolvedUnexpandedPackExpr::CreateDeserialized(ASTContext &Ctx,
1983-
unsigned NumExprs) {
1984-
void *Mem = Ctx.Allocate(totalSizeToAlloc<Expr *>(NumExprs),
1985-
alignof(ResolvedUnexpandedPackExpr));
1986-
return new (Mem)
1987-
ResolvedUnexpandedPackExpr(SourceLocation(), QualType(), NumExprs);
1988-
}
1989-
1990-
ResolvedUnexpandedPackExpr *
1991-
ResolvedUnexpandedPackExpr::Create(ASTContext &Ctx, SourceLocation BL,
1992-
QualType T, unsigned NumExprs) {
1993-
void *Mem = Ctx.Allocate(totalSizeToAlloc<Expr *>(NumExprs),
1994-
alignof(ResolvedUnexpandedPackExpr));
1995-
ResolvedUnexpandedPackExpr *New =
1996-
new (Mem) ResolvedUnexpandedPackExpr(BL, T, NumExprs);
1997-
1998-
auto Exprs = New->getExprs();
1999-
std::uninitialized_fill(Exprs.begin(), Exprs.end(), nullptr);
2000-
2001-
return New;
2002-
}
2003-
2004-
ResolvedUnexpandedPackExpr *
2005-
ResolvedUnexpandedPackExpr::Create(ASTContext &Ctx, SourceLocation BL,
2006-
QualType T, ArrayRef<Expr *> Exprs) {
2007-
auto *New = Create(Ctx, BL, T, Exprs.size());
2008-
std::uninitialized_copy(Exprs.begin(), Exprs.end(), New->getExprs().begin());
2009-
return New;
2010-
}
2011-
2012-
ResolvedUnexpandedPackExpr *ResolvedUnexpandedPackExpr::getFromDecl(Decl *D) {
2013-
if (auto *BD = dyn_cast<BindingDecl>(D))
2014-
return dyn_cast_if_present<ResolvedUnexpandedPackExpr>(BD->getBinding());
2015-
return nullptr;
2016-
}

clang/lib/AST/ExprClassification.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -451,13 +451,6 @@ static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E) {
451451
case Expr::PackExpansionExprClass:
452452
return ClassifyInternal(Ctx, cast<PackExpansionExpr>(E)->getPattern());
453453

454-
case Expr::ResolvedUnexpandedPackExprClass: {
455-
if (cast<ResolvedUnexpandedPackExpr>(E)->getNumExprs() > 0)
456-
return ClassifyInternal(
457-
Ctx, cast<ResolvedUnexpandedPackExpr>(E)->getExpansion(0));
458-
return Cl::CL_LValue;
459-
}
460-
461454
case Expr::MaterializeTemporaryExprClass:
462455
return cast<MaterializeTemporaryExpr>(E)->isBoundToLvalueReference()
463456
? Cl::CL_LValue

clang/lib/AST/ExprConstant.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17253,7 +17253,6 @@ static ICEDiag CheckICE(const Expr* E, const ASTContext &Ctx) {
1725317253
case Expr::SYCLUniqueStableNameExprClass:
1725417254
case Expr::CXXParenListInitExprClass:
1725517255
case Expr::HLSLOutArgExprClass:
17256-
case Expr::ResolvedUnexpandedPackExprClass:
1725717256
return ICEDiag(IK_NotICE, E->getBeginLoc());
1725817257

1725917258
case Expr::InitListExprClass: {

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4932,8 +4932,7 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity,
49324932
case Expr::AtomicExprClass:
49334933
case Expr::SourceLocExprClass:
49344934
case Expr::EmbedExprClass:
4935-
case Expr::BuiltinBitCastExprClass:
4936-
case Expr::ResolvedUnexpandedPackExprClass: {
4935+
case Expr::BuiltinBitCastExprClass: {
49374936
NotPrimaryExpr();
49384937
if (!NullOut) {
49394938
// As bad as this diagnostic is, it's better than crashing.

clang/lib/AST/StmtPrinter.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2595,15 +2595,6 @@ void StmtPrinter::VisitPackIndexingExpr(PackIndexingExpr *E) {
25952595
OS << "]";
25962596
}
25972597

2598-
void StmtPrinter::VisitResolvedUnexpandedPackExpr(
2599-
ResolvedUnexpandedPackExpr *E) {
2600-
OS << "<<resolved pack(";
2601-
llvm::interleave(
2602-
E->getExprs().begin(), E->getExprs().end(),
2603-
[this](auto *X) { PrintExpr(X); }, [this] { OS << ", "; });
2604-
OS << ")>>";
2605-
}
2606-
26072598
void StmtPrinter::VisitSubstNonTypeTemplateParmPackExpr(
26082599
SubstNonTypeTemplateParmPackExpr *Node) {
26092600
OS << *Node->getParameterPack();

clang/lib/AST/StmtProfile.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2280,10 +2280,6 @@ void StmtProfiler::VisitSizeOfPackExpr(const SizeOfPackExpr *S) {
22802280
ID.AddInteger(0);
22812281
}
22822282
}
2283-
void StmtProfiler::VisitResolvedUnexpandedPackExpr(
2284-
const ResolvedUnexpandedPackExpr *S) {
2285-
VisitExpr(S);
2286-
}
22872283

22882284
void StmtProfiler::VisitPackIndexingExpr(const PackIndexingExpr *E) {
22892285
VisitExpr(E);

clang/lib/Sema/SemaExceptionSpec.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1286,7 +1286,6 @@ CanThrowResult Sema::canThrow(const Stmt *S) {
12861286
case Expr::ConvertVectorExprClass:
12871287
case Expr::VAArgExprClass:
12881288
case Expr::CXXParenListInitExprClass:
1289-
case Expr::ResolvedUnexpandedPackExprClass:
12901289
return canSubStmtsThrow(*this, S);
12911290

12921291
case Expr::CompoundLiteralExprClass:

clang/lib/Sema/SemaTemplateInstantiate.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,10 +1584,6 @@ namespace {
15841584
/// pack.
15851585
ExprResult TransformFunctionParmPackExpr(FunctionParmPackExpr *E);
15861586

1587-
// Transform a ResolvedUnexpandedPackExpr
1588-
ExprResult
1589-
TransformResolvedUnexpandedPackExpr(ResolvedUnexpandedPackExpr *E);
1590-
15911587
QualType TransformFunctionProtoType(TypeLocBuilder &TLB,
15921588
FunctionProtoTypeLoc TL) {
15931589
// Call the base version; it will forward to our overridden version below.
@@ -2644,19 +2640,6 @@ TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB,
26442640
return Result;
26452641
}
26462642

2647-
ExprResult TemplateInstantiator::TransformResolvedUnexpandedPackExpr(
2648-
ResolvedUnexpandedPackExpr *E) {
2649-
if (getSema().ArgumentPackSubstitutionIndex != -1) {
2650-
assert(static_cast<unsigned>(getSema().ArgumentPackSubstitutionIndex) <
2651-
E->getNumExprs() &&
2652-
"ArgumentPackSubstitutionIndex is out of range");
2653-
return TransformExpr(
2654-
E->getExpansion(getSema().ArgumentPackSubstitutionIndex));
2655-
}
2656-
2657-
return inherited::TransformResolvedUnexpandedPackExpr(E);
2658-
}
2659-
26602643
QualType TemplateInstantiator::TransformSubstTemplateTypeParmPackType(
26612644
TypeLocBuilder &TLB, SubstTemplateTypeParmPackTypeLoc TL,
26622645
bool SuppressObjCLifetime) {

clang/lib/Sema/SemaTemplateVariadic.cpp

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ class CollectUnexpandedParameterPacksVisitor
6464
Unexpanded.push_back({T, Loc});
6565
}
6666

67-
void addUnexpanded(ResolvedUnexpandedPackExpr *E) {
68-
Unexpanded.push_back({E, E->getBeginLoc()});
69-
}
70-
7167
public:
7268
explicit CollectUnexpandedParameterPacksVisitor(
7369
SmallVectorImpl<UnexpandedParameterPack> &Unexpanded)
@@ -110,12 +106,6 @@ class CollectUnexpandedParameterPacksVisitor
110106
return true;
111107
}
112108

113-
bool
114-
VisitResolvedUnexpandedPackExpr(ResolvedUnexpandedPackExpr *E) override {
115-
addUnexpanded(E);
116-
return true;
117-
}
118-
119109
/// Record occurrences of template template parameter packs.
120110
bool TraverseTemplateName(TemplateName Template) override {
121111
if (auto *TTP = dyn_cast_or_null<TemplateTemplateParmDecl>(
@@ -1193,12 +1183,8 @@ ExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S,
11931183

11941184
MarkAnyDeclReferenced(OpLoc, ParameterPack, true);
11951185

1196-
std::optional<unsigned> Length;
1197-
if (auto *RP = ResolvedUnexpandedPackExpr::getFromDecl(ParameterPack))
1198-
Length = RP->getNumExprs();
1199-
12001186
return SizeOfPackExpr::Create(Context, OpLoc, ParameterPack, NameLoc,
1201-
RParenLoc, Length);
1187+
RParenLoc);
12021188
}
12031189

12041190
static bool isParameterPack(Expr *PackExpression) {

clang/lib/Sema/TreeTransform.h

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3680,13 +3680,6 @@ class TreeTransform {
36803680
FullySubstituted);
36813681
}
36823682

3683-
ExprResult RebuildResolvedUnexpandedPackExpr(SourceLocation BeginLoc,
3684-
QualType T,
3685-
ArrayRef<Expr *> Exprs) {
3686-
return ResolvedUnexpandedPackExpr::Create(SemaRef.Context, BeginLoc, T,
3687-
Exprs);
3688-
}
3689-
36903683
/// Build a new expression representing a call to a source location
36913684
/// builtin.
36923685
///
@@ -16133,24 +16126,6 @@ TreeTransform<Derived>::TransformFunctionParmPackExpr(FunctionParmPackExpr *E) {
1613316126
return E;
1613416127
}
1613516128

16136-
template <typename Derived>
16137-
ExprResult TreeTransform<Derived>::TransformResolvedUnexpandedPackExpr(
16138-
ResolvedUnexpandedPackExpr *E) {
16139-
bool ArgumentChanged = false;
16140-
SmallVector<Expr *, 12> NewExprs;
16141-
if (TransformExprs(E->getExprs().begin(), E->getNumExprs(),
16142-
/*IsCall=*/false, NewExprs, &ArgumentChanged))
16143-
return ExprError();
16144-
16145-
if (!AlwaysRebuild() && !ArgumentChanged)
16146-
return E;
16147-
16148-
// NOTE: The type is just a superficial PackExpansionType
16149-
// that needs no substitution.
16150-
return RebuildResolvedUnexpandedPackExpr(E->getBeginLoc(), E->getType(),
16151-
NewExprs);
16152-
}
16153-
1615416129
template<typename Derived>
1615516130
ExprResult
1615616131
TreeTransform<Derived>::TransformMaterializeTemporaryExpr(

clang/lib/Serialization/ASTReaderStmt.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2208,16 +2208,6 @@ void ASTStmtReader::VisitPackIndexingExpr(PackIndexingExpr *E) {
22082208
Exprs[I] = Record.readExpr();
22092209
}
22102210

2211-
void ASTStmtReader::VisitResolvedUnexpandedPackExpr(
2212-
ResolvedUnexpandedPackExpr *E) {
2213-
VisitExpr(E);
2214-
E->NumExprs = Record.readInt();
2215-
E->BeginLoc = readSourceLocation();
2216-
auto **Exprs = E->getTrailingObjects<Expr *>();
2217-
for (unsigned I = 0; I < E->NumExprs; ++I)
2218-
Exprs[I] = Record.readExpr();
2219-
}
2220-
22212211
void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr(
22222212
SubstNonTypeTemplateParmExpr *E) {
22232213
VisitExpr(E);
@@ -4301,12 +4291,6 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
43014291
/*TransformedExprs=*/Record[ASTStmtReader::NumExprFields]);
43024292
break;
43034293

4304-
case EXPR_RESOLVED_UNEXPANDED_PACK:
4305-
S = ResolvedUnexpandedPackExpr::CreateDeserialized(
4306-
Context,
4307-
/*NumExprs=*/Record[ASTStmtReader::NumExprFields]);
4308-
break;
4309-
43104294
case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM:
43114295
S = new (Context) SubstNonTypeTemplateParmExpr(Empty);
43124296
break;

clang/lib/Serialization/ASTWriter.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,6 @@ static void AddStmtsExprs(llvm::BitstreamWriter &Stream,
874874
RECORD(EXPR_PACK_EXPANSION);
875875
RECORD(EXPR_SIZEOF_PACK);
876876
RECORD(EXPR_PACK_INDEXING);
877-
RECORD(EXPR_RESOLVED_UNEXPANDED_PACK);
878877
RECORD(EXPR_SUBST_NON_TYPE_TEMPLATE_PARM);
879878
RECORD(EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK);
880879
RECORD(EXPR_FUNCTION_PARM_PACK);

clang/lib/Serialization/ASTWriterStmt.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,16 +2210,6 @@ void ASTStmtWriter::VisitPackIndexingExpr(PackIndexingExpr *E) {
22102210
Code = serialization::EXPR_PACK_INDEXING;
22112211
}
22122212

2213-
void ASTStmtWriter::VisitResolvedUnexpandedPackExpr(
2214-
ResolvedUnexpandedPackExpr *E) {
2215-
VisitExpr(E);
2216-
Record.push_back(E->getNumExprs());
2217-
Record.AddSourceLocation(E->getBeginLoc());
2218-
for (Expr *Sub : E->getExprs())
2219-
Record.AddStmt(Sub);
2220-
Code = serialization::EXPR_RESOLVED_UNEXPANDED_PACK;
2221-
}
2222-
22232213
void ASTStmtWriter::VisitSubstNonTypeTemplateParmExpr(
22242214
SubstNonTypeTemplateParmExpr *E) {
22252215
VisitExpr(E);

clang/lib/StaticAnalyzer/Core/ExprEngine.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1743,7 +1743,6 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
17431743
case Stmt::DependentCoawaitExprClass:
17441744
case Stmt::CoreturnStmtClass:
17451745
case Stmt::CoyieldExprClass:
1746-
case Stmt::ResolvedUnexpandedPackExprClass:
17471746
case Stmt::SEHTryStmtClass:
17481747
case Stmt::SEHExceptStmtClass:
17491748
case Stmt::SEHLeaveStmtClass:

0 commit comments

Comments
 (0)