diff options
| author | Adrian Prantl <aprantl@apple.com> | 2017-11-28 00:57:51 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2017-11-28 00:57:51 +0000 |
| commit | 3e0e1d093435d753f66c51820f49528b91522743 (patch) | |
| tree | af3cd554481fa4d61b80080a7176a7be86b9148f /llvm/lib/IR | |
| parent | 8b9cd03824419bb84aa633d697613947aa69c786 (diff) | |
| download | bcm5719-llvm-3e0e1d093435d753f66c51820f49528b91522743.tar.gz bcm5719-llvm-3e0e1d093435d753f66c51820f49528b91522743.zip | |
Move getVariableSize from Verifier.cpp into DIVariable::getSize() (NFC)
llvm-svn: 319125
Diffstat (limited to 'llvm/lib/IR')
| -rw-r--r-- | llvm/lib/IR/DebugInfoMetadata.cpp | 23 | ||||
| -rw-r--r-- | llvm/lib/IR/Verifier.cpp | 29 |
2 files changed, 26 insertions, 26 deletions
diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp index ae02392ea14..940c4d1f366 100644 --- a/llvm/lib/IR/DebugInfoMetadata.cpp +++ b/llvm/lib/IR/DebugInfoMetadata.cpp @@ -614,6 +614,29 @@ DILocalVariable *DILocalVariable::getImpl(LLVMContext &Context, Metadata *Scope, DEFINE_GETIMPL_STORE(DILocalVariable, (Line, Arg, Flags, AlignInBits), Ops); } +Optional<uint64_t> DIVariable::getSizeInBits() const { + // This is used by the Verifier so be mindful of broken types. + const Metadata *RawType = getRawType(); + while (RawType) { + // Try to get the size directly. + if (auto *T = dyn_cast<DIType>(RawType)) + if (uint64_t Size = T->getSizeInBits()) + return Size; + + if (auto *DT = dyn_cast<DIDerivedType>(RawType)) { + // Look at the base type. + RawType = DT->getRawBaseType(); + continue; + } + + // Missing type or size. + break; + } + + // Fail gracefully. + return None; +} + DIExpression *DIExpression::getImpl(LLVMContext &Context, ArrayRef<uint64_t> Elements, StorageType Storage, bool ShouldCreate) { diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 5bb1f84d2e5..084eaba7064 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -4498,29 +4498,6 @@ void Verifier::visitDbgIntrinsic(StringRef Kind, DbgInfoIntrinsic &DII) { verifyFnArgs(DII); } -static uint64_t getVariableSize(const DIVariable &V) { - // Be careful of broken types (checked elsewhere). - const Metadata *RawType = V.getRawType(); - while (RawType) { - // Try to get the size directly. - if (auto *T = dyn_cast<DIType>(RawType)) - if (uint64_t Size = T->getSizeInBits()) - return Size; - - if (auto *DT = dyn_cast<DIDerivedType>(RawType)) { - // Look at the base type. - RawType = DT->getRawBaseType(); - continue; - } - - // Missing type or size. - break; - } - - // Fail gracefully. - return 0; -} - void Verifier::verifyFragmentExpression(const DbgInfoIntrinsic &I) { DILocalVariable *V = dyn_cast_or_null<DILocalVariable>(I.getRawVariable()); DIExpression *E = dyn_cast_or_null<DIExpression>(I.getRawExpression()); @@ -4552,15 +4529,15 @@ void Verifier::verifyFragmentExpression(const DIVariable &V, ValueOrMetadata *Desc) { // If there's no size, the type is broken, but that should be checked // elsewhere. - uint64_t VarSize = getVariableSize(V); + auto VarSize = V.getSizeInBits(); if (!VarSize) return; unsigned FragSize = Fragment.SizeInBits; unsigned FragOffset = Fragment.OffsetInBits; - AssertDI(FragSize + FragOffset <= VarSize, + AssertDI(FragSize + FragOffset <= *VarSize, "fragment is larger than or outside of variable", Desc, &V); - AssertDI(FragSize != VarSize, "fragment covers entire variable", Desc, &V); + AssertDI(FragSize != *VarSize, "fragment covers entire variable", Desc, &V); } void Verifier::verifyFnArgs(const DbgInfoIntrinsic &I) { |

