diff options
-rw-r--r-- | lib/Transforms/NaCl/StripMetadata.cpp | 15 | ||||
-rw-r--r-- | test/Transforms/NaCl/strip-meta-leaves-debug.ll | 14 |
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" } } } |