aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Transforms/NaCl/StripMetadata.cpp15
-rw-r--r--test/Transforms/NaCl/strip-meta-leaves-debug.ll14
2 files changed, 28 insertions, 1 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;
}
diff --git a/test/Transforms/NaCl/strip-meta-leaves-debug.ll b/test/Transforms/NaCl/strip-meta-leaves-debug.ll
index a49b4dd1c3..acb5a81baa 100644
--- a/test/Transforms/NaCl/strip-meta-leaves-debug.ll
+++ b/test/Transforms/NaCl/strip-meta-leaves-debug.ll
@@ -16,10 +16,16 @@ define i32 @foo(i32 %c) {
; NODEBUG-NOT: @llvm.dbg.value
declare void @llvm.dbg.value(metadata, i64, metadata) #1
+; CHECK-NOT: MadeUpMetadata
+!MadeUpMetadata = !{}
+
; CHECK: !llvm.dbg.cu
-; CHECK: !0 =
!llvm.dbg.cu = !{!0}
+; CHECK-NOT: llvm.module.flags
+!llvm.module.flags = !{ !12}
+
+; CHECK: !0 =
!0 = metadata !{i32 786449, i32 0, i32 12, metadata !"test.c", metadata !"/tmp", metadata !"clang version 3.3 (trunk 176732) (llvm/trunk 176733)", i1 true, i1 true, metadata !"", i32 0, metadata !1, metadata !1, metadata !2, metadata !1, metadata !""} ; [ DW_TAG_compile_unit ] [/tmp/test.c] [DW_LANG_C99]
!1 = metadata !{i32 0}
!2 = metadata !{metadata !3}
@@ -31,4 +37,10 @@ declare void @llvm.dbg.value(metadata, i64, metadata) #1
!8 = metadata !{metadata !9}
!9 = metadata !{i32 786689, metadata !3, metadata !"c", metadata !4, i32 16777217, metadata !7, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [c] [line 1]
!10 = metadata !{i32 1, i32 0, metadata !3, null}
+; CHECK: !11 =
!11 = metadata !{i32 2, i32 0, metadata !3, null}
+; CHECK-NOT: !12 =
+!12 = metadata !{ i32 6, metadata !"Linker Options",
+ metadata !{
+ metadata !{ metadata !"-lz" },
+ metadata !{ metadata !"-framework", metadata !"Cocoa" } } }