mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
[Attributes] Assert correct attribute constructor is used (NFCI)
Assert that enum/int/type attributes go through the constructor they are supposed to use. To make sure this can't happen via invalid bitcode, explicitly verify that the attribute kind if correct there.
This commit is contained in:
parent
633cb08d11
commit
4966784718
@ -80,6 +80,12 @@ public:
|
||||
|
||||
static const unsigned NumTypeAttrKinds = LastTypeAttr - FirstTypeAttr + 1;
|
||||
|
||||
static bool isEnumAttrKind(AttrKind Kind) {
|
||||
return Kind >= FirstEnumAttr && Kind <= LastEnumAttr;
|
||||
}
|
||||
static bool isIntAttrKind(AttrKind Kind) {
|
||||
return Kind >= FirstIntAttr && Kind <= LastIntAttr;
|
||||
}
|
||||
static bool isTypeAttrKind(AttrKind Kind) {
|
||||
return Kind >= FirstTypeAttr && Kind <= LastTypeAttr;
|
||||
}
|
||||
|
@ -1599,12 +1599,16 @@ Error BitcodeReader::parseAttributeGroupBlock() {
|
||||
B.addStructRetAttr(nullptr);
|
||||
else if (Kind == Attribute::InAlloca)
|
||||
B.addInAllocaAttr(nullptr);
|
||||
|
||||
B.addAttribute(Kind);
|
||||
else if (Attribute::isEnumAttrKind(Kind))
|
||||
B.addAttribute(Kind);
|
||||
else
|
||||
return error("Not an enum attribute");
|
||||
} else if (Record[i] == 1) { // Integer attribute
|
||||
Attribute::AttrKind Kind;
|
||||
if (Error Err = parseAttrKind(Record[++i], &Kind))
|
||||
return Err;
|
||||
if (!Attribute::isIntAttrKind(Kind))
|
||||
return error("Not an int attribute");
|
||||
if (Kind == Attribute::Alignment)
|
||||
B.addAlignmentAttr(Record[++i]);
|
||||
else if (Kind == Attribute::StackAlignment)
|
||||
|
@ -91,6 +91,11 @@ static std::pair<unsigned, unsigned> unpackVScaleRangeArgs(uint64_t Value) {
|
||||
|
||||
Attribute Attribute::get(LLVMContext &Context, Attribute::AttrKind Kind,
|
||||
uint64_t Val) {
|
||||
if (Val)
|
||||
assert(Attribute::isIntAttrKind(Kind) && "Not an int attribute");
|
||||
else
|
||||
assert(Attribute::isEnumAttrKind(Kind) && "Not an enum attribute");
|
||||
|
||||
LLVMContextImpl *pImpl = Context.pImpl;
|
||||
FoldingSetNodeID ID;
|
||||
ID.AddInteger(Kind);
|
||||
|
Loading…
Reference in New Issue
Block a user