diff options
Diffstat (limited to 'lib/Transforms/NaCl/StripMetadata.cpp')
-rw-r--r-- | lib/Transforms/NaCl/StripMetadata.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Transforms/NaCl/StripMetadata.cpp b/lib/Transforms/NaCl/StripMetadata.cpp index a7d2e7eb68..8461e7efbe 100644 --- a/lib/Transforms/NaCl/StripMetadata.cpp +++ b/lib/Transforms/NaCl/StripMetadata.cpp @@ -51,6 +51,11 @@ ModulePass *llvm::createStripMetadataPass() { return new StripMetadata(); } +static bool IsWhitelistedMetadata(const NamedMDNode *node) { + // Leave debug metadata to the -strip-debug pass. + return node->getName().startswith("llvm.dbg."); +} + static bool DoStripMetadata(Module &M) { bool Changed = false; @@ -69,6 +74,16 @@ static bool DoStripMetadata(Module &M) { } } + // Strip unsupported named metadata. + SmallVector<NamedMDNode*, 8> ToErase; + for (Module::NamedMDListType::iterator I = M.named_metadata_begin(), + E = M.named_metadata_end(); I != E; ++I) { + if (!IsWhitelistedMetadata(I)) + ToErase.push_back(I); + } + for (size_t i = 0; i < ToErase.size(); ++i) + M.eraseNamedMetadata(ToErase[i]); + return Changed; } |