forked from OSchip/llvm-project
Handle qualified constants that are directly folded by FE.
PR 7920. llvm-svn: 111820
This commit is contained in:
parent
620b68e883
commit
a8652674e0
|
@ -290,6 +290,9 @@ namespace llvm {
|
|||
|
||||
unsigned getEncoding() const { return getUnsignedField(9); }
|
||||
|
||||
/// Verify - Verify that a basic type descriptor is well formed.
|
||||
bool Verify() const;
|
||||
|
||||
/// print - print basic type.
|
||||
void print(raw_ostream &OS) const;
|
||||
|
||||
|
@ -313,6 +316,9 @@ namespace llvm {
|
|||
/// return base type size.
|
||||
uint64_t getOriginalTypeSize() const;
|
||||
|
||||
/// Verify - Verify that a derived type descriptor is well formed.
|
||||
bool Verify() const;
|
||||
|
||||
/// print - print derived type.
|
||||
void print(raw_ostream &OS) const;
|
||||
|
||||
|
|
|
@ -303,6 +303,16 @@ bool DIType::Verify() const {
|
|||
return true;
|
||||
}
|
||||
|
||||
/// Verify - Verify that a basic type descriptor is well formed.
|
||||
bool DIBasicType::Verify() const {
|
||||
return isBasicType();
|
||||
}
|
||||
|
||||
/// Verify - Verify that a derived type descriptor is well formed.
|
||||
bool DIDerivedType::Verify() const {
|
||||
return isDerivedType();
|
||||
}
|
||||
|
||||
/// Verify - Verify that a composite type descriptor is well formed.
|
||||
bool DICompositeType::Verify() const {
|
||||
if (!DbgNode)
|
||||
|
|
|
@ -1861,6 +1861,21 @@ CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
|
|||
return I->second;
|
||||
}
|
||||
|
||||
/// isUnsignedDIType - Return true if type encoding is unsigned.
|
||||
static bool isUnsignedDIType(DIType Ty) {
|
||||
DIDerivedType DTy(Ty);
|
||||
if (DTy.Verify())
|
||||
return isUnsignedDIType(DTy.getTypeDerivedFrom());
|
||||
|
||||
DIBasicType BTy(Ty);
|
||||
if (BTy.Verify()) {
|
||||
unsigned Encoding = BTy.getEncoding();
|
||||
if (Encoding == dwarf::DW_ATE_unsigned ||
|
||||
Encoding == dwarf::DW_ATE_unsigned_char)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// constructGlobalVariableDIE - Construct global variable DIE.
|
||||
void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
|
||||
|
@ -1930,17 +1945,12 @@ void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
|
|||
}
|
||||
} else if (Constant *C = GV.getConstant()) {
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) {
|
||||
DIBasicType BTy(GTy);
|
||||
if (BTy.Verify()) {
|
||||
unsigned Encoding = BTy.getEncoding();
|
||||
if (Encoding == dwarf::DW_ATE_unsigned ||
|
||||
Encoding == dwarf::DW_ATE_unsigned_char)
|
||||
if (isUnsignedDIType(GTy))
|
||||
addUInt(VariableDIE, dwarf::DW_AT_const_value, dwarf::DW_FORM_udata,
|
||||
CI->getZExtValue());
|
||||
else
|
||||
addSInt(VariableDIE, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
|
||||
CI->getSExtValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue