@@ -1158,12 +1158,10 @@ class IRGenSILFunction :
1158
1158
}
1159
1159
1160
1160
emitTypeMetadataRef (archetype);
1161
- } else if (auto packArchetype = dyn_cast<PackArchetypeType>(t)) {
1162
- emitTypeMetadataRef (packArchetype);
1163
- } else if (auto packtype = dyn_cast<SILPackType>(t)) {
1161
+ } else if (auto packType = dyn_cast<SILPackType>(t)) {
1164
1162
llvm::Value *Shape = emitPackShapeExpression (t);
1165
1163
emitPackCountDebugVariable (Shape);
1166
- } else if (auto packtype = dyn_cast<PackType>(t)) {
1164
+ } else if (auto packType = dyn_cast<PackType>(t)) {
1167
1165
llvm::Value *Shape = emitPackShapeExpression (t);
1168
1166
emitPackCountDebugVariable (Shape);
1169
1167
}
@@ -1212,8 +1210,13 @@ class IRGenSILFunction :
1212
1210
SILResultInfo ErrorInfo,
1213
1211
DebugValueInst *DbgValue);
1214
1212
void emitPoisonDebugValueInst (DebugValueInst *i);
1215
- void emitDebugInfoForAllocStack (AllocStackInst *i, const TypeInfo &type,
1216
- llvm::Value *addr);
1213
+ void emitDebugInfoBeforeAllocStack (AllocStackInst *i,
1214
+ const TypeInfo &type,
1215
+ DebugTypeInfo &DbgTy);
1216
+ void emitDebugInfoAfterAllocStack (AllocStackInst *i,
1217
+ const TypeInfo &type,
1218
+ const DebugTypeInfo &DbgTy,
1219
+ llvm::Value *addr);
1217
1220
void visitAllocStackInst (AllocStackInst *i);
1218
1221
void visitAllocPackInst (AllocPackInst *i);
1219
1222
void visitAllocPackMetadataInst (AllocPackMetadataInst *i);
@@ -6410,14 +6413,58 @@ void IRGenSILFunction::visitDestroyNotEscapedClosureInst(
6410
6413
setLoweredExplosion (i, out);
6411
6414
}
6412
6415
6413
- void IRGenSILFunction::emitDebugInfoForAllocStack (AllocStackInst *i,
6414
- const TypeInfo &type,
6415
- llvm::Value *addr ) {
6416
+ void IRGenSILFunction::emitDebugInfoBeforeAllocStack (AllocStackInst *i,
6417
+ const TypeInfo &type,
6418
+ DebugTypeInfo &DbgTy ) {
6416
6419
auto VarInfo = i->getVarInfo ();
6417
6420
if (!VarInfo)
6418
6421
return ;
6419
6422
6423
+ auto DS = i->getDebugScope ();
6424
+ if (!DS)
6425
+ return ;
6426
+
6427
+ if (i->getDebugScope ()->getInlinedFunction ()->isTransparent ())
6428
+ return ;
6429
+
6430
+ VarDecl *Decl = i->getDecl ();
6431
+
6432
+ SILType SILTy;
6433
+ if (auto MaybeSILTy = VarInfo->Type ) {
6434
+ // If there is auxiliary type info, use it
6435
+ SILTy = *MaybeSILTy;
6436
+ } else {
6437
+ SILTy = i->getType ();
6438
+ }
6439
+ auto RealType = SILTy.getASTType ();
6440
+ if (Decl) {
6441
+ DbgTy = DebugTypeInfo::getLocalVariable (Decl, RealType, type, IGM);
6442
+ } else if (i->getFunction ()->isBare () && !SILTy.hasArchetype () &&
6443
+ !VarInfo->Name .empty ()) {
6444
+ DbgTy = DebugTypeInfo::getFromTypeInfo (RealType, getTypeInfo (SILTy), IGM);
6445
+ } else
6446
+ return ;
6447
+
6448
+ bindArchetypes (DbgTy.getType ());
6449
+ }
6450
+
6451
+ void IRGenSILFunction::emitDebugInfoAfterAllocStack (AllocStackInst *i,
6452
+ const TypeInfo &type,
6453
+ const DebugTypeInfo &DbgTy,
6454
+ llvm::Value *addr) {
6455
+ auto VarInfo = i->getVarInfo ();
6456
+ if (!VarInfo)
6457
+ return ;
6458
+
6459
+ auto DS = i->getDebugScope ();
6460
+ if (!DS)
6461
+ return ;
6462
+
6463
+ if (i->getDebugScope ()->getInlinedFunction ()->isTransparent ())
6464
+ return ;
6465
+
6420
6466
VarDecl *Decl = i->getDecl ();
6467
+
6421
6468
// Describe the underlying alloca. This way an llvm.dbg.declare intrinsic
6422
6469
// is used, which is valid for the entire lifetime of the alloca.
6423
6470
if (auto *BitCast = dyn_cast<llvm::BitCastInst>(addr)) {
@@ -6434,13 +6481,6 @@ void IRGenSILFunction::emitDebugInfoForAllocStack(AllocStackInst *i,
6434
6481
(void )isTaskAlloc;
6435
6482
}
6436
6483
}
6437
-
6438
- auto DS = i->getDebugScope ();
6439
- if (!DS)
6440
- return ;
6441
-
6442
- if (i->getDebugScope ()->getInlinedFunction ()->isTransparent ())
6443
- return ;
6444
6484
6445
6485
bool IsAnonymous = false ;
6446
6486
VarInfo->Name = getVarName (i, IsAnonymous);
@@ -6475,25 +6515,15 @@ void IRGenSILFunction::emitDebugInfoForAllocStack(AllocStackInst *i,
6475
6515
}
6476
6516
}
6477
6517
6478
- SILType SILTy;
6479
- if (auto MaybeSILTy = VarInfo->Type ) {
6480
- // If there is auxiliary type info, use it
6481
- SILTy = *MaybeSILTy;
6482
- } else {
6483
- SILTy = i->getType ();
6484
- }
6485
- auto RealType = SILTy.getASTType ();
6486
- DebugTypeInfo DbgTy;
6487
- if (Decl) {
6488
- DbgTy = DebugTypeInfo::getLocalVariable (Decl, RealType, type, IGM);
6489
- } else if (i->getFunction ()->isBare () && !SILTy.hasArchetype () &&
6490
- !VarInfo->Name .empty ()) {
6491
- DbgTy = DebugTypeInfo::getFromTypeInfo (RealType, getTypeInfo (SILTy), IGM);
6492
- } else
6493
- return ;
6518
+ if (DbgTy.getType () && IGM.DebugInfo ) {
6519
+ SILType SILTy;
6520
+ if (auto MaybeSILTy = VarInfo->Type ) {
6521
+ // If there is auxiliary type info, use it
6522
+ SILTy = *MaybeSILTy;
6523
+ } else {
6524
+ SILTy = i->getType ();
6525
+ }
6494
6526
6495
- bindArchetypes (DbgTy.getType ());
6496
- if (IGM.DebugInfo ) {
6497
6527
emitDebugVariableDeclaration (
6498
6528
addr, DbgTy, SILTy, DS, i->getLoc (), *VarInfo, Indirection,
6499
6529
AddrDbgInstrKind (i->usesMoveableValueDebugInfo ()));
@@ -6511,6 +6541,9 @@ void IRGenSILFunction::visitAllocStackInst(swift::AllocStackInst *i) {
6511
6541
dbgname = getVarName (i, IsAnonymous);
6512
6542
# endif
6513
6543
6544
+ DebugTypeInfo DbgTy;
6545
+ emitDebugInfoBeforeAllocStack (i, type, DbgTy);
6546
+
6514
6547
auto stackAddr = type.allocateStack (*this , i->getElementType (), dbgname);
6515
6548
setLoweredStackAddress (i, stackAddr);
6516
6549
Address addr = stackAddr.getAddress ();
@@ -6525,7 +6558,7 @@ void IRGenSILFunction::visitAllocStackInst(swift::AllocStackInst *i) {
6525
6558
Ty->getStructOrBoundGenericStruct ())
6526
6559
zeroInit (dyn_cast<llvm::AllocaInst>(addr.getAddress ()));
6527
6560
}
6528
- emitDebugInfoForAllocStack (i, type, addr.getAddress ());
6561
+ emitDebugInfoAfterAllocStack (i, type, DbgTy , addr.getAddress ());
6529
6562
}
6530
6563
6531
6564
void IRGenSILFunction::visitAllocPackInst (swift::AllocPackInst *i) {
0 commit comments