Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp	(revision 68438)
+++ lib/Driver/Tools.cpp	(working copy)
@@ -319,8 +319,11 @@
       } else {
         P.eraseSuffix();
         P.appendSuffix("gch");
-        if (P.exists())
+        if (P.exists()) {
           FoundPTH = true;
+        } else {
+          P.eraseSuffix();
+        }
       }
 
       if (FoundPTH) {
@@ -329,6 +332,24 @@
         CmdArgs.push_back(Args.MakeArgString(P.c_str()));
         continue;
       }
+
+      // Workaround to accomodate forced includes ("-include") (PR 3395).
+      //
+      // If the "-include" path is relative, munge it to prepend the current
+      // working directory, and become absolute.  This coerces clang to be
+      // able to find the file.  Otherwise, the path is treated relative to
+      // the compilation unit, and not to the current working directory, as
+      // GCC would treat it.
+      if (!P.isAbsolute()) {
+        llvm::sys::Path ForcedAbsPath(llvm::sys::Path::GetCurrentDirectory());
+
+        assert(ForcedAbsPath.appendComponent(P.toString()) &&
+               "unable to form absolute path for '-include'");
+
+        CmdArgs.push_back("-include");
+        CmdArgs.push_back(Args.MakeArgString(ForcedAbsPath.c_str()));
+        continue;
+      }
     }
 
     // Not translated, render as usual.
