aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-11-30 08:42:10 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-11-30 08:42:10 +0000
commit9deb313835cab5c1139e460a15634268446ee3a6 (patch)
tree324e4324e9ac5477f0b3259b80eeb67d1606cd79
parent3b315264d1a6fa303e20fe0caec306ccafc090de (diff)
clang-cc: Add code (currently disabled) for parsing arguments using clang -cc1 functionality instead of LLVM's CommandLine.
- It works and passes test suite, but I want to polish and test a wee bit more before making the switch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90128 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--tools/clang-cc/clang-cc.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
index 8eae5a1fac..2899684284 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -31,6 +31,7 @@
#include "clang/Frontend/FrontendActions.h"
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Frontend/FrontendPluginRegistry.h"
+#include "clang/Frontend/TextDiagnosticBuffer.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "clang/Frontend/VerifyDiagnosticsClient.h"
#include "llvm/LLVMContext.h"
@@ -273,6 +274,7 @@ int main(int argc, char **argv) {
llvm::InitializeAllTargets();
llvm::InitializeAllAsmPrinters();
+#if 1
llvm::cl::ParseCommandLineOptions(argc, argv,
"LLVM 'Clang' Compiler: http://clang.llvm.org\n");
@@ -296,6 +298,33 @@ int main(int argc, char **argv) {
if (!ConstructCompilerInvocation(Clang.getInvocation(),
Clang.getDiagnostics(), argv[0]))
return 1;
+#else
+ // Buffer diagnostics from argument parsing.
+ TextDiagnosticBuffer DiagsBuffer;
+ Diagnostic Diags(&DiagsBuffer);
+
+ CompilerInvocation::CreateFromArgs(Clang.getInvocation(),
+ (const char**) argv + 1,
+ (const char**) argv + argc, argv[0],
+ (void*)(intptr_t) GetBuiltinIncludePath,
+ Diags);
+
+ // Create the actual diagnostics engine.
+ Clang.createDiagnostics(argc, argv);
+ if (!Clang.hasDiagnostics())
+ return 1;
+
+ // Set an error handler, so that any LLVM backend diagnostics go through our
+ // error handler.
+ llvm::llvm_install_error_handler(LLVMErrorHandler,
+ static_cast<void*>(&Clang.getDiagnostics()));
+
+ DiagsBuffer.FlushDiagnostics(Clang.getDiagnostics());
+
+ // If there were any errors in processing arguments, exit now.
+ if (Clang.getDiagnostics().getNumErrors())
+ return 1;
+#endif
// Create the target instance.
Clang.setTarget(TargetInfo::CreateTargetInfo(Clang.getDiagnostics(),