[PATCH] D64196: [clangd] Query driver reads stderr and passes driver as first argument

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 4 04:36:36 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL365132: [clangd] Query driver reads stderr and passes driver as first argument (authored by kadircet, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D64196?vs=207983&id=208018#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D64196/new/

https://reviews.llvm.org/D64196

Files:
  clang-tools-extra/trunk/clangd/QueryDriverDatabase.cpp
  clang-tools-extra/trunk/clangd/test/system-include-extractor.test


Index: clang-tools-extra/trunk/clangd/test/system-include-extractor.test
===================================================================
--- clang-tools-extra/trunk/clangd/test/system-include-extractor.test
+++ clang-tools-extra/trunk/clangd/test/system-include-extractor.test
@@ -3,11 +3,12 @@
 # Generate a mock-driver that will print %temp_dir%/my/dir and
 # %temp_dir%/my/dir2 as include search paths.
 # RUN: echo '#!/bin/bash' >> %t.dir/my_driver.sh
-# RUN: echo 'echo line to ignore' >> %t.dir/my_driver.sh
-# RUN: echo 'echo \#include \<...\> search starts here:' >> %t.dir/my_driver.sh
-# RUN: echo 'echo %t.dir/my/dir/' >> %t.dir/my_driver.sh
-# RUN: echo 'echo %t.dir/my/dir2/' >> %t.dir/my_driver.sh
-# RUN: echo 'echo End of search list.' >> %t.dir/my_driver.sh
+# RUN: echo '[ "$0" = "%t.dir/my_driver.sh" ] || exit' >> %t.dir/my_driver.sh
+# RUN: echo 'echo line to ignore >&2' >> %t.dir/my_driver.sh
+# RUN: echo 'echo \#include \<...\> search starts here: >&2' >> %t.dir/my_driver.sh
+# RUN: echo 'echo %t.dir/my/dir/ >&2' >> %t.dir/my_driver.sh
+# RUN: echo 'echo %t.dir/my/dir2/ >&2' >> %t.dir/my_driver.sh
+# RUN: echo 'echo End of search list. >&2' >> %t.dir/my_driver.sh
 # RUN: chmod +x %t.dir/my_driver.sh
 
 # Create header files my/dir/a.h and my/dir2/b.h
Index: clang-tools-extra/trunk/clangd/QueryDriverDatabase.cpp
===================================================================
--- clang-tools-extra/trunk/clangd/QueryDriverDatabase.cpp
+++ clang-tools-extra/trunk/clangd/QueryDriverDatabase.cpp
@@ -102,20 +102,19 @@
     return {};
   }
 
-  llvm::SmallString<128> OutputPath;
-  auto EC = llvm::sys::fs::createTemporaryFile("system-includes", "clangd",
-                                               OutputPath);
-  if (EC) {
+  llvm::SmallString<128> StdErrPath;
+  if (auto EC = llvm::sys::fs::createTemporaryFile("system-includes", "clangd",
+                                                   StdErrPath)) {
     elog("System include extraction: failed to create temporary file with "
          "error {0}",
          EC.message());
     return {};
   }
   auto CleanUp = llvm::make_scope_exit(
-      [&OutputPath]() { llvm::sys::fs::remove(OutputPath); });
+      [&StdErrPath]() { llvm::sys::fs::remove(StdErrPath); });
 
   llvm::Optional<llvm::StringRef> Redirects[] = {
-      {""}, llvm::StringRef(OutputPath), {""}};
+      {""}, {""}, llvm::StringRef(StdErrPath)};
 
   auto Type = driver::types::lookupTypeForExtension(Ext);
   if (Type == driver::types::TY_INVALID) {
@@ -123,22 +122,21 @@
     return {};
   }
   // Should we also preserve flags like "-sysroot", "-nostdinc" ?
-  const llvm::StringRef Args[] = {"-E", "-x", driver::types::getTypeName(Type),
-                                  "-", "-v"};
+  const llvm::StringRef Args[] = {
+      Driver, "-E", "-x", driver::types::getTypeName(Type), "-", "-v"};
 
-  int RC =
-      llvm::sys::ExecuteAndWait(Driver, Args, /*Env=*/llvm::None, Redirects);
-  if (RC) {
+  if (int RC = llvm::sys::ExecuteAndWait(Driver, Args, /*Env=*/llvm::None,
+                                         Redirects)) {
     elog("System include extraction: driver execution failed with return code: "
          "{0}",
          llvm::to_string(RC));
     return {};
   }
 
-  auto BufOrError = llvm::MemoryBuffer::getFile(OutputPath);
+  auto BufOrError = llvm::MemoryBuffer::getFile(StdErrPath);
   if (!BufOrError) {
     elog("System include extraction: failed to read {0} with error {1}",
-         OutputPath, BufOrError.getError().message());
+         StdErrPath, BufOrError.getError().message());
     return {};
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64196.208018.patch
Type: text/x-patch
Size: 3619 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190704/e77406f7/attachment-0001.bin>


More information about the cfe-commits mailing list