Skip to content

Commit c4c5ccc

Browse files
Merge pull request #8438 from augusto2112/true-isUnsignedDIType
[DebugInfo] Add default true return for unexpected types in isUnsignedType
2 parents 471bfae + 5037ce9 commit c4c5ccc

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,10 @@ bool DebugHandlerBase::isUnsignedDIType(const DIType *Ty) {
189189
// FIXME: Enums without a fixed underlying type have unknown signedness
190190
// here, leading to incorrectly emitted constants.
191191
return false;
192-
}
193-
// (Pieces of) aggregate types that get hacked apart by SROA may be
194-
// represented by a constant. Encode them as unsigned bytes.
195-
return true;
192+
} else
193+
// (Pieces of) aggregate types that get hacked apart by SROA may be
194+
// represented by a constant. Encode them as unsigned bytes.
195+
return true;
196196
}
197197

198198
if (auto *DTy = dyn_cast<DIDerivedType>(Ty)) {
@@ -215,22 +215,26 @@ bool DebugHandlerBase::isUnsignedDIType(const DIType *Ty) {
215215
return isUnsignedDIType(DTy->getBaseType());
216216
}
217217

218-
auto *BTy = cast<DIBasicType>(Ty);
219-
unsigned Encoding = BTy->getEncoding();
220-
assert((Encoding == dwarf::DW_ATE_unsigned ||
221-
Encoding == dwarf::DW_ATE_unsigned_char ||
222-
Encoding == dwarf::DW_ATE_signed ||
223-
Encoding == dwarf::DW_ATE_signed_char ||
224-
Encoding == dwarf::DW_ATE_float || Encoding == dwarf::DW_ATE_UTF ||
225-
Encoding == dwarf::DW_ATE_boolean ||
226-
Encoding == dwarf::DW_ATE_complex_float ||
227-
(Ty->getTag() == dwarf::DW_TAG_unspecified_type &&
228-
Ty->getName() == "decltype(nullptr)")) &&
229-
"Unsupported encoding");
230-
return Encoding == dwarf::DW_ATE_unsigned ||
231-
Encoding == dwarf::DW_ATE_unsigned_char ||
232-
Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
233-
Ty->getTag() == dwarf::DW_TAG_unspecified_type;
218+
if (auto *BTy = dyn_cast<DIBasicType>(Ty)) {
219+
unsigned Encoding = BTy->getEncoding();
220+
assert((Encoding == dwarf::DW_ATE_unsigned ||
221+
Encoding == dwarf::DW_ATE_unsigned_char ||
222+
Encoding == dwarf::DW_ATE_signed ||
223+
Encoding == dwarf::DW_ATE_signed_char ||
224+
Encoding == dwarf::DW_ATE_float || Encoding == dwarf::DW_ATE_UTF ||
225+
Encoding == dwarf::DW_ATE_boolean ||
226+
Encoding == dwarf::DW_ATE_complex_float ||
227+
(Ty->getTag() == dwarf::DW_TAG_unspecified_type &&
228+
Ty->getName() == "decltype(nullptr)")) &&
229+
"Unsupported encoding");
230+
return Encoding == dwarf::DW_ATE_unsigned ||
231+
Encoding == dwarf::DW_ATE_unsigned_char ||
232+
Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
233+
Ty->getTag() == dwarf::DW_TAG_unspecified_type;
234+
}
235+
// FIXME: the signedness should come from the expression where the type is
236+
// used in, not the type itself.
237+
return true;
234238
}
235239

236240
static bool hasDebugInfo(const MachineModuleInfo *MMI,

0 commit comments

Comments
 (0)