aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/NaCl/StripMetadata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms/NaCl/StripMetadata.cpp')
-rw-r--r--lib/Transforms/NaCl/StripMetadata.cpp15
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;
}