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(
63 "-emit-cir and -emit-cir-bc only valid when using -fclangir");
66 case ASTDeclList:
return std::make_unique<ASTDeclListAction>();
67 case ASTDump:
return std::make_unique<ASTDumpAction>();
68 case ASTPrint:
return std::make_unique<ASTPrintAction>();
69 case ASTView:
return std::make_unique<ASTViewAction>();
71 return std::make_unique<DumpCompilerOptionsAction>();
72 case DumpRawTokens:
return std::make_unique<DumpRawTokensAction>();
73 case DumpTokens:
return std::make_unique<DumpTokensAction>();
77 return std::make_unique<cir::EmitAssemblyAction>();
79 return std::make_unique<EmitAssemblyAction>();
83 return std::make_unique<cir::EmitBCAction>();
85 return std::make_unique<EmitBCAction>();
88 return std::make_unique<cir::EmitCIRAction>();
95 return std::make_unique<cir::EmitCIRBCAction>();
100 case EmitHTML:
return std::make_unique<HTMLPrintAction>();
104 return std::make_unique<cir::EmitLLVMAction>();
106 return std::make_unique<EmitLLVMAction>();
108 case EmitLLVMOnly:
return std::make_unique<EmitLLVMOnlyAction>();
109 case EmitCodeGenOnly:
return std::make_unique<EmitCodeGenOnlyAction>();
113 return std::make_unique<cir::EmitObjAction>();
115 return std::make_unique<EmitObjAction>();
117 return std::make_unique<ExtractAPIAction>();
118 case FixIt:
return std::make_unique<FixItAction>();
120 return std::make_unique<GenerateModuleFromModuleMapAction>();
122 return std::make_unique<GenerateModuleInterfaceAction>();
124 return std::make_unique<GenerateReducedModuleInterfaceAction>();
126 return std::make_unique<GenerateHeaderUnitAction>();
127 case GeneratePCH:
return std::make_unique<GeneratePCHAction>();
129 return std::make_unique<GenerateInterfaceStubsAction>();
130 case InitOnly:
return std::make_unique<InitOnlyAction>();
132 case ModuleFileInfo:
return std::make_unique<DumpModuleInfoAction>();
134 return std::make_unique<VerifyPCHAction>();
137 for (
const FrontendPluginRegistry::entry &Plugin :
138 FrontendPluginRegistry::entries()) {
140 std::unique_ptr<PluginASTAction> P(Plugin.instantiate());
156 case PrintPreamble:
return std::make_unique<PrintPreambleAction>();
160 return std::make_unique<RewriteIncludesAction>();
161 return std::make_unique<PrintPreprocessedAction>();
164 case RewriteMacros:
return std::make_unique<RewriteMacrosAction>();
165 case RewriteTest:
return std::make_unique<RewriteTestAction>();
166#if CLANG_ENABLE_OBJC_REWRITER
167 case RewriteObjC:
return std::make_unique<RewriteObjCAction>();
171#if CLANG_ENABLE_STATIC_ANALYZER
172 case RunAnalysis:
return std::make_unique<ento::AnalysisAction>();
178 return std::make_unique<PrintDependencyDirectivesSourceMinimizerAction>();
181#if !CLANG_ENABLE_STATIC_ANALYZER || !CLANG_ENABLE_OBJC_REWRITER
185 llvm_unreachable(
"Invalid program action!");
189std::unique_ptr<FrontendAction>
199 Act = std::make_unique<HLSLFrontendAction>(std::move(Act));
202 Act = std::make_unique<FixItRecompile>(std::move(Act));
214 Act = std::make_unique<WrappingExtractAPIAction>(std::move(Act));
220 Act = std::make_unique<ASTMergeAction>(std::move(Act),
224 Act = std::make_unique<ssaf::TUSummaryExtractorFrontendAction>(
235 Act = std::make_unique<ssaf::SourceTransformationFrontendAction>(
247 llvm::outs(),
"clang -cc1 [options] file...",
248 "LLVM 'Clang' Compiler: http://clang.llvm.org",
258 llvm::cl::PrintVersionMessage();
266#if CLANG_ENABLE_STATIC_ANALYZER
300 mlir::registerCIRPasses();
301 mlir::registerMLIRContextCLOptions();
302 mlir::registerPassManagerCLOptions();
303 mlir::registerAsmPrinterCLOptions();
305 auto Args = std::make_unique<const char *[]>(NumArgs + 2);
306 Args[0] =
"clang (MLIR option parsing)";
307 for (
unsigned i = 0; i != NumArgs; ++i)
309 Args[NumArgs + 1] =
nullptr;
310 llvm::cl::ParseCommandLineOptions(NumArgs + 1, Args.get(),
328 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()
void parseLLVMArgs()
Parse and apply LLVM command line arguments from FrontendOptions.
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...
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.
@ EmitCIRBC
Emit a .cirbc file (ClangIR bytecode).
@ 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()