@@ -529,10 +529,10 @@ namespace {
529529 }
530530
531531 void assign (IRGenFunction &IGF, Explosion &e, Address addr,
532- bool isOutlined) const override {
532+ bool isOutlined, SILType T ) const override {
533533 if (!getLoadableSingleton ()) return ;
534534 getLoadableSingleton ()->assign (IGF, e, getSingletonAddress (IGF, addr),
535- isOutlined);
535+ isOutlined, getSingletonType (IGF. IGM , T) );
536536 }
537537
538538 void assignWithCopy (IRGenFunction &IGF, Address dest, Address src,
@@ -623,9 +623,11 @@ namespace {
623623 }
624624
625625 void consume (IRGenFunction &IGF, Explosion &src,
626- Atomicity atomicity) const override {
626+ Atomicity atomicity,
627+ SILType T) const override {
627628 if (getLoadableSingleton ())
628- getLoadableSingleton ()->consume (IGF, src, atomicity);
629+ getLoadableSingleton ()->consume (IGF, src, atomicity,
630+ getSingletonType (IGF.IGM , T));
629631 }
630632
631633 void fixLifetime (IRGenFunction &IGF, Explosion &src) const override {
@@ -1495,14 +1497,14 @@ namespace {
14951497 }
14961498
14971499 void assign (IRGenFunction &IGF, Explosion &e, Address addr,
1498- bool isOutlined) const override {
1500+ bool isOutlined, SILType T ) const override {
14991501 assert (TIK >= Loadable);
15001502 Explosion old;
15011503 if (!isPOD (ResilienceExpansion::Maximal))
15021504 loadAsTake (IGF, addr, old);
15031505 initialize (IGF, e, addr, isOutlined);
15041506 if (!isPOD (ResilienceExpansion::Maximal))
1505- consume (IGF, old, IGF.getDefaultAtomicity ());
1507+ consume (IGF, old, IGF.getDefaultAtomicity (), T );
15061508 }
15071509
15081510 void initialize (IRGenFunction &IGF, Explosion &e, Address addr,
@@ -1780,7 +1782,8 @@ namespace {
17801782 Explosion payloadValue;
17811783 auto &loadableTI = getLoadablePayloadTypeInfo ();
17821784 loadableTI.unpackFromEnumPayload (IGF, payload, payloadValue, 0 );
1783- loadableTI.consume (IGF, payloadValue, IGF.getDefaultAtomicity ());
1785+ loadableTI.consume (IGF, payloadValue, IGF.getDefaultAtomicity (),
1786+ getPayloadType (IGF.IGM , theEnumType));
17841787 }
17851788
17861789 IGF.Builder .CreateBr (endBB);
@@ -2640,7 +2643,7 @@ namespace {
26402643 }
26412644
26422645 void consume (IRGenFunction &IGF, Explosion &src,
2643- Atomicity atomicity) const override {
2646+ Atomicity atomicity, SILType T ) const override {
26442647 assert (TIK >= Loadable);
26452648
26462649 switch (CopyDestroyKind) {
@@ -2666,7 +2669,8 @@ namespace {
26662669 Explosion payloadValue;
26672670 auto &loadableTI = getLoadablePayloadTypeInfo ();
26682671 loadableTI.unpackFromEnumPayload (IGF, payload, payloadValue, 0 );
2669- loadableTI.consume (IGF, payloadValue, IGF.getDefaultAtomicity ());
2672+ loadableTI.consume (IGF, payloadValue, IGF.getDefaultAtomicity (),
2673+ getPayloadType (IGF.IGM , T));
26702674 }
26712675
26722676 IGF.Builder .CreateBr (endBB);
@@ -2699,7 +2703,8 @@ namespace {
26992703 // operation.
27002704 Explosion srcAsPayload;
27012705 unpackIntoPayloadExplosion (IGF, src, srcAsPayload);
2702- payloadTI.consume (IGF, srcAsPayload, atomicity);
2706+ payloadTI.consume (IGF, srcAsPayload, atomicity,
2707+ getPayloadType (IGF.IGM , T));
27032708 return ;
27042709 }
27052710 }
@@ -3607,7 +3612,10 @@ namespace {
36073612 Explosion value;
36083613 projectPayloadValue (IGF, parts.payload , tagIndex, lti, value);
36093614
3610- lti.consume (IGF, value, IGF.getDefaultAtomicity ());
3615+ lti.consume (IGF, value, IGF.getDefaultAtomicity (),
3616+ type.getEnumElementType (elt.decl ,
3617+ IGM.getSILTypes (),
3618+ IGM.getMaximalTypeExpansionContext ()));
36113619 });
36123620
36133621 IGF.Builder .CreateRetVoid ();
@@ -4636,7 +4644,7 @@ namespace {
46364644 }
46374645
46384646 void consume (IRGenFunction &IGF, Explosion &src,
4639- Atomicity atomicity) const override {
4647+ Atomicity atomicity, SILType T ) const override {
46404648 assert (TIK >= Loadable);
46414649 switch (CopyDestroyKind) {
46424650 case POD:
@@ -4658,7 +4666,10 @@ namespace {
46584666 Explosion value;
46594667 projectPayloadValue (IGF, parts.payload , tagIndex, lti, value);
46604668
4661- lti.consume (IGF, value, IGF.getDefaultAtomicity ());
4669+ lti.consume (IGF, value, IGF.getDefaultAtomicity (),
4670+ T.getEnumElementType (elt.decl ,
4671+ IGF.IGM .getSILTypes (),
4672+ IGF.IGM .getMaximalTypeExpansionContext ()));
46624673 });
46634674 return ;
46644675 }
@@ -4753,7 +4764,7 @@ namespace {
47534764
47544765 loadAsTake (IGF, dest, tmpOld);
47554766 initialize (IGF, tmpSrc, dest, isOutlined);
4756- consume (IGF, tmpOld, IGF.getDefaultAtomicity ());
4767+ consume (IGF, tmpOld, IGF.getDefaultAtomicity (), T );
47574768 return ;
47584769 }
47594770
@@ -4998,7 +5009,7 @@ namespace {
49985009 if (TI->isLoadable ()) {
49995010 Explosion tmp;
50005011 loadAsTake (IGF, addr, tmp);
5001- consume (IGF, tmp, IGF.getDefaultAtomicity ());
5012+ consume (IGF, tmp, IGF.getDefaultAtomicity (), T );
50025013 return ;
50035014 }
50045015
@@ -5892,7 +5903,7 @@ namespace {
58925903 }
58935904
58945905 void assign (IRGenFunction &IGF, Explosion &e, Address addr,
5895- bool isOutlined) const override {
5906+ bool isOutlined, SILType T ) const override {
58965907 llvm_unreachable (" resilient enums are always indirect" );
58975908 }
58985909
@@ -5912,7 +5923,7 @@ namespace {
59125923 }
59135924
59145925 void consume (IRGenFunction &IGF, Explosion &src,
5915- Atomicity atomicity) const override {
5926+ Atomicity atomicity, SILType T ) const override {
59165927 llvm_unreachable (" resilient enums are always indirect" );
59175928 }
59185929
@@ -6337,8 +6348,8 @@ namespace {
63376348 return Strategy.loadAsTake (IGF, addr, e);
63386349 }
63396350 void assign (IRGenFunction &IGF, Explosion &e, Address addr,
6340- bool isOutlined) const override {
6341- return Strategy.assign (IGF, e, addr, isOutlined);
6351+ bool isOutlined, SILType T ) const override {
6352+ return Strategy.assign (IGF, e, addr, isOutlined, T );
63426353 }
63436354 void initialize (IRGenFunction &IGF, Explosion &e, Address addr,
63446355 bool isOutlined) const override {
@@ -6353,8 +6364,8 @@ namespace {
63536364 return Strategy.copy (IGF, src, dest, atomicity);
63546365 }
63556366 void consume (IRGenFunction &IGF, Explosion &src,
6356- Atomicity atomicity) const override {
6357- return Strategy.consume (IGF, src, atomicity);
6367+ Atomicity atomicity, SILType T ) const override {
6368+ return Strategy.consume (IGF, src, atomicity, T );
63586369 }
63596370 void fixLifetime (IRGenFunction &IGF, Explosion &src) const override {
63606371 return Strategy.fixLifetime (IGF, src);
0 commit comments