summaryrefslogtreecommitdiffstats
path: root/tools/clang-cc
diff options
context:
space:
mode:
Diffstat (limited to 'tools/clang-cc')
-rw-r--r--tools/clang-cc/CMakeLists.txt32
-rw-r--r--tools/clang-cc/Makefile32
-rw-r--r--tools/clang-cc/Options.cpp1265
-rw-r--r--tools/clang-cc/Options.h54
-rw-r--r--tools/clang-cc/clang-cc.cpp408
5 files changed, 0 insertions, 1791 deletions
diff --git a/tools/clang-cc/CMakeLists.txt b/tools/clang-cc/CMakeLists.txt
deleted file mode 100644
index c96e8b1..0000000
--- a/tools/clang-cc/CMakeLists.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-set(LLVM_NO_RTTI 1)
-
-set( LLVM_USED_LIBS
- clangDriver
- clangFrontend
- clangCodeGen
- clangAnalysis
- clangRewrite
- clangSema
- clangAST
- clangParse
- clangLex
- clangBasic
- )
-
-set( LLVM_LINK_COMPONENTS
- ${LLVM_TARGETS_TO_BUILD}
- bitreader
- bitwriter
- codegen
- ipo
- selectiondag
- )
-
-add_clang_executable(clang-cc
- clang-cc.cpp
- Options.cpp
- )
-add_dependencies(clang-cc clang-headers)
-
-install(TARGETS clang-cc
- RUNTIME DESTINATION libexec)
diff --git a/tools/clang-cc/Makefile b/tools/clang-cc/Makefile
deleted file mode 100644
index ebcc1d5..0000000
--- a/tools/clang-cc/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-##===- tools/clang-cc/Makefile -----------------------------*- Makefile -*-===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-##===----------------------------------------------------------------------===##
-LEVEL = ../../../..
-
-TOOLNAME = clang-cc
-CPPFLAGS += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include
-CXXFLAGS = -fno-rtti
-
-# Clang has no plugins, optimize startup time.
-TOOL_NO_EXPORTS = 1
-
-# Include this here so we can get the configuration of the targets
-# that have been configured for construction. We have to do this
-# early so we can set up LINK_COMPONENTS before including Makefile.rules
-include $(LEVEL)/Makefile.config
-
-LINK_COMPONENTS := $(TARGETS_TO_BUILD) bitreader bitwriter codegen ipo selectiondag
-USEDLIBS = clangDriver.a clangFrontend.a clangCodeGen.a clangAnalysis.a \
- clangRewrite.a clangSema.a clangAST.a clangParse.a \
- clangLex.a clangBasic.a
-
-# clang-cc lives in a special location; we can get away with this
-# because nothing else gets installed from here.
-PROJ_bindir := $(DESTDIR)$(PROJ_prefix)/libexec
-
-include $(LLVM_SRC_ROOT)/Makefile.rules
diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp
deleted file mode 100644
index a18598e..0000000
--- a/tools/clang-cc/Options.cpp
+++ /dev/null
@@ -1,1265 +0,0 @@
-//===--- Options.cpp - clang-cc Option Handling ---------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// This file contains "pure" option handling, it is only responsible for turning
-// the options into internal *Option classes, but shouldn't have any other
-// logic.
-
-#include "Options.h"
-#include "clang/Basic/LangOptions.h"
-#include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/TargetOptions.h"
-#include "clang/Frontend/AnalysisConsumer.h"
-#include "clang/CodeGen/CodeGenOptions.h"
-#include "clang/Frontend/DependencyOutputOptions.h"
-#include "clang/Frontend/DiagnosticOptions.h"
-#include "clang/Frontend/FrontendOptions.h"
-#include "clang/Frontend/HeaderSearchOptions.h"
-#include "clang/Frontend/LangStandard.h"
-#include "clang/Frontend/PCHReader.h"
-#include "clang/Frontend/PreprocessorOptions.h"
-#include "clang/Frontend/PreprocessorOutputOptions.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/RegistryParser.h"
-#include "llvm/System/Host.h"
-#include <stdio.h>
-
-using namespace clang;
-
-//===----------------------------------------------------------------------===//
-// Analyzer Options
-//===----------------------------------------------------------------------===//
-
-namespace analyzeroptions {
-
-static llvm::cl::list<Analyses>
-AnalysisList(llvm::cl::desc("Source Code Analysis - Checks and Analyses"),
-llvm::cl::values(
-#define ANALYSIS(NAME, CMDFLAG, DESC, SCOPE)\
-clEnumValN(NAME, CMDFLAG, DESC),
-#include "clang/Frontend/Analyses.def"
-clEnumValEnd));
-
-static llvm::cl::opt<AnalysisStores>
-AnalysisStoreOpt("analyzer-store",
- llvm::cl::desc("Source Code Analysis - Abstract Memory Store Models"),
- llvm::cl::init(BasicStoreModel),
- llvm::cl::values(
-#define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN)\
-clEnumValN(NAME##Model, CMDFLAG, DESC),
-#include "clang/Frontend/Analyses.def"
-clEnumValEnd));
-
-static llvm::cl::opt<AnalysisConstraints>
-AnalysisConstraintsOpt("analyzer-constraints",
- llvm::cl::desc("Source Code Analysis - Symbolic Constraint Engines"),
- llvm::cl::init(RangeConstraintsModel),
- llvm::cl::values(
-#define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN)\
-clEnumValN(NAME##Model, CMDFLAG, DESC),
-#include "clang/Frontend/Analyses.def"
-clEnumValEnd));
-
-static llvm::cl::opt<AnalysisDiagClients>
-AnalysisDiagOpt("analyzer-output",
- llvm::cl::desc("Source Code Analysis - Output Options"),
- llvm::cl::init(PD_HTML),
- llvm::cl::values(
-#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREATE)\
-clEnumValN(PD_##NAME, CMDFLAG, DESC),
-#include "clang/Frontend/Analyses.def"
-clEnumValEnd));
-
-static llvm::cl::opt<bool>
-AnalyzeAll("analyzer-opt-analyze-headers",
- llvm::cl::desc("Force the static analyzer to analyze "
- "functions defined in header files"));
-
-static llvm::cl::opt<bool>
-AnalyzerDisplayProgress("analyzer-display-progress",
- llvm::cl::desc("Emit verbose output about the analyzer's progress"));
-
-static llvm::cl::opt<bool>
-AnalyzerExperimentalChecks("analyzer-experimental-checks",
- llvm::cl::desc("Use experimental path-sensitive checks"));
-
-static llvm::cl::opt<bool>
-AnalyzerExperimentalInternalChecks("analyzer-experimental-internal-checks",
- llvm::cl::desc("Use new default path-sensitive checks currently in testing"));
-
-static llvm::cl::opt<std::string>
-AnalyzeSpecificFunction("analyze-function",
- llvm::cl::desc("Run analysis on specific function"));
-
-static llvm::cl::opt<bool>
-EagerlyAssume("analyzer-eagerly-assume",
- llvm::cl::desc("Eagerly assume the truth/falseness of some "
- "symbolic constraints"));
-
-static llvm::cl::opt<bool>
-NoPurgeDead("analyzer-no-purge-dead",
- llvm::cl::desc("Don't remove dead symbols, bindings, and constraints before"
- " processing a statement"));
-
-static llvm::cl::opt<bool>
-TrimGraph("trim-egraph",
- llvm::cl::desc("Only show error-related paths in the analysis graph"));
-
-static llvm::cl::opt<bool>
-VisualizeEGDot("analyzer-viz-egraph-graphviz",
- llvm::cl::desc("Display exploded graph using GraphViz"));
-
-static llvm::cl::opt<bool>
-VisualizeEGUbi("analyzer-viz-egraph-ubigraph",
- llvm::cl::desc("Display exploded graph using Ubigraph"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Code Generation Options
-//===----------------------------------------------------------------------===//
-
-namespace codegenoptions {
-
-static llvm::cl::opt<bool>
-DisableLLVMOptimizations("disable-llvm-optzns",
- llvm::cl::desc("Don't run LLVM optimization passes"));
-
-static llvm::cl::opt<bool>
-DisableRedZone("disable-red-zone",
- llvm::cl::desc("Do not emit code that uses the red zone."));
-
-static llvm::cl::opt<bool>
-GenerateDebugInfo("g",
- llvm::cl::desc("Generate source level debug information"));
-
-static llvm::cl::opt<bool>
-MAsmVerbose("masm-verbose", llvm::cl::desc("Generate verbose assembly output"));
-
-static llvm::cl::opt<std::string>
-MCodeModel("mcode-model", llvm::cl::desc("The code model to use"));
-
-static llvm::cl::opt<std::string>
-MDebugPass("mdebu-pass", llvm::cl::desc("Output additional debug information"));
-
-static llvm::cl::opt<bool>
-MDisableFPElim("mdisable-fp-elim",
- llvm::cl::desc("Disable frame pointer elimination optimization"));
-
-static llvm::cl::opt<std::string>
-MFloatABI("mfloat-abi", llvm::cl::desc("The float ABI to use"));
-
-static llvm::cl::opt<std::string>
-MLimitFloatPrecision("mlimit-float-precision",
- llvm::cl::desc("Limit float precision to the given value"));
-
-static llvm::cl::opt<bool>
-MNoZeroInitializedInBSS("mno-zero-initialized-in-bss",
- llvm::cl::desc("Do not put zero initialized data in the BSS"));
-
-static llvm::cl::opt<bool>
-MSoftFloat("msoft-float", llvm::cl::desc("Use software floating point"));
-
-static llvm::cl::opt<std::string>
-MRelocationModel("mrelocation-model",
- llvm::cl::desc("The relocation model to use"),
- llvm::cl::init("pic"));
-
-static llvm::cl::opt<bool>
-MUnwindTables("munwind-tables",
- llvm::cl::desc("Generate unwinding tables for all functions"));
-
-static llvm::cl::opt<std::string>
-MainFileName("main-file-name",
- llvm::cl::desc("Main file name to use for debug info"));
-
-static llvm::cl::opt<bool>
-NoCommon("fno-common",
- llvm::cl::desc("Compile common globals like normal definitions"),
- llvm::cl::ValueDisallowed);
-
-static llvm::cl::opt<bool>
-NoImplicitFloat("no-implicit-float",
- llvm::cl::desc("Don't generate implicit floating point instructions (x86-only)"));
-
-static llvm::cl::opt<bool>
-NoMergeConstants("fno-merge-all-constants",
- llvm::cl::desc("Disallow merging of constants."));
-
-// It might be nice to add bounds to the CommandLine library directly.
-struct OptLevelParser : public llvm::cl::parser<unsigned> {
- bool parse(llvm::cl::Option &O, llvm::StringRef ArgName,
- llvm::StringRef Arg, unsigned &Val) {
- if (llvm::cl::parser<unsigned>::parse(O, ArgName, Arg, Val))
- return true;
- if (Val > 3)
- return O.error("'" + Arg + "' invalid optimization level!");
- return false;
- }
-};
-static llvm::cl::opt<unsigned, false, OptLevelParser>
-OptLevel("O", llvm::cl::Prefix,
- llvm::cl::desc("Optimization level"));
-
-static llvm::cl::opt<bool>
-OptSize("Os", llvm::cl::desc("Optimize for size"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Dependency Output Options
-//===----------------------------------------------------------------------===//
-
-namespace dependencyoutputoptions {
-
-static llvm::cl::opt<std::string>
-DependencyFile("dependency-file",
- llvm::cl::desc("Filename (or -) to write dependency output to"));
-
-static llvm::cl::opt<bool>
-DependenciesIncludeSystemHeaders("sys-header-deps",
- llvm::cl::desc("Include system headers in dependency output"));
-
-static llvm::cl::list<std::string>
-DependencyTargets("MT",
- llvm::cl::desc("Specify target for dependency"));
-
-static llvm::cl::opt<bool>
-PhonyDependencyTarget("MP",
- llvm::cl::desc("Create phony target for each dependency "
- "(other than main file)"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Diagnostic Options
-//===----------------------------------------------------------------------===//
-
-namespace diagnosticoptions {
-
-static llvm::cl::opt<std::string>
-DumpBuildInformation("dump-build-information",
- llvm::cl::value_desc("filename"),
- llvm::cl::desc("output a dump of some build information to a file"));
-
-static llvm::cl::opt<bool>
-NoShowColumn("fno-show-column",
- llvm::cl::desc("Do not include column number on diagnostics"));
-
-static llvm::cl::opt<bool>
-NoShowLocation("fno-show-source-location",
- llvm::cl::desc("Do not include source location information with"
- " diagnostics"));
-
-static llvm::cl::opt<bool>
-NoCaretDiagnostics("fno-caret-diagnostics",
- llvm::cl::desc("Do not include source line and caret with"
- " diagnostics"));
-
-static llvm::cl::opt<bool>
-NoDiagnosticsFixIt("fno-diagnostics-fixit-info",
- llvm::cl::desc("Do not include fixit information in"
- " diagnostics"));
-
-static llvm::cl::opt<bool> OptNoWarnings("w");
-
-static llvm::cl::opt<bool> OptPedantic("pedantic");
-
-static llvm::cl::opt<bool> OptPedanticErrors("pedantic-errors");
-
-// This gets all -W options, including -Werror, -W[no-]system-headers, etc. The
-// driver has stripped off -Wa,foo etc. The driver has also translated -W to
-// -Wextra, so we don't need to worry about it.
-static llvm::cl::list<std::string>
-OptWarnings("W", llvm::cl::Prefix, llvm::cl::ValueOptional);
-
-static llvm::cl::opt<bool>
-PrintSourceRangeInfo("fdiagnostics-print-source-range-info",
- llvm::cl::desc("Print source range spans in numeric form"));
-
-static llvm::cl::opt<bool>
-PrintDiagnosticOption("fdiagnostics-show-option",
- llvm::cl::desc("Print diagnostic name with mappable diagnostics"));
-
-static llvm::cl::opt<unsigned>
-MessageLength("fmessage-length",
- llvm::cl::desc("Format message diagnostics so that they fit "
- "within N columns or fewer, when possible."),
- llvm::cl::value_desc("N"));
-
-static llvm::cl::opt<bool>
-PrintColorDiagnostic("fcolor-diagnostics",
- llvm::cl::desc("Use colors in diagnostics"));
-
-static llvm::cl::opt<bool>
-SilenceRewriteMacroWarning("Wno-rewrite-macros",
- llvm::cl::desc("Silence ObjC rewriting warnings"));
-
-static llvm::cl::opt<bool>
-VerifyDiagnostics("verify",
- llvm::cl::desc("Verify emitted diagnostics and warnings"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Frontend Options
-//===----------------------------------------------------------------------===//
-
-namespace frontendoptions {
-
-using namespace clang::frontend;
-
-static llvm::cl::opt<ParsedSourceLocation>
-CodeCompletionAt("code-completion-at",
- llvm::cl::value_desc("file:line:column"),
- llvm::cl::desc("Dump code-completion information at a location"));
-
-static llvm::cl::opt<bool>
-NoCodeCompletionDebugPrinter("no-code-completion-debug-printer",
- llvm::cl::desc("Don't the \"debug\" code-completion print"));
-
-static llvm::cl::opt<bool>
-CodeCompletionWantsMacros("code-completion-macros",
- llvm::cl::desc("Include macros in code-completion results"));
-
-static llvm::cl::opt<bool>
-DisableFree("disable-free",
- llvm::cl::desc("Disable freeing of memory on exit"));
-
-static llvm::cl::opt<bool>
-EmptyInputOnly("empty-input-only",
- llvm::cl::desc("Force running on an empty input file"));
-
-static llvm::cl::opt<FrontendOptions::InputKind>
-InputType("x", llvm::cl::desc("Input language type"),
- llvm::cl::init(FrontendOptions::IK_None),
- llvm::cl::values(clEnumValN(FrontendOptions::IK_C, "c", "C"),
- clEnumValN(FrontendOptions::IK_OpenCL, "cl", "OpenCL C"),
- clEnumValN(FrontendOptions::IK_CXX, "c++", "C++"),
- clEnumValN(FrontendOptions::IK_ObjC, "objective-c",
- "Objective C"),
- clEnumValN(FrontendOptions::IK_ObjCXX, "objective-c++",
- "Objective C++"),
- clEnumValN(FrontendOptions::IK_PreprocessedC,
- "cpp-output",
- "Preprocessed C"),
- clEnumValN(FrontendOptions::IK_Asm,
- "assembler-with-cpp",
- "Assembly Source Codde"),
- clEnumValN(FrontendOptions::IK_PreprocessedCXX,
- "c++-cpp-output",
- "Preprocessed C++"),
- clEnumValN(FrontendOptions::IK_PreprocessedObjC,
- "objective-c-cpp-output",
- "Preprocessed Objective C"),
- clEnumValN(FrontendOptions::IK_PreprocessedObjCXX,
- "objective-c++-cpp-output",
- "Preprocessed Objective C++"),
- clEnumValN(FrontendOptions::IK_C, "c-header",
- "C header"),
- clEnumValN(FrontendOptions::IK_ObjC, "objective-c-header",
- "Objective-C header"),
- clEnumValN(FrontendOptions::IK_CXX, "c++-header",
- "C++ header"),
- clEnumValN(FrontendOptions::IK_ObjCXX,
- "objective-c++-header",
- "Objective-C++ header"),
- clEnumValN(FrontendOptions::IK_AST, "ast",
- "Clang AST"),
- clEnumValEnd));
-
-static llvm::cl::list<std::string>
-InputFilenames(llvm::cl::Positional, llvm::cl::desc("<input files>"));
-
-static llvm::cl::opt<std::string>
-InheritanceViewCls("cxx-inheritance-view",
- llvm::cl::value_desc("class name"),
- llvm::cl::desc("View C++ inheritance for a specified class"));
-
-static llvm::cl::list<ParsedSourceLocation>
-FixItAtLocations("fixit-at", llvm::cl::value_desc("source-location"),
- llvm::cl::desc("Perform Fix-It modifications at the given source location"));
-
-static llvm::cl::opt<std::string>
-OutputFile("o",
- llvm::cl::value_desc("path"),
- llvm::cl::desc("Specify output file"));
-
-static llvm::cl::opt<std::string>
-PluginActionName("plugin",
- llvm::cl::desc("Use the named plugin action "
- "(use \"help\" to list available options)"));
-
-static llvm::cl::opt<ActionKind>
-ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore,
- llvm::cl::init(ParseSyntaxOnly),
- llvm::cl::values(
- clEnumValN(RunPreprocessorOnly, "Eonly",
- "Just run preprocessor, no output (for timings)"),
- clEnumValN(PrintPreprocessedInput, "E",
- "Run preprocessor, emit preprocessed file"),
- clEnumValN(DumpRawTokens, "dump-raw-tokens",
- "Lex file in raw mode and dump raw tokens"),
- clEnumValN(RunAnalysis, "analyze",
- "Run static analysis engine"),
- clEnumValN(DumpTokens, "dump-tokens",
- "Run preprocessor, dump internal rep of tokens"),
- clEnumValN(ParseNoop, "parse-noop",
- "Run parser with noop callbacks (for timings)"),
- clEnumValN(ParseSyntaxOnly, "fsyntax-only",
- "Run parser and perform semantic analysis"),
- clEnumValN(FixIt, "fixit",
- "Apply fix-it advice to the input source"),
- clEnumValN(ParsePrintCallbacks, "parse-print-callbacks",
- "Run parser and print each callback invoked"),
- clEnumValN(EmitHTML, "emit-html",
- "Output input source as HTML"),
- clEnumValN(ASTPrint, "ast-print",
- "Build ASTs and then pretty-print them"),
- clEnumValN(ASTPrintXML, "ast-print-xml",
- "Build ASTs and then print them in XML format"),
- clEnumValN(ASTDump, "ast-dump",
- "Build ASTs and then debug dump them"),
- clEnumValN(ASTView, "ast-view",
- "Build ASTs and view them with GraphViz"),
- clEnumValN(PrintDeclContext, "print-decl-contexts",
- "Print DeclContexts and their Decls"),
- clEnumValN(DumpRecordLayouts, "dump-record-layouts",
- "Dump record layout information"),
- clEnumValN(GeneratePTH, "emit-pth",
- "Generate pre-tokenized header file"),
- clEnumValN(GeneratePCH, "emit-pch",
- "Generate pre-compiled header file"),
- clEnumValN(EmitAssembly, "S",
- "Emit native assembly code"),
- clEnumValN(EmitLLVM, "emit-llvm",
- "Build ASTs then convert to LLVM, emit .ll file"),
- clEnumValN(EmitBC, "emit-llvm-bc",
- "Build ASTs then convert to LLVM, emit .bc file"),
- clEnumValN(EmitLLVMOnly, "emit-llvm-only",
- "Build ASTs and convert to LLVM, discarding output"),
- clEnumValN(RewriteTest, "rewrite-test",
- "Rewriter playground"),
- clEnumValN(RewriteObjC, "rewrite-objc",
- "Rewrite ObjC into C (code rewriter example)"),
- clEnumValN(RewriteMacros, "rewrite-macros",
- "Expand macros without full preprocessing"),
- clEnumValN(RewriteBlocks, "rewrite-blocks",
- "Rewrite Blocks to C"),
- clEnumValEnd));
-
-static llvm::cl::opt<bool>
-RelocatablePCH("relocatable-pch",
- llvm::cl::desc("Whether to build a relocatable precompiled "
- "header"));
-static llvm::cl::opt<bool>
-Stats("print-stats",
- llvm::cl::desc("Print performance metrics and statistics"));
-
-static llvm::cl::opt<bool>
-TimeReport("ftime-report",
- llvm::cl::desc("Print the amount of time each "
- "phase of compilation takes"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Language Options
-//===----------------------------------------------------------------------===//
-
-namespace langoptions {
-
-using namespace clang::frontend;
-
-static llvm::cl::opt<bool>
-NoBuiltin("fno-builtin",
- llvm::cl::desc("Disable implicit builtin knowledge of functions"));
-
-static llvm::cl::opt<bool>
-AltiVec("faltivec", llvm::cl::desc("Enable AltiVec vector initializer syntax"));
-
-static llvm::cl::opt<bool>
-AccessControl("faccess-control",
- llvm::cl::desc("Enable C++ access control"));
-
-static llvm::cl::opt<bool>
-NoSignedChar("fno-signed-char",
- llvm::cl::desc("Char is unsigned"));
-
-static llvm::cl::opt<bool>
-DollarsInIdents("fdollars-in-identifiers",
- llvm::cl::desc("Allow '$' in identifiers"));
-
-static llvm::cl::opt<bool>
-EmitAllDecls("femit-all-decls",
- llvm::cl::desc("Emit all declarations, even if unused"));
-
-static llvm::cl::opt<bool>
-EnableBlocks("fblocks", llvm::cl::desc("enable the 'blocks' language feature"));
-
-static llvm::cl::opt<bool>
-EnableHeinousExtensions("fheinous-gnu-extensions",
- llvm::cl::desc("enable GNU extensions that you really really shouldn't use"),
- llvm::cl::ValueDisallowed, llvm::cl::Hidden);
-
-static llvm::cl::opt<bool>
-Exceptions("fexceptions",
- llvm::cl::desc("Enable support for exception handling"));
-
-static llvm::cl::opt<bool>
-Freestanding("ffreestanding",
- llvm::cl::desc("Assert that the compilation takes place in a "
- "freestanding environment"));
-
-static llvm::cl::opt<bool>
-GNURuntime("fgnu-runtime",
- llvm::cl::desc("Generate output compatible with the standard GNU "
- "Objective-C runtime"));
-
-static llvm::cl::opt<LangStandard::Kind>
-LangStd("std", llvm::cl::desc("Language standard to compile for"),
- llvm::cl::init(LangStandard::lang_unspecified), llvm::cl::values(
-#define LANGSTANDARD(id, name, desc, features) \
- clEnumValN(LangStandard::lang_##id, name, desc),
-#include "clang/Frontend/LangStandards.def"
- clEnumValEnd));
-
-static llvm::cl::opt<bool>
-MSExtensions("fms-extensions",
- llvm::cl::desc("Accept some non-standard constructs used in "
- "Microsoft header files "));
-
-static llvm::cl::opt<bool>
-NoMathErrno("fno-math-errno",
- llvm::cl::desc("Don't require math functions to respect errno"));
-
-static llvm::cl::opt<bool>
-NoElideConstructors("fno-elide-constructors",
- llvm::cl::desc("Disable C++ copy constructor elision"));
-
-static llvm::cl::opt<bool>
-NoLaxVectorConversions("fno-lax-vector-conversions",
- llvm::cl::desc("Disallow implicit conversions between "
- "vectors with a different number of "
- "elements or different element types"));
-
-
-static llvm::cl::opt<bool>
-NoOperatorNames("fno-operator-names",
- llvm::cl::desc("Do not treat C++ operator name keywords as "
- "synonyms for operators"));
-
-static llvm::cl::opt<std::string>
-ObjCConstantStringClass("fconstant-string-class",
- llvm::cl::value_desc("class name"),
- llvm::cl::desc("Specify the class to use for constant "
- "Objective-C string objects."));
-
-static llvm::cl::opt<bool>
-ObjCEnableGC("fobjc-gc",
- llvm::cl::desc("Enable Objective-C garbage collection"));
-
-static llvm::cl::opt<bool>
-ObjCExclusiveGC("fobjc-gc-only",
- llvm::cl::desc("Use GC exclusively for Objective-C related "
- "memory management"));
-
-static llvm::cl::opt<bool>
-ObjCEnableGCBitmapPrint("print-ivar-layout",
- llvm::cl::desc("Enable Objective-C Ivar layout bitmap print trace"));
-
-static llvm::cl::opt<bool>
-ObjCNonFragileABI("fobjc-nonfragile-abi",
- llvm::cl::desc("enable objective-c's nonfragile abi"));
-
-static llvm::cl::opt<bool>
-OverflowChecking("ftrapv",
- llvm::cl::desc("Trap on integer overflow"));
-
-static llvm::cl::opt<unsigned>
-PICLevel("pic-level", llvm::cl::desc("Value for __PIC__"));
-
-static llvm::cl::opt<bool>
-PThread("pthread", llvm::cl::desc("Support POSIX threads in generated code"));
-
-static llvm::cl::opt<bool>
-PascalStrings("fpascal-strings",
- llvm::cl::desc("Recognize and construct Pascal-style "
- "string literals"));
-
-static llvm::cl::opt<bool>
-NoRtti("fno-rtti",
- llvm::cl::desc("Disable generation of rtti information"));
-
-static llvm::cl::opt<bool>
-ShortWChar("fshort-wchar",
- llvm::cl::desc("Force wchar_t to be a short unsigned int"));
-
-static llvm::cl::opt<bool>
-StaticDefine("static-define", llvm::cl::desc("Should __STATIC__ be defined"));
-
-static llvm::cl::opt<int>
-StackProtector("stack-protector",
- llvm::cl::desc("Enable stack protectors"));
-
-static llvm::cl::opt<LangOptions::VisibilityMode>
-SymbolVisibility("fvisibility",
- llvm::cl::desc("Set the default symbol visibility:"),
- llvm::cl::init(LangOptions::Default),
- llvm::cl::values(clEnumValN(LangOptions::Default, "default",
- "Use default symbol visibility"),
- clEnumValN(LangOptions::Hidden, "hidden",
- "Use hidden symbol visibility"),
- clEnumValN(LangOptions::Protected,"protected",
- "Use protected symbol visibility"),
- clEnumValEnd));
-
-static llvm::cl::opt<unsigned>
-TemplateDepth("ftemplate-depth",
- llvm::cl::desc("Maximum depth of recursive template "
- "instantiation"));
-
-static llvm::cl::opt<bool>
-Trigraphs("trigraphs", llvm::cl::desc("Process trigraph sequences"));
-
-static llvm::cl::opt<bool>
-WritableStrings("fwritable-strings",
- llvm::cl::desc("Store string literals as writable data"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// General Preprocessor Options
-//===----------------------------------------------------------------------===//
-
-namespace preprocessoroptions {
-
-static llvm::cl::list<std::string>
-D_macros("D", llvm::cl::value_desc("macro"), llvm::cl::Prefix,
- llvm::cl::desc("Predefine the specified macro"));
-
-static llvm::cl::list<std::string>
-ImplicitIncludes("include", llvm::cl::value_desc("file"),
- llvm::cl::desc("Include file before parsing"));
-static llvm::cl::list<std::string>
-ImplicitMacroIncludes("imacros", llvm::cl::value_desc("file"),
- llvm::cl::desc("Include macros from file before parsing"));
-
-static llvm::cl::opt<std::string>
-ImplicitIncludePCH("include-pch", llvm::cl::value_desc("file"),
- llvm::cl::desc("Include precompiled header file"));
-
-static llvm::cl::opt<std::string>
-ImplicitIncludePTH("include-pth", llvm::cl::value_desc("file"),
- llvm::cl::desc("Include file before parsing"));
-
-static llvm::cl::opt<std::string>
-TokenCache("token-cache", llvm::cl::value_desc("path"),
- llvm::cl::desc("Use specified token cache file"));
-
-static llvm::cl::list<std::string>
-U_macros("U", llvm::cl::value_desc("macro"), llvm::cl::Prefix,
- llvm::cl::desc("Undefine the specified macro"));
-
-static llvm::cl::opt<bool>
-UndefMacros("undef", llvm::cl::value_desc("macro"),
- llvm::cl::desc("undef all system defines"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Header Search Options
-//===----------------------------------------------------------------------===//
-
-namespace headersearchoptions {
-
-static llvm::cl::opt<bool>
-nostdinc("nostdinc", llvm::cl::desc("Disable standard #include directories"));
-
-static llvm::cl::opt<bool>
-nobuiltininc("nobuiltininc",
- llvm::cl::desc("Disable builtin #include directories"));
-
-// Various command line options. These four add directories to each chain.
-static llvm::cl::list<std::string>
-F_dirs("F", llvm::cl::value_desc("directory"), llvm::cl::Prefix,
- llvm::cl::desc("Add directory to framework include search path"));
-
-static llvm::cl::list<std::string>
-I_dirs("I", llvm::cl::value_desc("directory"), llvm::cl::Prefix,
- llvm::cl::desc("Add directory to include search path"));
-
-static llvm::cl::list<std::string>
-idirafter_dirs("idirafter", llvm::cl::value_desc("directory"), llvm::cl::Prefix,
- llvm::cl::desc("Add directory to AFTER include search path"));
-
-static llvm::cl::list<std::string>
-iquote_dirs("iquote", llvm::cl::value_desc("directory"), llvm::cl::Prefix,
- llvm::cl::desc("Add directory to QUOTE include search path"));
-
-static llvm::cl::list<std::string>
-isystem_dirs("isystem", llvm::cl::value_desc("directory"), llvm::cl::Prefix,
- llvm::cl::desc("Add directory to SYSTEM include search path"));
-
-// These handle -iprefix/-iwithprefix/-iwithprefixbefore.
-static llvm::cl::list<std::string>
-iprefix_vals("iprefix", llvm::cl::value_desc("prefix"), llvm::cl::Prefix,
- llvm::cl::desc("Set the -iwithprefix/-iwithprefixbefore prefix"));
-static llvm::cl::list<std::string>
-iwithprefix_vals("iwithprefix", llvm::cl::value_desc("dir"), llvm::cl::Prefix,
- llvm::cl::desc("Set directory to SYSTEM include search path with prefix"));
-static llvm::cl::list<std::string>
-iwithprefixbefore_vals("iwithprefixbefore", llvm::cl::value_desc("dir"),
- llvm::cl::Prefix,
- llvm::cl::desc("Set directory to include search path with prefix"));
-
-static llvm::cl::opt<std::string>
-isysroot("isysroot", llvm::cl::value_desc("dir"),
- llvm::cl::desc("Set the system root directory (usually /)"));
-
-static llvm::cl::opt<bool>
-Verbose("v", llvm::cl::desc("Enable verbose output"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Preprocessed Output Options
-//===----------------------------------------------------------------------===//
-
-namespace preprocessoroutputoptions {
-
-static llvm::cl::opt<bool>
-DisableLineMarkers("P", llvm::cl::desc("Disable linemarker output in -E mode"));
-
-static llvm::cl::opt<bool>
-EnableCommentOutput("C", llvm::cl::desc("Enable comment output in -E mode"));
-
-static llvm::cl::opt<bool>
-EnableMacroCommentOutput("CC",
- llvm::cl::desc("Enable comment output in -E mode, "
- "even from macro expansions"));
-static llvm::cl::opt<bool>
-DumpMacros("dM", llvm::cl::desc("Print macro definitions in -E mode instead of"
- " normal output"));
-static llvm::cl::opt<bool>
-DumpDefines("dD", llvm::cl::desc("Print macro definitions in -E mode in "
- "addition to normal output"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Target Options
-//===----------------------------------------------------------------------===//
-
-namespace targetoptions {
-
-static llvm::cl::opt<std::string>
-TargetABI("target-abi",
- llvm::cl::desc("Target a particular ABI type"));
-
-static llvm::cl::opt<std::string>
-TargetCPU("mcpu",
- llvm::cl::desc("Target a specific cpu type ('-mcpu help' for details)"));
-
-static llvm::cl::list<std::string>
-TargetFeatures("target-feature", llvm::cl::desc("Target specific attributes"));
-
-static llvm::cl::opt<std::string>
-TargetTriple("triple",
- llvm::cl::desc("Specify target triple (e.g. i686-apple-darwin9)"));
-
-}
-
-//===----------------------------------------------------------------------===//
-// Option Object Construction
-//===----------------------------------------------------------------------===//
-
-void clang::InitializeAnalyzerOptions(AnalyzerOptions &Opts) {
- using namespace analyzeroptions;
- Opts.AnalysisList = AnalysisList;
- Opts.AnalysisStoreOpt = AnalysisStoreOpt;
- Opts.AnalysisConstraintsOpt = AnalysisConstraintsOpt;
- Opts.AnalysisDiagOpt = AnalysisDiagOpt;
- Opts.VisualizeEGDot = VisualizeEGDot;
- Opts.VisualizeEGUbi = VisualizeEGUbi;
- Opts.AnalyzeAll = AnalyzeAll;
- Opts.AnalyzerDisplayProgress = AnalyzerDisplayProgress;
- Opts.PurgeDead = !NoPurgeDead;
- Opts.EagerlyAssume = EagerlyAssume;
- Opts.AnalyzeSpecificFunction = AnalyzeSpecificFunction;
- Opts.EnableExperimentalChecks = AnalyzerExperimentalChecks;
- Opts.EnableExperimentalInternalChecks = AnalyzerExperimentalInternalChecks;
- Opts.TrimGraph = TrimGraph;
-}
-
-void clang::InitializeCodeGenOptions(CodeGenOptions &Opts,
- const LangOptions &Lang) {
- using namespace codegenoptions;
-
- // -Os implies -O2
- unsigned Opt = OptLevel.getPosition() ? OptLevel : 0;
- Opts.OptimizationLevel = OptSize ? 2 : Opt;
-
- // We must always run at least the always inlining pass.
- Opts.Inlining = (Opts.OptimizationLevel > 1) ? CodeGenOptions::NormalInlining
- : CodeGenOptions::OnlyAlwaysInlining;
-
- Opts.DebugInfo = GenerateDebugInfo;
- Opts.DisableLLVMOpts = DisableLLVMOptimizations;
- Opts.DisableRedZone = DisableRedZone;
- Opts.MergeAllConstants = !NoMergeConstants;
- Opts.NoCommon = NoCommon;
- Opts.NoImplicitFloat = NoImplicitFloat;
- Opts.OptimizeSize = OptSize;
- Opts.UnrollLoops = (Opts.OptimizationLevel > 1 && !OptSize);
-
- // LLVM Code Generator options.
-
- Opts.AsmVerbose = MAsmVerbose;
- Opts.CodeModel = MCodeModel;
- Opts.DebugPass = MDebugPass;
- Opts.DisableFPElim = MDisableFPElim;
- Opts.FloatABI = MFloatABI;
- Opts.LimitFloatPrecision = MLimitFloatPrecision;
- Opts.NoZeroInitializedInBSS = MNoZeroInitializedInBSS;
- Opts.SoftFloat = MSoftFloat;
- Opts.RelocationModel = MRelocationModel;
- Opts.UnwindTables = MUnwindTables;
-
-#ifdef NDEBUG
- Opts.VerifyModule = 0;
-#endif
-
- if (MainFileName.getPosition())
- Opts.MainFileName = MainFileName;
-}
-
-void clang::InitializeDependencyOutputOptions(DependencyOutputOptions &Opts) {
- using namespace dependencyoutputoptions;
-
- Opts.OutputFile = DependencyFile;
- Opts.Targets = DependencyTargets;
- Opts.IncludeSystemHeaders = DependenciesIncludeSystemHeaders;
- Opts.UsePhonyTargets = PhonyDependencyTarget;
-}
-
-void clang::InitializeDiagnosticOptions(DiagnosticOptions &Opts) {
- using namespace diagnosticoptions;
-
- Opts.Warnings = OptWarnings;
- Opts.DumpBuildInformation = DumpBuildInformation;
- Opts.IgnoreWarnings = OptNoWarnings;
- Opts.MessageLength = MessageLength;
- Opts.NoRewriteMacros = SilenceRewriteMacroWarning;
- Opts.Pedantic = OptPedantic;
- Opts.PedanticErrors = OptPedanticErrors;
- Opts.ShowCarets = !NoCaretDiagnostics;
- Opts.ShowColors = PrintColorDiagnostic;
- Opts.ShowColumn = !NoShowColumn;
- Opts.ShowFixits = !NoDiagnosticsFixIt;
- Opts.ShowLocation = !NoShowLocation;
- Opts.ShowOptionNames = PrintDiagnosticOption;
- Opts.ShowSourceRanges = PrintSourceRangeInfo;
- Opts.VerifyDiagnostics = VerifyDiagnostics;
-}
-
-void clang::InitializeFrontendOptions(FrontendOptions &Opts) {
- using namespace frontendoptions;
-
- Opts.ProgramAction = ProgAction;
- Opts.ActionName = PluginActionName;
- Opts.CodeCompletionAt = CodeCompletionAt;
- Opts.DebugCodeCompletionPrinter = !NoCodeCompletionDebugPrinter;
- Opts.DisableFree = DisableFree;
- Opts.EmptyInputOnly = EmptyInputOnly;
- Opts.FixItLocations = FixItAtLocations;
- Opts.OutputFile = OutputFile;
- Opts.RelocatablePCH = RelocatablePCH;
- Opts.ShowMacrosInCodeCompletion = CodeCompletionWantsMacros;
- Opts.ShowStats = Stats;
- Opts.ShowTimers = TimeReport;
- Opts.ViewClassInheritance = InheritanceViewCls;
-
- // Enforce certain program action implications.
- if (!Opts.ActionName.empty())
- Opts.ProgramAction = frontend::PluginAction;
- if (!Opts.ViewClassInheritance.empty())
- Opts.ProgramAction = frontend::InheritanceView;
- if (!Opts.FixItLocations.empty())
- Opts.ProgramAction = frontend::FixIt;
-
- // '-' is the default input if none is given.
- if (InputFilenames.empty()) {
- FrontendOptions::InputKind IK = InputType;
- if (IK == FrontendOptions::IK_None) IK = FrontendOptions::IK_C;
- Opts.Inputs.push_back(std::make_pair(IK, "-"));
- } else {
- for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) {
- FrontendOptions::InputKind IK = InputType;
- llvm::StringRef Ext =
- llvm::StringRef(InputFilenames[i]).rsplit('.').second;
- if (IK == FrontendOptions::IK_None)
- IK = FrontendOptions::getInputKindForExtension(Ext);
- Opts.Inputs.push_back(std::make_pair(IK, InputFilenames[i]));
- }
- }
-}
-
-void clang::InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
- llvm::StringRef BuiltinIncludePath) {
- using namespace headersearchoptions;
-
- if (isysroot.getPosition())
- Opts.Sysroot = isysroot;
- Opts.Verbose = Verbose;
-
- // Handle -I... and -F... options, walking the lists in parallel.
- unsigned Iidx = 0, Fidx = 0;
- while (Iidx < I_dirs.size() && Fidx < F_dirs.size()) {
- if (I_dirs.getPosition(Iidx) < F_dirs.getPosition(Fidx)) {
- Opts.AddPath(I_dirs[Iidx], frontend::Angled, true, false);
- ++Iidx;
- } else {
- Opts.AddPath(F_dirs[Fidx], frontend::Angled, true, true);
- ++Fidx;
- }
- }
-
- // Consume what's left from whatever list was longer.
- for (; Iidx != I_dirs.size(); ++Iidx)
- Opts.AddPath(I_dirs[Iidx], frontend::Angled, true, false);
- for (; Fidx != F_dirs.size(); ++Fidx)
- Opts.AddPath(F_dirs[Fidx], frontend::Angled, true, true);
-
- // Handle -idirafter... options.
- for (unsigned i = 0, e = idirafter_dirs.size(); i != e; ++i)
- Opts.AddPath(idirafter_dirs[i], frontend::After, true, false);
-
- // Handle -iquote... options.
- for (unsigned i = 0, e = iquote_dirs.size(); i != e; ++i)
- Opts.AddPath(iquote_dirs[i], frontend::Quoted, true, false);
-
- // Handle -isystem... options.
- for (unsigned i = 0, e = isystem_dirs.size(); i != e; ++i)
- Opts.AddPath(isystem_dirs[i], frontend::System, true, false);
-
- // Walk the -iprefix/-iwithprefix/-iwithprefixbefore argument lists in
- // parallel, processing the values in order of occurance to get the right
- // prefixes.
- {
- std::string Prefix = ""; // FIXME: this isn't the correct default prefix.
- unsigned iprefix_idx = 0;
- unsigned iwithprefix_idx = 0;
- unsigned iwithprefixbefore_idx = 0;
- bool iprefix_done = iprefix_vals.empty();
- bool iwithprefix_done = iwithprefix_vals.empty();
- bool iwithprefixbefore_done = iwithprefixbefore_vals.empty();
- while (!iprefix_done || !iwithprefix_done || !iwithprefixbefore_done) {
- if (!iprefix_done &&
- (iwithprefix_done ||
- iprefix_vals.getPosition(iprefix_idx) <
- iwithprefix_vals.getPosition(iwithprefix_idx)) &&
- (iwithprefixbefore_done ||
- iprefix_vals.getPosition(iprefix_idx) <
- iwithprefixbefore_vals.getPosition(iwithprefixbefore_idx))) {
- Prefix = iprefix_vals[iprefix_idx];
- ++iprefix_idx;
- iprefix_done = iprefix_idx == iprefix_vals.size();
- } else if (!iwithprefix_done &&
- (iwithprefixbefore_done ||
- iwithprefix_vals.getPosition(iwithprefix_idx) <
- iwithprefixbefore_vals.getPosition(iwithprefixbefore_idx))) {
- Opts.AddPath(Prefix+iwithprefix_vals[iwithprefix_idx],
- frontend::System, false, false);
- ++iwithprefix_idx;
- iwithprefix_done = iwithprefix_idx == iwithprefix_vals.size();
- } else {
- Opts.AddPath(Prefix+iwithprefixbefore_vals[iwithprefixbefore_idx],
- frontend::Angled, false, false);
- ++iwithprefixbefore_idx;
- iwithprefixbefore_done =
- iwithprefixbefore_idx == iwithprefixbefore_vals.size();
- }
- }
- }
-
- // Add CPATH environment paths.
- if (const char *Env = getenv("CPATH"))
- Opts.EnvIncPath = Env;
-
- // Add language specific environment paths.
- if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH"))
- Opts.ObjCXXEnvIncPath = Env;
- if (const char *Env = getenv("CPLUS_INCLUDE_PATH"))
- Opts.CXXEnvIncPath = Env;
- if (const char *Env = getenv("OBJC_INCLUDE_PATH"))
- Opts.CEnvIncPath = Env;
- if (const char *Env = getenv("C_INCLUDE_PATH"))
- Opts.CEnvIncPath = Env;
-
- if (!nobuiltininc)
- Opts.BuiltinIncludePath = BuiltinIncludePath;
-
- Opts.UseStandardIncludes = !nostdinc;
-}
-
-void clang::InitializePreprocessorOptions(PreprocessorOptions &Opts) {
- using namespace preprocessoroptions;
-
- Opts.ImplicitPCHInclude = ImplicitIncludePCH;
- Opts.ImplicitPTHInclude = ImplicitIncludePTH;
-
- // Select the token cache file, we don't support more than one currently so we
- // can't have both an implicit-pth and a token cache file.
- if (TokenCache.getPosition() && ImplicitIncludePTH.getPosition()) {
- // FIXME: Don't fail like this.
- fprintf(stderr, "error: cannot use both -token-cache and -include-pth "
- "options\n");
- exit(1);
- }
- if (TokenCache.getPosition())
- Opts.TokenCache = TokenCache;
- else
- Opts.TokenCache = ImplicitIncludePTH;
-
- // Use predefines?
- Opts.UsePredefines = !UndefMacros;
-
- // Add macros from the command line.
- unsigned d = 0, D = D_macros.size();
- unsigned u = 0, U = U_macros.size();
- while (d < D || u < U) {
- if (u == U || (d < D && D_macros.getPosition(d) < U_macros.getPosition(u)))
- Opts.addMacroDef(D_macros[d++]);
- else
- Opts.addMacroUndef(U_macros[u++]);
- }
-
- // If -imacros are specified, include them now. These are processed before
- // any -include directives.
- for (unsigned i = 0, e = ImplicitMacroIncludes.size(); i != e; ++i)
- Opts.MacroIncludes.push_back(ImplicitMacroIncludes[i]);
-
- // Add the ordered list of -includes, sorting in the implicit include options
- // at the appropriate location.
- llvm::SmallVector<std::pair<unsigned, std::string*>, 8> OrderedPaths;
- std::string OriginalFile;
-
- if (!ImplicitIncludePTH.empty())
- OrderedPaths.push_back(std::make_pair(ImplicitIncludePTH.getPosition(),
- &ImplicitIncludePTH));
- if (!ImplicitIncludePCH.empty()) {
- OriginalFile = PCHReader::getOriginalSourceFile(ImplicitIncludePCH);
- // FIXME: Don't fail like this.
- if (OriginalFile.empty())
- exit(1);
- OrderedPaths.push_back(std::make_pair(ImplicitIncludePCH.getPosition(),
- &OriginalFile));
- }
- for (unsigned i = 0, e = ImplicitIncludes.size(); i != e; ++i)
- OrderedPaths.push_back(std::make_pair(ImplicitIncludes.getPosition(i),
- &ImplicitIncludes[i]));
- llvm::array_pod_sort(OrderedPaths.begin(), OrderedPaths.end());
-
- for (unsigned i = 0, e = OrderedPaths.size(); i != e; ++i)
- Opts.Includes.push_back(*OrderedPaths[i].second);
-}
-
-void clang::InitializeLangOptions(LangOptions &Options,
- FrontendOptions::InputKind IK) {
- using namespace langoptions;
-
- // Set some properties which depend soley on the input kind; it would be nice
- // to move these to the language standard, and have the driver resolve the
- // input kind + language standard.
- if (IK == FrontendOptions::IK_Asm) {
- Options.AsmPreprocessor = 1;
- } else if (IK == FrontendOptions::IK_ObjC ||
- IK == FrontendOptions::IK_ObjCXX ||
- IK == FrontendOptions::IK_PreprocessedObjC ||
- IK == FrontendOptions::IK_PreprocessedObjCXX) {
- Options.ObjC1 = Options.ObjC2 = 1;
- }
-
- if (LangStd == LangStandard::lang_unspecified) {
- // Based on the base language, pick one.
- switch (IK) {
- case FrontendOptions::IK_None:
- case FrontendOptions::IK_AST:
- assert(0 && "Invalid input kind!");
- case FrontendOptions::IK_OpenCL:
- LangStd = LangStandard::lang_opencl;
- break;
- case FrontendOptions::IK_Asm:
- case FrontendOptions::IK_C:
- case FrontendOptions::IK_PreprocessedC:
- case FrontendOptions::IK_ObjC:
- case FrontendOptions::IK_PreprocessedObjC:
- LangStd = LangStandard::lang_gnu99;
- break;
- case FrontendOptions::IK_CXX:
- case FrontendOptions::IK_PreprocessedCXX:
- case FrontendOptions::IK_ObjCXX:
- case FrontendOptions::IK_PreprocessedObjCXX:
- LangStd = LangStandard::lang_gnucxx98;
- break;
- }
- }
-
- const LangStandard &Std = LangStandard::getLangStandardForKind(LangStd);
- Options.BCPLComment = Std.hasBCPLComments();
- Options.C99 = Std.isC99();
- Options.CPlusPlus = Std.isCPlusPlus();
- Options.CPlusPlus0x = Std.isCPlusPlus0x();
- Options.Digraphs = Std.hasDigraphs();
- Options.GNUInline = !Std.isC99();
- Options.GNUMode = Std.isGNUMode();
- Options.HexFloats = Std.hasHexFloats();
- Options.ImplicitInt = Std.hasImplicitInt();
-
- // OpenCL has some additional defaults.
- if (LangStd == LangStandard::lang_opencl) {
- Options.OpenCL = 1;
- Options.AltiVec = 1;
- Options.CXXOperatorNames = 1;
- Options.LaxVectorConversions = 1;
- }
-
- // OpenCL and C++ both have bool, true, false keywords.
- Options.Bool = Options.OpenCL || Options.CPlusPlus;
-
- if (Options.CPlusPlus)
- Options.CXXOperatorNames = !NoOperatorNames;
-
- if (ObjCExclusiveGC)
- Options.setGCMode(LangOptions::GCOnly);
- else if (ObjCEnableGC)
- Options.setGCMode(LangOptions::HybridGC);
-
- if (ObjCEnableGCBitmapPrint)
- Options.ObjCGCBitmapPrint = 1;
-
- if (AltiVec)
- Options.AltiVec = 1;
-
- if (PThread)
- Options.POSIXThreads = 1;
-
- Options.setVisibilityMode(SymbolVisibility);
- Options.OverflowChecking = OverflowChecking;
-
- // Mimicing gcc's behavior, trigraphs are only enabled if -trigraphs
- // is specified, or -std is set to a conforming mode.
- Options.Trigraphs = !Options.GNUMode;
- if (Trigraphs.getPosition())
- Options.Trigraphs = Trigraphs; // Command line option wins if specified.
-
- // Default to not accepting '$' in identifiers when preprocessing assembler.
- Options.DollarIdents = !Options.AsmPreprocessor;
- if (DollarsInIdents.getPosition()) // Explicit setting overrides default.
- Options.DollarIdents = DollarsInIdents;
-
- if (PascalStrings.getPosition())
- Options.PascalStrings = PascalStrings;
- if (MSExtensions.getPosition())
- Options.Microsoft = MSExtensions;
- Options.WritableStrings = WritableStrings;
- if (NoLaxVectorConversions.getPosition())
- Options.LaxVectorConversions = 0;
- Options.Exceptions = Exceptions;
- Options.Rtti = !NoRtti;
- Options.Blocks = EnableBlocks;
- Options.CharIsSigned = !NoSignedChar;
- if (ShortWChar.getPosition())
- Options.ShortWChar = ShortWChar;
-
- Options.NoBuiltin = NoBuiltin;
- if (Freestanding)
- Options.Freestanding = Options.NoBuiltin = 1;
-
- if (EnableHeinousExtensions)
- Options.HeinousExtensions = 1;
-
- if (AccessControl)
- Options.AccessControl = 1;
-
- Options.ElideConstructors = !NoElideConstructors;
-
- Options.MathErrno = !NoMathErrno;
-
- if (TemplateDepth.getPosition())
- Options.InstantiationDepth = TemplateDepth;
-
- // Override the default runtime if the user requested it.
- if (GNURuntime)
- Options.NeXTRuntime = 0;
-
- if (!ObjCConstantStringClass.empty())
- Options.ObjCConstantStringClass = ObjCConstantStringClass;
-
- if (ObjCNonFragileABI)
- Options.ObjCNonFragileABI = 1;
-
- if (EmitAllDecls)
- Options.EmitAllDecls = 1;
-
- // The __OPTIMIZE_SIZE__ define is tied to -Oz, which we don't support.
- unsigned Opt =
- codegenoptions::OptLevel.getPosition() ? codegenoptions::OptLevel : 0;
- Options.OptimizeSize = 0;
- Options.Optimize = codegenoptions::OptSize || Opt;
-
- assert(PICLevel <= 2 && "Invalid value for -pic-level");
- Options.PICLevel = PICLevel;
-
- // This is the __NO_INLINE__ define, which just depends on things like the
- // optimization level and -fno-inline, not actually whether the backend has
- // inlining enabled.
- //
- // FIXME: This is affected by other options (-fno-inline).
- Options.NoInline = !Opt;
-
- Options.Static = StaticDefine;
-
- if (StackProtector.getPosition()) {
- switch (StackProtector) {
- default:
- assert(0 && "Invalid value for -stack-protector");
- case 0: Options.setStackProtectorMode(LangOptions::SSPOff); break;
- case 1: Options.setStackProtectorMode(LangOptions::SSPOn); break;
- case 2: Options.setStackProtectorMode(LangOptions::SSPReq); break;
- }
- }
-}
-
-void
-clang::InitializePreprocessorOutputOptions(PreprocessorOutputOptions &Opts) {
- using namespace preprocessoroutputoptions;
-
- Opts.ShowCPP = !DumpMacros;
- Opts.ShowMacros = DumpMacros || DumpDefines;
- Opts.ShowLineMarkers = !DisableLineMarkers;
- Opts.ShowComments = EnableCommentOutput;
- Opts.ShowMacroComments = EnableMacroCommentOutput;
-}
-
-void clang::InitializeTargetOptions(TargetOptions &Opts) {
- using namespace targetoptions;
-
- Opts.ABI = TargetABI;
- Opts.CPU = TargetCPU;
- Opts.Triple = TargetTriple;
- Opts.Features = TargetFeatures;
-
- // Use the host triple if unspecified.
- if (Opts.Triple.empty())
- Opts.Triple = llvm::sys::getHostTriple();
-}
diff --git a/tools/clang-cc/Options.h b/tools/clang-cc/Options.h
deleted file mode 100644
index 91e37f2..0000000
--- a/tools/clang-cc/Options.h
+++ /dev/null
@@ -1,54 +0,0 @@
-//===-- Options.h - clang-cc Option Handling --------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANGCC_OPTIONS_H
-#define LLVM_CLANGCC_OPTIONS_H
-
-#include "clang/Frontend/FrontendOptions.h"
-#include "llvm/ADT/StringRef.h"
-
-namespace clang {
-
-class AnalyzerOptions;
-class CodeGenOptions;
-class DependencyOutputOptions;
-class DiagnosticOptions;
-class FrontendOptions;
-class HeaderSearchOptions;
-class LangOptions;
-class PreprocessorOptions;
-class PreprocessorOutputOptions;
-class TargetInfo;
-class TargetOptions;
-
-void InitializeAnalyzerOptions(AnalyzerOptions &Opts);
-
-void InitializeCodeGenOptions(CodeGenOptions &Opts,
- const LangOptions &Lang);
-
-void InitializeDependencyOutputOptions(DependencyOutputOptions &Opts);
-
-void InitializeDiagnosticOptions(DiagnosticOptions &Opts);
-
-void InitializeFrontendOptions(FrontendOptions &Opts);
-
-void InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
- llvm::StringRef BuiltinIncludePath);
-
-void InitializeLangOptions(LangOptions &Options, FrontendOptions::InputKind LK);
-
-void InitializePreprocessorOptions(PreprocessorOptions &Opts);
-
-void InitializePreprocessorOutputOptions(PreprocessorOutputOptions &Opts);
-
-void InitializeTargetOptions(TargetOptions &Opts);
-
-} // end namespace clang
-
-#endif
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
deleted file mode 100644
index 2899684..0000000
--- a/tools/clang-cc/clang-cc.cpp
+++ /dev/null
@@ -1,408 +0,0 @@
-//===--- clang.cpp - C-Language Front-end ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This utility may be invoked in the following manner:
-// clang-cc --help - Output help info.
-// clang-cc [options] - Read from stdin.
-// clang-cc [options] file - Read from "file".
-// clang-cc [options] file1 file2 - Read these files.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Options.h"
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/FileManager.h"
-#include "clang/Basic/SourceManager.h"
-#include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/Version.h"
-#include "clang/Driver/Arg.h"
-#include "clang/Driver/ArgList.h"
-#include "clang/Driver/CC1Options.h"
-#include "clang/Driver/DriverDiagnostic.h"
-#include "clang/Driver/OptTable.h"
-#include "clang/Frontend/CompilerInstance.h"
-#include "clang/Frontend/CompilerInvocation.h"
-#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"
-#include "llvm/ADT/OwningPtr.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/PluginLoader.h"
-#include "llvm/Support/PrettyStackTrace.h"
-#include "llvm/Support/Timer.h"
-#include "llvm/Support/raw_ostream.h"
-#include "llvm/System/Host.h"
-#include "llvm/System/Path.h"
-#include "llvm/System/Signals.h"
-#include "llvm/Target/TargetSelect.h"
-#include <cstdio>
-using namespace clang;
-
-//===----------------------------------------------------------------------===//
-// Main driver
-//===----------------------------------------------------------------------===//
-
-std::string GetBuiltinIncludePath(const char *Argv0) {
- llvm::sys::Path P =
- llvm::sys::Path::GetMainExecutable(Argv0,
- (void*)(intptr_t) GetBuiltinIncludePath);
-
- if (!P.isEmpty()) {
- P.eraseComponent(); // Remove /clang from foo/bin/clang
- P.eraseComponent(); // Remove /bin from foo/bin
-
- // Get foo/lib/clang/<version>/include
- P.appendComponent("lib");
- P.appendComponent("clang");
- P.appendComponent(CLANG_VERSION_STRING);
- P.appendComponent("include");
- }
-
- return P.str();
-}
-
-static void LLVMErrorHandler(void *UserData, const std::string &Message) {
- Diagnostic &Diags = *static_cast<Diagnostic*>(UserData);
-
- Diags.Report(diag::err_fe_error_backend) << Message;
-
- // We cannot recover from llvm errors.
- exit(1);
-}
-
-static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {
- using namespace clang::frontend;
-
- switch (CI.getFrontendOpts().ProgramAction) {
- default:
- llvm::llvm_unreachable("Invalid program action!");
-
- case ASTDump: return new ASTDumpAction();
- case ASTPrint: return new ASTPrintAction();
- case ASTPrintXML: return new ASTPrintXMLAction();
- case ASTView: return new ASTViewAction();
- case DumpRawTokens: return new DumpRawTokensAction();
- case DumpRecordLayouts: return new DumpRecordAction();
- case DumpTokens: return new DumpTokensAction();
- case EmitAssembly: return new EmitAssemblyAction();
- case EmitBC: return new EmitBCAction();
- case EmitHTML: return new HTMLPrintAction();
- case EmitLLVM: return new EmitLLVMAction();
- case EmitLLVMOnly: return new EmitLLVMOnlyAction();
- case FixIt: return new FixItAction();
- case GeneratePCH: return new GeneratePCHAction();
- case GeneratePTH: return new GeneratePTHAction();
- case InheritanceView: return new InheritanceViewAction();
- case ParseNoop: return new ParseOnlyAction();
- case ParsePrintCallbacks: return new PrintParseAction();
- case ParseSyntaxOnly: return new SyntaxOnlyAction();
-
- case PluginAction: {
- if (CI.getFrontendOpts().ActionName == "help") {
- llvm::errs() << "clang-cc plugins:\n";
- for (FrontendPluginRegistry::iterator it =
- FrontendPluginRegistry::begin(),
- ie = FrontendPluginRegistry::end();
- it != ie; ++it)
- llvm::errs() << " " << it->getName() << " - " << it->getDesc() << "\n";
- exit(1);
- }
-
- for (FrontendPluginRegistry::iterator it =
- FrontendPluginRegistry::begin(), ie = FrontendPluginRegistry::end();
- it != ie; ++it) {
- if (it->getName() == CI.getFrontendOpts().ActionName)
- return it->instantiate();
- }
-
- CI.getDiagnostics().Report(diag::err_fe_invalid_plugin_name)
- << CI.getFrontendOpts().ActionName;
- return 0;
- }
-
- case PrintDeclContext: return new DeclContextPrintAction();
- case PrintPreprocessedInput: return new PrintPreprocessedAction();
- case RewriteBlocks: return new RewriteBlocksAction();
- case RewriteMacros: return new RewriteMacrosAction();
- case RewriteObjC: return new RewriteObjCAction();
- case RewriteTest: return new RewriteTestAction();
- case RunAnalysis: return new AnalysisAction();
- case RunPreprocessorOnly: return new PreprocessOnlyAction();
- }
-}
-
-static bool ConstructCompilerInvocation(CompilerInvocation &Opts,
- Diagnostic &Diags, const char *Argv0) {
- // Initialize target options.
- InitializeTargetOptions(Opts.getTargetOpts());
-
- // Initialize frontend options.
- InitializeFrontendOptions(Opts.getFrontendOpts());
-
- // Determine the input language, we currently require all files to match.
- FrontendOptions::InputKind IK = Opts.getFrontendOpts().Inputs[0].first;
- for (unsigned i = 1, e = Opts.getFrontendOpts().Inputs.size(); i != e; ++i) {
- if (Opts.getFrontendOpts().Inputs[i].first != IK) {
- llvm::errs() << "error: cannot have multiple input files of distinct "
- << "language kinds without -x\n";
- return false;
- }
- }
-
- // Initialize language options.
- //
- // FIXME: These aren't used during operations on ASTs. Split onto a separate
- // code path to make this obvious.
- if (IK != FrontendOptions::IK_AST)
- InitializeLangOptions(Opts.getLangOpts(), IK);
-
- // Initialize the static analyzer options.
- InitializeAnalyzerOptions(Opts.getAnalyzerOpts());
-
- // Initialize the dependency output options (-M...).
- InitializeDependencyOutputOptions(Opts.getDependencyOutputOpts());
-
- // Initialize the header search options.
- InitializeHeaderSearchOptions(Opts.getHeaderSearchOpts(),
- GetBuiltinIncludePath(Argv0));
-
- // Initialize the other preprocessor options.
- InitializePreprocessorOptions(Opts.getPreprocessorOpts());
-
- // Initialize the preprocessed output options.
- InitializePreprocessorOutputOptions(Opts.getPreprocessorOutputOpts());
-
- // Initialize backend options.
- InitializeCodeGenOptions(Opts.getCodeGenOpts(), Opts.getLangOpts());
-
- return true;
-}
-
-static int cc1_main(Diagnostic &Diags,
- const char **ArgBegin, const char **ArgEnd,
- const char *Argv0, void *MainAddr) {
- using namespace clang::driver;
-
- llvm::errs() << "cc1 argv:";
- for (const char **i = ArgBegin; i != ArgEnd; ++i)
- llvm::errs() << " \"" << *i << '"';
- llvm::errs() << "\n";
-
- // Parse the arguments.
- OptTable *Opts = createCC1OptTable();
- unsigned MissingArgIndex, MissingArgCount;
- InputArgList *Args = Opts->ParseArgs(ArgBegin, ArgEnd,
- MissingArgIndex, MissingArgCount);
-
- // Check for missing argument error.
- if (MissingArgCount)
- Diags.Report(clang::diag::err_drv_missing_argument)
- << Args->getArgString(MissingArgIndex) << MissingArgCount;
-
- // Dump the parsed arguments.
- llvm::errs() << "cc1 parsed options:\n";
- for (ArgList::const_iterator it = Args->begin(), ie = Args->end();
- it != ie; ++it)
- (*it)->dump();
-
- // Create a compiler invocation.
- llvm::errs() << "cc1 creating invocation.\n";
- CompilerInvocation Invocation;
- CompilerInvocation::CreateFromArgs(Invocation, ArgBegin, ArgEnd,
- Argv0, MainAddr, Diags);
-
- // Convert the invocation back to argument strings.
- std::vector<std::string> InvocationArgs;
- Invocation.toArgs(InvocationArgs);
-
- // Dump the converted arguments.
- llvm::SmallVector<const char*, 32> Invocation2Args;
- llvm::errs() << "invocation argv :";
- for (unsigned i = 0, e = InvocationArgs.size(); i != e; ++i) {
- Invocation2Args.push_back(InvocationArgs[i].c_str());
- llvm::errs() << " \"" << InvocationArgs[i] << '"';
- }
- llvm::errs() << "\n";
-
- // Convert those arguments to another invocation, and check that we got the
- // same thing.
- CompilerInvocation Invocation2;
- CompilerInvocation::CreateFromArgs(Invocation2, Invocation2Args.begin(),
- Invocation2Args.end(), Argv0, MainAddr,
- Diags);
-
- // FIXME: Implement CompilerInvocation comparison.
- if (true) {
- //llvm::errs() << "warning: Invocations differ!\n";
-
- std::vector<std::string> Invocation2Args;
- Invocation2.toArgs(Invocation2Args);
- llvm::errs() << "invocation2 argv:";
- for (unsigned i = 0, e = Invocation2Args.size(); i != e; ++i)
- llvm::errs() << " \"" << Invocation2Args[i] << '"';
- llvm::errs() << "\n";
- }
-
- return 0;
-}
-
-int main(int argc, char **argv) {
- llvm::sys::PrintStackTraceOnErrorSignal();
- llvm::PrettyStackTraceProgram X(argc, argv);
- CompilerInstance Clang(&llvm::getGlobalContext(), false);
-
- // Run clang -cc1 test.
- if (argc > 1 && llvm::StringRef(argv[1]) == "-cc1") {
- TextDiagnosticPrinter DiagClient(llvm::errs(), DiagnosticOptions());
- Diagnostic Diags(&DiagClient);
- return cc1_main(Diags, (const char**) argv + 2, (const char**) argv + argc,
- argv[0], (void*) (intptr_t) GetBuiltinIncludePath);
- }
-
- // Initialize targets first, so that --version shows registered targets.
- llvm::InitializeAllTargets();
- llvm::InitializeAllAsmPrinters();
-
-#if 1
- llvm::cl::ParseCommandLineOptions(argc, argv,
- "LLVM 'Clang' Compiler: http://clang.llvm.org\n");
-
- // Construct the diagnostic engine first, so that we can build a diagnostic
- // client to use for any errors during option handling.
- InitializeDiagnosticOptions(Clang.getDiagnosticOpts());
- 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()));
-
- // Now that we have initialized the diagnostics engine, create the target and
- // the compiler invocation object.
- //
- // FIXME: We should move .ast inputs to taking a separate path, they are
- // really quite different.
- 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(),
- Clang.getTargetOpts()));
- if (!Clang.hasTarget())
- return 1;
-
- // Inform the target of the language options
- //
- // FIXME: We shouldn't need to do this, the target should be immutable once
- // created. This complexity should be lifted elsewhere.
- Clang.getTarget().setForcedLangOptions(Clang.getLangOpts());
-
- // Validate/process some options
- if (Clang.getHeaderSearchOpts().Verbose)
- llvm::errs() << "clang-cc version " CLANG_VERSION_STRING
- << " based upon " << PACKAGE_STRING
- << " hosted on " << llvm::sys::getHostTriple() << "\n";
-
- if (Clang.getFrontendOpts().ShowTimers)
- Clang.createFrontendTimer();
-
- for (unsigned i = 0, e = Clang.getFrontendOpts().Inputs.size(); i != e; ++i) {
- const std::string &InFile = Clang.getFrontendOpts().Inputs[i].second;
-
- // If we aren't using an AST file, setup the file and source managers and
- // the preprocessor.
- bool IsAST =
- Clang.getFrontendOpts().Inputs[i].first == FrontendOptions::IK_AST;
- if (!IsAST) {
- if (!i) {
- // Create a file manager object to provide access to and cache the
- // filesystem.
- Clang.createFileManager();
-
- // Create the source manager.
- Clang.createSourceManager();
- } else {
- // Reset the ID tables if we are reusing the SourceManager.
- Clang.getSourceManager().clearIDTables();
- }
-
- // Create the preprocessor.
- Clang.createPreprocessor();
- }
-
- llvm::OwningPtr<FrontendAction> Act(CreateFrontendAction(Clang));
- if (!Act)
- break;
-
- if (Act->BeginSourceFile(Clang, InFile, IsAST)) {
- Act->Execute();
- Act->EndSourceFile();
- }
- }
-
- if (Clang.getDiagnosticOpts().ShowCarets)
- if (unsigned NumDiagnostics = Clang.getDiagnostics().getNumDiagnostics())
- fprintf(stderr, "%d diagnostic%s generated.\n", NumDiagnostics,
- (NumDiagnostics == 1 ? "" : "s"));
-
- if (Clang.getFrontendOpts().ShowStats) {
- Clang.getFileManager().PrintStats();
- fprintf(stderr, "\n");
- }
-
- // Return the appropriate status when verifying diagnostics.
- //
- // FIXME: If we could make getNumErrors() do the right thing, we wouldn't need
- // this.
- if (Clang.getDiagnosticOpts().VerifyDiagnostics)
- return static_cast<VerifyDiagnosticsClient&>(
- Clang.getDiagnosticClient()).HadErrors();
-
- // Managed static deconstruction. Useful for making things like
- // -time-passes usable.
- llvm::llvm_shutdown();
-
- return (Clang.getDiagnostics().getNumErrors() != 0);
-}
-
OpenPOWER on IntegriCloud