diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-03-31 01:28:58 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-03-31 01:28:58 +0000 |
commit | 85866b2a28d944f929b65de92ed9fc5aea035006 (patch) | |
tree | d7efc03010a1707c83e977652c6f7698e90f2f3b /llvm/lib | |
parent | 94d58f88801833c1d8d1bbc3d3f4244be9e2348d (diff) | |
download | bcm5719-llvm-85866b2a28d944f929b65de92ed9fc5aea035006.tar.gz bcm5719-llvm-85866b2a28d944f929b65de92ed9fc5aea035006.zip |
Verifier: Check reference flags in debug info
Move over checks of `&` and `&&` flags.
llvm-svn: 233658
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/IR/DebugInfo.cpp | 20 | ||||
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 11 |
2 files changed, 13 insertions, 18 deletions
diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 91823773212..9381a5b580e 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -252,32 +252,16 @@ static bool isDescriptorRef(const Metadata *MD) { } #endif -bool DIType::Verify() const { - auto *N = dyn_cast_or_null<MDType>(DbgNode); - if (!N) - return false; - - if (isCompositeType()) - return DICompositeType(DbgNode).Verify(); - return true; -} - +bool DIType::Verify() const { return isType(); } bool DIBasicType::Verify() const { return isBasicType(); } bool DIDerivedType::Verify() const { return isDerivedType(); } - -bool DICompositeType::Verify() const { - auto *N = dyn_cast_or_null<MDCompositeTypeBase>(DbgNode); - return N && !(isLValueReference() && isRValueReference()); -} +bool DICompositeType::Verify() const { return isCompositeType(); } bool DISubprogram::Verify() const { auto *N = dyn_cast_or_null<MDSubprogram>(DbgNode); if (!N) return false; - if (isLValueReference() && isRValueReference()) - return false; - // If a DISubprogram has an llvm::Function*, then scope chains from all // instructions within the function should lead to this DISubprogram. if (auto *F = getFunction()) { diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 19897d4c030..171c16bc76b 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -796,6 +796,11 @@ void Verifier::visitMDDerivedType(const MDDerivedType &N) { } } +static bool hasConflictingReferenceFlags(unsigned Flags) { + return (Flags & DebugNode::FlagLValueReference) && + (Flags & DebugNode::FlagRValueReference); +} + void Verifier::visitMDCompositeType(const MDCompositeType &N) { // Common derived type checks. visitMDDerivedTypeBase(N); @@ -814,6 +819,8 @@ void Verifier::visitMDCompositeType(const MDCompositeType &N) { N.getRawVTableHolder()); Assert(!N.getRawElements() || isa<MDTuple>(N.getRawElements()), "invalid composite elements", &N, N.getRawElements()); + Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags", + &N); } void Verifier::visitMDSubroutineType(const MDSubroutineType &N) { @@ -824,6 +831,8 @@ void Verifier::visitMDSubroutineType(const MDSubroutineType &N) { Assert(isTypeRef(Ty), "invalid subroutine type ref", &N, Types, Ty); } } + Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags", + &N); } void Verifier::visitMDFile(const MDFile &N) { @@ -910,6 +919,8 @@ void Verifier::visitMDSubprogram(const MDSubprogram &N) { Op); } } + Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags", + &N); } void Verifier::visitMDLexicalBlockBase(const MDLexicalBlockBase &N) { |