Use a std::map so that we record the group ID.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174910 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bill Wendling
2013-02-11 22:32:29 +00:00
parent e3db2048ea
commit 04ef4be048
2 changed files with 8 additions and 7 deletions

View File

@@ -531,8 +531,7 @@ bool BitcodeReader::ParseAttributeGroupBlock() {
if (Record.size() < 3) if (Record.size() < 3)
return Error("Invalid ENTRY record"); 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. uint64_t Idx = Record[1]; // Index of the object this attribute refers to.
AttrBuilder B; AttrBuilder B;
@@ -545,27 +544,29 @@ bool BitcodeReader::ParseAttributeGroupBlock() {
else else
B.addStackAlignmentAttr(Record[++i]); B.addStackAlignmentAttr(Record[++i]);
} else { // String attribute } else { // String attribute
assert((Record[i] == 3 || Record[i] == 4) &&
"Invalid attribute group entry");
bool HasValue = (Record[i++] == 4); bool HasValue = (Record[i++] == 4);
SmallString<64> KindStr; SmallString<64> KindStr;
SmallString<64> ValStr; SmallString<64> ValStr;
while (Record[i] != 0 && i != e) while (Record[i] != 0 && i != e)
KindStr += Record[i++]; KindStr += Record[i++];
assert(Record[i] == 0 && "Kind string not terminated with 0"); assert(Record[i] == 0 && "Kind string not null terminated");
if (HasValue) { if (HasValue) {
// Has a value associated with it. // 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) while (Record[i] != 0 && i != e)
ValStr += Record[i++]; 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()); B.addAttribute(KindStr.str(), ValStr.str());
} }
} }
MAttributeGroups.push_back(AttributeSet::get(Context, Idx, B)); MAttributeGroups[GrpID] = AttributeSet::get(Context, Idx, B);
break; break;
} }
} }

View File

@@ -149,7 +149,7 @@ class BitcodeReader : public GVMaterializer {
std::vector<AttributeSet> MAttributes; std::vector<AttributeSet> MAttributes;
/// \brief The set of attribute groups. /// \brief The set of attribute groups.
std::vector<AttributeSet> MAttributeGroups; std::map<unsigned, AttributeSet> MAttributeGroups;
/// FunctionBBs - While parsing a function body, this is a list of the basic /// FunctionBBs - While parsing a function body, this is a list of the basic
/// blocks for the function. /// blocks for the function.