diff options
author | Leny Kholodov <lkholodov@accesssoftek.com> | 2016-09-06 10:46:28 +0000 |
---|---|---|
committer | Leny Kholodov <lkholodov@accesssoftek.com> | 2016-09-06 10:46:28 +0000 |
commit | 5fcc4185f5f1b489abd6c5ff62537cd5969c1250 (patch) | |
tree | ff5f18c41a84090a4e1c8f439bd88056b53ad8e0 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
parent | 3e0b817b91f247c0d4855a79a6fb534c6a115a38 (diff) | |
download | bcm5719-llvm-5fcc4185f5f1b489abd6c5ff62537cd5969c1250.tar.gz bcm5719-llvm-5fcc4185f5f1b489abd6c5ff62537cd5969c1250.zip |
DebugInfo: use strongly typed enum for debug info flags
Use ADT/BitmaskEnum for DINode::DIFlags for the following purposes:
Get rid of unsigned int for flags to avoid problems on platforms with sizeof(int) < 4
Flags are now strongly typed
Patch by: Victor Leschuk <vleschuk@gmail.com>
Differential Revision: https://reviews.llvm.org/D23766
llvm-svn: 280700
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 020468a59b8..70f8432d344 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2414,13 +2414,14 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { return error("Invalid record"); IsDistinct = Record[0]; + DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]); MetadataList.assignValue( GET_OR_DISTINCT( DIDerivedType, (Context, Record[1], getMDString(Record[2]), getMDOrNull(Record[3]), Record[4], getDITypeRefOrNull(Record[5]), getDITypeRefOrNull(Record[6]), Record[7], Record[8], Record[9], - Record[10], getDITypeRefOrNull(Record[11]))), + Flags, getDITypeRefOrNull(Record[11]))), NextMetadataNo++); break; } @@ -2441,7 +2442,7 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { uint64_t SizeInBits = Record[7]; uint64_t AlignInBits = Record[8]; uint64_t OffsetInBits = Record[9]; - unsigned Flags = Record[10]; + DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]); Metadata *Elements = getMDOrNull(Record[11]); unsigned RuntimeLang = Record[12]; Metadata *VTableHolder = getDITypeRefOrNull(Record[13]); @@ -2474,12 +2475,13 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { unsigned CC = (Record.size() > 3) ? Record[3] : 0; IsDistinct = Record[0] & 0x1; + DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[1]); Metadata *Types = getMDOrNull(Record[2]); if (LLVM_UNLIKELY(IsOldTypeRefArray)) Types = MetadataList.upgradeTypeRefArray(Types); MetadataList.assignValue( - GET_OR_DISTINCT(DISubroutineType, (Context, Record[1], CC, Types)), + GET_OR_DISTINCT(DISubroutineType, (Context, Flags, CC, Types)), NextMetadataNo++); break; } @@ -2564,7 +2566,9 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { Record[11], // virtuality Record[12], // virtualIndex HasThisAdj ? Record[19] : 0, // thisAdjustment - Record[13], // flags + static_cast<DINode::DIFlags>( + Record[13] // flags + ), Record[14], // isOptimized HasUnit ? CUorFn : nullptr, // unit getMDOrNull(Record[15 + Offset]), // templateParams @@ -2695,13 +2699,14 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { // DW_TAG_arg_variable. IsDistinct = Record[0]; bool HasTag = Record.size() > 8; + DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 + HasTag]); MetadataList.assignValue( GET_OR_DISTINCT(DILocalVariable, (Context, getMDOrNull(Record[1 + HasTag]), getMDString(Record[2 + HasTag]), getMDOrNull(Record[3 + HasTag]), Record[4 + HasTag], getDITypeRefOrNull(Record[5 + HasTag]), - Record[6 + HasTag], Record[7 + HasTag])), + Record[6 + HasTag], Flags)), NextMetadataNo++); break; } |