summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2010-08-23 18:25:56 +0000
committerDevang Patel <dpatel@apple.com>2010-08-23 18:25:56 +0000
commita8652674e0c528f6ff6fac98344c378603bf4bb0 (patch)
tree81f088b409f24dd7adb27a8baa0954ecb11e63c0 /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
parent620b68e8831890176b82df611117622728065233 (diff)
downloadbcm5719-llvm-a8652674e0c528f6ff6fac98344c378603bf4bb0.tar.gz
bcm5719-llvm-a8652674e0c528f6ff6fac98344c378603bf4bb0.zip
Handle qualified constants that are directly folded by FE.
PR 7920. llvm-svn: 111820
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index e236c1b227e..408549aa703 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -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;
OpenPOWER on IntegriCloud