@@ -3584,10 +3584,6 @@ class PackExpansionExpr final : public Expr,
35843584 : Expr(ExprKind::PackExpansion, implicit, type),
35853585 PatternExpr (patternExpr), DotsLoc(dotsLoc), Environment(environment) {
35863586 Bits.PackExpansionExpr .NumBindings = packElements.size ();
3587-
3588- assert (Bits.PackExpansionExpr .NumBindings > 0 &&
3589- " PackExpansionExpr must have pack references" );
3590-
35913587 std::uninitialized_copy (packElements.begin (), packElements.end (),
35923588 getTrailingObjects<PackElementExpr *>());
35933589 }
@@ -3623,9 +3619,7 @@ class PackExpansionExpr final : public Expr,
36233619 return {getTrailingObjects<PackElementExpr *>(), getNumBindings ()};
36243620 }
36253621
3626- void setBinding (unsigned i, PackElementExpr *e) {
3627- getMutableBindings ()[i] = e;
3628- }
3622+ void getExpandedPacks (SmallVectorImpl<ASTNode> &packs);
36293623
36303624 GenericEnvironment *getGenericEnvironment () {
36313625 return Environment;
@@ -3791,11 +3785,11 @@ class AbstractClosureExpr : public DeclContext, public Expr {
37913785
37923786public:
37933787 AbstractClosureExpr (ExprKind Kind, Type FnType, bool Implicit,
3794- unsigned Discriminator, DeclContext *Parent)
3788+ DeclContext *Parent)
37953789 : DeclContext(DeclContextKind::AbstractClosureExpr, Parent),
37963790 Expr (Kind, Implicit, FnType),
37973791 parameterList(nullptr ) {
3798- Bits.AbstractClosureExpr .Discriminator = Discriminator ;
3792+ Bits.AbstractClosureExpr .Discriminator = InvalidDiscriminator ;
37993793 }
38003794
38013795 CaptureInfo getCaptureInfo () const { return Captures; }
@@ -3824,11 +3818,18 @@ class AbstractClosureExpr : public DeclContext, public Expr {
38243818 // / optimization and therefore make it into e.g. stack traces.
38253819 // / Having their symbol names be stable across minor code changes is
38263820 // / therefore pretty useful for debugging.)
3827- unsigned getDiscriminator () const {
3821+ unsigned getDiscriminator () const ;
3822+
3823+ // / Retrieve the raw discriminator, which may not have been computed yet.
3824+ // /
3825+ // / Only use this for queries that are checking for (e.g.) reentrancy or
3826+ // / intentionally do not want to initiate verification.
3827+ unsigned getRawDiscriminator () const {
38283828 return Bits.AbstractClosureExpr .Discriminator ;
38293829 }
3830+
38303831 void setDiscriminator (unsigned discriminator) {
3831- assert (getDiscriminator () == InvalidDiscriminator);
3832+ assert (getRawDiscriminator () == InvalidDiscriminator);
38323833 assert (discriminator != InvalidDiscriminator);
38333834 Bits.AbstractClosureExpr .Discriminator = discriminator;
38343835 }
@@ -3987,9 +3988,9 @@ class ClosureExpr : public AbstractClosureExpr {
39873988 SourceRange bracketRange, VarDecl *capturedSelfDecl,
39883989 ParameterList *params, SourceLoc asyncLoc, SourceLoc throwsLoc,
39893990 SourceLoc arrowLoc, SourceLoc inLoc, TypeExpr *explicitResultType,
3990- unsigned discriminator, DeclContext *parent)
3991+ DeclContext *parent)
39913992 : AbstractClosureExpr(ExprKind::Closure, Type(), /* Implicit=*/ false ,
3992- discriminator, parent),
3993+ parent),
39933994 Attributes (attributes), BracketRange(bracketRange),
39943995 CapturedSelfDecl(capturedSelfDecl),
39953996 AsyncLoc(asyncLoc), ThrowsLoc(throwsLoc), ArrowLoc(arrowLoc),
@@ -4185,10 +4186,9 @@ class AutoClosureExpr : public AbstractClosureExpr {
41854186 AsyncLet = 3 ,
41864187 };
41874188
4188- AutoClosureExpr (Expr *Body, Type ResultTy, unsigned Discriminator,
4189- DeclContext *Parent)
4189+ AutoClosureExpr (Expr *Body, Type ResultTy, DeclContext *Parent)
41904190 : AbstractClosureExpr(ExprKind::AutoClosure, ResultTy, /* Implicit=*/ true ,
4191- Discriminator, Parent) {
4191+ Parent) {
41924192 if (Body != nullptr )
41934193 setBody (Body);
41944194
0 commit comments