aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-07-12 20:54:58 +0200
committerNikita Popov <nikita.ppv@gmail.com>2021-07-12 21:11:59 +0200
commit3fb0621fafbb16ea157830b308c26a77ba0a04e3 (patch)
treec482caf782190ca4d6aebc45ebc77f9a84f9029b /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parentb4a6fa12d1fdcc9a446432218d9990a6c6797c83 (diff)
downloadllvm-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.cpp8
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)