[PATCH] D14818: llvm-link option and test for recent metadata mapping bug
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 19 07:52:12 PST 2015
tejohnson updated this revision to Diff 40648.
tejohnson added a comment.
- Fix output file in new test.
http://reviews.llvm.org/D14818
Files:
test/Linker/only-needed-named-metadata.ll
tools/llvm-link/llvm-link.cpp
Index: tools/llvm-link/llvm-link.cpp
===================================================================
--- tools/llvm-link/llvm-link.cpp
+++ tools/llvm-link/llvm-link.cpp
@@ -89,6 +89,10 @@
SuppressWarnings("suppress-warnings", cl::desc("Suppress all linking warnings"),
cl::init(false));
+static cl::opt<bool>
+ PreserveModules("preserve-modules",
+ cl::desc("Preserve linked modules for testing"));
+
static cl::opt<bool> PreserveBitcodeUseListOrder(
"preserve-bc-uselistorder",
cl::desc("Preserve use-list order when writing LLVM bitcode."),
@@ -259,6 +263,15 @@
return false;
// All linker flags apply to linking of subsequent files.
ApplicableFlags = Flags;
+
+ // If requested for testing, preserve modules by releasing them from
+ // the unique_ptr before the are freed. This can help catch any
+ // cross-module references from e.g. unneeded metadata references
+ // that aren't properly set to null but instead mapped to the source
+ // module version. The bitcode writer will assert if it finds any such
+ // cross-module references.
+ if (PreserveModules)
+ M.release();
}
return true;
Index: test/Linker/only-needed-named-metadata.ll
===================================================================
--- test/Linker/only-needed-named-metadata.ll
+++ test/Linker/only-needed-named-metadata.ll
@@ -26,6 +26,11 @@
; ONLYNEEDED-NOT:@analias
; ONLYNEEDED-NOT:@globalfunc2()
+; Test -only-needed link with the modules preserved instead of freeing to
+; catch any cross-module references to metadata, which the bitcode writer
+; will assert on.
+; RUN: llvm-link -preserve-modules -o %t3.bc -only-needed %t2.bc %t.bc
+
@X = global i32 5
@U = global i32 6
@U_linkonce = linkonce_odr hidden global i32 6
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14818.40648.patch
Type: text/x-patch
Size: 1823 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151119/ef3b0170/attachment.bin>
More information about the llvm-commits
mailing list