diff options
-rw-r--r-- | include/clang/Driver/Driver.h | 28 | ||||
-rw-r--r-- | lib/Driver/Driver.cpp | 11 | ||||
-rw-r--r-- | lib/Frontend/ASTUnit.cpp | 4 |
3 files changed, 27 insertions, 16 deletions
diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h index 3186471ce6..64f88ed983 100644 --- a/include/clang/Driver/Driver.h +++ b/include/clang/Driver/Driver.h @@ -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 /// @{ diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 852a018e10..62c2d12cd3 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -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)); diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index 2fb47cbd8a..ff19810233 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -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())); |