From: Reid Kleckner Date: Tue, 12 Nov 2013 01:31:00 +0000 (+0000) Subject: Extract a bc attr parsing helper that returns Attribute::None on error X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=161dd53f1ef74b31b5afa0aeb55619ae924a6877;p=oota-llvm.git Extract a bc attr parsing helper that returns Attribute::None on error The parsing method still returns llvm::error_code for consistency with other parsing methods. Minor cleanup, no functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194437 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 4e4b3285ac3..d25b33e9ab7 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -508,125 +508,96 @@ error_code BitcodeReader::ParseAttributeBlock() { } } -error_code BitcodeReader::ParseAttrKind(uint64_t Code, - Attribute::AttrKind *Kind) { +// Returns Attribute::None on unrecognized codes. +static Attribute::AttrKind GetAttrFromCode(uint64_t Code) { switch (Code) { + default: + return Attribute::None; case bitc::ATTR_KIND_ALIGNMENT: - *Kind = Attribute::Alignment; - return error_code::success(); + return Attribute::Alignment; case bitc::ATTR_KIND_ALWAYS_INLINE: - *Kind = Attribute::AlwaysInline; - return error_code::success(); + return Attribute::AlwaysInline; case bitc::ATTR_KIND_BUILTIN: - *Kind = Attribute::Builtin; - return error_code::success(); + return Attribute::Builtin; case bitc::ATTR_KIND_BY_VAL: - *Kind = Attribute::ByVal; - return error_code::success(); + return Attribute::ByVal; case bitc::ATTR_KIND_COLD: - *Kind = Attribute::Cold; - return error_code::success(); + return Attribute::Cold; case bitc::ATTR_KIND_INLINE_HINT: - *Kind = Attribute::InlineHint; - return error_code::success(); + return Attribute::InlineHint; case bitc::ATTR_KIND_IN_REG: - *Kind = Attribute::InReg; - return error_code::success(); + return Attribute::InReg; case bitc::ATTR_KIND_MIN_SIZE: - *Kind = Attribute::MinSize; - return error_code::success(); + return Attribute::MinSize; case bitc::ATTR_KIND_NAKED: - *Kind = Attribute::Naked; - return error_code::success(); + return Attribute::Naked; case bitc::ATTR_KIND_NEST: - *Kind = Attribute::Nest; - return error_code::success(); + return Attribute::Nest; case bitc::ATTR_KIND_NO_ALIAS: - *Kind = Attribute::NoAlias; - return error_code::success(); + return Attribute::NoAlias; case bitc::ATTR_KIND_NO_BUILTIN: - *Kind = Attribute::NoBuiltin; - return error_code::success(); + return Attribute::NoBuiltin; case bitc::ATTR_KIND_NO_CAPTURE: - *Kind = Attribute::NoCapture; - return error_code::success(); + return Attribute::NoCapture; case bitc::ATTR_KIND_NO_DUPLICATE: - *Kind = Attribute::NoDuplicate; - return error_code::success(); + return Attribute::NoDuplicate; case bitc::ATTR_KIND_NO_IMPLICIT_FLOAT: - *Kind = Attribute::NoImplicitFloat; - return error_code::success(); + return Attribute::NoImplicitFloat; case bitc::ATTR_KIND_NO_INLINE: - *Kind = Attribute::NoInline; - return error_code::success(); + return Attribute::NoInline; case bitc::ATTR_KIND_NON_LAZY_BIND: - *Kind = Attribute::NonLazyBind; - return error_code::success(); + return Attribute::NonLazyBind; case bitc::ATTR_KIND_NO_RED_ZONE: - *Kind = Attribute::NoRedZone; - return error_code::success(); + return Attribute::NoRedZone; case bitc::ATTR_KIND_NO_RETURN: - *Kind = Attribute::NoReturn; - return error_code::success(); + return Attribute::NoReturn; case bitc::ATTR_KIND_NO_UNWIND: - *Kind = Attribute::NoUnwind; - return error_code::success(); + return Attribute::NoUnwind; case bitc::ATTR_KIND_OPTIMIZE_FOR_SIZE: - *Kind = Attribute::OptimizeForSize; - return error_code::success(); + return Attribute::OptimizeForSize; case bitc::ATTR_KIND_OPTIMIZE_NONE: - *Kind = Attribute::OptimizeNone; - return error_code::success(); + return Attribute::OptimizeNone; case bitc::ATTR_KIND_READ_NONE: - *Kind = Attribute::ReadNone; - return error_code::success(); + return Attribute::ReadNone; case bitc::ATTR_KIND_READ_ONLY: - *Kind = Attribute::ReadOnly; - return error_code::success(); + return Attribute::ReadOnly; case bitc::ATTR_KIND_RETURNED: - *Kind = Attribute::Returned; - return error_code::success(); + return Attribute::Returned; case bitc::ATTR_KIND_RETURNS_TWICE: - *Kind = Attribute::ReturnsTwice; - return error_code::success(); + return Attribute::ReturnsTwice; case bitc::ATTR_KIND_S_EXT: - *Kind = Attribute::SExt; - return error_code::success(); + return Attribute::SExt; case bitc::ATTR_KIND_STACK_ALIGNMENT: - *Kind = Attribute::StackAlignment; - return error_code::success(); + return Attribute::StackAlignment; case bitc::ATTR_KIND_STACK_PROTECT: - *Kind = Attribute::StackProtect; - return error_code::success(); + return Attribute::StackProtect; case bitc::ATTR_KIND_STACK_PROTECT_REQ: - *Kind = Attribute::StackProtectReq; - return error_code::success(); + return Attribute::StackProtectReq; case bitc::ATTR_KIND_STACK_PROTECT_STRONG: - *Kind = Attribute::StackProtectStrong; - return error_code::success(); + return Attribute::StackProtectStrong; case bitc::ATTR_KIND_STRUCT_RET: - *Kind = Attribute::StructRet; - return error_code::success(); + return Attribute::StructRet; case bitc::ATTR_KIND_SANITIZE_ADDRESS: - *Kind = Attribute::SanitizeAddress; - return error_code::success(); + return Attribute::SanitizeAddress; case bitc::ATTR_KIND_SANITIZE_THREAD: - *Kind = Attribute::SanitizeThread; - return error_code::success(); + return Attribute::SanitizeThread; case bitc::ATTR_KIND_SANITIZE_MEMORY: - *Kind = Attribute::SanitizeMemory; - return error_code::success(); + return Attribute::SanitizeMemory; case bitc::ATTR_KIND_UW_TABLE: - *Kind = Attribute::UWTable; - return error_code::success(); + return Attribute::UWTable; case bitc::ATTR_KIND_Z_EXT: - *Kind = Attribute::ZExt; - return error_code::success(); - default: - return Error(InvalidValue); + return Attribute::ZExt; } } +error_code BitcodeReader::ParseAttrKind(uint64_t Code, + Attribute::AttrKind *Kind) { + *Kind = GetAttrFromCode(Code); + if (*Kind == Attribute::None) + return Error(InvalidValue); + return error_code::success(); +} + error_code BitcodeReader::ParseAttributeGroupBlock() { if (Stream.EnterSubBlock(bitc::PARAMATTR_GROUP_BLOCK_ID)) return Error(InvalidRecord);