clang 23.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/DiagnosticFrontend.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/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 "clang/Serialization/SerializationDiagnostic.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/Plugins/PassPlugin.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.

Enumerations

enum class  CompileOrReadResult : uint8_t { FailedToCompile , Compiled , FailedToRead , Read }
 The result of compileModuleBehindLockOrRead(). More...

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 compileModuleImpl (CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName)
 Compile a module in a separate compiler instance.
static CompileOrReadResult compileModuleBehindLockOrRead (CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName)
 Attempt to compile the module in a separate compiler instance behind a lock (to avoid building the same module in multiple compiler instances), or read the AST produced by another compiler instance.
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 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.

Enumeration Type Documentation

◆ CompileOrReadResult

enum class CompileOrReadResult : uint8_t
strong

The result of compileModuleBehindLockOrRead().

Enumerator
FailedToCompile 

We failed to compile the module.

Compiled 

We successfully compiled the module and we still need to read it.

FailedToRead 

We failed to read the module file compiled by another instance.

Read 

We read a module file compiled by another instance.

Definition at line 1469 of file CompilerInstance.cpp.

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 1556 of file CompilerInstance.cpp.

References clang::FrontendOptions::BuildingImplicitModuleUsesLock, Compiled, compileModuleBehindLockOrRead(), compileModuleImpl(), FailedToCompile, FailedToRead, clang::CompilerInvocation::getFrontendOpts(), clang::CompilerInstance::getInvocation(), Read, and readASTAfterCompileModule().

◆ compileModuleBehindLockOrRead()

CompileOrReadResult compileModuleBehindLockOrRead ( CompilerInstance & ImportingInstance,
SourceLocation ImportLoc,
SourceLocation ModuleNameLoc,
Module * Module,
StringRef ModuleFileName )
static

◆ compileModuleImpl()

◆ EnableCodeCompletion()

◆ getLanguageFromOptions()

Language getLanguageFromOptions ( const LangOptions & LangOpts)
static

Determine the appropriate source input kind based on language options.

Definition at line 1090 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 1305 of file CompilerInstance.cpp.

References clang::File.

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

◆ InitializeFileRemapping()

◆ readASTAfterCompileModule()

bool readASTAfterCompileModule ( CompilerInstance & ImportingInstance,
SourceLocation ImportLoc,
SourceLocation ModuleNameLoc,
Module * Module,
StringRef ModuleFileName,
bool * OutOfDate,
bool * Missing )
static

◆ 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()