@@ -4390,17 +4390,17 @@ class PackIndexingExpr final
43904390 unsigned TransformedExpressions : 31 ;
43914391
43924392 LLVM_PREFERRED_TYPE (bool )
4393- unsigned ExpandedToEmptyPack : 1 ;
4393+ unsigned FullySubstituted : 1 ;
43944394
43954395 PackIndexingExpr (QualType Type, SourceLocation EllipsisLoc,
43964396 SourceLocation RSquareLoc, Expr *PackIdExpr, Expr *IndexExpr,
43974397 ArrayRef<Expr *> SubstitutedExprs = {},
4398- bool ExpandedToEmptyPack = false )
4398+ bool FullySubstituted = false )
43994399 : Expr(PackIndexingExprClass, Type, VK_LValue, OK_Ordinary),
44004400 EllipsisLoc (EllipsisLoc), RSquareLoc(RSquareLoc),
44014401 SubExprs{PackIdExpr, IndexExpr},
44024402 TransformedExpressions (SubstitutedExprs.size()),
4403- ExpandedToEmptyPack(ExpandedToEmptyPack ) {
4403+ FullySubstituted(FullySubstituted ) {
44044404
44054405 auto *Exprs = getTrailingObjects<Expr *>();
44064406 std::uninitialized_copy (SubstitutedExprs.begin (), SubstitutedExprs.end (),
@@ -4424,12 +4424,16 @@ class PackIndexingExpr final
44244424 SourceLocation RSquareLoc, Expr *PackIdExpr,
44254425 Expr *IndexExpr, std::optional<int64_t > Index,
44264426 ArrayRef<Expr *> SubstitutedExprs = {},
4427- bool ExpandedToEmptyPack = false );
4427+ bool FullySubstituted = false );
44284428 static PackIndexingExpr *CreateDeserialized (ASTContext &Context,
44294429 unsigned NumTransformedExprs);
44304430
4431+ bool isFullySubstituted () const { return FullySubstituted; }
4432+
44314433 // / Determine if the expression was expanded to empty.
4432- bool expandsToEmptyPack () const { return ExpandedToEmptyPack; }
4434+ bool expandsToEmptyPack () const {
4435+ return isFullySubstituted () && TransformedExpressions == 0 ;
4436+ }
44334437
44344438 // / Determine the location of the 'sizeof' keyword.
44354439 SourceLocation getEllipsisLoc () const { return EllipsisLoc; }
0 commit comments