@@ -529,10 +529,10 @@ namespace {
529
529
}
530
530
531
531
void assign (IRGenFunction &IGF, Explosion &e, Address addr,
532
- bool isOutlined) const override {
532
+ bool isOutlined, SILType T ) const override {
533
533
if (!getLoadableSingleton ()) return ;
534
534
getLoadableSingleton ()->assign (IGF, e, getSingletonAddress (IGF, addr),
535
- isOutlined);
535
+ isOutlined, getSingletonType (IGF. IGM , T) );
536
536
}
537
537
538
538
void assignWithCopy (IRGenFunction &IGF, Address dest, Address src,
@@ -623,9 +623,11 @@ namespace {
623
623
}
624
624
625
625
void consume (IRGenFunction &IGF, Explosion &src,
626
- Atomicity atomicity) const override {
626
+ Atomicity atomicity,
627
+ SILType T) const override {
627
628
if (getLoadableSingleton ())
628
- getLoadableSingleton ()->consume (IGF, src, atomicity);
629
+ getLoadableSingleton ()->consume (IGF, src, atomicity,
630
+ getSingletonType (IGF.IGM , T));
629
631
}
630
632
631
633
void fixLifetime (IRGenFunction &IGF, Explosion &src) const override {
@@ -1495,14 +1497,14 @@ namespace {
1495
1497
}
1496
1498
1497
1499
void assign (IRGenFunction &IGF, Explosion &e, Address addr,
1498
- bool isOutlined) const override {
1500
+ bool isOutlined, SILType T ) const override {
1499
1501
assert (TIK >= Loadable);
1500
1502
Explosion old;
1501
1503
if (!isPOD (ResilienceExpansion::Maximal))
1502
1504
loadAsTake (IGF, addr, old);
1503
1505
initialize (IGF, e, addr, isOutlined);
1504
1506
if (!isPOD (ResilienceExpansion::Maximal))
1505
- consume (IGF, old, IGF.getDefaultAtomicity ());
1507
+ consume (IGF, old, IGF.getDefaultAtomicity (), T );
1506
1508
}
1507
1509
1508
1510
void initialize (IRGenFunction &IGF, Explosion &e, Address addr,
@@ -1780,7 +1782,8 @@ namespace {
1780
1782
Explosion payloadValue;
1781
1783
auto &loadableTI = getLoadablePayloadTypeInfo ();
1782
1784
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));
1784
1787
}
1785
1788
1786
1789
IGF.Builder .CreateBr (endBB);
@@ -2640,7 +2643,7 @@ namespace {
2640
2643
}
2641
2644
2642
2645
void consume (IRGenFunction &IGF, Explosion &src,
2643
- Atomicity atomicity) const override {
2646
+ Atomicity atomicity, SILType T ) const override {
2644
2647
assert (TIK >= Loadable);
2645
2648
2646
2649
switch (CopyDestroyKind) {
@@ -2666,7 +2669,8 @@ namespace {
2666
2669
Explosion payloadValue;
2667
2670
auto &loadableTI = getLoadablePayloadTypeInfo ();
2668
2671
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));
2670
2674
}
2671
2675
2672
2676
IGF.Builder .CreateBr (endBB);
@@ -2699,7 +2703,8 @@ namespace {
2699
2703
// operation.
2700
2704
Explosion srcAsPayload;
2701
2705
unpackIntoPayloadExplosion (IGF, src, srcAsPayload);
2702
- payloadTI.consume (IGF, srcAsPayload, atomicity);
2706
+ payloadTI.consume (IGF, srcAsPayload, atomicity,
2707
+ getPayloadType (IGF.IGM , T));
2703
2708
return ;
2704
2709
}
2705
2710
}
@@ -3607,7 +3612,10 @@ namespace {
3607
3612
Explosion value;
3608
3613
projectPayloadValue (IGF, parts.payload , tagIndex, lti, value);
3609
3614
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 ()));
3611
3619
});
3612
3620
3613
3621
IGF.Builder .CreateRetVoid ();
@@ -4636,7 +4644,7 @@ namespace {
4636
4644
}
4637
4645
4638
4646
void consume (IRGenFunction &IGF, Explosion &src,
4639
- Atomicity atomicity) const override {
4647
+ Atomicity atomicity, SILType T ) const override {
4640
4648
assert (TIK >= Loadable);
4641
4649
switch (CopyDestroyKind) {
4642
4650
case POD:
@@ -4658,7 +4666,10 @@ namespace {
4658
4666
Explosion value;
4659
4667
projectPayloadValue (IGF, parts.payload , tagIndex, lti, value);
4660
4668
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 ()));
4662
4673
});
4663
4674
return ;
4664
4675
}
@@ -4753,7 +4764,7 @@ namespace {
4753
4764
4754
4765
loadAsTake (IGF, dest, tmpOld);
4755
4766
initialize (IGF, tmpSrc, dest, isOutlined);
4756
- consume (IGF, tmpOld, IGF.getDefaultAtomicity ());
4767
+ consume (IGF, tmpOld, IGF.getDefaultAtomicity (), T );
4757
4768
return ;
4758
4769
}
4759
4770
@@ -4998,7 +5009,7 @@ namespace {
4998
5009
if (TI->isLoadable ()) {
4999
5010
Explosion tmp;
5000
5011
loadAsTake (IGF, addr, tmp);
5001
- consume (IGF, tmp, IGF.getDefaultAtomicity ());
5012
+ consume (IGF, tmp, IGF.getDefaultAtomicity (), T );
5002
5013
return ;
5003
5014
}
5004
5015
@@ -5892,7 +5903,7 @@ namespace {
5892
5903
}
5893
5904
5894
5905
void assign (IRGenFunction &IGF, Explosion &e, Address addr,
5895
- bool isOutlined) const override {
5906
+ bool isOutlined, SILType T ) const override {
5896
5907
llvm_unreachable (" resilient enums are always indirect" );
5897
5908
}
5898
5909
@@ -5912,7 +5923,7 @@ namespace {
5912
5923
}
5913
5924
5914
5925
void consume (IRGenFunction &IGF, Explosion &src,
5915
- Atomicity atomicity) const override {
5926
+ Atomicity atomicity, SILType T ) const override {
5916
5927
llvm_unreachable (" resilient enums are always indirect" );
5917
5928
}
5918
5929
@@ -6337,8 +6348,8 @@ namespace {
6337
6348
return Strategy.loadAsTake (IGF, addr, e);
6338
6349
}
6339
6350
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 );
6342
6353
}
6343
6354
void initialize (IRGenFunction &IGF, Explosion &e, Address addr,
6344
6355
bool isOutlined) const override {
@@ -6353,8 +6364,8 @@ namespace {
6353
6364
return Strategy.copy (IGF, src, dest, atomicity);
6354
6365
}
6355
6366
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 );
6358
6369
}
6359
6370
void fixLifetime (IRGenFunction &IGF, Explosion &src) const override {
6360
6371
return Strategy.fixLifetime (IGF, src);
0 commit comments