@@ -215,22 +215,26 @@ bool DebugHandlerBase::isUnsignedDIType(const DIType *Ty) {
215
215
return isUnsignedDIType (DTy->getBaseType ());
216
216
}
217
217
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 ;
234
238
}
235
239
236
240
static bool hasDebugInfo (const MachineModuleInfo *MMI,
0 commit comments