diff options
author | Devang Patel <dpatel@apple.com> | 2011-05-27 18:15:52 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-05-27 18:15:52 +0000 |
commit | f1d04706fbaceaa58809e16a7b822ac217944578 (patch) | |
tree | 95edd2b81550aa0c834ff92c5dc85cc3b6f2c19e | |
parent | 3a8d9625b02d1118b884e18c15ef3db8ee54f973 (diff) | |
download | bcm5719-llvm-f1d04706fbaceaa58809e16a7b822ac217944578.tar.gz bcm5719-llvm-f1d04706fbaceaa58809e16a7b822ac217944578.zip |
Handle signed types gracefully.
This fixes regressions reported by buildbots as a fallout of r132193.
llvm-svn: 132197
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index ec6954e302a..e573965ebe7 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -444,16 +444,28 @@ bool CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO, DIType Ty) { assert (MO.isImm() && "Invalid machine operand!"); DIEBlock *Block = new (DIEValueAllocator) DIEBlock(); - unsigned Imm = MO.getImm(); unsigned form = dwarf::DW_FORM_udata; - switch (Ty.getSizeInBits()) { - case 8: form = dwarf::DW_FORM_data1; break; - case 16: form = dwarf::DW_FORM_data2; break; - case 32: form = dwarf::DW_FORM_data4; break; - case 64: form = dwarf::DW_FORM_data8; break; - default: break; - } - addUInt(Block, 0, form, Imm); + DIBasicType BTy(Ty); + if (BTy.Verify()) { + unsigned Encoding = BTy.getEncoding(); + if (Encoding == dwarf::DW_ATE_signed || + Encoding == dwarf::DW_ATE_signed_char) { + form = dwarf::DW_FORM_sdata; + addSInt(Block, 0, dwarf::DW_FORM_sdata, MO.getImm()); + } else { + switch (Ty.getSizeInBits()) { + case 8: form = dwarf::DW_FORM_data1; break; + case 16: form = dwarf::DW_FORM_data2; break; + case 32: form = dwarf::DW_FORM_data4; break; + case 64: form = dwarf::DW_FORM_data8; break; + default: break; + } + addUInt(Block, 0, form, MO.getImm()); + } + } else + //if this is not basic type then just use _udata. + addUInt(Block, 0, form, MO.getImm()); + addBlock(Die, dwarf::DW_AT_const_value, 0, Block); return true; } |