From b0a19ad08a12f2fb5c2620c1498f84f25084ddfd Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Tue, 10 Feb 2015 01:09:50 +0000 Subject: [PATCH] Verifier: Create stubs for specialized metadata nodes llvm-svn: 228645 --- llvm/lib/IR/Verifier.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 27d91ccea2dd..e1b6f944f8ae 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -303,6 +303,8 @@ private: void visitBasicBlock(BasicBlock &BB); void visitRangeMetadata(Instruction& I, MDNode* Range, Type* Ty); +#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) void visit##CLASS(const CLASS &N); +#include "llvm/IR/Metadata.def" // InstVisitor overrides... using InstVisitor::visit; @@ -601,6 +603,18 @@ void Verifier::visitMDNode(const MDNode &MD) { if (!MDNodes.insert(&MD).second) return; + switch (MD.getMetadataID()) { + default: + llvm_unreachable("Invalid MDNode subclass"); + case Metadata::MDTupleKind: + break; +#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) \ + case Metadata::CLASS##Kind: \ + visit##CLASS(cast(MD)); \ + break; +#include "llvm/IR/Metadata.def" + } + for (unsigned i = 0, e = MD.getNumOperands(); i != e; ++i) { Metadata *Op = MD.getOperand(i); if (!Op) @@ -664,6 +678,29 @@ void Verifier::visitMetadataAsValue(const MetadataAsValue &MDV, Function *F) { visitValueAsMetadata(*V, F); } +void Verifier::visitMDLocation(const MDLocation &) {} +void Verifier::visitGenericDebugNode(const GenericDebugNode &) {} +void Verifier::visitMDSubrange(const MDSubrange &) {} +void Verifier::visitMDEnumerator(const MDEnumerator &) {} +void Verifier::visitMDBasicType(const MDBasicType &) {} +void Verifier::visitMDDerivedType(const MDDerivedType &) {} +void Verifier::visitMDCompositeType(const MDCompositeType &) {} +void Verifier::visitMDSubroutineType(const MDSubroutineType &) {} +void Verifier::visitMDFile(const MDFile &) {} +void Verifier::visitMDCompileUnit(const MDCompileUnit &) {} +void Verifier::visitMDSubprogram(const MDSubprogram &) {} +void Verifier::visitMDLexicalBlock(const MDLexicalBlock &) {} +void Verifier::visitMDLexicalBlockFile(const MDLexicalBlockFile &) {} +void Verifier::visitMDNamespace(const MDNamespace &) {} +void Verifier::visitMDTemplateTypeParameter(const MDTemplateTypeParameter &) {} +void Verifier::visitMDTemplateValueParameter(const MDTemplateValueParameter &) { +} +void Verifier::visitMDGlobalVariable(const MDGlobalVariable &) {} +void Verifier::visitMDLocalVariable(const MDLocalVariable &) {} +void Verifier::visitMDExpression(const MDExpression &) {} +void Verifier::visitMDObjCProperty(const MDObjCProperty &) {} +void Verifier::visitMDImportedEntity(const MDImportedEntity &) {} + void Verifier::visitComdat(const Comdat &C) { // All Comdat::SelectionKind values other than Comdat::Any require a // GlobalValue with the same name as the Comdat.