16#include "clang/Config/config.h"
33#include "llvm/Option/OptTable.h"
34#include "llvm/Support/BuryPointer.h"
35#include "llvm/Support/DynamicLibrary.h"
36#include "llvm/Support/ErrorHandling.h"
39#include "mlir/IR/AsmState.h"
40#include "mlir/IR/MLIRContext.h"
41#include "mlir/Pass/PassManager.h"
51static std::unique_ptr<FrontendAction>
54 StringRef Action(
"unknown");
61 if (!UseCIR && EmitsCIR)
62 llvm::report_fatal_error(
"-emit-cir and only valid when using -fclangir");
65 case ASTDeclList:
return std::make_unique<ASTDeclListAction>();
66 case ASTDump:
return std::make_unique<ASTDumpAction>();
67 case ASTPrint:
return std::make_unique<ASTPrintAction>();
68 case ASTView:
return std::make_unique<ASTViewAction>();
70 return std::make_unique<DumpCompilerOptionsAction>();
71 case DumpRawTokens:
return std::make_unique<DumpRawTokensAction>();
72 case DumpTokens:
return std::make_unique<DumpTokensAction>();
76 return std::make_unique<cir::EmitAssemblyAction>();
78 return std::make_unique<EmitAssemblyAction>();
82 return std::make_unique<cir::EmitBCAction>();
84 return std::make_unique<EmitBCAction>();
87 return std::make_unique<cir::EmitCIRAction>();
92 case EmitHTML:
return std::make_unique<HTMLPrintAction>();
96 return std::make_unique<cir::EmitLLVMAction>();
98 return std::make_unique<EmitLLVMAction>();
100 case EmitLLVMOnly:
return std::make_unique<EmitLLVMOnlyAction>();
101 case EmitCodeGenOnly:
return std::make_unique<EmitCodeGenOnlyAction>();
105 return std::make_unique<cir::EmitObjAction>();
107 return std::make_unique<EmitObjAction>();
109 return std::make_unique<ExtractAPIAction>();
110 case FixIt:
return std::make_unique<FixItAction>();
112 return std::make_unique<GenerateModuleFromModuleMapAction>();
114 return std::make_unique<GenerateModuleInterfaceAction>();
116 return std::make_unique<GenerateReducedModuleInterfaceAction>();
118 return std::make_unique<GenerateHeaderUnitAction>();
119 case GeneratePCH:
return std::make_unique<GeneratePCHAction>();
121 return std::make_unique<GenerateInterfaceStubsAction>();
122 case InitOnly:
return std::make_unique<InitOnlyAction>();
124 case ModuleFileInfo:
return std::make_unique<DumpModuleInfoAction>();
126 return std::make_unique<VerifyPCHAction>();
129 for (
const FrontendPluginRegistry::entry &Plugin :
130 FrontendPluginRegistry::entries()) {
132 std::unique_ptr<PluginASTAction> P(Plugin.instantiate());
148 case PrintPreamble:
return std::make_unique<PrintPreambleAction>();
152 return std::make_unique<RewriteIncludesAction>();
153 return std::make_unique<PrintPreprocessedAction>();
156 case RewriteMacros:
return std::make_unique<RewriteMacrosAction>();
157 case RewriteTest:
return std::make_unique<RewriteTestAction>();
158#if CLANG_ENABLE_OBJC_REWRITER
159 case RewriteObjC:
return std::make_unique<RewriteObjCAction>();
163#if CLANG_ENABLE_STATIC_ANALYZER
164 case RunAnalysis:
return std::make_unique<ento::AnalysisAction>();
170 return std::make_unique<PrintDependencyDirectivesSourceMinimizerAction>();
173#if !CLANG_ENABLE_STATIC_ANALYZER || !CLANG_ENABLE_OBJC_REWRITER
177 llvm_unreachable(
"Invalid program action!");
181std::unique_ptr<FrontendAction>
191 Act = std::make_unique<HLSLFrontendAction>(std::move(Act));
194 Act = std::make_unique<FixItRecompile>(std::move(Act));
206 Act = std::make_unique<WrappingExtractAPIAction>(std::move(Act));
212 Act = std::make_unique<ASTMergeAction>(std::move(Act),
216 Act = std::make_unique<ssaf::TUSummaryExtractorFrontendAction>(
227 Act = std::make_unique<ssaf::SourceTransformationFrontendAction>(
239 llvm::outs(),
"clang -cc1 [options] file...",
240 "LLVM 'Clang' Compiler: http://clang.llvm.org",
250 llvm::cl::PrintVersionMessage();
262 auto Args = std::make_unique<const char*[]>(NumArgs + 2);
263 Args[0] =
"clang (LLVM option parsing)";
264 for (
unsigned i = 0; i != NumArgs; ++i)
266 Args[NumArgs + 1] =
nullptr;
267 llvm::cl::ParseCommandLineOptions(NumArgs + 1, Args.get(),
"",
272#if CLANG_ENABLE_STATIC_ANALYZER
306 mlir::registerCIRPasses();
307 mlir::registerMLIRContextCLOptions();
308 mlir::registerPassManagerCLOptions();
309 mlir::registerAsmPrinterCLOptions();
311 auto Args = std::make_unique<const char *[]>(NumArgs + 2);
312 Args[0] =
"clang (MLIR option parsing)";
313 for (
unsigned i = 0; i != NumArgs; ++i)
315 Args[NumArgs + 1] =
nullptr;
316 llvm::cl::ParseCommandLineOptions(NumArgs + 1, Args.get(),
334 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()
ssaf::SSAFOptions & getSSAFOpts()
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.
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.
std::string SrcEditFile
Path of the source-edit output file produced by the source transformation.
std::string TransformationReportFile
Path of the transformation-report output file produced by the source transformation.
std::string SourceTransformation
Name of the SSAF source transformation to run.
std::string TUSummaryFile
The TU summary output file with the file extension representing the serialization format.
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.
@ 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.
Top level wrappers for InstallAPI frontend operations.
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()