Driver: Give Compilation::Execute total control over the Driver result
code; and don't return an error code when -### is present, even if
errors occur.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67425 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h
index 2a91842..7a52498 100644
--- a/include/clang/Driver/Driver.h
+++ b/include/clang/Driver/Driver.h
@@ -109,6 +109,8 @@
 
   const OptTable &getOpts() const { return *Opts; }
 
+  const Diagnostic &getDiags() const { return Diags; }
+
   /// @}
   /// @name Primary Functionality
   /// @{
diff --git a/lib/Driver/Compilation.cpp b/lib/Driver/Compilation.cpp
index 48796af..a2fc921 100644
--- a/lib/Driver/Compilation.cpp
+++ b/lib/Driver/Compilation.cpp
@@ -160,6 +160,10 @@
     return 0;
   }
 
+  // If there were errors building the compilation, quit now.
+  if (getDriver().getDiags().getNumErrors())
+    return 1;
+
   int Res = ExecuteJob(Jobs);
   
   // Remove temp files.
diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp
index 865b57c..b227761 100644
--- a/tools/driver/driver.cpp
+++ b/tools/driver/driver.cpp
@@ -87,15 +87,11 @@
                                                
   llvm::OwningPtr<Compilation> C(TheDriver->BuildCompilation(argc, argv));
 
-  // If there were errors building the compilation, quit now.
-  if (Diags.getNumErrors())
-    return 1;
-  if (!C.get())
-    return 0;
-
-  int res = C->Execute();
+  int Res = 0;
+  if (C.get())
+    Res = C->Execute();
 
   llvm::llvm_shutdown();
 
-  return res;
+  return Res;
 }