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 | 2fb68300a06750c7511fa2dd3ac67f332f5376ed (patch) | |
tree | 812090195531d57923dedcff957edc9592f89bb0 /llvm/lib/VMCore/AsmWriter.cpp | |
parent | e0c5497935bfbca456d3070b1d9ec66faecb9461 (diff) | |
download | bcm5719-llvm-2fb68300a06750c7511fa2dd3ac67f332f5376ed.tar.gz bcm5719-llvm-2fb68300a06750c7511fa2dd3ac67f332f5376ed.zip |
Minimally fix this code to not abort on mdnodes with integer data
wider than 64 bits.
llvm-svn: 103309
Diffstat (limited to 'llvm/lib/VMCore/AsmWriter.cpp')
-rw-r--r-- | llvm/lib/VMCore/AsmWriter.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp index 6c1aa5ed10c..fc845c14e88 100644 --- a/llvm/lib/VMCore/AsmWriter.cpp +++ b/llvm/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() { |