]> granicus.if.org Git - clang/commitdiff
ASTUnit: Don't check that input files exist when parsing ASTs from the command
authorDaniel Dunbar <daniel@zuster.org>
Mon, 25 Jan 2010 00:44:02 +0000 (00:44 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Mon, 25 Jan 2010 00:44:02 +0000 (00:44 +0000)
line -- they may be remapped (fake) files. This is useful for testing parsing
entirely from memory.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94395 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Driver.h
lib/Driver/Driver.cpp
lib/Frontend/ASTUnit.cpp

index 3186471ce613fa69ca795f6cab957edc57d7174c..64f88ed9831817f1d79fa62df88d95a1f199fc27 100644 (file)
@@ -77,32 +77,36 @@ public:
   /// Information about the host which can be overriden by the user.
   std::string HostBits, HostMachine, HostSystem, HostRelease;
 
+  /// Name to use when calling the generic gcc.
+  std::string CCCGenericGCCName;
+
   /// Whether the driver should follow g++ like behavior.
-  bool CCCIsCXX : 1;
+  unsigned CCCIsCXX : 1;
 
   /// Echo commands while executing (in -v style).
-  bool CCCEcho : 1;
+  unsigned CCCEcho : 1;
 
   /// Only print tool bindings, don't build any jobs.
-  bool CCCPrintBindings : 1;
-
-  /// Name to use when calling the generic gcc.
-  std::string CCCGenericGCCName;
+  unsigned CCCPrintBindings : 1;
 
 private:
+  /// Whether to check that input files exist when constructing compilation
+  /// jobs.
+  unsigned CheckInputsExist : 1;
+
   /// Use the clang compiler where possible.
-  bool CCCUseClang : 1;
+  unsigned CCCUseClang : 1;
 
   /// Use clang for handling C++ and Objective-C++ inputs.
-  bool CCCUseClangCXX : 1;
+  unsigned CCCUseClangCXX : 1;
 
   /// Use clang as a preprocessor (clang's preprocessor will still be
   /// used where an integrated CPP would).
-  bool CCCUseClangCPP : 1;
+  unsigned CCCUseClangCPP : 1;
 
 public:
   /// Use lazy precompiled headers for PCH support.
-  bool CCCUsePCH;
+  unsigned CCCUsePCH : 1;
 
 private:
   /// Only use clang for the given architectures (only used when
@@ -129,6 +133,10 @@ public:
 
   const Diagnostic &getDiags() const { return Diags; }
 
+  bool getCheckInputsExist() const { return CheckInputsExist; }
+
+  void setCheckInputsExist(bool Value) { CheckInputsExist = Value; }
+
   /// @}
   /// @name Primary Functionality
   /// @{
index 852a018e10f4812e894b014497c8eae1cb15d6f2..62c2d12cd3b89da36ba99317b2cdecc8015c47a7 100644 (file)
@@ -50,8 +50,8 @@ Driver::Driver(llvm::StringRef _Name, llvm::StringRef _Dir,
     Name(_Name), Dir(_Dir), DefaultHostTriple(_DefaultHostTriple),
     DefaultImageName(_DefaultImageName),
     Host(0),
-    CCCIsCXX(false), CCCEcho(false), CCCPrintBindings(false),
-    CCCGenericGCCName("gcc"), CCCUseClang(true),
+    CCCGenericGCCName("gcc"), CCCIsCXX(false), CCCEcho(false),
+    CCCPrintBindings(false), CheckInputsExist(true), CCCUseClang(true),
     CCCUseClangCXX(true), CCCUseClangCPP(true), CCCUsePCH(true),
     SuppressMissingInputWarning(false) {
   if (IsProduction) {
@@ -579,10 +579,9 @@ void Driver::BuildActions(const ArgList &Args, ActionList &Actions) const {
         Ty = InputType;
       }
 
-      // Check that the file exists. It isn't clear this is worth doing, since
-      // the tool presumably does this anyway, and this just adds an extra stat
-      // to the equation, but this is gcc compatible.
-      if (memcmp(Value, "-", 2) != 0 && !llvm::sys::Path(Value).exists())
+      // Check that the file exists, if enabled.
+      if (CheckInputsExist && memcmp(Value, "-", 2) != 0 &&
+          !llvm::sys::Path(Value).exists())
         Diag(clang::diag::err_drv_no_such_file) << A->getValue(Args);
       else
         Inputs.push_back(std::make_pair(Ty, A));
index 2fb47cbd8a85f93535807915af15547b1e23dab0..ff19810233b7c8112ffc9b0355bc46ca5bb1a0fa 100644 (file)
@@ -324,6 +324,10 @@ ASTUnit *ASTUnit::LoadFromCommandLine(const char **ArgBegin,
   // FIXME: We shouldn't have to pass in the path info.
   driver::Driver TheDriver("clang", "/", llvm::sys::getHostTriple(),
                            "a.out", false, Diags);
+
+  // Don't check that inputs exist, they have been remapped.
+  TheDriver.setCheckInputsExist(false);
+
   llvm::OwningPtr<driver::Compilation> C(
     TheDriver.BuildCompilation(Args.size(), Args.data()));