16#include "clang/Config/config.h"
30#include "llvm/Option/OptTable.h"
31#include "llvm/Support/BuryPointer.h"
32#include "llvm/Support/DynamicLibrary.h"
33#include "llvm/Support/ErrorHandling.h"
36#include "mlir/IR/AsmState.h"
37#include "mlir/IR/MLIRContext.h"
38#include "mlir/Pass/PassManager.h"
48static std::unique_ptr<FrontendAction>
51 StringRef Action(
"unknown");
58 if (!UseCIR && EmitsCIR)
59 llvm::report_fatal_error(
"-emit-cir and only valid when using -fclangir");
62 case ASTDeclList:
return std::make_unique<ASTDeclListAction>();
63 case ASTDump:
return std::make_unique<ASTDumpAction>();
64 case ASTPrint:
return std::make_unique<ASTPrintAction>();
65 case ASTView:
return std::make_unique<ASTViewAction>();
67 return std::make_unique<DumpCompilerOptionsAction>();
68 case DumpRawTokens:
return std::make_unique<DumpRawTokensAction>();
69 case DumpTokens:
return std::make_unique<DumpTokensAction>();
73 return std::make_unique<cir::EmitAssemblyAction>();
75 return std::make_unique<EmitAssemblyAction>();
79 return std::make_unique<cir::EmitBCAction>();
81 return std::make_unique<EmitBCAction>();
84 return std::make_unique<cir::EmitCIRAction>();
89 case EmitHTML:
return std::make_unique<HTMLPrintAction>();
93 return std::make_unique<cir::EmitLLVMAction>();
95 return std::make_unique<EmitLLVMAction>();
97 case EmitLLVMOnly:
return std::make_unique<EmitLLVMOnlyAction>();
102 return std::make_unique<cir::EmitObjAction>();
104 return std::make_unique<EmitObjAction>();
106 return std::make_unique<ExtractAPIAction>();
107 case FixIt:
return std::make_unique<FixItAction>();
109 return std::make_unique<GenerateModuleFromModuleMapAction>();
111 return std::make_unique<GenerateModuleInterfaceAction>();
113 return std::make_unique<GenerateReducedModuleInterfaceAction>();
115 return std::make_unique<GenerateHeaderUnitAction>();
116 case GeneratePCH:
return std::make_unique<GeneratePCHAction>();
118 return std::make_unique<GenerateInterfaceStubsAction>();
119 case InitOnly:
return std::make_unique<InitOnlyAction>();
121 case ModuleFileInfo:
return std::make_unique<DumpModuleInfoAction>();
122 case VerifyPCH:
return std::make_unique<VerifyPCHAction>();
123 case TemplightDump:
return std::make_unique<TemplightDumpAction>();
126 for (
const FrontendPluginRegistry::entry &Plugin :
127 FrontendPluginRegistry::entries()) {
129 std::unique_ptr<PluginASTAction> P(Plugin.instantiate());
145 case PrintPreamble:
return std::make_unique<PrintPreambleAction>();
149 return std::make_unique<RewriteIncludesAction>();
150 return std::make_unique<PrintPreprocessedAction>();
153 case RewriteMacros:
return std::make_unique<RewriteMacrosAction>();
154 case RewriteTest:
return std::make_unique<RewriteTestAction>();
155#if CLANG_ENABLE_OBJC_REWRITER
156 case RewriteObjC:
return std::make_unique<RewriteObjCAction>();
160#if CLANG_ENABLE_STATIC_ANALYZER
161 case RunAnalysis:
return std::make_unique<ento::AnalysisAction>();
167 return std::make_unique<PrintDependencyDirectivesSourceMinimizerAction>();
170#if !CLANG_ENABLE_STATIC_ANALYZER || !CLANG_ENABLE_OBJC_REWRITER
174 llvm_unreachable(
"Invalid program action!");
178std::unique_ptr<FrontendAction>
188 Act = std::make_unique<HLSLFrontendAction>(std::move(Act));
191 Act = std::make_unique<FixItRecompile>(std::move(Act));
203 Act = std::make_unique<WrappingExtractAPIAction>(std::move(Act));
209 Act = std::make_unique<ASTMergeAction>(std::move(Act),
213 Act = std::make_unique<ssaf::TUSummaryExtractorFrontendAction>(
225 llvm::outs(),
"clang -cc1 [options] file...",
226 "LLVM 'Clang' Compiler: http://clang.llvm.org",
236 llvm::cl::PrintVersionMessage();
248 auto Args = std::make_unique<const char*[]>(NumArgs + 2);
249 Args[0] =
"clang (LLVM option parsing)";
250 for (
unsigned i = 0; i != NumArgs; ++i)
252 Args[NumArgs + 1] =
nullptr;
253 llvm::cl::ParseCommandLineOptions(NumArgs + 1, Args.get(),
"",
258#if CLANG_ENABLE_STATIC_ANALYZER
292 mlir::registerCIRPasses();
293 mlir::registerMLIRContextCLOptions();
294 mlir::registerPassManagerCLOptions();
295 mlir::registerAsmPrinterCLOptions();
297 auto Args = std::make_unique<const char *[]>(NumArgs + 2);
298 Args[0] =
"clang (MLIR option parsing)";
299 for (
unsigned i = 0; i != NumArgs; ++i)
301 Args[NumArgs + 1] =
nullptr;
302 llvm::cl::ParseCommandLineOptions(NumArgs + 1, Args.get(),
320 llvm::BuryPointer(std::move(Act));
This file pulls in all built-in SSAF extractor and format registrations by referencing their anchor s...
Stores options for the analyzer from the command line.
unsigned ShowCheckerOptionDeveloperList
unsigned ShowEnabledCheckerList
unsigned ShowCheckerHelpAlpha
unsigned ShowConfigOptionsList
unsigned ShowCheckerHelpDeveloper
unsigned ShowCheckerOptionList
unsigned ShowCheckerOptionAlphaList
CompilerInstance - Helper class for managing a single instance of the Clang compiler.
AnalyzerOptions & getAnalyzerOpts()
DiagnosticsEngine & getDiagnostics() const
Get the current diagnostics engine.
PreprocessorOutputOptions & getPreprocessorOutputOpts()
void LoadRequestedPlugins()
Load the list of plugins requested in the FrontendOptions.
FrontendOptions & getFrontendOpts()
llvm::vfs::FileSystem & getVirtualFileSystem() const
bool ExecuteAction(FrontendAction &Act)
ExecuteAction - Execute the provided action against the compiler's CompilerInvocation object.
LangOptions & getLangOpts()
CodeGenOptions & getCodeGenOpts()
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
unsigned getNumErrors() const
FrontendOptions - Options for controlling the behavior of the frontend.
unsigned EmitSymbolGraph
Whether to emit symbol graph files as a side effect of compilation.
std::map< std::string, std::vector< std::string > > PluginArgs
Args to pass to the plugins.
std::vector< std::string > MLIRArgs
A list of arguments to forward to MLIR's option processing; this should only be used for debugging an...
std::vector< std::string > LLVMArgs
A list of arguments to forward to LLVM's option processing; this should only be used for debugging an...
unsigned ShowHelp
Show the -help text.
unsigned FixAndRecompile
Apply fixes and recompile.
unsigned UseClangIRPipeline
Use Clang IR pipeline to emit code.
std::string ActionName
The name of the action to run when using a plugin action.
std::string SSAFTUSummaryFile
The TU summary output file with the file extension representing the file format.
unsigned ShowVersion
Show the -version text.
std::string SymbolGraphOutputDir
std::vector< std::string > ASTMergeFiles
The list of AST files to merge.
unsigned DisableFree
Disable memory freeing on exit.
frontend::ActionKind ProgramAction
The frontend action to perform.
@ ReplaceAction
Replace the main action.
@ CmdlineAfterMainAction
Execute the action after the main action if on the command line.
unsigned RewriteIncludes
Preprocess include directives only.
unsigned RewriteImports
Include contents of transitively-imported modules.
void printEnabledCheckerList(llvm::raw_ostream &OS, CompilerInstance &CI)
void printCheckerHelp(llvm::raw_ostream &OS, CompilerInstance &CI)
void printAnalyzerConfigList(llvm::raw_ostream &OS)
void printCheckerConfigList(llvm::raw_ostream &OS, CompilerInstance &CI)
@ GenerateHeaderUnit
Generate a C++20 header unit module from a header file.
@ VerifyPCH
Load and verify that a PCH file is usable.
@ PrintPreprocessedInput
-E mode.
@ RewriteTest
Rewriter playground.
@ ParseSyntaxOnly
Parse and perform semantic analysis.
@ TemplightDump
Dump template instantiations.
@ GenerateModuleInterface
Generate pre-compiled module from a standard C++ module interface unit.
@ EmitLLVM
Emit a .ll file.
@ PrintPreamble
Print the "preamble" of the input file.
@ InitOnly
Only execute frontend initialization.
@ ASTView
Parse ASTs and view them in Graphviz.
@ PluginAction
Run a plugin action,.
@ DumpRawTokens
Dump out raw tokens.
@ PrintDependencyDirectivesSourceMinimizerOutput
Print the output of the dependency directives source minimizer.
@ RewriteObjC
ObjC->C Rewriter.
@ RunPreprocessorOnly
Just lex, no output.
@ EmitCIR
Emit a .cir file.
@ DumpCompilerOptions
Dump the compiler configuration.
@ RunAnalysis
Run one or more source code analyses.
@ ASTPrint
Parse ASTs and print them.
@ GenerateReducedModuleInterface
Generate reduced module interface for a standard C++ module interface unit.
@ GenerateInterfaceStubs
Generate Interface Stub Files.
@ ASTDump
Parse ASTs and dump them.
@ DumpTokens
Dump out preprocessed tokens.
@ FixIt
Parse and apply any fixits to the source.
@ EmitAssembly
Emit a .s file.
@ EmitCodeGenOnly
Generate machine code, but don't emit anything.
@ RewriteMacros
Expand macros but not #includes.
@ EmitHTML
Translate input source into HTML.
@ GeneratePCH
Generate pre-compiled header.
@ EmitLLVMOnly
Generate LLVM IR, but do not emit anything.
@ GenerateModule
Generate pre-compiled module from a module map.
@ ASTDeclList
Parse ASTs and list Decl nodes.
The JSON file list parser is used to communicate input to InstallAPI.
static std::unique_ptr< FrontendAction > CreateFrontendBaseAction(CompilerInstance &CI)
@ Success
Annotation was successful.
bool ExecuteCompilerInvocation(CompilerInstance *Clang)
ExecuteCompilerInvocation - Execute the given actions described by the compiler invocation object in ...
std::unique_ptr< FrontendAction > CreateFrontendAction(CompilerInstance &CI)
Construct the FrontendAction of a compiler invocation based on the options specified for the compiler...
const llvm::opt::OptTable & getDriverOptTable()