clang 22.0.0git
CompilerInstance.cpp File Reference
#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.

Function Documentation

◆ checkConfigMacro()

void checkConfigMacro ( Preprocessor & PP,
StringRef ConfigMacro,
Module * Mod,
SourceLocation ImportLoc )
static

◆ checkConfigMacros()

void checkConfigMacros ( Preprocessor & PP,
Module * M,
SourceLocation ImportLoc )
static

◆ collectHeaderMaps()

void collectHeaderMaps ( const HeaderSearch & HS,
std::shared_ptr< ModuleDependencyCollector > MDC )
static

◆ collectIncludePCH()

◆ collectVFSEntries()

void collectVFSEntries ( CompilerInstance & CI,
std::shared_ptr< ModuleDependencyCollector > MDC )
static

◆ compileModuleAndReadAST()

bool compileModuleAndReadAST ( CompilerInstance & ImportingInstance,
SourceLocation ImportLoc,
SourceLocation ModuleNameLoc,
Module * Module,
StringRef ModuleFileName )
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().

◆ compileModuleAndReadASTBehindLock()

bool compileModuleAndReadASTBehindLock ( CompilerInstance & ImportingInstance,
SourceLocation ImportLoc,
SourceLocation ModuleNameLoc,
Module * Module,
StringRef ModuleFileName )
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().

◆ compileModuleAndReadASTImpl()

◆ EnableCodeCompletion()

◆ getLanguageFromOptions()

Language getLanguageFromOptions ( const LangOptions & LangOpts)
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().

◆ getPublicModuleMap()

OptionalFileEntryRef getPublicModuleMap ( FileEntryRef File,
FileManager & FileMgr )
static

Definition at line 1280 of file CompilerInstance.cpp.

References clang::File.

Referenced by clang::CompilerInstance::cloneForModuleCompile().

◆ InitializeFileRemapping()

◆ pruneModuleCache()

void pruneModuleCache ( const HeaderSearchOptions & HSOpts)
static

◆ readASTAfterCompileModule()

◆ selectModuleSource()

ModuleSource selectModuleSource ( Module * M,
StringRef ModuleName,
std::string & ModuleFilename,
const std::map< std::string, std::string, std::less<> > & BuiltModules,
HeaderSearch & HS )
static

◆ SetUpDiagnosticLog()

◆ SetupSerializedDiagnostics()

◆ writeTimestampFile()

void writeTimestampFile ( StringRef TimestampFile)
static

Write a new timestamp file with the given path.

Definition at line 1602 of file CompilerInstance.cpp.

Referenced by pruneModuleCache().