From 3fb0621fafbb16ea157830b308c26a77ba0a04e3 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 12 Jul 2021 20:54:58 +0200 Subject: [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. --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') 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) -- cgit v1.1