r188128 - Simplify now that llvm::sys::current_path checks $PWD.

Rafael Espindola rafael.espindola at gmail.com
Fri Aug 9 18:40:11 PDT 2013


Author: rafael
Date: Fri Aug  9 20:40:10 2013
New Revision: 188128

URL: http://llvm.org/viewvc/llvm-project?rev=188128&view=rev
Log:
Simplify now that llvm::sys::current_path checks $PWD.

Modified:
    cfe/trunk/include/clang/Tooling/Tooling.h
    cfe/trunk/lib/Driver/Tools.cpp
    cfe/trunk/lib/Tooling/Tooling.cpp
    cfe/trunk/test/Tooling/auto-detect-from-source-parent-of-cwd.cpp
    cfe/trunk/test/Tooling/clang-check-pwd.cpp

Modified: cfe/trunk/include/clang/Tooling/Tooling.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Tooling.h?rev=188128&r1=188127&r2=188128&view=diff
==============================================================================
--- cfe/trunk/include/clang/Tooling/Tooling.h (original)
+++ cfe/trunk/include/clang/Tooling/Tooling.h Fri Aug  9 20:40:10 2013
@@ -305,10 +305,8 @@ inline FrontendActionFactory *newFronten
 /// Otherwise, the returned path will contain the literal path-concatenation of
 /// the current directory and \c File.
 ///
-/// The difference to llvm::sys::fs::make_absolute is that we prefer
-/// ::getenv("PWD") if available.
-/// FIXME: Make this functionality available from llvm::sys::fs and delete
-///        this function.
+/// The difference to llvm::sys::fs::make_absolute is the canonicalization this
+/// does by removing "./" and computing native paths.
 ///
 /// \param File Either an absolute or relative path.
 std::string getAbsolutePath(StringRef File);

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=188128&r1=188127&r2=188128&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Fri Aug  9 20:40:10 2013
@@ -1780,24 +1780,8 @@ static bool shouldUseLeafFramePointer(co
   return true;
 }
 
-/// If the PWD environment variable is set, add a CC1 option to specify the
-/// debug compilation directory.
+/// Add a CC1 option to specify the debug compilation directory.
 static void addDebugCompDirArg(const ArgList &Args, ArgStringList &CmdArgs) {
-  const char *pwd = ::getenv("PWD");
-  if (!pwd)
-    return;
-
-  llvm::sys::fs::file_status PWDStatus, DotStatus;
-  if (llvm::sys::path::is_absolute(pwd) &&
-      !llvm::sys::fs::status(pwd, PWDStatus) &&
-      !llvm::sys::fs::status(".", DotStatus) &&
-      PWDStatus.getUniqueID() == DotStatus.getUniqueID()) {
-    CmdArgs.push_back("-fdebug-compilation-dir");
-    CmdArgs.push_back(Args.MakeArgString(pwd));
-    return;
-  }
-
-  // Fall back to using getcwd.
   SmallString<128> cwd;
   if (!llvm::sys::fs::current_path(cwd)) {
     CmdArgs.push_back("-fdebug-compilation-dir");
@@ -2494,12 +2478,10 @@ void Clang::ConstructJob(Compilation &C,
       CmdArgs.push_back("-coverage-file");
       SmallString<128> CoverageFilename(Output.getFilename());
       if (llvm::sys::path::is_relative(CoverageFilename.str())) {
-        if (const char *pwd = ::getenv("PWD")) {
-          if (llvm::sys::path::is_absolute(pwd)) {
-            SmallString<128> Pwd(pwd);
-            llvm::sys::path::append(Pwd, CoverageFilename.str());
-            CoverageFilename.swap(Pwd);
-          }
+        SmallString<128> Pwd;
+        if (!llvm::sys::fs::current_path(Pwd)) {
+          llvm::sys::path::append(Pwd, CoverageFilename.str());
+          CoverageFilename.swap(Pwd);
         }
       }
       CmdArgs.push_back(Args.MakeArgString(CoverageFilename));

Modified: cfe/trunk/lib/Tooling/Tooling.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Tooling.cpp?rev=188128&r1=188127&r2=188128&view=diff
==============================================================================
--- cfe/trunk/lib/Tooling/Tooling.cpp (original)
+++ cfe/trunk/lib/Tooling/Tooling.cpp Fri Aug  9 20:40:10 2013
@@ -124,23 +124,16 @@ bool runToolOnCodeWithArgs(clang::Fronte
 }
 
 std::string getAbsolutePath(StringRef File) {
-  SmallString<1024> BaseDirectory;
-  if (const char *PWD = ::getenv("PWD"))
-    BaseDirectory = PWD;
-  else
-    llvm::sys::fs::current_path(BaseDirectory);
-  SmallString<1024> PathStorage;
-  if (llvm::sys::path::is_absolute(File)) {
-    llvm::sys::path::native(File, PathStorage);
-    return PathStorage.str();
-  }
   StringRef RelativePath(File);
   // FIXME: Should '.\\' be accepted on Win32?
   if (RelativePath.startswith("./")) {
     RelativePath = RelativePath.substr(strlen("./"));
   }
-  SmallString<1024> AbsolutePath(BaseDirectory);
-  llvm::sys::path::append(AbsolutePath, RelativePath);
+
+  SmallString<1024> AbsolutePath = RelativePath;
+  llvm::error_code EC = llvm::sys::fs::make_absolute(AbsolutePath);
+  assert(!EC);
+  SmallString<1024> PathStorage;
   llvm::sys::path::native(Twine(AbsolutePath), PathStorage);
   return PathStorage.str();
 }

Modified: cfe/trunk/test/Tooling/auto-detect-from-source-parent-of-cwd.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/auto-detect-from-source-parent-of-cwd.cpp?rev=188128&r1=188127&r2=188128&view=diff
==============================================================================
--- cfe/trunk/test/Tooling/auto-detect-from-source-parent-of-cwd.cpp (original)
+++ cfe/trunk/test/Tooling/auto-detect-from-source-parent-of-cwd.cpp Fri Aug  9 20:40:10 2013
@@ -2,11 +2,15 @@
 // RUN: mkdir -p %t/abc/def/ijk/qwe
 // RUN: echo "[{\"directory\":\".\",\"command\":\"clang++ -c %t/abc/def/ijk/qwe/test.cpp\",\"file\":\"%t/abc/def/ijk/qwe/test.cpp\"}]" | sed -e 's/\\/\\\\/g' > %t/compile_commands.json
 // RUN: cp "%s" "%t/abc/def/ijk/qwe/test.cpp"
+// RUN: ln -sf %t/abc/def %t/abc/def2
+// RUN: cd %t/abc/def2
 // RUN: not env PWD="%t/abc/def" clang-check "ijk/qwe/test.cpp" 2>&1 | FileCheck %s
 
 // CHECK: C++ requires
+// CHECK: /abc/def/ijk/qwe/test.cpp
 invalid;
 
 // REQUIRES: shell
 // PR15590
 // XFAIL: win64
+// XFAIL: mingw

Modified: cfe/trunk/test/Tooling/clang-check-pwd.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-pwd.cpp?rev=188128&r1=188127&r2=188128&view=diff
==============================================================================
--- cfe/trunk/test/Tooling/clang-check-pwd.cpp (original)
+++ cfe/trunk/test/Tooling/clang-check-pwd.cpp Fri Aug  9 20:40:10 2013
@@ -2,12 +2,16 @@
 // RUN: mkdir %t
 // RUN: echo "[{\"directory\":\".\",\"command\":\"clang++ -c %t/test.cpp\",\"file\":\"%t/test.cpp\"}]" | sed -e 's/\\/\\\\/g' > %t/compile_commands.json
 // RUN: cp "%s" "%t/test.cpp"
-// RUN: not env PWD="%t" clang-check -p "%t" "test.cpp" 2>&1|FileCheck %s
+// RUN: ln -sf %t %t.foobar
+// RUN: cd %t
+// RUN: not env PWD="%t.foobar" clang-check -p "%t" "test.cpp" 2>&1|FileCheck %s
 // FIXME: Make the above easier.
 
 // CHECK: C++ requires
+// CHECK: .foobar/test.cpp
 invalid;
 
 // REQUIRES: shell
 // PR15590
 // XFAIL: win64
+// XFAIL: mingw





More information about the cfe-commits mailing list