diff options
Diffstat (limited to 'lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 30ba85eca6..476c68a6c0 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/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; } } |