<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div>Sorry about the breakage.<div class=""><br class=""></div><div class="">The Module itself was destroyed by LTOCodeGenerator, but not the LTOModule. I am working on a fix.<div class=""><br class=""></div><div class="">Thanks,</div><div class="">Manman</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 25, 2015, at 12:03 PM, Alexey Samsonov <<a href="mailto:vonosmas@gmail.com" class="">vonosmas@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Hi Manman,<div class=""><br class=""></div><div class="">This commit introduces a memory leak, breaking ASan bootstrap: <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/1878/steps/check-llvm%20asan/logs/stdio" class="">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/1878/steps/check-llvm%20asan/logs/stdio</a></div><div class="">Please investigate.</div><div class=""><br class=""></div><div class="gmail_extra"><div class="gmail_quote">On Mon, Feb 23, 2015 at 4:45 PM, Manman Ren<span class="Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:manman.ren@gmail.com" target="_blank" class="">manman.ren@gmail.com</a>></span><span class="Apple-converted-space"> </span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">Author: mren<br class="">Date: Mon Feb 23 18:45:56 2015<br class="">New Revision: 230290<br class=""><br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=230290&view=rev" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=230290&view=rev</a><br class="">Log:<br class="">[LTO API] add lto_codegen_set_module to set the destination module.<br class=""><br class="">When debugging LTO issues with ld64, we use -save-temps to save the merged<br class="">optimized bitcode file, then invoke ld64 again on the single bitcode file to<br class="">speed up debugging code generation passes and ld64 stuff after code generation.<br class=""><br class="">llvm linking a single bitcode file via lto_codegen_add_module will generate a<br class="">different bitcode file from the single input. With the newly-added<br class="">lto_codegen_set_module, we can make sure the destination module is the same as<br class="">the input.<br class=""><br class="">lto_codegen_set_module will transfer the ownship of the module to code<br class="">generator.<br class=""><br class=""><a href="rdar://19024554" class="">rdar://19024554</a><br class=""><br class="">Added:<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/test/LTO/X86/set-merged.ll<br class="">Modified:<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/include/llvm-c/lto.h<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/include/llvm/Linker/Linker.h<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/lib/LTO/LTOCodeGenerator.cpp<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/lib/Linker/LinkModules.cpp<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/tools/llvm-lto/llvm-lto.cpp<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/tools/lto/lto.cpp<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/tools/lto/lto.exports<br class=""><br class="">Modified: llvm/trunk/include/llvm-c/lto.h<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm-c/lto.h (original)<br class="">+++ llvm/trunk/include/llvm-c/lto.h Mon Feb 23 18:45:56 2015<br class="">@@ -40,7 +40,7 @@ typedef bool lto_bool_t;<br class=""> <span class="Apple-converted-space"> </span>* @{<br class=""> <span class="Apple-converted-space"> </span>*/<br class=""><br class="">-#define LTO_API_VERSION 12<br class="">+#define LTO_API_VERSION 13<br class=""><br class=""> /**<br class=""> <span class="Apple-converted-space"> </span>* \since prior to LTO_API_VERSION=3<br class="">@@ -396,6 +396,17 @@ extern lto_bool_t<br class=""> lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);<br class=""><br class=""> /**<br class="">+ * Sets the object module for code generation. This will transfer the ownship of<br class="">+ * the module to code generator.<br class="">+ *<br class="">+ * \c cg and \c mod must both be in the same context.<br class="">+ *<br class="">+ * \since prior to LTO_API_VERSION=13<br class="">+ */<br class="">+extern void<br class="">+lto_codegen_set_module(lto_code_gen_t cg, lto_module_t mod);<br class="">+<br class="">+/**<br class=""> <span class="Apple-converted-space"> </span>* Sets if debug info should be generated.<br class=""> <span class="Apple-converted-space"> </span>* Returns true on error (check lto_get_error_message() for details).<br class=""> <span class="Apple-converted-space"> </span>*<br class=""><br class="">Modified: llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h (original)<br class="">+++ llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h Mon Feb 23 18:45:56 2015<br class="">@@ -67,6 +67,9 @@ struct LTOCodeGenerator {<br class="">   // Merge given module, return true on success.<br class="">   bool addModule(struct LTOModule *);<br class=""><br class="">+  // Set the destination module.<br class="">+  void setModule(struct LTOModule *);<br class="">+<br class="">   void setTargetOptions(TargetOptions options);<br class="">   void setDebugInfo(lto_debug_model);<br class="">   void setCodePICModel(lto_codegen_model);<br class=""><br class="">Modified: llvm/trunk/include/llvm/Linker/Linker.h<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Linker/Linker.h?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Linker/Linker.h?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Linker/Linker.h (original)<br class="">+++ llvm/trunk/include/llvm/Linker/Linker.h Mon Feb 23 18:45:56 2015<br class="">@@ -70,6 +70,9 @@ public:<br class="">   /// Returns true on error.<br class="">   bool linkInModule(Module *Src);<br class=""><br class="">+  /// \brief Set the composite to the passed-in module.<br class="">+  void setModule(Module *Dst);<br class="">+<br class="">   static bool LinkModules(Module *Dest, Module *Src,<br class="">                           DiagnosticHandlerFunction DiagnosticHandler);<br class=""><br class=""><br class="">Modified: llvm/trunk/lib/LTO/LTOCodeGenerator.cpp<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/lib/LTO/LTOCodeGenerator.cpp (original)<br class="">+++ llvm/trunk/lib/LTO/LTOCodeGenerator.cpp Mon Feb 23 18:45:56 2015<br class="">@@ -141,6 +141,22 @@ bool LTOCodeGenerator::addModule(LTOModu<br class="">   return !ret;<br class=""> }<br class=""><br class="">+void LTOCodeGenerator::setModule(LTOModule *Mod) {<br class="">+  assert(&Mod->getModule().getContext() == &Context &&<br class="">+         "Expected module in same context");<br class="">+<br class="">+  // Delete the old merged module.<br class="">+  if (IRLinker.getModule())<br class="">+    IRLinker.deleteModule();<br class="">+  AsmUndefinedRefs.clear();<br class="">+<br class="">+  IRLinker.setModule(&Mod->getModule());<br class="">+<br class="">+  const std::vector<const char*> &Undefs = Mod->getAsmUndefinedRefs();<br class="">+  for (int I = 0, E = Undefs.size(); I != E; ++I)<br class="">+    AsmUndefinedRefs[Undefs[I]] = 1;<br class="">+}<br class="">+<br class=""> void LTOCodeGenerator::setTargetOptions(TargetOptions options) {<br class="">   Options = options;<br class=""> }<br class=""><br class="">Modified: llvm/trunk/lib/Linker/LinkModules.cpp<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/lib/Linker/LinkModules.cpp (original)<br class="">+++ llvm/trunk/lib/Linker/LinkModules.cpp Mon Feb 23 18:45:56 2015<br class="">@@ -1748,6 +1748,10 @@ bool Linker::linkInModule(Module *Src) {<br class="">   return RetCode;<br class=""> }<br class=""><br class="">+void Linker::setModule(Module *Dst) {<br class="">+  init(Dst, DiagnosticHandler);<br class="">+}<br class="">+<br class=""> //===----------------------------------------------------------------------===//<br class=""> // LinkModules entrypoint.<br class=""> //===----------------------------------------------------------------------===//<br class=""><br class="">Added: llvm/trunk/test/LTO/X86/set-merged.ll<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/LTO/X86/set-merged.ll?rev=230290&view=auto" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/LTO/X86/set-merged.ll?rev=230290&view=auto</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/LTO/X86/set-merged.ll (added)<br class="">+++ llvm/trunk/test/LTO/X86/set-merged.ll Mon Feb 23 18:45:56 2015<br class="">@@ -0,0 +1,36 @@<br class="">+; RUN: llvm-as < %s >%t1<br class="">+; RUN: llvm-lto -exported-symbol=_main -set-merged-module -o %t2 %t1<br class="">+; RUN: llvm-objdump -d %t2 | FileCheck %s<br class="">+<br class="">+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"<br class="">+target triple = "x86_64-apple-macosx10.10.0"<br class="">+<br class="">+; CHECK: _main<br class="">+; CHECK: movl $132<br class="">+define i32 @_Z3fooi(i32 %a) {<br class="">+entry:<br class="">+  %a.addr = alloca i32, align 4<br class="">+  store i32 %a, i32* %a.addr, align 4<br class="">+  %0 = load i32* %a.addr, align 4<br class="">+  %1 = load i32* %a.addr, align 4<br class="">+  %call = call i32 @_Z4bar2i(i32 %1)<br class="">+  %add = add nsw i32 %0, %call<br class="">+  ret i32 %add<br class="">+}<br class="">+<br class="">+define i32 @_Z4bar2i(i32 %a) {<br class="">+entry:<br class="">+  %a.addr = alloca i32, align 4<br class="">+  store i32 %a, i32* %a.addr, align 4<br class="">+  %0 = load i32* %a.addr, align 4<br class="">+  %mul = mul nsw i32 2, %0<br class="">+  ret i32 %mul<br class="">+}<br class="">+<br class="">+define i32 @main() {<br class="">+entry:<br class="">+  %retval = alloca i32, align 4<br class="">+  store i32 0, i32* %retval<br class="">+  %call = call i32 @_Z3fooi(i32 44)<br class="">+  ret i32 %call<br class="">+}<br class=""><br class="">Modified: llvm/trunk/tools/llvm-lto/llvm-lto.cpp<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lto/llvm-lto.cpp?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lto/llvm-lto.cpp?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/tools/llvm-lto/llvm-lto.cpp (original)<br class="">+++ llvm/trunk/tools/llvm-lto/llvm-lto.cpp Mon Feb 23 18:45:56 2015<br class="">@@ -69,6 +69,10 @@ static cl::opt<bool> ListSymbolsOnly(<br class="">     "list-symbols-only", cl::init(false),<br class="">     cl::desc("Instead of running LTO, list the symbols in each IR file"));<br class=""><br class="">+static cl::opt<bool> SetMergedModule(<br class="">+    "set-merged-module", cl::init(false),<br class="">+    cl::desc("Use the first input module as the merged module"));<br class="">+<br class=""> namespace {<br class=""> struct ModuleInfo {<br class="">   std::vector<bool> CanBeHidden;<br class="">@@ -194,15 +198,22 @@ int main(int argc, char **argv) {<br class="">       return 1;<br class="">     }<br class=""><br class="">-    if (!CodeGen.addModule(Module.get()))<br class="">+    LTOModule *LTOMod = Module.get();<br class="">+<br class="">+    // We use the first input module as the destination module when<br class="">+    // SetMergedModule is true.<br class="">+    if (SetMergedModule && i == BaseArg) {<br class="">+      // Transfer ownership to the code generator.<br class="">+      CodeGen.setModule(Module.release());<br class=""></blockquote><div class=""><br class=""></div><div class="">^^</div><div class="">This is false. LTOCodeGenerator::setModule does *not* take the ownership of LTOModule - it</div><div class="">just leaks this object.</div><div class=""><br class=""></div><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">+    } else if (!CodeGen.addModule(Module.get()))<br class="">       return 1;<br class=""><br class="">-    unsigned NumSyms = Module->getSymbolCount();<br class="">+    unsigned NumSyms = LTOMod->getSymbolCount();<br class="">     for (unsigned I = 0; I < NumSyms; ++I) {<br class="">-      StringRef Name = Module->getSymbolName(I);<br class="">+      StringRef Name = LTOMod->getSymbolName(I);<br class="">       if (!DSOSymbolsSet.count(Name))<br class="">         continue;<br class="">-      lto_symbol_attributes Attrs = Module->getSymbolAttributes(I);<br class="">+      lto_symbol_attributes Attrs = LTOMod->getSymbolAttributes(I);<br class="">       unsigned Scope = Attrs & LTO_SYMBOL_SCOPE_MASK;<br class="">       if (Scope != LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN)<br class="">         KeptDSOSyms.push_back(Name);<br class=""><br class="">Modified: llvm/trunk/tools/lto/lto.cpp<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/tools/lto/lto.cpp (original)<br class="">+++ llvm/trunk/tools/lto/lto.cpp Mon Feb 23 18:45:56 2015<br class="">@@ -248,6 +248,10 @@ bool lto_codegen_add_module(lto_code_gen<br class="">   return !unwrap(cg)->addModule(unwrap(mod));<br class=""> }<br class=""><br class="">+void lto_codegen_set_module(lto_code_gen_t cg, lto_module_t mod) {<br class="">+  unwrap(cg)->setModule(unwrap(mod));<br class="">+}<br class="">+<br class=""> bool lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model debug) {<br class="">   unwrap(cg)->setDebugInfo(debug);<br class="">   return false;<br class=""><br class="">Modified: llvm/trunk/tools/lto/lto.exports<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.exports?rev=230290&r1=230289&r2=230290&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.exports?rev=230290&r1=230289&r2=230290&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/tools/lto/lto.exports (original)<br class="">+++ llvm/trunk/tools/lto/lto.exports Mon Feb 23 18:45:56 2015<br class="">@@ -25,6 +25,7 @@ lto_module_dispose<br class=""> lto_api_version<br class=""> lto_codegen_set_diagnostic_handler<br class=""> lto_codegen_add_module<br class="">+lto_codegen_set_module<br class=""> lto_codegen_add_must_preserve_symbol<br class=""> lto_codegen_compile<br class=""> lto_codegen_create<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@cs.uiuc.edu" class="">llvm-commits@cs.uiuc.edu</a><br class=""><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br class=""></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>--<span class="Apple-converted-space"> </span><br class=""><div class="gmail_signature"><div dir="ltr" class="">Alexey Samsonov<br class=""><a href="mailto:vonosmas@gmail.com" target="_blank" class="">vonosmas@gmail.com</a></div></div></div></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">llvm-commits mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:llvm-commits@cs.uiuc.edu" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">llvm-commits@cs.uiuc.edu</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a></div></blockquote></div><br class=""></div></div></body></html>