From: Bill Wendling Date: Mon, 11 Feb 2013 22:32:29 +0000 (+0000) Subject: Use a std::map so that we record the group ID. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e46707e4c746d99df4ba39de301121bee489bcb3;p=platform%2Fupstream%2Fllvm.git Use a std::map so that we record the group ID. llvm-svn: 174910 --- diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 30ba85e..476c68a 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -531,8 +531,7 @@ bool BitcodeReader::ParseAttributeGroupBlock() { if (Record.size() < 3) return Error("Invalid ENTRY record"); - // FIXME: Record[0] is the 'group ID'. What should we do with it here? - + uint64_t GrpID = Record[0]; uint64_t Idx = Record[1]; // Index of the object this attribute refers to. AttrBuilder B; @@ -545,27 +544,29 @@ bool BitcodeReader::ParseAttributeGroupBlock() { else B.addStackAlignmentAttr(Record[++i]); } else { // String attribute + assert((Record[i] == 3 || Record[i] == 4) && + "Invalid attribute group entry"); bool HasValue = (Record[i++] == 4); SmallString<64> KindStr; SmallString<64> ValStr; while (Record[i] != 0 && i != e) KindStr += Record[i++]; - assert(Record[i] == 0 && "Kind string not terminated with 0"); + assert(Record[i] == 0 && "Kind string not null terminated"); if (HasValue) { // Has a value associated with it. - ++i; // Skip the '0' that terminates the kind string. + ++i; // Skip the '0' that terminates the "kind" string. while (Record[i] != 0 && i != e) ValStr += Record[i++]; - assert(Record[i] == 0 && "Value string not terminated with 0"); + assert(Record[i] == 0 && "Value string not null terminated"); } B.addAttribute(KindStr.str(), ValStr.str()); } } - MAttributeGroups.push_back(AttributeSet::get(Context, Idx, B)); + MAttributeGroups[GrpID] = AttributeSet::get(Context, Idx, B); break; } } diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.h b/llvm/lib/Bitcode/Reader/BitcodeReader.h index 8d36e67..28674eb 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.h +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.h @@ -149,7 +149,7 @@ class BitcodeReader : public GVMaterializer { std::vector MAttributes; /// \brief The set of attribute groups. - std::vector MAttributeGroups; + std::map MAttributeGroups; /// FunctionBBs - While parsing a function body, this is a list of the basic /// blocks for the function.