<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">r352537 should fix it.<div class=""><br class=""></div><div class="">Steven<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jan 29, 2019, at 11:36 AM, Matt Arsenault <<a href="mailto:arsenm2@gmail.com" class="">arsenm2@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=us-ascii" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jan 11, 2019, at 4:16 PM, Steven Wu via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Author: steven_wu<br class="">Date: Fri Jan 11 13:16:04 2019<br class="">New Revision: 350970<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=350970&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=350970&view=rev</a><br class="">Log:<br class="">[Darwin][Driver] Don't pass a file as object_path_lto during ThinLTO<br class=""><br class="">Summary:<br class="">After r327851, Driver::GetTemporaryPath will create the file rather than<br class="">just create a potientially unqine filename. If clang driver pass the<br class="">file as parameter as -object_path_lto, ld64 will pass it back to libLTO<br class="">as GeneratedObjectsDirectory, which is going to cause a LLVM ERROR if it<br class="">is not a directory.<br class="">Now during thinLTO, pass a temp directory path to linker instread.<br class=""><br class=""><a href="rdar://problem/47194182" class="">rdar://problem/47194182</a><br class=""><br class="">Reviewers: arphaman, dexonsmith<br class=""><br class="">Reviewed By: arphaman<br class=""><br class="">Subscribers: mehdi_amini, inglorion, jkorous, cfe-commits<br class=""><br class="">Differential Revision: <a href="https://reviews.llvm.org/D56608" class="">https://reviews.llvm.org/D56608</a><br class=""><br class="">Modified:<br class="">    cfe/trunk/include/clang/Driver/Driver.h<br class="">    cfe/trunk/lib/Driver/Driver.cpp<br class="">    cfe/trunk/lib/Driver/ToolChains/Darwin.cpp<br class="">    cfe/trunk/test/Driver/darwin-ld-lto.c<br class=""><br class="">Modified: cfe/trunk/include/clang/Driver/Driver.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Driver.h?rev=350970&r1=350969&r2=350970&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Driver.h?rev=350970&r1=350969&r2=350970&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/include/clang/Driver/Driver.h (original)<br class="">+++ cfe/trunk/include/clang/Driver/Driver.h Fri Jan 11 13:16:04 2019<br class="">@@ -505,6 +505,10 @@ public:<br class="">   /// GCC goes to extra lengths here to be a bit more robust.<br class="">   std::string GetTemporaryPath(StringRef Prefix, StringRef Suffix) const;<br class=""><br class="">+  /// GetTemporaryDirectory - Return the pathname of a temporary directory to<br class="">+  /// use as part of compilation; the directory will have the given prefix.<br class="">+  std::string GetTemporaryDirectory(StringRef Prefix) const;<br class="">+<br class="">   /// Return the pathname of the pch file in clang-cl mode.<br class="">   std::string GetClPchPath(Compilation &C, StringRef BaseName) const;<br class=""><br class=""><br class="">Modified: cfe/trunk/lib/Driver/Driver.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=350970&r1=350969&r2=350970&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=350970&r1=350969&r2=350970&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/Driver/Driver.cpp (original)<br class="">+++ cfe/trunk/lib/Driver/Driver.cpp Fri Jan 11 13:16:04 2019<br class="">@@ -4478,6 +4478,17 @@ std::string Driver::GetTemporaryPath(Str<br class="">   return Path.str();<br class=""> }<br class=""><br class="">+std::string Driver::GetTemporaryDirectory(StringRef Prefix) const {<br class="">+  SmallString<128> Path;<br class="">+  std::error_code EC = llvm::sys::fs::createUniqueDirectory(Prefix, Path);<br class="">+  if (EC) {<br class="">+    Diag(clang::diag::err_unable_to_make_temp) << EC.message();<br class="">+    return "";<br class="">+  }<br class="">+<br class="">+  return Path.str();<br class="">+}<br class="">+<br class=""> std::string Driver::GetClPchPath(Compilation &C, StringRef BaseName) const {<br class="">   SmallString<128> Output;<br class="">   if (Arg *FpArg = C.getArgs().getLastArg(options::OPT__SLASH_Fp)) {<br class=""><br class="">Modified: cfe/trunk/lib/Driver/ToolChains/Darwin.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.cpp?rev=350970&r1=350969&r2=350970&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.cpp?rev=350970&r1=350969&r2=350970&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/Driver/ToolChains/Darwin.cpp (original)<br class="">+++ cfe/trunk/lib/Driver/ToolChains/Darwin.cpp Fri Jan 11 13:16:04 2019<br class="">@@ -224,13 +224,20 @@ void darwin::Linker::AddLinkArgs(Compila<br class="">                    options::OPT_fno_application_extension, false))<br class="">     CmdArgs.push_back("-application_extension");<br class=""><br class="">-  if (D.isUsingLTO()) {<br class="">-    // If we are using LTO, then automatically create a temporary file path for<br class="">-    // the linker to use, so that it's lifetime will extend past a possible<br class="">-    // dsymutil step.<br class="">-    if (Version[0] >= 116 && NeedsTempPath(Inputs)) {<br class="">-      const char *TmpPath = C.getArgs().MakeArgString(<br class="">-          D.GetTemporaryPath("cc", types::getTypeTempSuffix(types::TY_Object)));<br class="">+  if (D.isUsingLTO() && Version[0] >= 116 && NeedsTempPath(Inputs)) {<br class="">+    std::string TmpPathName;<br class="">+    if (D.getLTOMode() == LTOK_Full) {<br class="">+      // If we are using full LTO, then automatically create a temporary file<br class="">+      // path for the linker to use, so that it's lifetime will extend past a<br class="">+      // possible dsymutil step.<br class="">+      TmpPathName =<br class="">+          D.GetTemporaryPath("cc", types::getTypeTempSuffix(types::TY_Object));<br class="">+    } else if (D.getLTOMode() == LTOK_Thin)<br class="">+      // If we are using thin LTO, then create a directory instead.<br class="">+      TmpPathName = D.GetTemporaryDirectory("thinlto");<br class="">+<br class="">+    if (!TmpPathName.empty()) {<br class="">+      auto *TmpPath = C.getArgs().MakeArgString(TmpPathName);<br class="">       C.addTempFile(TmpPath);<br class="">       CmdArgs.push_back("-object_path_lto");<br class="">       CmdArgs.push_back(TmpPath);<br class=""><br class="">Modified: cfe/trunk/test/Driver/darwin-ld-lto.c<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/darwin-ld-lto.c?rev=350970&r1=350969&r2=350970&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/darwin-ld-lto.c?rev=350970&r1=350969&r2=350970&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/test/Driver/darwin-ld-lto.c (original)<br class="">+++ cfe/trunk/test/Driver/darwin-ld-lto.c Fri Jan 11 13:16:04 2019<br class="">@@ -17,3 +17,14 @@<br class=""> // RUN: %clang -target x86_64-apple-darwin10 -### %s \<br class=""> // RUN:   -ccc-install-dir %S/dummytestdir -mlinker-version=133 2> %t.log<br class=""> // RUN: FileCheck -check-prefix=LINK_LTOLIB_PATH %s -input-file %t.log<br class="">+<br class="">+<br class="">+// Check that -object_lto_path is passed correctly to ld64<br class="">+// RUN: %clang -target x86_64-apple-darwin10 %s -flto=full -### 2>&1 | \<br class="">+// RUN:   FileCheck -check-prefix=FULL_LTO_OBJECT_PATH %s<br class="">+// FULL_LTO_OBJECT_PATH: /usr/bin/ld<br class="">+// FULL_LTO_OBJECT_PATH-SAME: "-object_path_lto" "{{[a-zA-Z0-9_\/]+\/cc\-[a-zA-Z0-9_]+.o}}"<br class="">+// RUN: %clang -target x86_64-apple-darwin10 %s -flto=thin -### 2>&1 | \<br class="">+// RUN:   FileCheck -check-prefix=THIN_LTO_OBJECT_PATH %s<br class="">+// THIN_LTO_OBJECT_PATH: /usr/bin/ld<br class="">+// THIN_LTO_OBJECT_PATH-SAME: "-object_path_lto" "{{[a-zA-Z0-9_\/]+\/thinlto\-[a-zA-Z0-9_]+}}"<br class=""><br class=""><br class="">_______________________________________________<br class="">cfe-commits mailing list<br class=""><a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class=""></div></div></blockquote><br class=""></div><div class=""><br class=""></div><div class="">Hi,</div><div class=""><br class=""></div><div class="">This test is failing on systems that have another ld installed (e.g. macports ld64):</div><div class=""><br class=""></div><div class="">$ ./bin/llvm-lit  -v ~/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c                     <br class="">llvm-lit: /Users/matt/src/llvm/utils/lit/lit/llvm/config.py:337: note: using clang: /Users/matt/src/llvm/build_debug/bin/clang<br class="">llvm-lit: /Users/matt/src/llvm/utils/lit/lit/util.py:381: note: using SDKROOT: '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk'<br class="">-- Testing: 1 tests, 1 threads --<br class="">FAIL: Clang :: Driver/darwin-ld-lto.c (1 of 1)<br class="">******************** TEST 'Clang :: Driver/darwin-ld-lto.c' FAILED ********************<br class="">Script:<br class="">--<br class="">: 'RUN: at line 5';   mkdir -p /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp/bin<br class="">: 'RUN: at line 6';   mkdir -p /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp/lib<br class="">: 'RUN: at line 7';   touch /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp/lib/libLTO.dylib<br class="">: 'RUN: at line 8';   /Users/matt/src/llvm/build_debug/bin/clang -target x86_64-apple-darwin10 -### /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c    -ccc-install-dir /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp/bin -mlinker-version=133 2> /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp.log<br class="">: 'RUN: at line 10';   /Users/matt/src/llvm/build_debug/bin/FileCheck -check-prefix=LINK_LTOLIB_PATH /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c -input-file /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp.log<br class="">: 'RUN: at line 17';   /Users/matt/src/llvm/build_debug/bin/clang -target x86_64-apple-darwin10 -### /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c    -ccc-install-dir /Users/matt/src/llvm/tools/clang/test/Driver/dummytestdir -mlinker-version=133 2> /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp.log<br class="">: 'RUN: at line 19';   /Users/matt/src/llvm/build_debug/bin/FileCheck -check-prefix=LINK_LTOLIB_PATH /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c -input-file /Users/matt/src/llvm/build_debug/tools/clang/test/Driver/Output/darwin-ld-lto.c.tmp.log<br class="">: 'RUN: at line 23';   /Users/matt/src/llvm/build_debug/bin/clang -target x86_64-apple-darwin10 /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c -flto=full -### 2>&1 |    /Users/matt/src/llvm/build_debug/bin/FileCheck -check-prefix=FULL_LTO_OBJECT_PATH /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c<br class="">: 'RUN: at line 27';   /Users/matt/src/llvm/build_debug/bin/clang -target x86_64-apple-darwin10 /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c -flto=thin -### 2>&1 |    /Users/matt/src/llvm/build_debug/bin/FileCheck -check-prefix=THIN_LTO_OBJECT_PATH /Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c<br class="">--<br class="">Exit Code: 1<br class=""><br class="">Command Output (stderr):<br class="">--<br class="">/Users/matt/src/llvm/tools/clang/test/Driver/darwin-ld-lto.c:25:26: error: FULL_LTO_OBJECT_PATH: expected string not found in input<br class="">// FULL_LTO_OBJECT_PATH: /usr/bin/ld<br class="">                         ^<br class=""><stdin>:1:1: note: scanning from here<br class="">clang version 9.0.0 (trunk 352514) (llvm/trunk 352520)<br class="">^<br class=""><stdin>:6:9: note: possible intended match here<br class=""> "/opt/local/bin/ld" "-demangle" "-object_path_lto" "/var/folders/5g/8bzrsr594pqb8hwn2bw55d7h0000gn/T/lit_tmp_5K80Fp/cc-5e3f63.o" "-lto_library" "/Users/matt/src/llvm/build_debug/lib/libLTO.dylib" "-no_deduplicate" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-o" "a.out" "-lcrt1.10.6.o" "/var/folders/5g/8bzrsr594pqb8hwn2bw55d7h0000gn/T/lit_tmp_5K80Fp/darwin-ld-lto-268cad.o" "-lSystem"<br class="">        ^<br class=""><br class="">--<br class=""><br class="">********************<br class="">Testing Time: 0.32s<br class="">********************<br class="">Failing Tests (1):<br class="">    Clang :: Driver/darwin-ld-lto.c<br class=""><br class="">  Unexpected Failures: 1<br class=""><br class=""></div><br class=""></div></div></blockquote></div><br class=""></div></body></html>