diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2021-07-12 20:54:58 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-07-12 21:11:59 +0200 |
commit | 3fb0621fafbb16ea157830b308c26a77ba0a04e3 (patch) | |
tree | c482caf782190ca4d6aebc45ebc77f9a84f9029b /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
parent | b4a6fa12d1fdcc9a446432218d9990a6c6797c83 (diff) | |
download | llvm-3fb0621fafbb16ea157830b308c26a77ba0a04e3.zip llvm-3fb0621fafbb16ea157830b308c26a77ba0a04e3.tar.gz llvm-3fb0621fafbb16ea157830b308c26a77ba0a04e3.tar.bz2 |
[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.
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 585527f..c9c1cef3 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -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) |