24 #include "llvm/Support/FileSystem.h" 25 #include "llvm/Support/MemoryBuffer.h" 26 #include "llvm/Support/Path.h" 27 #include "llvm/Support/YAMLTraits.h" 28 #include "llvm/Support/raw_ostream.h" 30 #include <system_error> 32 using namespace clang;
47 GetCodeCompletionConsumer(CI));
55 std::unique_ptr<ASTConsumer>
57 return llvm::make_unique<ASTConsumer>();
60 void InitOnlyAction::ExecuteAction() {
67 std::unique_ptr<ASTConsumer>
69 if (std::unique_ptr<raw_ostream> OS =
75 std::unique_ptr<ASTConsumer>
83 std::unique_ptr<ASTConsumer>
88 std::unique_ptr<ASTConsumer>
93 std::unique_ptr<ASTConsumer>
96 if (!ComputeASTConsumerArguments(CI, Sysroot))
99 std::string OutputFile;
100 std::unique_ptr<raw_pwrite_stream> OS =
101 CreateOutputFile(CI, InFile, OutputFile);
109 auto Buffer = std::make_shared<PCHBuffer>();
110 std::vector<std::unique_ptr<ASTConsumer>> Consumers;
111 Consumers.push_back(llvm::make_unique<PCHGenerator>(
113 FrontendOpts.ModuleFileExtensions,
115 FrontendOpts.IncludeTimestamps, +CI.
getLangOpts().CacheGeneratedPCH));
117 CI, InFile, OutputFile, std::move(OS), Buffer));
119 return llvm::make_unique<MultiplexConsumer>(std::move(Consumers));
123 std::string &Sysroot) {
133 std::unique_ptr<llvm::raw_pwrite_stream>
135 std::string &OutputFile) {
139 std::unique_ptr<raw_pwrite_stream> OS =
161 std::unique_ptr<ASTConsumer>
164 std::unique_ptr<raw_pwrite_stream> OS = CreateOutputFile(CI, InFile);
171 auto Buffer = std::make_shared<PCHBuffer>();
172 std::vector<std::unique_ptr<ASTConsumer>> Consumers;
174 Consumers.push_back(llvm::make_unique<PCHGenerator>(
183 CI, InFile, OutputFile, std::move(OS), Buffer));
184 return llvm::make_unique<MultiplexConsumer>(std::move(Consumers));
187 bool GenerateModuleFromModuleMapAction::BeginSourceFileAction(
197 std::unique_ptr<raw_pwrite_stream>
204 if (ModuleMapFile.empty())
205 ModuleMapFile = InFile;
222 bool GenerateModuleInterfaceAction::BeginSourceFileAction(
234 std::unique_ptr<raw_pwrite_stream>
240 bool GenerateHeaderModuleAction::PrepareToExecuteAction(
251 auto Kind = Inputs[0].getKind();
255 ModuleHeaders.reserve(Inputs.size());
260 << (FIF.isFile() ? FIF.getFile()
261 : FIF.getBuffer()->getBufferIdentifier());
265 HeaderContents +=
"#include \"";
266 HeaderContents += FIF.getFile();
267 HeaderContents +=
"\"\n";
268 ModuleHeaders.push_back(FIF.getFile());
270 Buffer = llvm::MemoryBuffer::getMemBufferCopy(
280 bool GenerateHeaderModuleAction::BeginSourceFileAction(
287 for (StringRef Name : ModuleHeaders) {
291 None,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr);
297 Headers.push_back({Name, FE});
304 std::unique_ptr<raw_pwrite_stream>
313 std::unique_ptr<ASTConsumer>
315 return llvm::make_unique<ASTConsumer>();
318 std::unique_ptr<ASTConsumer>
321 return llvm::make_unique<ASTConsumer>();
324 std::unique_ptr<ASTConsumer>
326 return llvm::make_unique<ASTConsumer>();
333 std::unique_ptr<ASTReader> Reader(
new ASTReader(
336 Sysroot.empty() ?
"" : Sysroot.c_str(),
350 struct TemplightEntry {
354 std::string DefinitionLocation;
355 std::string PointOfInstantiation;
361 template <>
struct MappingTraits<TemplightEntry> {
362 static void mapping(IO &io, TemplightEntry &fields) {
363 io.mapRequired(
"name", fields.Name);
364 io.mapRequired(
"kind", fields.Kind);
365 io.mapRequired(
"event", fields.Event);
366 io.mapRequired(
"orig", fields.DefinitionLocation);
367 io.mapRequired(
"poi", fields.PointOfInstantiation);
383 const CodeSynthesisContext &Inst)
override {
384 displayTemplightEntry<true>(llvm::outs(), TheSema, Inst);
388 const CodeSynthesisContext &Inst)
override {
389 displayTemplightEntry<false>(llvm::outs(), TheSema, Inst);
393 static std::string
toString(CodeSynthesisContext::SynthesisKind
Kind) {
395 case CodeSynthesisContext::TemplateInstantiation:
396 return "TemplateInstantiation";
397 case CodeSynthesisContext::DefaultTemplateArgumentInstantiation:
398 return "DefaultTemplateArgumentInstantiation";
399 case CodeSynthesisContext::DefaultFunctionArgumentInstantiation:
400 return "DefaultFunctionArgumentInstantiation";
401 case CodeSynthesisContext::ExplicitTemplateArgumentSubstitution:
402 return "ExplicitTemplateArgumentSubstitution";
403 case CodeSynthesisContext::DeducedTemplateArgumentSubstitution:
404 return "DeducedTemplateArgumentSubstitution";
405 case CodeSynthesisContext::PriorTemplateArgumentSubstitution:
406 return "PriorTemplateArgumentSubstitution";
407 case CodeSynthesisContext::DefaultTemplateArgumentChecking:
408 return "DefaultTemplateArgumentChecking";
409 case CodeSynthesisContext::ExceptionSpecEvaluation:
410 return "ExceptionSpecEvaluation";
411 case CodeSynthesisContext::ExceptionSpecInstantiation:
412 return "ExceptionSpecInstantiation";
413 case CodeSynthesisContext::DeclaringSpecialMember:
414 return "DeclaringSpecialMember";
415 case CodeSynthesisContext::DefiningSynthesizedFunction:
416 return "DefiningSynthesizedFunction";
417 case CodeSynthesisContext::Memoization:
418 return "Memoization";
423 template <
bool BeginInstantiation>
424 static void displayTemplightEntry(llvm::raw_ostream &Out,
const Sema &TheSema,
425 const CodeSynthesisContext &Inst) {
428 llvm::raw_string_ostream OS(YAML);
429 llvm::yaml::Output YO(OS);
430 TemplightEntry Entry =
431 getTemplightEntry<BeginInstantiation>(TheSema, Inst);
432 llvm::yaml::EmptyContext Context;
433 llvm::yaml::yamlize(YO, Entry,
true, Context);
435 Out <<
"---" << YAML <<
"\n";
438 template <
bool BeginInstantiation>
439 static TemplightEntry getTemplightEntry(
const Sema &TheSema,
440 const CodeSynthesisContext &Inst) {
441 TemplightEntry Entry;
443 Entry.Event = BeginInstantiation ?
"Begin" :
"End";
444 if (
auto *NamedTemplate = dyn_cast_or_null<NamedDecl>(Inst.Entity)) {
445 llvm::raw_string_ostream OS(Entry.Name);
446 NamedTemplate->getNameForDiagnostic(OS, TheSema.
getLangOpts(),
true);
450 Entry.DefinitionLocation = std::string(DefLoc.
getFilename()) +
":" +
451 std::to_string(DefLoc.
getLine()) +
":" +
457 Entry.PointOfInstantiation = std::string(PoiLoc.
getFilename()) +
":" +
458 std::to_string(PoiLoc.
getLine()) +
":" +
466 std::unique_ptr<ASTConsumer>
468 return llvm::make_unique<ASTConsumer>();
478 EnsureSemaIsCreated(CI, *
this);
481 llvm::make_unique<DefaultTemplateInstCallback>());
489 llvm::raw_ostream &Out;
492 DumpModuleInfoListener(llvm::raw_ostream &Out) : Out(Out) { }
494 #define DUMP_BOOLEAN(Value, Text) \ 495 Out.indent(4) << Text << ": " << (Value? "Yes" : "No") << "\n" 497 bool ReadFullVersionInformation(StringRef FullVersion)
override {
502 <<
" Clang: " << FullVersion <<
"\n";
506 void ReadModuleName(StringRef ModuleName)
override {
507 Out.indent(2) <<
"Module name: " << ModuleName <<
"\n";
509 void ReadModuleMapFile(StringRef ModuleMapPath)
override {
510 Out.indent(2) <<
"Module map file: " << ModuleMapPath <<
"\n";
513 bool ReadLanguageOptions(
const LangOptions &LangOpts,
bool Complain,
514 bool AllowCompatibleDifferences)
override {
515 Out.indent(2) <<
"Language options:\n";
516 #define LANGOPT(Name, Bits, Default, Description) \ 517 DUMP_BOOLEAN(LangOpts.Name, Description); 518 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ 519 Out.indent(4) << Description << ": " \ 520 << static_cast<unsigned>(LangOpts.get##Name()) << "\n"; 521 #define VALUE_LANGOPT(Name, Bits, Default, Description) \ 522 Out.indent(4) << Description << ": " << LangOpts.Name << "\n"; 523 #define BENIGN_LANGOPT(Name, Bits, Default, Description) 524 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) 525 #include "clang/Basic/LangOptions.def" 528 Out.indent(4) <<
"Module features:\n";
530 Out.indent(6) << Feature <<
"\n";
536 bool ReadTargetOptions(
const TargetOptions &TargetOpts,
bool Complain,
537 bool AllowCompatibleDifferences)
override {
538 Out.indent(2) <<
"Target options:\n";
539 Out.indent(4) <<
" Triple: " << TargetOpts.
Triple <<
"\n";
540 Out.indent(4) <<
" CPU: " << TargetOpts.
CPU <<
"\n";
541 Out.indent(4) <<
" ABI: " << TargetOpts.
ABI <<
"\n";
544 Out.indent(4) <<
"Target features:\n";
555 bool Complain)
override {
556 Out.indent(2) <<
"Diagnostic options:\n";
557 #define DIAGOPT(Name, Bits, Default) DUMP_BOOLEAN(DiagOpts->Name, #Name); 558 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \ 559 Out.indent(4) << #Name << ": " << DiagOpts->get##Name() << "\n"; 560 #define VALUE_DIAGOPT(Name, Bits, Default) \ 561 Out.indent(4) << #Name << ": " << DiagOpts->Name << "\n"; 562 #include "clang/Basic/DiagnosticOptions.def" 564 Out.indent(4) <<
"Diagnostic flags:\n";
565 for (
const std::string &
Warning : DiagOpts->Warnings)
566 Out.indent(6) <<
"-W" << Warning <<
"\n";
567 for (
const std::string &
Remark : DiagOpts->Remarks)
568 Out.indent(6) <<
"-R" << Remark <<
"\n";
574 StringRef SpecificModuleCachePath,
575 bool Complain)
override {
576 Out.indent(2) <<
"Header search options:\n";
577 Out.indent(4) <<
"System root [-isysroot=]: '" << HSOpts.
Sysroot <<
"'\n";
578 Out.indent(4) <<
"Resource dir [ -resource-dir=]: '" << HSOpts.
ResourceDir <<
"'\n";
579 Out.indent(4) <<
"Module Cache: '" << SpecificModuleCachePath <<
"'\n";
581 "Use builtin include directories [-nobuiltininc]");
583 "Use standard system include directories [-nostdinc]");
585 "Use standard C++ include directories [-nostdinc++]");
587 "Use libc++ (rather than libstdc++) [-stdlib=]");
593 std::string &SuggestedPredefines)
override {
594 Out.indent(2) <<
"Preprocessor options:\n";
596 "Uses compiler/target-specific predefines [-undef]");
598 "Uses detailed preprocessing record (for indexing)");
600 if (!PPOpts.
Macros.empty()) {
601 Out.indent(4) <<
"Predefined macros:\n";
604 for (std::vector<std::pair<std::string, bool/*isUndef*/> >::const_iterator
612 Out << I->first <<
"\n";
618 void readModuleFileExtension(
620 Out.indent(2) <<
"Module file extension '" 625 Out.write_escaped(Metadata.
UserInfo);
633 bool needsInputFileVisitation()
override {
return true; }
637 bool needsSystemInputFileVisitation()
override {
return true; }
643 bool isOverridden,
bool isExplicitModule)
override {
645 Out.indent(2) <<
"Input file: " <<
Filename;
647 if (isSystem || isOverridden || isExplicitModule) {
651 if (isOverridden || isExplicitModule)
656 if (isExplicitModule)
659 if (isExplicitModule)
660 Out <<
"ExplicitModule";
672 bool needsImportVisitation()
const override {
return true; }
676 void visitImport(StringRef ModuleName, StringRef Filename)
override {
677 Out.indent(2) <<
"Imports module '" << ModuleName
678 <<
"': " << Filename.str() <<
"\n";
693 std::unique_ptr<llvm::raw_fd_ostream> OutFile;
695 if (!OutputFileName.empty() && OutputFileName !=
"-") {
697 OutFile.reset(
new llvm::raw_fd_ostream(OutputFileName.str(), EC,
698 llvm::sys::fs::F_Text));
700 llvm::raw_ostream &Out = OutFile.get()? *OutFile.get() : llvm::outs();
702 Out <<
"Information for module file '" <<
getCurrentFile() <<
"':\n";
705 StringRef Magic = (*Buffer)->getMemBufferRef().getBuffer();
706 bool IsRaw = (Magic.size() >= 4 && Magic[0] ==
'C' && Magic[1] ==
'P' &&
707 Magic[2] ==
'C' && Magic[3] ==
'H');
708 Out <<
" Module format: " << (IsRaw ?
"raw" :
"obj") <<
"\n";
711 DumpModuleInfoListener Listener(Out);
713 PP.getHeaderSearchInfo().getHeaderSearchOpts();
734 RawLex.LexFromRawLexer(RawTok);
737 llvm::errs() <<
"\n";
738 RawLex.LexFromRawLexer(RawTok);
750 llvm::errs() <<
"\n";
783 bool BinaryMode =
true;
784 bool InvalidFile =
false;
789 const char *cur = Buffer->getBufferStart();
790 const char *end = Buffer->getBufferEnd();
791 const char *next = (cur != end) ? cur + 1 : end;
796 if (end - cur > 256) end = cur + 256;
804 }
else if (*cur == 0x0A)
812 std::unique_ptr<raw_ostream> OS =
820 if (Input.isFile()) {
822 OS->write_escaped(Input.getFile());
826 (*OS) <<
"#pragma clang module contents\n";
861 llvm::outs().write((*Buffer)->getBufferStart(),
Preamble);
865 void DumpCompilerOptionsAction::ExecuteAction() {
867 std::unique_ptr<raw_ostream> OSP =
872 raw_ostream &OS = *OSP;
882 OS <<
"\n\"features\" : [\n";
885 #define FEATURE(Name, Predicate) \ 886 ("\t{\"" #Name "\" : " + llvm::Twine(Predicate ? "true" : "false") + "},\n") \ 888 #include "clang/Basic/Features.def" 892 OS << Str.substr(0, Str.size() - 2);
896 OS <<
"\n\"extensions\" : [\n";
899 #define EXTENSION(Name, Predicate) \ 900 ("\t{\"" #Name "\" : " + llvm::Twine(Predicate ? "true" : "false") + "},\n") \ 902 #include "clang/Basic/Features.def" 906 OS << Str.substr(0, Str.size() - 2);
924 "no errors reported for failure");
940 llvm::outs() << Output;
std::string OutputFile
The output file, if any.
SourceLocation getLocForStartOfFile(FileID FID) const
Return the source location corresponding to the first byte of the specified file. ...
LangOptions & getLangOpts()
std::string OriginalModuleMap
When the input is a module map, the original module map file from which that map was inferred...
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
PreprocessorOptions & getPreprocessorOpts()
bool shouldEraseOutputFiles() override
Callback at the end of processing a single input, to determine if the output files should be erased o...
bool minimizeSourceToDependencyDirectives(llvm::StringRef Input, llvm::SmallVectorImpl< char > &Output, llvm::SmallVectorImpl< minimize_source_to_dependency_directives::Token > &Tokens, DiagnosticsEngine *Diags=nullptr, SourceLocation InputSourceLoc=SourceLocation())
Minimize the input down to the preprocessor directives that might have an effect on the dependencies ...
void createCodeCompletionConsumer()
Create a code completion consumer using the invocation; note that this will cause the source manager ...
std::vector< std::pair< std::string, bool > > Macros
Lexer - This provides a simple interface that turns a text buffer into a stream of tokens...
bool hasErrorOccurred() const
std::vector< std::unique_ptr< TemplateInstantiationCallback > > TemplateInstCallbacks
The template instantiation callbacks to trace or track instantiations (objects can be chained)...
Defines the clang::FileManager interface and associated types.
Specialize PointerLikeTypeTraits to allow LazyGenerationalUpdatePtr to be placed into a PointerUnion...
void ExecuteAction() override
Implement the ExecuteAction interface by running Sema on the already-initialized AST consumer...
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
void createSema(TranslationUnitKind TUKind, CodeCompleteConsumer *CompletionConsumer)
Create the Sema object to be used for parsing.
Abstract base class for actions which can be performed by the frontend.
DiagnosticOptions & getDiagnosticOpts()
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
InMemoryModuleCache & getModuleCache() const
void finalize(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema)
PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...
std::string ASTDumpFilter
If given, filter dumped AST Decl nodes by this substring.
ASTContext & getASTContext() const
Compiling a C++ modules TS module interface unit.
void IgnorePragmas()
Install empty handlers for all pragmas (making them ignored).
Options for controlling the target.
A context in which code is being synthesized (where a source location alone is not sufficient to iden...
virtual bool hasCodeCompletionSupport() const
Does this action support use with code completion?
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
static StringRef getModuleInputBufferName()
static std::string toString(const clang::SanitizerSet &Sanitizers)
Produce a string containing comma-separated names of sanitizers in Sanitizers set.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
Module * getCurrentModule() const
Token - This structure provides full information about a lexed token.
The client can handle an AST file that cannot load because it's compiled configuration doesn't match ...
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
const LangOptions & getLangOpts() const
unsigned BuildingImplicitModule
Whether we are performing an implicit module build.
bool BeginSourceFileAction(CompilerInstance &CI) override
Callback at the start of processing a single input.
unsigned RelocatablePCH
When generating PCH files, instruct the AST writer to create relocatable PCH files.
static bool ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot)
Compute the AST consumer arguments that will be used to create the PCHGenerator instance returned by ...
This is a base class for callbacks that will be notified at every template instantiation.
CompilerInstance & getCompilerInstance() const
const PCHContainerWriter & getPCHContainerWriter() const
Return the appropriate PCHContainerWriter depending on the current CodeGenOptions.
HeaderSearch & getHeaderSearchInfo() const
FrontendOptions & getFrontendOpts()
static void mapping(IO &io, TemplightEntry &fields)
StringRef getCurrentFileOrBufferName() const
PreprocessorOutputOptions & getPreprocessorOutputOpts()
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
virtual bool BeginInvocation(CompilerInstance &CI)
Callback before starting processing a single input, giving the opportunity to modify the CompilerInvo...
bool BeginInvocation(CompilerInstance &CI) override
Callback before starting processing a single input, giving the opportunity to modify the CompilerInvo...
#define DUMP_BOOLEAN(Value, Text)
const LangOptions & getLangOpts() const
HeaderSearchOptions & getHeaderSearchOpts()
void ExecuteAction() override
Implement the ExecuteAction interface by running Sema on the already-initialized AST consumer...
CodeCompleteConsumer & getCodeCompletionConsumer() const
std::vector< std::string > ModuleFeatures
The names of any features to enable in module 'requires' decls in addition to the hard-coded list in ...
bool DetailedRecord
Whether we should maintain a detailed record of all macro definitions and expansions.
Sema - This implements semantic analysis and AST building for C.
std::string CurrentModule
The name of the current module, of which the main source file is a part.
virtual bool shouldEraseOutputFiles()
Callback at the end of processing a single input, to determine if the output files should be erased o...
unsigned ASTDumpAll
Whether we deserialize all decls when forming AST dumps.
void DoPrintPreprocessedInput(Preprocessor &PP, raw_ostream *OS, const PreprocessorOutputOptions &Opts)
DoPrintPreprocessedInput - Implement -E mode.
void ExecuteAction() override
Implement the ExecuteAction interface by running Sema on the already-initialized AST consumer...
static PreambleBounds ComputePreamble(StringRef Buffer, const LangOptions &LangOpts, unsigned MaxLines=0)
Compute the preamble of the given file.
bool isInvalid() const
Return true if this object is invalid or uninitialized.
unsigned getLine() const
Return the presumed line number of this location.
Compiling a module from a list of header files.
void EnterMainSourceFile()
Enter the specified FileID as the main source file, which implicitly adds the builtin defines etc...
void print(raw_ostream &OS, unsigned Indent=0) const
Print the module map for this module to the given stream.
Defines the clang::Preprocessor interface.
Represents an unpacked "presumed" location which can be presented to the user.
InputKind getCurrentFileKind() const
std::unique_ptr< raw_pwrite_stream > createOutputFile(StringRef OutputPath, bool Binary, bool RemoveFileOnSignal, StringRef BaseInput, StringRef Extension, bool UseTemporary, bool CreateMissingDirectories=false)
Create a new output file and add it to the list of tracked output files, optionally deriving the outp...
DirectoryLookup - This class represents one entry in the search list that specifies the search order ...
bool AllowPCHWithCompilerErrors
When true, a PCH with compiler errors will not be rejected.
std::string CPU
If given, the name of the target CPU to generate code for.
SourceManager & getSourceManager() const
const char * getFilename() const
Return the presumed filename of this location.
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
std::string ABI
If given, the name of the target ABI to use.
File is a PCH file treated as the preamble.
unsigned getColumn() const
Return the presumed column number of this location.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
CompilerInstance - Helper class for managing a single instance of the Clang compiler.
Encodes a location in the source.
void atTemplateBegin(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema, const Sema::CodeSynthesisContext &Inst)
File is a PCH file treated as such.
ParsedSourceLocation CodeCompletionAt
If given, enable code completion at the provided location.
virtual TranslationUnitKind getTranslationUnitKind()
For AST-based actions, the kind of translation unit we're handling.
std::vector< FrontendInputFile > Inputs
The input files and their types.
Cached information about one file (either on disk or in the virtual file system). ...
std::string getClangFullRepositoryVersion()
Retrieves the full repository version that is an amalgamation of the information in getClangRepositor...
void Lex(Token &Result)
Lex the next token for this preprocessor.
virtual bool PrepareToExecuteAction(CompilerInstance &CI)
Prepare to execute the action on the given CompilerInstance.
virtual bool ReadFullVersionInformation(StringRef FullVersion)
Receives the full Clang version information.
unsigned ASTDumpLookups
Whether we include lookup table dumps in AST dumps.
std::vector< std::string > FeaturesAsWritten
The list of target specific features to enable or disable, as written on the command line...
void DumpToken(const Token &Tok, bool DumpFlags=false) const
Print the token to stderr, used for debugging.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
Abstract interface for a consumer of code-completion information.
bool isNot(tok::TokenKind K) const
ASTDumpOutputFormat ASTDumpFormat
Specifies the output format of the AST.
const llvm::MemoryBuffer * getBuffer(FileID FID, SourceLocation Loc, bool *Invalid=nullptr) const
Return the buffer for the specified FileID.
Dataflow Directional Tag Classes.
FileManager & getFileManager() const
Return the current file manager to the caller.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
const FrontendInputFile & getCurrentInput() const
bool UsePredefines
Initialize the preprocessor with the compiler and target specific predefines.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
Reads an AST files chain containing the contents of a translation unit.
FileID getMainFileID() const
Returns the FileID of the main source file.
StringRef getCurrentFile() const
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > getBufferForFile(const FileEntry *Entry, bool isVolatile=false, bool ShouldCloseOpenFile=true)
Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful, otherwise returning null.
virtual std::unique_ptr< ASTConsumer > CreatePCHContainerGenerator(CompilerInstance &CI, const std::string &MainFileName, const std::string &OutputFileName, std::unique_ptr< llvm::raw_pwrite_stream > OS, std::shared_ptr< PCHBuffer > Buffer) const =0
Return an ASTConsumer that can be chained with a PCHGenerator that produces a wrapper file format con...
SourceManager & getSourceManager() const
Return the current source manager.
PresumedLoc getPresumedLoc(SourceLocation Loc, bool UseLineDirectives=true) const
Returns the "presumed" location of a SourceLocation specifies.
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
FrontendOptions - Options for controlling the behavior of the frontend.
Abstract interface for callback invocations by the ASTReader.
~SyntaxOnlyAction() override
std::vector< std::shared_ptr< ModuleFileExtension > > ModuleFileExtensions
The list of module file extensions.
std::unique_ptr< raw_pwrite_stream > createDefaultOutputFile(bool Binary=true, StringRef BaseInput="", StringRef Extension="")
Create the default output file (from the invocation's options) and add it to the list of tracked outp...
std::unique_ptr< ASTConsumer > CreateASTViewer()
Preprocessor & getPreprocessor() const
Return the current preprocessor.
bool hasCodeCompletionConsumer() const
std::unique_ptr< ASTConsumer > CreateASTDeclNodeLister()
void setSuppressAllDiagnostics(bool Val=true)
Suppress all diagnostics, to silence the front end when we know that we don't want any more diagnosti...
virtual bool BeginSourceFileAction(CompilerInstance &CI)
Callback at the start of processing a single input.
unsigned ASTDumpDecls
Whether we include declaration dumps in AST dumps.
void atTemplateEnd(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema, const Sema::CodeSynthesisContext &Inst)
const PCHContainerReader & getPCHContainerReader() const
Return the appropriate PCHContainerReader depending on the current CodeGenOptions.
SourceManager & getSourceManager() const
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
std::pair< unsigned, bool > PrecompiledPreambleBytes
If non-zero, the implicit PCH include is actually a precompiled preamble that covers this number of b...
DiagnosticsEngine & getDiagnostics() const
Get the current diagnostics engine.
void initialize(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema)
static bool readASTFileControlBlock(StringRef Filename, FileManager &FileMgr, const PCHContainerReader &PCHContainerRdr, bool FindModuleFileExtensions, ASTReaderListener &Listener, bool ValidateDiagnosticOptions)
Read the control block for the named AST file.
This is the interface for minimizing header and source files to the minimum necessary preprocessor di...
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
static std::unique_ptr< llvm::raw_pwrite_stream > CreateOutputFile(CompilerInstance &CI, StringRef InFile, std::string &OutputFile)
Creates file to write the PCH into and returns a stream to write it into.
std::unique_ptr< ASTConsumer > CreateASTPrinter(std::unique_ptr< raw_ostream > OS, StringRef FilterString)
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
void SetKeepWhitespaceMode(bool Val)
SetKeepWhitespaceMode - This method lets clients enable or disable whitespace retention mode...
std::string Triple
The name of the target triple to compile for.
std::unique_ptr< ASTConsumer > CreateASTDumper(std::unique_ptr< raw_ostream > OS, StringRef FilterString, bool DumpDecls, bool Deserialize, bool DumpLookups, ASTDumpOutputFormat Format)
bool isSystem(CharacteristicKind CK)
Determine whether a file / directory characteristic is for system code.
This class handles loading and caching of source files into memory.
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
void ExecuteAction() override
Implement the ExecuteAction interface by running Sema on the already-initialized AST consumer...