;
55GetCodeCompletionConsumer(CI));
63std::unique_ptr<ASTConsumer>
65 returnstd::make_unique<ASTConsumer>();
68voidInitOnlyAction::ExecuteAction() {
72voidReadPCHAndPreprocessAction::ExecuteAction() {
83}
while(Tok.
isNot(tok::eof));
86std::unique_ptr<ASTConsumer>
89 returnstd::make_unique<ASTConsumer>();
96std::unique_ptr<ASTConsumer>
98 if(std::unique_ptr<raw_ostream> OS =
104std::unique_ptr<ASTConsumer>
113std::unique_ptr<ASTConsumer>
118std::unique_ptr<ASTConsumer>
123std::unique_ptr<ASTConsumer>
129std::string OutputFile;
130std::unique_ptr<raw_pwrite_stream> OS =
139 autoBuffer = std::make_shared<PCHBuffer>();
140std::vector<std::unique_ptr<ASTConsumer>> Consumers;
141Consumers.push_back(std::make_unique<PCHGenerator>(
143FrontendOpts.ModuleFileExtensions,
145FrontendOpts.IncludeTimestamps, FrontendOpts.BuildingImplicitModule,
148CI, std::string(InFile), OutputFile, std::move(OS), Buffer));
150 returnstd::make_unique<MultiplexConsumer>(std::move(Consumers));
154std::string &Sysroot) {
164std::unique_ptr<llvm::raw_pwrite_stream>
166std::string &OutputFile) {
169 true, InFile,
"",
false);
188std::vector<std::unique_ptr<ASTConsumer>>
191std::unique_ptr<raw_pwrite_stream> OS = CreateOutputFile(CI, InFile);
198 autoBuffer = std::make_shared<PCHBuffer>();
199std::vector<std::unique_ptr<ASTConsumer>> Consumers;
201Consumers.push_back(std::make_unique<PCHGenerator>(
213CI, std::string(InFile), OutputFile, std::move(OS), Buffer));
217std::unique_ptr<ASTConsumer>
220std::vector<std::unique_ptr<ASTConsumer>> Consumers =
222 if(Consumers.empty())
225 returnstd::make_unique<MultiplexConsumer>(std::move(Consumers));
233boolGenerateModuleFromModuleMapAction::BeginSourceFileAction(
243std::unique_ptr<raw_pwrite_stream>
250 if(ModuleMapFile.empty())
251ModuleMapFile = InFile;
273std::unique_ptr<ASTConsumer>
276std::vector<std::unique_ptr<ASTConsumer>> Consumers;
280Consumers.push_back(std::make_unique<ReducedBMIGenerator>(
286Consumers.push_back(std::make_unique<CXX20ModulesGenerator>(
291 returnstd::make_unique<MultiplexConsumer>(std::move(Consumers));
294std::unique_ptr<raw_pwrite_stream>
300std::unique_ptr<ASTConsumer>
301GenerateReducedModuleInterfaceAction::CreateASTConsumer(
CompilerInstance&CI,
308boolGenerateHeaderUnitAction::BeginSourceFileAction(
CompilerInstance&CI) {
317std::unique_ptr<raw_pwrite_stream>
326std::unique_ptr<ASTConsumer>
328 returnstd::make_unique<ASTConsumer>();
331std::unique_ptr<ASTConsumer>
334 returnstd::make_unique<ASTConsumer>();
337std::unique_ptr<ASTConsumer>
339 returnstd::make_unique<ASTConsumer>();
346std::unique_ptr<ASTReader> Reader(
new ASTReader(
349Sysroot.empty() ?
"": Sysroot.c_str(),
363structTemplightEntry {
367std::string DefinitionLocation;
368std::string PointOfInstantiation;
374template<>
structMappingTraits<TemplightEntry> {
375 static void mapping(IO &io, TemplightEntry &fields) {
376io.mapRequired(
"name", fields.Name);
377io.mapRequired(
"kind", fields.Kind);
378io.mapRequired(
"event", fields.Event);
379io.mapRequired(
"orig", fields.DefinitionLocation);
380io.mapRequired(
"poi", fields.PointOfInstantiation);
396 constCodeSynthesisContext &Inst)
override{
397displayTemplightEntry<true>(llvm::outs(), TheSema, Inst);
401 constCodeSynthesisContext &Inst)
override{
402displayTemplightEntry<false>(llvm::outs(), TheSema, Inst);
406 staticstd::string
toString(CodeSynthesisContext::SynthesisKind
Kind) {
408 caseCodeSynthesisContext::TemplateInstantiation:
409 return "TemplateInstantiation";
410 caseCodeSynthesisContext::DefaultTemplateArgumentInstantiation:
411 return "DefaultTemplateArgumentInstantiation";
412 caseCodeSynthesisContext::DefaultFunctionArgumentInstantiation:
413 return "DefaultFunctionArgumentInstantiation";
414 caseCodeSynthesisContext::ExplicitTemplateArgumentSubstitution:
415 return "ExplicitTemplateArgumentSubstitution";
416 caseCodeSynthesisContext::DeducedTemplateArgumentSubstitution:
417 return "DeducedTemplateArgumentSubstitution";
418 caseCodeSynthesisContext::LambdaExpressionSubstitution:
419 return "LambdaExpressionSubstitution";
420 caseCodeSynthesisContext::PriorTemplateArgumentSubstitution:
421 return "PriorTemplateArgumentSubstitution";
422 caseCodeSynthesisContext::DefaultTemplateArgumentChecking:
423 return "DefaultTemplateArgumentChecking";
424 caseCodeSynthesisContext::ExceptionSpecEvaluation:
425 return "ExceptionSpecEvaluation";
426 caseCodeSynthesisContext::ExceptionSpecInstantiation:
427 return "ExceptionSpecInstantiation";
428 caseCodeSynthesisContext::DeclaringSpecialMember:
429 return "DeclaringSpecialMember";
430 caseCodeSynthesisContext::DeclaringImplicitEqualityComparison:
431 return "DeclaringImplicitEqualityComparison";
432 caseCodeSynthesisContext::DefiningSynthesizedFunction:
433 return "DefiningSynthesizedFunction";
434 caseCodeSynthesisContext::RewritingOperatorAsSpaceship:
435 return "RewritingOperatorAsSpaceship";
436 caseCodeSynthesisContext::Memoization:
437 return "Memoization";
438 caseCodeSynthesisContext::ConstraintsCheck:
439 return "ConstraintsCheck";
440 caseCodeSynthesisContext::ConstraintSubstitution:
441 return "ConstraintSubstitution";
442 caseCodeSynthesisContext::ConstraintNormalization:
443 return "ConstraintNormalization";
444 caseCodeSynthesisContext::RequirementParameterInstantiation:
445 return "RequirementParameterInstantiation";
446 caseCodeSynthesisContext::ParameterMappingSubstitution:
447 return "ParameterMappingSubstitution";
448 caseCodeSynthesisContext::RequirementInstantiation:
449 return "RequirementInstantiation";
450 caseCodeSynthesisContext::NestedRequirementConstraintsCheck:
451 return "NestedRequirementConstraintsCheck";
452 caseCodeSynthesisContext::InitializingStructuredBinding:
453 return "InitializingStructuredBinding";
454 caseCodeSynthesisContext::MarkingClassDllexported:
455 return "MarkingClassDllexported";
456 caseCodeSynthesisContext::BuildingBuiltinDumpStructCall:
457 return "BuildingBuiltinDumpStructCall";
458 caseCodeSynthesisContext::BuildingDeductionGuides:
459 return "BuildingDeductionGuides";
460 caseCodeSynthesisContext::TypeAliasTemplateInstantiation:
461 return "TypeAliasTemplateInstantiation";
462 caseCodeSynthesisContext::PartialOrderingTTP:
463 return "PartialOrderingTTP";
468 template<
boolBeginInstantiation>
469 static voiddisplayTemplightEntry(llvm::raw_ostream &Out,
const Sema&TheSema,
470 constCodeSynthesisContext &Inst) {
473llvm::raw_string_ostream OS(YAML);
474llvm::yaml::Output YO(OS);
475TemplightEntry Entry =
476getTemplightEntry<BeginInstantiation>(TheSema, Inst);
477llvm::yaml::EmptyContext Context;
478llvm::yaml::yamlize(YO, Entry,
true, Context);
480Out <<
"---"<< YAML <<
"\n";
483 static voidprintEntryName(
const Sema&TheSema,
const Decl*Entity,
484llvm::raw_string_ostream &OS) {
485 auto*NamedTemplate = cast<NamedDecl>(Entity);
490NamedTemplate->getNameForDiagnostic(OS, Policy,
true);
492 if(!OS.str().empty())
496 NamedDecl*NamedCtx = dyn_cast_or_null<NamedDecl>(Ctx);
498 if(
const auto*
Decl= dyn_cast<TagDecl>(NamedTemplate)) {
499 if(
const auto*R = dyn_cast<RecordDecl>(
Decl)) {
506OS <<
"unnamed "<<
Decl->getKindName();
510assert(NamedCtx &&
"NamedCtx cannot be null");
512 if(
const auto*
Decl= dyn_cast<ParmVarDecl>(NamedTemplate)) {
513OS <<
"unnamed function parameter "<<
Decl->getFunctionScopeIndex()
515 if(
Decl->getFunctionScopeDepth() > 0)
516OS <<
"(at depth "<<
Decl->getFunctionScopeDepth() <<
") ";
522 if(
const auto*
Decl= dyn_cast<TemplateTypeParmDecl>(NamedTemplate)) {
523 if(
const Type*Ty =
Decl->getTypeForDecl()) {
524 if(
const auto*TTPT = dyn_cast_or_null<TemplateTypeParmType>(Ty)) {
525OS <<
"unnamed template type parameter "<< TTPT->getIndex() <<
" ";
526 if(TTPT->getDepth() > 0)
527OS <<
"(at depth "<< TTPT->getDepth() <<
") ";
535 if(
const auto*
Decl= dyn_cast<NonTypeTemplateParmDecl>(NamedTemplate)) {
536OS <<
"unnamed template non-type parameter "<<
Decl->getIndex() <<
" ";
537 if(
Decl->getDepth() > 0)
538OS <<
"(at depth "<<
Decl->getDepth() <<
") ";
544 if(
const auto*
Decl= dyn_cast<TemplateTemplateParmDecl>(NamedTemplate)) {
545OS <<
"unnamed template template parameter "<<
Decl->getIndex() <<
" ";
546 if(
Decl->getDepth() > 0)
547OS <<
"(at depth "<<
Decl->getDepth() <<
") ";
553llvm_unreachable(
"Failed to retrieve a name for this entry!");
554OS <<
"unnamed identifier";
557 template<
boolBeginInstantiation>
558 staticTemplightEntry getTemplightEntry(
const Sema&TheSema,
559 constCodeSynthesisContext &Inst) {
560TemplightEntry Entry;
562Entry.Event = BeginInstantiation ?
"Begin":
"End";
563llvm::raw_string_ostream OS(Entry.Name);
564printEntryName(TheSema, Inst.Entity, OS);
568Entry.DefinitionLocation = std::string(DefLoc.
getFilename()) +
":"+
569std::to_string(DefLoc.
getLine()) +
":"+
574Entry.PointOfInstantiation = std::string(PoiLoc.
getFilename()) +
":"+
575std::to_string(PoiLoc.
getLine()) +
":"+
583std::unique_ptr<ASTConsumer>
585 returnstd::make_unique<ASTConsumer>();
595EnsureSemaIsCreated(CI, *
this);
598std::make_unique<DefaultTemplateInstCallback>());
606llvm::raw_ostream &Out;
609DumpModuleInfoListener(llvm::raw_ostream &Out) : Out(Out) { }
611#define DUMP_BOOLEAN(Value, Text) \ 612 Out.indent(4) << Text << ": "<< (Value? "Yes" : "No") << "\n"
614 boolReadFullVersionInformation(StringRef FullVersion)
override{
619<<
" Clang: "<< FullVersion <<
"\n";
623 voidReadModuleName(StringRef ModuleName)
override{
624Out.indent(2) <<
"Module name: "<< ModuleName <<
"\n";
626 voidReadModuleMapFile(StringRef ModuleMapPath)
override{
627Out.indent(2) <<
"Module map file: "<< ModuleMapPath <<
"\n";
630 boolReadLanguageOptions(
const LangOptions&LangOpts,
631StringRef ModuleFilename,
boolComplain,
632 boolAllowCompatibleDifferences)
override{
633Out.indent(2) <<
"Language options:\n";
634#define LANGOPT(Name, Bits, Default, Description) \ 635 DUMP_BOOLEAN(LangOpts.Name, Description); 636#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ 637 Out.indent(4) << Description << ": "\
638<< static_cast<unsigned>(LangOpts.get##Name()) << "\n";
639#define VALUE_LANGOPT(Name, Bits, Default, Description) \ 640 Out.indent(4) << Description << ": "<< LangOpts.Name << "\n";
641#define BENIGN_LANGOPT(Name, Bits, Default, Description) 642#define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) 643#include "clang/Basic/LangOptions.def" 646Out.indent(4) <<
"Module features:\n";
648Out.indent(6) << Feature <<
"\n";
655StringRef ModuleFilename,
boolComplain,
656 boolAllowCompatibleDifferences)
override{
657Out.indent(2) <<
"Target options:\n";
658Out.indent(4) <<
" Triple: "<< TargetOpts.
Triple<<
"\n";
659Out.indent(4) <<
" CPU: "<< TargetOpts.
CPU<<
"\n";
660Out.indent(4) <<
" TuneCPU: "<< TargetOpts.
TuneCPU<<
"\n";
661Out.indent(4) <<
" ABI: "<< TargetOpts.
ABI<<
"\n";
664Out.indent(4) <<
"Target features:\n";
675StringRef ModuleFilename,
676 boolComplain)
override{
677Out.indent(2) <<
"Diagnostic options:\n";
678#define DIAGOPT(Name, Bits, Default) DUMP_BOOLEAN(DiagOpts->Name, #Name); 679#define ENUM_DIAGOPT(Name, Type, Bits, Default) \ 680 Out.indent(4) << #Name << ": "<< DiagOpts->get##Name() << "\n";
681#define VALUE_DIAGOPT(Name, Bits, Default) \ 682 Out.indent(4) << #Name << ": "<< DiagOpts->Name << "\n";
683#include "clang/Basic/DiagnosticOptions.def" 685Out.indent(4) <<
"Diagnostic flags:\n";
686 for(
conststd::string &
Warning: DiagOpts->Warnings)
687Out.indent(6) <<
"-W"<<
Warning<<
"\n";
688 for(
conststd::string &
Remark: DiagOpts->Remarks)
689Out.indent(6) <<
"-R"<<
Remark<<
"\n";
695StringRef ModuleFilename,
696StringRef SpecificModuleCachePath,
697 boolComplain)
override{
698Out.indent(2) <<
"Header search options:\n";
699Out.indent(4) <<
"System root [-isysroot=]: '"<< HSOpts.
Sysroot<<
"'\n";
700Out.indent(4) <<
"Resource dir [ -resource-dir=]: '"<< HSOpts.
ResourceDir<<
"'\n";
701Out.indent(4) <<
"Module Cache: '"<< SpecificModuleCachePath <<
"'\n";
703 "Use builtin include directories [-nobuiltininc]");
705 "Use standard system include directories [-nostdinc]");
707 "Use standard C++ include directories [-nostdinc++]");
709 "Use libc++ (rather than libstdc++) [-stdlib=]");
714 boolComplain)
override{
715Out.indent(2) <<
"Header search paths:\n";
716Out.indent(4) <<
"User entries:\n";
718Out.indent(6) << Entry.Path <<
"\n";
719Out.indent(4) <<
"System header prefixes:\n";
721Out.indent(6) << Prefix.Prefix <<
"\n";
722Out.indent(4) <<
"VFS overlay files:\n";
724Out.indent(6) << Overlay <<
"\n";
729StringRef ModuleFilename,
boolReadMacros,
731std::string &SuggestedPredefines)
override{
732Out.indent(2) <<
"Preprocessor options:\n";
734 "Uses compiler/target-specific predefines [-undef]");
736 "Uses detailed preprocessing record (for indexing)");
739Out.indent(4) <<
"Predefined macros:\n";
742 for(std::vector<std::pair<std::string, bool/*isUndef*/> >::const_iterator
743I = PPOpts.
Macros.begin(), IEnd = PPOpts.
Macros.end();
750Out << I->first <<
"\n";
756 voidreadModuleFileExtension(
758Out.indent(2) <<
"Module file extension '" 763Out.write_escaped(Metadata.
UserInfo);
771 boolneedsInputFileVisitation()
override{
return true; }
775 boolneedsSystemInputFileVisitation()
override{
return true; }
780 boolvisitInputFile(StringRef
Filename,
boolisSystem,
781 boolisOverridden,
boolisExplicitModule)
override{
783Out.indent(2) <<
"Input file: "<<
Filename;
785 if(isSystem || isOverridden || isExplicitModule) {
789 if(isOverridden || isExplicitModule)
793Out <<
"Overridden";
794 if(isExplicitModule)
797 if(isExplicitModule)
798Out <<
"ExplicitModule";
810 boolneedsImportVisitation()
const override{
return true; }
814 voidvisitImport(StringRef ModuleName, StringRef
Filename)
override{
815Out.indent(2) <<
"Imports module '"<< ModuleName
816<<
"': "<<
Filename.str() <<
"\n";
832 return "Module Map Module";
834 return "Interface Unit";
836 return "Implementation Unit";
838 return "Partition Interface";
840 return "Partition Implementation";
842 return "Header Unit";
844 return "Global Module Fragment";
846 return "Implicit Module Fragment";
848 return "Private Module Fragment";
850llvm_unreachable(
"unknown module kind!");
865 if(!OutputFileName.empty() && OutputFileName !=
"-") {
867OutputStream.reset(
newllvm::raw_fd_ostream(
868OutputFileName.str(), EC, llvm::sys::fs::OF_TextWithCRLF));
870llvm::raw_ostream &Out = OutputStream ? *OutputStream : llvm::outs();
872Out <<
"Information for module file '"<<
getCurrentFile() <<
"':\n";
875StringRef Magic = (*Buffer)->getMemBufferRef().getBuffer();
876 boolIsRaw = Magic.starts_with(
"CPCH");
877Out <<
" Module format: "<< (IsRaw ?
"raw":
"obj") <<
"\n";
880DumpModuleInfoListener Listener(Out);
892Out <<
" ====== C++20 Module structure ======\n";
895Out <<
" Mismatched module names : "<< MF.
ModuleName<<
" and " 905std::map<std::string, SubModInfo> SubModMap;
908 autoI = SubModMap.find(Name);
909 if(I == SubModMap.end())
910Out <<
" was not found in the sub modules!\n";
912I->second.Seen =
true;
913Out <<
" is at index #"<< I->second.Idx <<
"\n";
916 Module*Primary =
nullptr;
917 for(
unsignedIdx = 0; Idx <= SubModuleCount; ++Idx) {
924<<
"' is the Primary Module at index #"<< Idx <<
"\n";
925SubModMap.insert({M->
Name, {Idx, M, M->
Kind, M->Name,
true}});
927SubModMap.insert({M->
Name, {Idx, M, M->
Kind, M->Name,
false}});
931Out <<
" Sub Modules:\n";
933PrintSubMapEntry(MI->Name, MI->Kind);
935 if(!Primary->
Imports.empty())
936Out <<
" Imports:\n";
937 for(
auto*IMP : Primary->
Imports) {
938PrintSubMapEntry(IMP->Name, IMP->Kind);
940 if(!Primary->
Exports.empty())
941Out <<
" Exports:\n";
942 for(
unsignedMN = 0, N = Primary->
Exports.size(); MN != N; ++MN) {
944PrintSubMapEntry(M->Name, M->Kind);
952 if(
autoFilteredMacros = llvm::make_filter_range(
954[](
const auto&Macro) { return Macro.first->isFromAST(); });
955!FilteredMacros.empty()) {
956Out <<
" Macro Definitions:\n";
957 for(
const auto&Macro :
959Out <<
" "<< Macro.first->getName() <<
"\n";
963 for(
const auto&
SM: SubModMap) {
964 if(!
SM.second.Seen &&
SM.second.Mod) {
966<<
"' at index #"<<
SM.second.Idx
967<<
" has no direct reference in the Primary\n";
970Out <<
" ====== ======\n";
991llvm::MemoryBufferRef FromFile =
SM.getBufferOrFake(
SM.getMainFileID());
997 while(RawTok.
isNot(tok::eof)) {
999llvm::errs() <<
"\n";
1012llvm::errs() <<
"\n";
1013}
while(Tok.
isNot(tok::eof));
1027}
while(Tok.
isNot(tok::eof));
1046 boolBinaryMode =
false;
1047 if(llvm::Triple(LLVM_HOST_TRIPLE).isOSWindows()) {
1050 if(std::optional<llvm::MemoryBufferRef> Buffer =
1051 SM.getBufferOrNone(
SM.getMainFileID())) {
1052 const char*cur = Buffer->getBufferStart();
1053 const char*end = Buffer->getBufferEnd();
1054 const char*next = (cur != end) ? cur + 1 : end;
1059 if(end - cur > 256)
1062 while(next < end) {
1065BinaryMode =
false;
1068}
else if(*cur == 0x0A)
1077std::unique_ptr<raw_ostream> OS =
1085 if(Input.isFile()) {
1087OS->write_escaped(Input.getFile());
1091(*OS) <<
"#pragma clang module contents\n";
1128llvm::outs().write((*Buffer)->getBufferStart(),
Preamble);
1132voidDumpCompilerOptionsAction::ExecuteAction() {
1134std::unique_ptr<raw_ostream> OSP =
1139raw_ostream &OS = *OSP;
1149OS <<
"\n\"features\" : [\n";
1152#define FEATURE(Name, Predicate) \ 1153 ("\t{\""#Name "\" : " + llvm::Twine(Predicate ? "true" : "false") + "},\n") \
1155#include "clang/Basic/Features.def" 1159OS << Str.substr(0, Str.size() - 2);
1163OS <<
"\n\"extensions\" : [\n";
1166#define EXTENSION(Name, Predicate) \ 1167 ("\t{\""#Name "\" : " + llvm::Twine(Predicate ? "true" : "false") + "},\n") \
1169#include "clang/Basic/Features.def" 1173OS << Str.substr(0, Str.size() - 2);
1183llvm::MemoryBufferRef FromFile =
SM.getBufferOrFake(
SM.getMainFileID());
1188FromFile.getBuffer(), Tokens, Directives, &CI.
getDiagnostics(),
1189 SM.getLocForStartOfFile(
SM.getMainFileID()))) {
1191 "no errors reported for failure");
1203}
while(Tok.
isNot(tok::eof));
1211voidGetDependenciesByModuleNameAction::ExecuteAction() {
1215 FileIDMainFileID =
SM.getMainFileID();
1219 Path.push_back(std::make_pair(ModuleID, FileStart));
enum clang::sema::@1704::IndirectLocalPathEntry::EntryKind Kind
This is the interface for scanning header and source files to get the minimum necessary preprocessor ...
Defines the clang::FileManager interface and associated types.
#define DUMP_BOOLEAN(Value, Text)
static StringRef ModuleKindName(Module::ModuleKind MK)
Defines the clang::Module class, which describes a module in the source code.
Defines the clang::Preprocessor interface.
static std::string toString(const clang::SanitizerSet &Sanitizers)
Produce a string containing comma-separated names of sanitizers in Sanitizers set.
const clang::PrintingPolicy & getPrintingPolicy() const
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
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.
Abstract interface for callback invocations by the ASTReader.
virtual bool ReadFullVersionInformation(StringRef FullVersion)
Receives the full Clang version information.
Reads an AST files chain containing the contents of a translation unit.
ModuleManager & getModuleManager()
Retrieve the module manager.
@ ARR_ConfigurationMismatch
The client can handle an AST file that cannot load because it's compiled configuration doesn't match ...
unsigned getTotalNumSubmodules() const
Returns the number of submodules known.
Module * getModule(unsigned ID) override
Retrieve the module that corresponds to the given module ID.
static bool readASTFileControlBlock(StringRef Filename, FileManager &FileMgr, const InMemoryModuleCache &ModuleCache, const PCHContainerReader &PCHContainerRdr, bool FindModuleFileExtensions, ASTReaderListener &Listener, bool ValidateDiagnosticOptions, unsigned ClientLoadCapabilities=ARR_ConfigurationMismatch|ARR_OutOfDate)
Read the control block for the named AST file.
Preprocessor & getPreprocessor() const
Retrieve the preprocessor.
const LangOptions & getLangOpts() const
IntrusiveRefCntPtr< ASTReader > getASTReader() const
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
Abstract interface for a consumer of code-completion information.
CompilerInstance - Helper class for managing a single instance of the Clang compiler.
const PCHContainerReader & getPCHContainerReader() const
Return the appropriate PCHContainerReader depending on the current CodeGenOptions.
DiagnosticsEngine & getDiagnostics() const
Get the current diagnostics engine.
std::unique_ptr< raw_pwrite_stream > createDefaultOutputFile(bool Binary=true, StringRef BaseInput="", StringRef Extension="", bool RemoveFileOnSignal=true, bool CreateMissingDirectories=false, bool ForceUseTemporary=false)
Create the default output file (from the invocation's options) and add it to the list of tracked outp...
ModuleLoadResult loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) override
Attempt to load the given module.
FileManager & getFileManager() const
Return the current file manager to the caller.
PreprocessorOutputOptions & getPreprocessorOutputOpts()
InMemoryModuleCache & getModuleCache() const
Preprocessor & getPreprocessor() const
Return the current preprocessor.
ASTContext & getASTContext() const
FrontendOptions & getFrontendOpts()
HeaderSearchOptions & getHeaderSearchOpts()
bool hasCodeCompletionConsumer() const
const PCHContainerWriter & getPCHContainerWriter() const
Return the appropriate PCHContainerWriter depending on the current CodeGenOptions.
PreprocessorOptions & getPreprocessorOpts()
void createCodeCompletionConsumer()
Create a code completion consumer using the invocation; note that this will cause the source manager ...
DiagnosticOptions & getDiagnosticOpts()
LangOptions & getLangOpts()
SourceManager & getSourceManager() const
Return the current source manager.
CodeCompleteConsumer & getCodeCompletionConsumer() const
void createSema(TranslationUnitKind TUKind, CodeCompleteConsumer *CompletionConsumer)
Create the Sema object to be used for parsing.
Decl - This represents one declaration (or definition), e.g.
static Decl * castFromDeclContext(const DeclContext *)
SourceLocation getLocation() const
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
bool hasErrorOccurred() const
void setSuppressAllDiagnostics(bool Val)
Suppress all diagnostics, to silence the front end when we know that we don't want any more diagnosti...
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
void ExecuteAction() override
Implement the ExecuteAction interface by running Sema on the already-initialized AST consumer.
bool BeginInvocation(CompilerInstance &CI) override
Callback before starting processing a single input, giving the opportunity to modify the CompilerInvo...
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > getBufferForFile(FileEntryRef Entry, bool isVolatile=false, bool RequiresNullTerminator=true, std::optional< int64_t > MaybeLimit=std::nullopt, bool IsText=true)
Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful,...
Abstract base class for actions which can be performed by the frontend.
const FrontendInputFile & getCurrentInput() const
InputKind getCurrentFileKind() const
virtual bool shouldEraseOutputFiles()
Callback at the end of processing a single input, to determine if the output files should be erased o...
ASTUnit & getCurrentASTUnit() const
CompilerInstance & getCompilerInstance() const
Module * getCurrentModule() const
StringRef getCurrentFile() const
virtual bool BeginSourceFileAction(CompilerInstance &CI)
Callback at the start of processing a single input.
virtual TranslationUnitKind getTranslationUnitKind()
For AST-based actions, the kind of translation unit we're handling.
virtual bool hasCodeCompletionSupport() const
Does this action support use with code completion?
StringRef getCurrentFileOrBufferName() const
bool isCurrentFileAST() const
FrontendOptions - Options for controlling the behavior of the frontend.
unsigned BuildingImplicitModule
Whether we are performing an implicit module build.
unsigned AllowPCMWithCompilerErrors
Output (and read) PCM files regardless of compiler errors.
unsigned IncludeTimestamps
Whether timestamps should be written to the produced PCH file.
std::string ASTDumpFilter
If given, filter dumped AST Decl nodes by this substring.
unsigned ASTDumpLookups
Whether we include lookup table dumps in AST dumps.
ASTDumpOutputFormat ASTDumpFormat
Specifies the output format of the AST.
std::string OutputFile
The output file, if any.
unsigned GenReducedBMI
Whether to generate reduced BMI for C++20 named modules.
std::vector< std::shared_ptr< ModuleFileExtension > > ModuleFileExtensions
The list of module file extensions.
ParsedSourceLocation CodeCompletionAt
If given, enable code completion at the provided location.
std::string OriginalModuleMap
When the input is a module map, the original module map file from which that map was inferred,...
std::string ModuleOutputPath
Output Path for module output file.
unsigned ASTDumpDeclTypes
Whether we include declaration type dumps in AST dumps.
unsigned ASTDumpAll
Whether we deserialize all decls when forming AST dumps.
unsigned RelocatablePCH
When generating PCH files, instruct the AST writer to create relocatable PCH files.
unsigned ASTDumpDecls
Whether we include declaration dumps in AST dumps.
bool shouldEraseOutputFiles() override
Callback at the end of processing a single input, to determine if the output files should be erased o...
std::vector< std::unique_ptr< ASTConsumer > > CreateMultiplexConsumer(CompilerInstance &CI, StringRef InFile)
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
bool BeginSourceFileAction(CompilerInstance &CI) override
Callback at the start of processing a single input.
std::unique_ptr< raw_pwrite_stream > CreateOutputFile(CompilerInstance &CI, StringRef InFile) override
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.
bool BeginSourceFileAction(CompilerInstance &CI) override
Callback at the start of processing a single input.
static bool ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot)
Compute the AST consumer arguments that will be used to create the PCHGenerator instance returned by ...
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
bool shouldEraseOutputFiles() override
Callback at the end of processing a single input, to determine if the output files should be erased o...
One of these records is kept for each identifier that is lexed.
@ CMK_HeaderUnit
Compiling a module header unit.
@ CMK_ModuleInterface
Compiling a C++ modules interface unit.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
std::string CurrentModule
The name of the current module, of which the main source file is a part.
std::vector< std::string > ModuleFeatures
The names of any features to enable in module 'requires' decls in addition to the hard-coded list in ...
Lexer - This provides a simple interface that turns a text buffer into a stream of tokens.
void SetKeepWhitespaceMode(bool Val)
SetKeepWhitespaceMode - This method lets clients enable or disable whitespace retention mode.
bool LexFromRawLexer(Token &Result)
LexFromRawLexer - Lex a token from a designated raw lexer (one with no associated preprocessor object...
static PreambleBounds ComputePreamble(StringRef Buffer, const LangOptions &LangOpts, unsigned MaxLines=0)
Compute the preamble of the given file.
Describes a module or submodule.
SmallVector< ExportDecl, 2 > Exports
The set of export declarations.
@ Hidden
All of the names in this module are hidden.
void print(raw_ostream &OS, unsigned Indent=0, bool Dump=false) const
Print the module map for this module to the given stream.
ModuleKind Kind
The kind of this module.
llvm::SmallSetVector< Module *, 2 > Imports
The set of modules imported by this module, and on which this module depends.
std::string Name
The name of this module.
llvm::iterator_range< submodule_iterator > submodules()
@ ModuleImplementationUnit
This is a C++20 module implementation unit.
@ ModuleMapModule
This is a module that was defined by a module map and built out of header files.
@ ImplicitGlobalModuleFragment
This is an implicit fragment of the global module which contains only language linkage declarations (...
@ ModulePartitionInterface
This is a C++20 module partition interface.
@ ModuleInterfaceUnit
This is a C++20 module interface unit.
@ ModuleHeaderUnit
This is a C++20 header unit.
@ ModulePartitionImplementation
This is a C++20 module partition implementation.
@ PrivateModuleFragment
This is the private module fragment within some C++ module.
@ ExplicitGlobalModuleFragment
This is the explicit Global Module Fragment of a modular TU.
This represents a decl that may have a name.
virtual void getNameForDiagnostic(raw_ostream &OS, const PrintingPolicy &Policy, bool Qualified) const
Appends a human-readable name for this declaration into the given stream.
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...
This interface provides a way to observe the actions of the preprocessor as it does its thing.
virtual void moduleImport(SourceLocation ImportLoc, ModuleIdPath Path, const Module *Imported)
Callback invoked whenever there was an explicit module-import syntax.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...
std::pair< unsigned, bool > PrecompiledPreambleBytes
If non-zero, the implicit PCH include is actually a precompiled preamble that covers this number of b...
bool DetailedRecord
Whether we should maintain a detailed record of all macro definitions and expansions.
bool UsePredefines
Initialize the preprocessor with the compiler and target specific predefines.
std::vector< std::pair< std::string, bool > > Macros
bool AllowPCHWithCompilerErrors
When true, a PCH with compiler errors will not be rejected.
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
void DumpToken(const Token &Tok, bool DumpFlags=false) const
Print the token to stderr, used for debugging.
void IgnorePragmas()
Install empty handlers for all pragmas (making them ignored).
PPCallbacks * getPPCallbacks() const
void Lex(Token &Result)
Lex the next token for this preprocessor.
void EnterMainSourceFile()
Enter the specified FileID as the main source file, which implicitly adds the builtin defines etc.
IdentifierInfo * getIdentifierInfo(StringRef Name) const
Return information about the specified preprocessor identifier token.
SourceManager & getSourceManager() const
llvm::iterator_range< macro_iterator > macros(bool IncludeExternalMacros=true) const
HeaderSearch & getHeaderSearchInfo() const
const LangOptions & getLangOpts() const
Represents an unpacked "presumed" location which can be presented to the user.
unsigned getColumn() const
Return the presumed column number of this location.
const char * getFilename() const
Return the presumed filename of this location.
unsigned getLine() const
Return the presumed line number of this location.
bool isInvalid() const
Return true if this object is invalid or uninitialized.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
void ExecuteAction() override
Callback to run the program action, using the initialized compiler instance.
Sema - This implements semantic analysis and AST building for C.
const LangOptions & getLangOpts() const
std::vector< std::unique_ptr< TemplateInstantiationCallback > > TemplateInstCallbacks
The template instantiation callbacks to trace or track instantiations (objects can be chained).
SourceManager & getSourceManager() const
Encodes a location in the source.
void print(raw_ostream &OS, const SourceManager &SM) const
This class handles loading and caching of source files into memory.
PresumedLoc getPresumedLoc(SourceLocation Loc, bool UseLineDirectives=true) const
Returns the "presumed" location of a SourceLocation specifies.
~SyntaxOnlyAction() override
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
Options for controlling the target.
std::string Triple
The name of the target triple to compile for.
std::string ABI
If given, the name of the target ABI to use.
std::string TuneCPU
If given, the name of the target CPU to tune code for.
std::string CPU
If given, the name of the target CPU to generate code for.
std::vector< std::string > FeaturesAsWritten
The list of target specific features to enable or disable, as written on the command line.
This is a base class for callbacks that will be notified at every template instantiation.
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
void ExecuteAction() override
Implement the ExecuteAction interface by running Sema on the already-initialized AST consumer.
Token - This structure provides full information about a lexed token.
bool isNot(tok::TokenKind K) const
The base class of the type hierarchy.
std::unique_ptr< ASTConsumer > CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override
Create the AST consumer object for this action, if supported.
void ExecuteAction() override
Implement the ExecuteAction interface by running Sema on the already-initialized AST consumer.
Information about a module that has been loaded by the ASTReader.
std::string ModuleName
The name of the module.
ModuleFile & getPrimaryModule()
Returns the primary module associated with the manager, that is, the first module loaded.
Defines the clang::TargetInfo interface.
@ MK_PCH
File is a PCH file treated as such.
@ MK_Preamble
File is a PCH file treated as the preamble.
The JSON file list parser is used to communicate input to InstallAPI.
void atTemplateEnd(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema, const Sema::CodeSynthesisContext &Inst)
void atTemplateBegin(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema, const Sema::CodeSynthesisContext &Inst)
void printDependencyDirectivesAsSource(StringRef Source, ArrayRef< dependency_directives_scan::Directive > Directives, llvm::raw_ostream &OS)
Print the previously scanned dependency directives as minimized source text.
void initialize(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema)
bool scanSourceForDependencyDirectives(StringRef Input, SmallVectorImpl< dependency_directives_scan::Token > &Tokens, SmallVectorImpl< dependency_directives_scan::Directive > &Directives, DiagnosticsEngine *Diags=nullptr, SourceLocation InputSourceLoc=SourceLocation())
Scan the input for the preprocessor directives that might have an effect on the dependencies for a co...
std::unique_ptr< ASTConsumer > CreateASTDeclNodeLister()
@ C
Languages that the frontend can parse and compile.
@ CIR
LLVM IR & CIR: we accept these so that we can run the optimizer on them, and compile them to assembly...
@ Asm
Assembly: we accept this only so that we can preprocess it.
void DoPrintPreprocessedInput(Preprocessor &PP, raw_ostream *OS, const PreprocessorOutputOptions &Opts)
DoPrintPreprocessedInput - Implement -E mode.
std::unique_ptr< ASTConsumer > CreateASTDumper(std::unique_ptr< raw_ostream > OS, StringRef FilterString, bool DumpDecls, bool Deserialize, bool DumpLookups, bool DumpDeclTypes, ASTDumpOutputFormat Format)
std::unique_ptr< ASTConsumer > CreateASTPrinter(std::unique_ptr< raw_ostream > OS, StringRef FilterString)
std::unique_ptr< ASTConsumer > CreateASTViewer()
@ None
Perform validation, don't disable it.
std::string getClangFullRepositoryVersion()
Retrieves the full repository version that is an amalgamation of the information in getClangRepositor...
void finalize(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema)
Diagnostic wrappers for TextAPI types for error reporting.
unsigned Size
Size of the preamble in bytes.
Describes how types, statements, expressions, and declarations should be printed.
unsigned SuppressDefaultTemplateArgs
When true, attempt to suppress template arguments that match the default argument for the parameter.
A context in which code is being synthesized (where a source location alone is not sufficient to iden...
static void mapping(IO &io, TemplightEntry &fields)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4