diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-30 08:42:10 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-30 08:42:10 +0000 |
commit | bd74028095cb683fe289edac43ef3a712d2a03d0 (patch) | |
tree | f8e5dabd05b9051f4416d66aef6fffd3926d24c1 | |
parent | a74f8ff15c0c083c77c58071c9fb621af9f0e214 (diff) | |
download | bcm5719-llvm-bd74028095cb683fe289edac43ef3a712d2a03d0.tar.gz bcm5719-llvm-bd74028095cb683fe289edac43ef3a712d2a03d0.zip |
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.
llvm-svn: 90128
-rw-r--r-- | clang/tools/clang-cc/clang-cc.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp index 8eae5a1fac7..2899684284a 100644 --- a/clang/tools/clang-cc/clang-cc.cpp +++ b/clang/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(), |