summaryrefslogtreecommitdiff
path: root/tools/driver/driver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/driver/driver.cpp')
-rw-r--r--tools/driver/driver.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp
index 2108c8fbdbfee..3f1cca1f887a2 100644
--- a/tools/driver/driver.cpp
+++ b/tools/driver/driver.cpp
@@ -24,6 +24,7 @@
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Regex.h"
+#include "llvm/Support/Timer.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Host.h"
#include "llvm/System/Path.h"
@@ -73,10 +74,10 @@ static const char *SaveStringInSet(std::set<std::string> &SavedStrings,
/// \param Args - The vector of command line arguments.
/// \param Edit - The override command to perform.
/// \param SavedStrings - Set to use for storing string representations.
-void ApplyOneQAOverride(llvm::raw_ostream &OS,
- std::vector<const char*> &Args,
- llvm::StringRef Edit,
- std::set<std::string> &SavedStrings) {
+static void ApplyOneQAOverride(llvm::raw_ostream &OS,
+ std::vector<const char*> &Args,
+ llvm::StringRef Edit,
+ std::set<std::string> &SavedStrings) {
// This does not need to be efficient.
if (Edit[0] == '^') {
@@ -140,8 +141,9 @@ void ApplyOneQAOverride(llvm::raw_ostream &OS,
/// ApplyQAOverride - Apply a comma separate list of edits to the
/// input argument lists. See ApplyOneQAOverride.
-void ApplyQAOverride(std::vector<const char*> &Args, const char *OverrideStr,
- std::set<std::string> &SavedStrings) {
+static void ApplyQAOverride(std::vector<const char*> &Args,
+ const char *OverrideStr,
+ std::set<std::string> &SavedStrings) {
llvm::raw_ostream *OS = &llvm::errs();
if (OverrideStr[0] == '#') {
@@ -195,12 +197,19 @@ int main(int argc, const char **argv) {
#ifdef CLANG_IS_PRODUCTION
const bool IsProduction = true;
+# ifdef CLANGXX_IS_PRODUCTION
+ const bool CXXIsProduction = true;
+# else
+ const bool CXXIsProduction = false;
+# endif
#else
const bool IsProduction = false;
+ const bool CXXIsProduction = false;
#endif
Driver TheDriver(Path.getBasename(), Path.getDirname(),
llvm::sys::getHostTriple(),
- "a.out", IsProduction, Diags);
+ "a.out", IsProduction, CXXIsProduction,
+ Diags);
// Check for ".*++" or ".*++-[^-]*" to determine if we are a C++
// compiler. This matches things like "c++", "clang++", and "clang++-1.1".
@@ -265,6 +274,11 @@ int main(int argc, const char **argv) {
if (C.get())
Res = TheDriver.ExecuteCompilation(*C);
+
+ // If any timers were active but haven't been destroyed yet, print their
+ // results now. This happens in -disable-free mode.
+ llvm::TimerGroup::printAll(llvm::errs());
+
llvm::llvm_shutdown();
return Res;