@@ -47,10 +47,13 @@ static bool hasDefaultAlignment(swift::Type Ty) {
47
47
}
48
48
49
49
DebugTypeInfo DebugTypeInfo::getFromTypeInfo (swift::Type Ty, const TypeInfo &TI,
50
+ IRGenModule &IGM,
50
51
bool IsFragmentTypeInfo) {
51
52
Optional<Size::int_type> SizeInBits;
52
53
llvm::Type *StorageType = TI.getStorageType ();
53
- if (TI.isFixedSize ()) {
54
+ if (StorageType->isSized ())
55
+ SizeInBits = IGM.DataLayout .getTypeSizeInBits (StorageType);
56
+ else if (TI.isFixedSize ()) {
54
57
const FixedTypeInfo &FixTy = *cast<const FixedTypeInfo>(&TI);
55
58
Size::int_type Size = FixTy.getFixedSize ().getValue () * 8 ;
56
59
SizeInBits = Size;
@@ -63,6 +66,7 @@ DebugTypeInfo DebugTypeInfo::getFromTypeInfo(swift::Type Ty, const TypeInfo &TI,
63
66
64
67
DebugTypeInfo DebugTypeInfo::getLocalVariable (VarDecl *Decl, swift::Type Ty,
65
68
const TypeInfo &Info,
69
+ IRGenModule &IGM,
66
70
bool IsFragmentTypeInfo) {
67
71
68
72
auto DeclType = Decl->getInterfaceType ();
@@ -77,7 +81,7 @@ DebugTypeInfo DebugTypeInfo::getLocalVariable(VarDecl *Decl, swift::Type Ty,
77
81
// the type hasn't been mucked with by an optimization pass.
78
82
auto *Type = Sugared->isEqual (RealType) ? DeclType.getPointer ()
79
83
: RealType.getPointer ();
80
- return getFromTypeInfo (Type, Info, IsFragmentTypeInfo);
84
+ return getFromTypeInfo (Type, Info, IGM, IsFragmentTypeInfo);
81
85
}
82
86
83
87
DebugTypeInfo DebugTypeInfo::getGlobalMetadata (swift::Type Ty,
@@ -120,7 +124,7 @@ DebugTypeInfo DebugTypeInfo::getGlobal(SILGlobalVariable *GV,
120
124
Type = DeclType.getPointer ();
121
125
}
122
126
auto &TI = IGM.getTypeInfoForUnlowered (Type);
123
- DebugTypeInfo DbgTy = getFromTypeInfo (Type, TI, false );
127
+ DebugTypeInfo DbgTy = getFromTypeInfo (Type, TI, IGM, false );
124
128
assert (FragmentStorageType && " FragmentStorageType is a nullptr" );
125
129
assert (!DbgTy.isContextArchetype () &&
126
130
" type of global variable cannot be an archetype" );
@@ -163,7 +167,7 @@ DebugTypeInfo DebugTypeInfo::getObjCClass(ClassDecl *theClass,
163
167
DebugTypeInfo DebugTypeInfo::getErrorResult (swift::Type Ty,
164
168
IRGenModule &IGM) {
165
169
auto &TI = IGM.getTypeInfoForUnlowered (Ty);
166
- DebugTypeInfo DbgTy = getFromTypeInfo (Ty, TI, false );
170
+ DebugTypeInfo DbgTy = getFromTypeInfo (Ty, TI, IGM, false );
167
171
return DbgTy;
168
172
}
169
173
@@ -195,7 +199,8 @@ LLVM_DUMP_METHOD void DebugTypeInfo::dump() const {
195
199
if (SizeInBits)
196
200
llvm::errs () << " SizeInBits " << *SizeInBits << " " ;
197
201
llvm::errs () << " Alignment " << Align.getValue () << " ] " ;
198
- getType ()->dump (llvm::errs ());
202
+ if (auto *Type = getType ())
203
+ Type->dump (llvm::errs ());
199
204
200
205
if (FragmentStorageType) {
201
206
llvm::errs () << " FragmentStorageType=" ;
0 commit comments