summaryrefslogtreecommitdiff
path: root/lib/Bitcode
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2013-11-12 01:31:00 +0000
committerReid Kleckner <reid@kleckner.net>2013-11-12 01:31:00 +0000
commit161dd53f1ef74b31b5afa0aeb55619ae924a6877 (patch)
tree0275492d93e71ec6629f6b36db4dda077425acf7 /lib/Bitcode
parente57a8a3d10f739360fbb7568ccf83c35824e5a1e (diff)
downloadllvm-161dd53f1ef74b31b5afa0aeb55619ae924a6877.tar.gz
llvm-161dd53f1ef74b31b5afa0aeb55619ae924a6877.tar.bz2
llvm-161dd53f1ef74b31b5afa0aeb55619ae924a6877.tar.xz
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
Diffstat (limited to 'lib/Bitcode')
-rw-r--r--lib/Bitcode/Reader/BitcodeReader.cpp127
1 files changed, 49 insertions, 78 deletions
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp
index 4e4b3285ac..d25b33e9ab 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);