clang 22.0.0git
|
#include "clang/Frontend/CompilerInstance.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/LangStandard.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Stack.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/Version.h"
#include "clang/Config/config.h"
#include "clang/Frontend/ChainedDiagnosticConsumer.h"
#include "clang/Frontend/FrontendAction.h"
#include "clang/Frontend/FrontendActions.h"
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Frontend/FrontendPluginRegistry.h"
#include "clang/Frontend/LogDiagnosticPrinter.h"
#include "clang/Frontend/SARIFDiagnosticPrinter.h"
#include "clang/Frontend/SerializedDiagnosticPrinter.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "clang/Frontend/Utils.h"
#include "clang/Frontend/VerifyDiagnosticConsumer.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Lex/PreprocessorOptions.h"
#include "clang/Sema/CodeCompleteConsumer.h"
#include "clang/Sema/ParsedAttr.h"
#include "clang/Sema/Sema.h"
#include "clang/Serialization/ASTReader.h"
#include "clang/Serialization/GlobalModuleIndex.h"
#include "clang/Serialization/InMemoryModuleCache.h"
#include "clang/Serialization/ModuleCache.h"
#include "llvm/ADT/IntrusiveRefCntPtr.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/Support/AdvisoryLock.h"
#include "llvm/Support/BuryPointer.h"
#include "llvm/Support/CrashRecoveryContext.h"
#include "llvm/Support/Errc.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Signals.h"
#include "llvm/Support/TimeProfiler.h"
#include "llvm/Support/Timer.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Support/VirtualOutputBackends.h"
#include "llvm/Support/VirtualOutputError.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Host.h"
#include <optional>
#include <time.h>
#include <utility>
Go to the source code of this file.
Functions | |
static void | collectHeaderMaps (const HeaderSearch &HS, std::shared_ptr< ModuleDependencyCollector > MDC) |
static void | collectIncludePCH (CompilerInstance &CI, std::shared_ptr< ModuleDependencyCollector > MDC) |
static void | collectVFSEntries (CompilerInstance &CI, std::shared_ptr< ModuleDependencyCollector > MDC) |
static void | SetUpDiagnosticLog (DiagnosticOptions &DiagOpts, const CodeGenOptions *CodeGenOpts, DiagnosticsEngine &Diags) |
static void | SetupSerializedDiagnostics (DiagnosticOptions &DiagOpts, DiagnosticsEngine &Diags, StringRef OutputFile) |
static void | InitializeFileRemapping (DiagnosticsEngine &Diags, SourceManager &SourceMgr, FileManager &FileMgr, const PreprocessorOptions &InitOpts) |
static bool | EnableCodeCompletion (Preprocessor &PP, StringRef Filename, unsigned Line, unsigned Column) |
static Language | getLanguageFromOptions (const LangOptions &LangOpts) |
Determine the appropriate source input kind based on language options. | |
static OptionalFileEntryRef | getPublicModuleMap (FileEntryRef File, FileManager &FileMgr) |
static bool | readASTAfterCompileModule (CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName, bool *OutOfDate, bool *Missing) |
Read the AST right after compiling the module. | |
static bool | compileModuleAndReadASTImpl (CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) |
Compile a module in a separate compiler instance and read the AST, returning true if the module compiles without errors. | |
static bool | compileModuleAndReadASTBehindLock (CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) |
Compile a module in a separate compiler instance and read the AST, returning true if the module compiles without errors, using a lock manager to avoid building the same module in multiple compiler instances. | |
static bool | compileModuleAndReadAST (CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) |
Compile a module in a separate compiler instance and read the AST, returning true if the module compiles without errors, potentially using a lock manager to avoid building the same module in multiple compiler instances. | |
static void | checkConfigMacro (Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) |
Diagnose differences between the current definition of the given configuration macro and the definition provided on the command line. | |
static void | checkConfigMacros (Preprocessor &PP, Module *M, SourceLocation ImportLoc) |
static void | writeTimestampFile (StringRef TimestampFile) |
Write a new timestamp file with the given path. | |
static void | pruneModuleCache (const HeaderSearchOptions &HSOpts) |
Prune the module cache of modules that haven't been accessed in a long time. | |
static ModuleSource | selectModuleSource (Module *M, StringRef ModuleName, std::string &ModuleFilename, const std::map< std::string, std::string, std::less<> > &BuiltModules, HeaderSearch &HS) |
Select a source for loading the named module and compute the filename to load it from. |
|
static |
Diagnose differences between the current definition of the given configuration macro and the definition provided on the command line.
Definition at line 1537 of file CompilerInstance.cpp.
References clang::Preprocessor::Diag(), clang::Module::getFullModuleName(), clang::Preprocessor::getIdentifierInfo(), clang::Preprocessor::getLocalMacroDirectiveHistory(), clang::Preprocessor::getMacroInfo(), clang::Preprocessor::getPredefinesFileID(), clang::Preprocessor::getSourceManager(), clang::IdentifierInfo::hadMacroDefinition(), and clang::FileID::isInvalid().
Referenced by checkConfigMacros().
|
static |
Definition at line 1593 of file CompilerInstance.cpp.
References checkConfigMacro(), clang::Module::ConfigMacros, and clang::Module::getTopLevelModule().
Referenced by clang::CompilerInstance::loadModule().
|
static |
Definition at line 225 of file CompilerInstance.cpp.
References clang::HeaderSearch::getHeaderMapFileNames().
Referenced by clang::CompilerInstance::createPreprocessor().
|
static |
Definition at line 233 of file CompilerInstance.cpp.
References clang::CompilerInstance::getFileManager(), clang::CompilerInstance::getModuleCache(), clang::CompilerInstance::getPCHContainerReader(), clang::CompilerInstance::getPreprocessor(), clang::CompilerInstance::getPreprocessorOpts(), clang::PreprocessorOptions::ImplicitPCHInclude, and clang::ASTReader::readASTFileControlBlock().
Referenced by clang::CompilerInstance::createPreprocessor().
|
static |
Definition at line 266 of file CompilerInstance.cpp.
References clang::CompilerInstance::getVirtualFileSystem().
Referenced by clang::CompilerInstance::createPreprocessor().
|
static |
Compile a module in a separate compiler instance and read the AST, returning true if the module compiles without errors, potentially using a lock manager to avoid building the same module in multiple compiler instances.
Definition at line 1520 of file CompilerInstance.cpp.
References clang::FrontendOptions::BuildingImplicitModuleUsesLock, compileModuleAndReadASTBehindLock(), compileModuleAndReadASTImpl(), clang::CompilerInvocation::getFrontendOpts(), and clang::CompilerInstance::getInvocation().
|
static |
Compile a module in a separate compiler instance and read the AST, returning true if the module compiles without errors, using a lock manager to avoid building the same module in multiple compiler instances.
Uses a lock file manager and exponential backoff to reduce the chances that multiple instances will compete to create the same module. On timeout, deletes the lock file in order to avoid deadlock from crashing processes or bugs in the lock file manager.
Definition at line 1453 of file CompilerInstance.cpp.
References compileModuleAndReadASTImpl(), clang::CompilerInstance::getDiagnostics(), clang::ModuleCache::getLock(), clang::CompilerInstance::getModuleCache(), clang::Module::Name, clang::ModuleCache::prepareForGetLock(), readASTAfterCompileModule(), clang::DiagnosticsEngine::Report(), and toString().
Referenced by compileModuleAndReadAST().
|
static |
Compile a module in a separate compiler instance and read the AST, returning true if the module compiles without errors.
Definition at line 1413 of file CompilerInstance.cpp.
References clang::CompilerInstance::cloneForModuleCompile(), clang::CompilerInstance::compileModule(), clang::CompilerInstance::getDiagnostics(), clang::Preprocessor::getHeaderSearchInfo(), clang::HeaderSearch::getHeaderSearchOpts(), clang::CompilerInstance::getModuleCache(), clang::CompilerInstance::getPreprocessor(), clang::Module::getTopLevelModuleName(), clang::HeaderSearchOptions::ModulesValidateOncePerBuildSession, clang::Module::Name, readASTAfterCompileModule(), clang::DiagnosticsEngine::Report(), and clang::ModuleCache::updateModuleTimestamp().
Referenced by compileModuleAndReadAST(), and compileModuleAndReadASTBehindLock().
|
static |
Definition at line 706 of file CompilerInstance.cpp.
References clang::Column, clang::Preprocessor::getDiagnostics(), clang::Preprocessor::getFileManager(), clang::FileManager::getOptionalFileRef(), clang::Line, clang::DiagnosticsEngine::Report(), and clang::Preprocessor::SetCodeCompletionPoint().
Referenced by clang::CompilerInstance::createCodeCompletionConsumer(), and clang::CompilerInstance::createCodeCompletionConsumer().
|
static |
Determine the appropriate source input kind based on language options.
Definition at line 1095 of file CompilerInstance.cpp.
References clang::C, clang::CUDA, clang::CXX, clang::ObjC, clang::ObjCXX, and clang::OpenCL.
Referenced by clang::CompilerInstance::cloneForModuleCompile(), and clang::CompilerInstance::createModuleFromSource().
|
static |
Definition at line 1280 of file CompilerInstance.cpp.
References clang::File.
Referenced by clang::CompilerInstance::cloneForModuleCompile().
|
static |
Definition at line 400 of file CompilerInstance.cpp.
References clang::FileEntryRef::getSize(), clang::PreprocessorOptions::RemappedFileBuffers, clang::PreprocessorOptions::RemappedFiles, clang::PreprocessorOptions::RemappedFilesKeepOriginalName, clang::DiagnosticsEngine::Report(), and clang::PreprocessorOptions::RetainRemappedFileBuffers.
Referenced by clang::CompilerInstance::createPreprocessor().
|
static |
Prune the module cache of modules that haven't been accessed in a long time.
Definition at line 1609 of file CompilerInstance.cpp.
References clang::File, clang::HeaderSearchOptions::ModuleCachePath, clang::HeaderSearchOptions::ModuleCachePruneAfter, clang::HeaderSearchOptions::ModuleCachePruneInterval, and writeTimestampFile().
Referenced by clang::CompilerInstance::createASTReader().
|
static |
Read the AST right after compiling the module.
Definition at line 1372 of file CompilerInstance.cpp.
References clang::ASTReader::ARR_Missing, clang::ASTReader::ARR_OutOfDate, clang::CompilerInstance::getASTReader(), clang::CompilerInstance::getDiagnostics(), clang::DiagnosticsEngine::hasErrorOccurred(), clang::ASTReader::Missing, clang::serialization::MK_ImplicitModule, clang::Module::Name, clang::ASTReader::OutOfDate, clang::DiagnosticsEngine::Report(), and clang::ASTReader::Success.
Referenced by compileModuleAndReadASTBehindLock(), and compileModuleAndReadASTImpl().
|
static |
Select a source for loading the named module and compute the filename to load it from.
Definition at line 1798 of file CompilerInstance.cpp.
References clang::HeaderSearchOptions::EnablePrebuiltImplicitModules, clang::HeaderSearch::getCachedModuleFileName(), clang::HeaderSearch::getHeaderSearchOpts(), clang::HeaderSearch::getPrebuiltImplicitModuleFileName(), clang::HeaderSearch::getPrebuiltModuleFileName(), clang::HeaderSearchOptions::PrebuiltModuleFiles, and clang::HeaderSearchOptions::PrebuiltModulePaths.
Referenced by clang::CompilerInstance::loadModule().
|
static |
Definition at line 294 of file CompilerInstance.cpp.
References clang::DiagnosticOptions::DiagnosticLogFile, clang::CodeGenOptions::DwarfDebugFlags, clang::DiagnosticsEngine::getClient(), clang::DiagnosticsEngine::ownsClient(), clang::DiagnosticsEngine::Report(), clang::DiagnosticsEngine::setClient(), and clang::DiagnosticsEngine::takeClient().
Referenced by clang::CompilerInstance::createDiagnostics().
|
static |
Definition at line 329 of file CompilerInstance.cpp.
References clang::serialized_diags::create(), clang::DiagnosticsEngine::getClient(), clang::DiagnosticsEngine::ownsClient(), clang::DiagnosticsEngine::setClient(), and clang::DiagnosticsEngine::takeClient().
Referenced by clang::CompilerInstance::createDiagnostics().
|
static |
Write a new timestamp file with the given path.
Definition at line 1602 of file CompilerInstance.cpp.
Referenced by pruneModuleCache().