diff options
author | Dan Gohman <gohman@apple.com> | 2010-05-07 22:15:24 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-05-07 22:15:24 +0000 |
commit | 66797ff2e1433c1005f911c954a2953238d04554 (patch) | |
tree | d2806459bb44df01b98e5dc24ae4f5582877711b /lib/VMCore | |
parent | 02f0dbd97a9bc01528aa12c2f260d928683ab411 (diff) | |
download | external_llvm-66797ff2e1433c1005f911c954a2953238d04554.zip external_llvm-66797ff2e1433c1005f911c954a2953238d04554.tar.gz external_llvm-66797ff2e1433c1005f911c954a2953238d04554.tar.bz2 |
Minimally fix this code to not abort on mdnodes with integer data
wider than 64 bits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103309 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 6c1aa5e..fc845c1 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -2024,9 +2024,9 @@ static void WriteMDNodeComment(const MDNode *Node, return; ConstantInt *CI = dyn_cast_or_null<ConstantInt>(Node->getOperand(0)); if (!CI) return; - unsigned Val = CI->getZExtValue(); - unsigned Tag = Val & ~LLVMDebugVersionMask; - if (Val < LLVMDebugVersion) + APInt Val = CI->getValue(); + APInt Tag = Val & ~APInt(Val.getBitWidth(), LLVMDebugVersionMask); + if (Val.ult(LLVMDebugVersion)) return; Out.PadToColumn(50); @@ -2040,8 +2040,10 @@ static void WriteMDNodeComment(const MDNode *Node, Out << "; [ DW_TAG_vector_type ]"; else if (Tag == dwarf::DW_TAG_user_base) Out << "; [ DW_TAG_user_base ]"; - else if (const char *TagName = dwarf::TagString(Tag)) - Out << "; [ " << TagName << " ]"; + else if (Tag.isIntN(32)) { + if (const char *TagName = dwarf::TagString(Tag.getZExtValue())) + Out << "; [ " << TagName << " ]"; + } } void AssemblyWriter::writeAllMDNodes() { |