A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/CompilerInstance_8cpp_source.html below:

clang: lib/Frontend/CompilerInstance.cpp Source File

22#include "clang/Config/config.h" 42#include "llvm/ADT/IntrusiveRefCntPtr.h" 43#include "llvm/ADT/STLExtras.h" 44#include "llvm/ADT/ScopeExit.h" 45#include "llvm/ADT/Statistic.h" 46#include "llvm/Config/llvm-config.h" 47#include "llvm/Support/BuryPointer.h" 48#include "llvm/Support/CrashRecoveryContext.h" 49#include "llvm/Support/Errc.h" 50#include "llvm/Support/FileSystem.h" 51#include "llvm/Support/LockFileManager.h" 52#include "llvm/Support/MemoryBuffer.h" 53#include "llvm/Support/Path.h" 54#include "llvm/Support/Program.h" 55#include "llvm/Support/Signals.h" 56#include "llvm/Support/TimeProfiler.h" 57#include "llvm/Support/Timer.h" 58#include "llvm/Support/VirtualFileSystem.h" 59#include "llvm/Support/raw_ostream.h" 60#include "llvm/TargetParser/Host.h" 65using namespace clang

;

67

CompilerInstance::CompilerInstance(

68

std::shared_ptr<PCHContainerOperations> PCHContainerOps,

72

ModuleCache(SharedModuleCache ? SharedModuleCache

74

ThePCHContainerOperations(

std

::move(PCHContainerOps)) {}

77

assert(OutputFiles.empty() &&

"Still output files in flight?"

);

81

std::shared_ptr<CompilerInvocation>

Value

) {

82

Invocation = std::move(

Value

);

86 return

(BuildGlobalModuleIndex ||

87

(TheASTReader && TheASTReader->isGlobalIndexUnavailable() &&

89

!DisableGeneratingGlobalModuleIndex;

97

OwnedVerboseOutputStream.reset();

98

VerboseOutputStream = &

Value

;

102

OwnedVerboseOutputStream.swap(

Value

);

103

VerboseOutputStream = OwnedVerboseOutputStream.get();

122 auto

TO = std::make_shared<TargetOptions>();

175

PP = std::move(

Value

);

181 if

(Context && Consumer)

190

Consumer = std::move(

Value

);

192 if

(Context && Consumer)

197

CompletionConsumer.reset(

Value

);

201 return

std::move(TheSema);

208

assert(ModuleCache.get() == &Reader->getModuleManager().getModuleCache() &&

209 "Expected ASTReader to use the same PCM cache"

);

210

TheASTReader = std::move(Reader);

213

std::shared_ptr<ModuleDependencyCollector>

215 return

ModuleDepCollector;

219

std::shared_ptr<ModuleDependencyCollector> Collector) {

220

ModuleDepCollector = std::move(Collector);

224

std::shared_ptr<ModuleDependencyCollector> MDC) {

227 for

(

auto

&Name : HeaderMapFileNames)

232

std::shared_ptr<ModuleDependencyCollector> MDC) {

241

MDC->addFile(PCHInclude);

247

llvm::sys::path::native(PCHDir->getName(), DirNative);

250 for

(llvm::vfs::directory_iterator Dir = FS.dir_begin(DirNative, EC), DirEnd;

251

Dir != DirEnd && !EC; Dir.increment(EC)) {

260

MDC->addFile(Dir->path());

265

std::shared_ptr<ModuleDependencyCollector> MDC) {

272

llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Buffer =

273

llvm::MemoryBuffer::getFile(VFSFile);

276

llvm::vfs::collectVFSFromYAML(std::move(Buffer.get()),

277 nullptr

, VFSFile, VFSEntries);

280 for

(

auto

&

E

: VFSEntries)

281

MDC->addFile(

E

.VPath,

E

.RPath);

289

std::unique_ptr<raw_ostream> StreamOwner;

290

raw_ostream *OS = &llvm::errs();

293 auto

FileOS = std::make_unique<llvm::raw_fd_ostream>(

295

llvm::sys::fs::OF_Append | llvm::sys::fs::OF_TextWithCRLF);

297

Diags.

Report

(diag::warn_fe_cc_log_diagnostics_failure)

300

FileOS->SetUnbuffered();

302

StreamOwner = std::move(FileOS);

307 auto

Logger = std::make_unique<LogDiagnosticPrinter>(*OS, DiagOpts,

308

std::move(StreamOwner));

322

StringRef OutputFile) {

323 auto

SerializedConsumer =

328

Diags.

takeClient

(), std::move(SerializedConsumer)));

331

Diags.

getClient

(), std::move(SerializedConsumer)));

337 bool

ShouldOwnClient) {

353

Diags->setClient(Client, ShouldOwnClient);

360 if

(Opts->VerifyDiagnostics)

382

VFS = FileMgr ? &FileMgr->getVirtualFileSystem()

385

assert(VFS &&

"FileManager has no VFS?"

);

388

llvm::makeIntrusiveRefCnt<llvm::vfs::TracingFileSystem>(std::move(VFS));

390 return

FileMgr.get();

419

FromFile, std::unique_ptr<llvm::MemoryBuffer>(RB.second));

427

Diags.

Report

(diag::err_fe_remap_missing_to_file) << RF.first << RF.second;

450

TheASTReader.reset();

456

PP = std::make_shared<Preprocessor>(Invocation->getPreprocessorOptsPtr(),

465

PP->createPreprocessingRecord();

469

PP->getFileManager(), PPOpts);

478 const

llvm::Triple *HeaderSearchTriple = &PP->getTargetInfo().getTriple();

479 if

(PP->getTargetInfo().getTriple().getOS() == llvm::Triple::CUDA &&

480

PP->getAuxTargetInfo())

481

HeaderSearchTriple = &PP->getAuxTargetInfo()->getTriple();

484

PP->getLangOpts(), *HeaderSearchTriple);

488 if

(PP->getLangOpts().Modules && PP->getLangOpts().ImplicitModules) {

490

PP->getHeaderSearchInfo().setModuleHash(ModuleHash);

491

PP->getHeaderSearchInfo().setModuleCachePath(

506

ModuleDepCollector = std::make_shared<ModuleDependencyCollector>(

512 if

(ModuleDepCollector) {

519 for

(

auto

&Listener : DependencyCollectors)

520

Listener->attachToPreprocessor(*PP);

527 if

(OutputPath ==

"-"

)

545

llvm::sys::path::append(SpecificModuleCache, ModuleHash);

546 return

std::string(SpecificModuleCache);

572 void

ReadModuleName(StringRef ModuleName)

override

{

575

LoadedModules.push_back(ModuleName.str());

580 for

(

const

std::string &LoadedModule : LoadedModules)

583

LoadedModules.clear();

586 void

markAllUnavailable() {

587 for

(

const

std::string &LoadedModule : LoadedModules) {

590

M->HasIncompatibleModuleFile =

true

;

596 while

(!Stack.empty()) {

597 Module

*Current = Stack.pop_back_val();

598 if

(Current->IsUnimportable)

continue

;

599

Current->IsAvailable =

true

;

600 auto

SubmodulesRange = Current->submodules();

601

Stack.insert(Stack.end(), SubmodulesRange.begin(),

602

SubmodulesRange.end());

606

LoadedModules.clear();

613 bool

AllowPCHWithCompilerErrors,

void

*DeserializationListener,

614 bool

OwnDeserializationListener) {

621

DeserializationListener, OwnDeserializationListener,

Preamble

,

626

StringRef

Path

, StringRef Sysroot,

631 ArrayRef

<std::shared_ptr<ModuleFileExtension>> Extensions,

632 ArrayRef

<std::shared_ptr<DependencyCollector>> DependencyCollectors,

633 void

*DeserializationListener,

bool

OwnDeserializationListener,

634 bool Preamble

,

bool

UseGlobalModuleIndex) {

638

PP, ModuleCache, &Context, PCHContainerRdr, Extensions,

639

Sysroot.empty() ?

""

: Sysroot.data(), DisableValidation,

640

AllowPCHWithCompilerErrors,

false

,

642

UseGlobalModuleIndex));

648

Reader->setDeserializationListener(

650

OwnDeserializationListener);

652 for

(

auto

&Listener : DependencyCollectors)

653

Listener->attachToASTReader(*Reader);

655 auto

Listener = std::make_unique<ReadModuleNames>(PP);

656 auto

&ListenerRef = *Listener;

658

std::move(Listener));

660 switch

(Reader->ReadAST(

Path

,

669

ListenerRef.registerAll();

685

ListenerRef.markAllUnavailable();

712 if

(!CompletionConsumer) {

718 Loc

.Line,

Loc

.Column)) {

725

timerGroup.reset(

new

llvm::TimerGroup(

"clang"

,

"Clang time report"

));

726

FrontendTimer.reset(

new

llvm::Timer(

"frontend"

,

"Front end"

, *timerGroup));

746

TUKind, CompletionConsumer));

752 if

(ExternalSemaSrc) {

753

TheSema->addExternalSource(ExternalSemaSrc.get());

754

ExternalSemaSrc->InitializeSema(*TheSema);

760

(void)TheSema->APINotes.loadCurrentModuleAPINotes(

772 for

(OutputFile &OF : OutputFiles) {

775

consumeError(OF.File->discard());

776 if

(!OF.Filename.empty())

777

llvm::sys::fs::remove(OF.Filename);

784 if

(OF.File->TmpName.empty()) {

785

consumeError(OF.File->discard());

789

llvm::Error

E

= OF.File->keep(OF.Filename);

794

<< OF.File->TmpName << OF.Filename << std::move(

E

);

796

llvm::sys::fs::remove(OF.File->TmpName);

799 if

(DeleteBuiltModules) {

800 for

(

auto

&

Module

: BuiltModules)

801

llvm::sys::fs::remove(

Module

.second);

802

BuiltModules.clear();

807 bool

Binary, StringRef InFile, StringRef Extension,

bool

RemoveFileOnSignal,

808 bool

CreateMissingDirectories,

bool

ForceUseTemporary) {

810

std::optional<SmallString<128>> PathStorage;

811 if

(OutputPath.empty()) {

812 if

(InFile ==

"-"

|| Extension.empty()) {

815

PathStorage.emplace(InFile);

816

llvm::sys::path::replace_extension(*PathStorage, Extension);

817

OutputPath = *PathStorage;

823

CreateMissingDirectories);

827 return

std::make_unique<llvm::raw_null_ostream>();

830

std::unique_ptr<raw_pwrite_stream>

832 bool

RemoveFileOnSignal,

bool

UseTemporary,

833 bool

CreateMissingDirectories) {

835

createOutputFileImpl(OutputPath, Binary, RemoveFileOnSignal, UseTemporary,

836

CreateMissingDirectories);

838 return

std::move(*OS);

840

<< OutputPath << errorToErrorCode(OS.takeError()).message();

845

CompilerInstance::createOutputFileImpl(StringRef OutputPath,

bool

Binary,

846 bool

RemoveFileOnSignal,

848 bool

CreateMissingDirectories) {

849

assert((!CreateMissingDirectories || UseTemporary) &&

850 "CreateMissingDirectories is only allowed when using temporary files"

);

854

std::optional<SmallString<128>> AbsPath;

855 if

(OutputPath !=

"-"

&& !llvm::sys::path::is_absolute(OutputPath)) {

857 "File Manager is required to fix up relative path.\n"

);

859

AbsPath.emplace(OutputPath);

860

FileMgr->FixupRelativePath(*AbsPath);

861

OutputPath = *AbsPath;

864

std::unique_ptr<llvm::raw_fd_ostream> OS;

865

std::optional<StringRef> OSFile;

868 if

(OutputPath ==

"-"

)

869

UseTemporary =

false

;

871

llvm::sys::fs::file_status Status;

872

llvm::sys::fs::status(OutputPath, Status);

873 if

(llvm::sys::fs::exists(Status)) {

875 if

(!llvm::sys::fs::can_write(OutputPath))

876 return

llvm::errorCodeToError(

881 if

(!llvm::sys::fs::is_regular_file(Status))

882

UseTemporary =

false

;

887

std::optional<llvm::sys::fs::TempFile> Temp;

893

StringRef OutputExtension = llvm::sys::path::extension(OutputPath);

895

StringRef(OutputPath).drop_back(OutputExtension.size());

896

TempPath +=

"-%%%%%%%%"

;

897

TempPath += OutputExtension;

899

llvm::sys::fs::OpenFlags BinaryFlags =

900 Binary

? llvm::sys::fs::OF_None : llvm::sys::fs::OF_Text;

902

llvm::sys::fs::TempFile::create(

903

TempPath, llvm::sys::fs::all_read | llvm::sys::fs::all_write,

906

llvm::Error

E

= handleErrors(

907

ExpectedFile.takeError(), [&](

const

llvm::ECError &

E

) -> llvm::Error {

908

std::error_code EC = E.convertToErrorCode();

909

if (CreateMissingDirectories &&

910

EC == llvm::errc::no_such_file_or_directory) {

911

StringRef Parent = llvm::sys::path::parent_path(OutputPath);

912

EC = llvm::sys::fs::create_directories(Parent);

914

ExpectedFile = llvm::sys::fs::TempFile::create(

915

TempPath, llvm::sys::fs::all_read | llvm::sys::fs::all_write,

918

return llvm::errorCodeToError(

919

llvm::errc::no_such_file_or_directory);

922 return

llvm::errorCodeToError(EC);

926

consumeError(std::move(

E

));

928

Temp = std::move(ExpectedFile.get());

929

OS.reset(

new

llvm::raw_fd_ostream(Temp->FD,

false

));

930

OSFile = Temp->TmpName;

940

OS.reset(

new

llvm::raw_fd_ostream(

942

(Binary ? llvm::sys::fs::OF_None : llvm::sys::fs::OF_TextWithCRLF)));

944 return

llvm::errorCodeToError(EC);

949

OutputFiles.emplace_back(((OutputPath !=

"-"

) ? OutputPath :

""

).str(),

952 if

(!Binary || OS->supportsSeeking())

953 return

std::move(OS);

955 return

std::make_unique<llvm::buffer_unique_ostream>(std::move(OS));

979 "Couldn't establish MainFileID!"

);

983

StringRef InputFile = Input.

getFile

();

986 auto

FileOrErr = InputFile ==

"-" 990 auto

EC = llvm::errorToErrorCode(FileOrErr.takeError());

991 if

(InputFile !=

"-"

)

992

Diags.

Report

(diag::err_fe_error_reading) << InputFile << EC.message();

994

Diags.

Report

(diag::err_fe_error_reading_stdin) << EC.message();

1002 "Couldn't establish MainFileID!"

);

1009

assert(

hasDiagnostics

() &&

"Diagnostics engine is not initialized!"

);

1010

assert(!

getFrontendOpts

().ShowHelp &&

"Client must handle '-help'!"

);

1011

assert(!

getFrontendOpts

().ShowVersion &&

"Client must handle '-version'!"

);

1018 auto

FinishDiagnosticClient = llvm::make_scope_exit([&]() {

1037

OS <<

"clang -cc1 version "

CLANG_VERSION_STRING <<

" based upon LLVM " 1038

<< LLVM_VERSION_STRING <<

" default target " 1039

<< llvm::sys::getDefaultTargetTriple() <<

"\n"

;

1042

llvm::EnableStatistics(

false

);

1056 if

(llvm::Error Err = Act.

Execute

()) {

1057

consumeError(std::move(Err));

1070

llvm::PrintStatistics(OS);

1073 if

(!StatsFile.empty()) {

1074

llvm::sys::fs::OpenFlags FileFlags = llvm::sys::fs::OF_TextWithCRLF;

1076

FileFlags |= llvm::sys::fs::OF_Append;

1079

std::make_unique<llvm::raw_fd_ostream>(StatsFile, EC, FileFlags);

1082

<< StatsFile << EC.message();

1084

llvm::PrintStatisticsJSON(*StatS);

1103

OS << NumWarnings <<

" warning"

<< (NumWarnings == 1 ?

""

:

"s"

);

1104 if

(NumWarnings && NumErrors)

1107

OS << NumErrors <<

" error"

<< (NumErrors == 1 ?

""

:

"s"

);

1108 if

(NumWarnings || NumErrors) {

1109

OS <<

" generated"

;

1112

OS <<

" when compiling for host"

;

1125 if

(llvm::sys::DynamicLibrary::LoadLibraryPermanently(

Path

.c_str(), &Error))

1131 for

(

const

FrontendPluginRegistry::entry &Plugin :

1132

FrontendPluginRegistry::entries()) {

1133

std::unique_ptr<PluginASTAction>

P

(Plugin.instantiate());

1145 if

(LangOpts.OpenCL)

1160

StringRef OriginalModuleMapFile, StringRef ModuleFileName,

1165

llvm::TimeTraceScope TimeScope(

"Module Compile"

, ModuleName);

1171

ImportLoc, diag::err_module_rebuild_finalized)

1178

std::make_shared<CompilerInvocation>(ImportingInstance.

getInvocation

());

1189

llvm::erase_if(PPOpts.

Macros

,

1190

[&HSOpts](

const

std::pair<std::string, bool> &def) {

1191

StringRef MacroDef = def.first;

1192

return HSOpts.ModulesIgnoreMacros.contains(

1193

llvm::CachedHashString(MacroDef.split(

'='

).first));

1197

Invocation->getLangOpts().ModuleName =

1201

Invocation->getLangOpts().CurrentModule = std::string(ModuleName);

1207

FrontendOpts.

OutputFile

= ModuleFileName.str();

1214

FrontendOpts.

Inputs

= {Input};

1221

DiagOpts.VerifyDiagnostics = 0;

1223

Invocation->getModuleHash() &&

"Module hash mismatch!"

);

1231 auto

&

Inv

= *Invocation;

1232

Instance.setInvocation(std::move(Invocation));

1234

Instance.createDiagnostics(

1240

Instance.getDiagnostics().setSuppressSystemWarnings(

false

);

1247

Instance.createSourceManager(Instance.getFileManager());

1271

diag::remark_module_build)

1272

<< ModuleName << ModuleFileName;

1274

PreBuildStep(Instance);

1278 bool

Crashed = !llvm::CrashRecoveryContext().RunSafelyOnThread(

1281

Instance.ExecuteAction(Action);

1285

PostBuildStep(Instance);

1288

diag::remark_module_build_done)

1298

Instance.setSema(

nullptr

);

1299

Instance.setASTConsumer(

nullptr

);

1302

Instance.clearOutputFiles(

true

);

1307 return

!Instance.getDiagnostics().hasErrorOccurred() ||

1308

Instance.getFrontendOpts().AllowPCMWithCompilerErrors;

1313

StringRef

Filename

= llvm::sys::path::filename(

File

.getName());

1315 if

(

Filename

==

"module_private.map"

)

1316

llvm::sys::path::append(PublicFilename,

"module.map"

);

1317 else if

(

Filename

==

"module.private.modulemap"

)

1318

llvm::sys::path::append(PublicFilename,

"module.modulemap"

);

1320 return

std::nullopt;

1329

StringRef ModuleFileName) {

1352

assert(ModuleMapFile &&

"Top-level module map with no FileID"

);

1359

ModuleMapFile = PublicMMFile;

1374

llvm::sys::path::append(FakeModuleMapFile,

"__inferred_module.map"

);

1376

std::string InferredModuleMapContent;

1377

llvm::raw_string_ostream OS(InferredModuleMapContent);

1386

std::unique_ptr<llvm::MemoryBuffer> ModuleMapBuffer =

1387

llvm::MemoryBuffer::getMemBuffer(InferredModuleMapContent);

1388

FileEntryRef ModuleMapFile = Instance.getFileManager().getVirtualFileRef(

1389

FakeModuleMapFile, InferredModuleMapContent.size(), 0);

1390

Instance.getSourceManager().overrideFileContents(

1391

ModuleMapFile, std::move(ModuleMapBuffer));

1420

ModuleLoadCapabilities);

1432

Diags.

Report

(ModuleNameLoc, diag::err_module_not_built)

1444

StringRef ModuleFileName) {

1448

diag::err_module_not_built)

1471

Diags.

Report

(ModuleNameLoc, diag::remark_module_lock)

1476

StringRef Dir = llvm::sys::path::parent_path(ModuleFileName);

1477

llvm::sys::fs::create_directories(Dir);

1480

llvm::LockFileManager Locked(ModuleFileName);

1482 case

llvm::LockFileManager::LFS_Error:

1486

Diags.

Report

(ModuleNameLoc, diag::remark_module_lock_failure)

1487

<<

Module

->

Name

<< Locked.getErrorMessage();

1489

Locked.unsafeRemoveLockFile();

1491 case

llvm::LockFileManager::LFS_Owned:

1494

ModuleNameLoc,

Module

, ModuleFileName);

1496 case

llvm::LockFileManager::LFS_Shared:

1502 switch

(Locked.waitForUnlock()) {

1503 case

llvm::LockFileManager::Res_Success:

1505 case

llvm::LockFileManager::Res_OwnerDied:

1507 case

llvm::LockFileManager::Res_Timeout:

1511

Diags.

Report

(ModuleNameLoc, diag::remark_module_lock_timeout)

1514

Locked.unsafeRemoveLockFile();

1519 bool

OutOfDate =

false

;

1521 Module

, ModuleFileName, &OutOfDate))

1560 if

(!

Id

->hadMacroDefinition())

1565 MacroInfo

*CmdLineDefinition =

nullptr

;

1566 for

(

auto

*MD = LatestLocalMD; MD; MD = MD->getPrevious()) {

1571 if

(

auto

*DMD = dyn_cast<DefMacroDirective>(MD))

1572

CmdLineDefinition = DMD->getMacroInfo();

1577 if

(CurrentDefinition == CmdLineDefinition) {

1579

}

else if

(!CurrentDefinition) {

1582

PP.

Diag

(ImportLoc, diag::warn_module_config_macro_undef)

1584 auto

LatestDef = LatestLocalMD->getDefinition();

1585

assert(LatestDef.isUndefined() &&

1586 "predefined macro went away with no #undef?"

);

1587

PP.

Diag

(LatestDef.getUndefLocation(), diag::note_module_def_undef_here)

1590

}

else if

(!CmdLineDefinition) {

1593

PP.

Diag

(ImportLoc, diag::warn_module_config_macro_undef)

1595

PP.

Diag

(CurrentDefinition->getDefinitionLoc(),

1596

diag::note_module_def_undef_here)

1598

}

else if

(!CurrentDefinition->isIdenticalTo(*CmdLineDefinition, PP,

1601

PP.

Diag

(ImportLoc, diag::warn_module_config_macro_undef)

1603

PP.

Diag

(CurrentDefinition->getDefinitionLoc(),

1604

diag::note_module_def_undef_here)

1612 for

(

const

StringRef ConMacro : TopModule->

ConfigMacros

) {

1620

llvm::raw_fd_ostream Out(TimestampFile.str(), EC, llvm::sys::fs::OF_None);

1626

llvm::sys::fs::file_status StatBuf;

1629

assert(!TimestampFile.empty());

1630

llvm::sys::path::append(TimestampFile,

"modules.timestamp"

);

1633 if

(std::error_code EC = llvm::sys::fs::status(TimestampFile, StatBuf)) {

1635 if

(EC == std::errc::no_such_file_or_directory) {

1643

time_t TimeStampModTime =

1644

llvm::sys::toTimeT(StatBuf.getLastModificationTime());

1645

time_t CurrentTime = time(

nullptr

);

1657 for

(llvm::sys::fs::directory_iterator Dir(HSOpts.

ModuleCachePath

, EC),

1659

Dir != DirEnd && !EC; Dir.increment(EC)) {

1661 if

(!llvm::sys::fs::is_directory(Dir->path()))

1665 for

(llvm::sys::fs::directory_iterator

File

(Dir->path(), EC), FileEnd;

1666 File

!= FileEnd && !EC;

File

.increment(EC)) {

1668

StringRef Extension = llvm::sys::path::extension(

File

->path());

1669 if

(Extension !=

".pcm"

&& Extension !=

".timestamp"

&&

1670

llvm::sys::path::filename(

File

->path()) !=

"modules.idx"

)

1675 if

(llvm::sys::fs::status(

File

->path(), StatBuf))

1679

time_t FileAccessTime = llvm::sys::toTimeT(StatBuf.getLastAccessedTime());

1680 if

(CurrentTime - FileAccessTime <=

1686

llvm::sys::fs::remove(

File

->path());

1689

std::string TimpestampFilename =

File

->path() +

".timestamp"

;

1690

llvm::sys::fs::remove(TimpestampFilename);

1695 if

(llvm::sys::fs::directory_iterator(Dir->path(), EC) ==

1696

llvm::sys::fs::directory_iterator() && !EC)

1697

llvm::sys::fs::remove(Dir->path());

1711

!

getPreprocessor

().getHeaderSearchInfo().getModuleCachePath().empty() &&

1718

std::string Sysroot = HSOpts.

Sysroot

;

1721

std::unique_ptr<llvm::Timer> ReadTimer;

1724

ReadTimer = std::make_unique<llvm::Timer>(

"reading_modules"

,

1725 "Reading modules"

, *timerGroup);

1729

Sysroot.empty() ?

""

: Sysroot.c_str(),

1736

TheASTReader->setDeserializationListener(

1743

TheASTReader->InitializeSema(

getSema

());

1747 for

(

auto

&Listener : DependencyCollectors)

1748

Listener->attachToASTReader(*TheASTReader);

1755

Timer.init(

"preloading."

+

FileName

.str(),

"Preloading "

+

FileName

.str(),

1757

llvm::TimeRegion TimeLoading(timerGroup ? &Timer :

nullptr

);

1765 bool

ConfigMismatchIsRecoverable =

1770 auto

Listener = std::make_unique<ReadModuleNames>(*PP);

1771 auto

&ListenerRef = *Listener;

1773

std::move(Listener));

1776 switch

(TheASTReader->ReadAST(

1779

&LoadedModuleFile)) {

1783

ListenerRef.registerAll();

1792

ListenerRef.markAllUnavailable();

1804

MS_PrebuiltModulePath,

1805

MS_ModuleBuildPragma

1812 Module

*M, StringRef ModuleName, std::string &ModuleFilename,

1813 const

std::map<std::string, std::string, std::less<>> &BuiltModules,

1815

assert(ModuleFilename.empty() &&

"Already has a module source?"

);

1819 auto

BuiltModuleIt = BuiltModules.find(ModuleName);

1820 if

(BuiltModuleIt != BuiltModules.end()) {

1821

ModuleFilename = BuiltModuleIt->second;

1822 return

MS_ModuleBuildPragma;

1832 if

(!ModuleFilename.empty())

1833 return

MS_PrebuiltModulePath;

1839 return

MS_ModuleCache;

1842 return

MS_ModuleNotFound;

1851

HS.

lookupModule

(ModuleName, ImportLoc,

true

, !IsInclusionDirective);

1861

std::string ModuleFilename;

1862

ModuleSource Source =

1864 if

(Source == MS_ModuleNotFound) {

1867

<< ModuleName <<

SourceRange

(ImportLoc, ModuleNameLoc);

1870 if

(ModuleFilename.empty()) {

1889

Timer.init(

"loading."

+ ModuleFilename,

"Loading "

+ ModuleFilename,

1891

llvm::TimeRegion TimeLoading(timerGroup ? &Timer :

nullptr

);

1892

llvm::TimeTraceScope TimeScope(

"Module Load"

, ModuleName);

1896 unsigned

ARRFlags = Source == MS_ModuleCache

1899

: Source == MS_PrebuiltModulePath

1903

Source == MS_PrebuiltModulePath

1905

: Source == MS_ModuleBuildPragma

1908

ImportLoc, ARRFlags)) {

1912

assert(Source != MS_ModuleCache &&

1913 "missing module, but file loaded from cache"

);

1917

M = HS.

lookupModule

(ModuleName, ImportLoc,

true

, !IsInclusionDirective);

1921 if

(

auto

ModuleFile = FileMgr->getOptionalFileRef(ModuleFilename))

1936 if

(Source == MS_PrebuiltModulePath)

1940

diag::warn_module_config_mismatch)

1957 if

(Source != MS_ModuleCache) {

1965

assert(M &&

"missing module, but trying to compile for cache"

);

1969

ModuleBuildStack::iterator Pos = ModPath.begin(), PosEnd = ModPath.end();

1970 for

(; Pos != PosEnd; ++Pos) {

1971 if

(Pos->first == ModuleName)

1975 if

(Pos != PosEnd) {

1977 for

(; Pos != PosEnd; ++Pos) {

1978

CyclePath += Pos->first;

1979

CyclePath +=

" -> "

;

1981

CyclePath += ModuleName;

1984

<< ModuleName << CyclePath;

1989 if

(FailedModules && FailedModules->hasAlreadyFailed(ModuleName)) {

1991

<< ModuleName <<

SourceRange

(ImportLoc, ModuleNameLoc);

1999 "undiagnosed error in compileModuleAndReadAST"

);

2001

FailedModules->addFailed(ModuleName);

2013 bool

IsInclusionDirective) {

2015

StringRef ModuleName =

Path

[0].first->getName();

2021 if

(ImportLoc.

isValid

() && LastModuleImportLoc == ImportLoc) {

2023 if

(LastModuleImportResult && ModuleName !=

getLangOpts

().CurrentModule)

2024

TheASTReader->makeModuleVisible(LastModuleImportResult,

Visibility

,

2026 return

LastModuleImportResult;

2040

}

else if

(ModuleName ==

getLangOpts

().CurrentModule) {

2043

ModuleName, ImportLoc,

true

,

2044

!IsInclusionDirective);

2055

ModuleName, ImportLoc, ModuleNameLoc, IsInclusionDirective);

2056 if

(!

Result

.isNormal())

2059

DisableGeneratingGlobalModuleIndex =

true

;

2071 bool

MapPrivateSubModToTopLevel =

false

;

2072 for

(

unsigned

I = 1, N =

Path

.size(); I != N; ++I) {

2073

StringRef Name =

Path

[I].first->getName();

2082

PrivateModule.append(

"_Private"

);

2087

PrivPath.push_back(std::make_pair(&II,

Path

[0].second));

2092

!IsInclusionDirective) ||

2097

MapPrivateSubModToTopLevel =

true

;

2100

diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {

2102

diag::warn_no_priv_submodule_use_toplevel)

2108

diag::note_private_top_level_defined);

2116 unsigned

BestEditDistance = (std::numeric_limits<unsigned>::max)();

2120

Name.edit_distance(SubModule->Name,

2121 true

, BestEditDistance);

2122 if

(ED <= BestEditDistance) {

2123 if

(ED < BestEditDistance) {

2125

BestEditDistance = ED;

2128

Best.push_back(SubModule->Name);

2133 if

(Best.size() == 1) {

2178

LastModuleImportLoc = ImportLoc;

2192

LastModuleImportLoc = ImportLoc;

2194 return

LastModuleImportResult;

2198

StringRef ModuleName,

2202 for

(

auto

&

C

: CleanModuleName)

2210 if

(std::error_code EC = llvm::sys::fs::createTemporaryFile(

2211

CleanModuleName,

"pcm"

, ModuleFileName)) {

2213

<< ModuleFileName << EC.message();

2216

std::string ModuleMapFileName = (CleanModuleName +

".map"

).str();

2223

std::string NullTerminatedSource(Source.str());

2229

ModuleMapFileName, NullTerminatedSource.size(), 0);

2230 Other

.getSourceManager().overrideFileContents(

2231

ModuleMapFile, llvm::MemoryBuffer::getMemBuffer(NullTerminatedSource));

2233 Other

.BuiltModules = std::move(BuiltModules);

2234 Other

.DeleteBuiltModules =

false

;

2238

BuiltModules = std::move(

Other

.BuiltModules);

2243

ModuleFileName, PreBuildStep, PostBuildStep)) {

2244

BuiltModules[std::string(ModuleName)] = std::string(ModuleFileName);

2245

llvm::sys::RemoveFileOnSignal(ModuleFileName);

2257

TheASTReader->makeModuleVisible(Mod,

Visibility

, ImportLoc);

2262 if

(

getPreprocessor

().getHeaderSearchInfo().getModuleCachePath().empty())

2271

TheASTReader->loadGlobalIndex();

2276

llvm::sys::fs::create_directories(

2285

consumeError(std::move(Err));

2288

TheASTReader->resetForReload();

2289

TheASTReader->loadGlobalIndex();

2290

GlobalIndex = TheASTReader->getGlobalIndex();

2294 if

(!HaveFullGlobalModuleIndex && GlobalIndex && !

buildingModule

()) {

2296 bool

RecreateIndex =

false

;

2299 Module

*TheModule = I->second;

2303 Path

.push_back(std::make_pair(

2305

std::reverse(

Path

.begin(),

Path

.end());

2308

RecreateIndex =

true

;

2311 if

(RecreateIndex) {

2316

consumeError(std::move(Err));

2319

TheASTReader->resetForReload();

2320

TheASTReader->loadGlobalIndex();

2321

GlobalIndex = TheASTReader->getGlobalIndex();

2323

HaveFullGlobalModuleIndex =

true

;

2357

ExternalSemaSrc = std::move(ESS);

Defines the clang::ASTContext interface.

Defines the Diagnostic-related interfaces.

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

static bool compileModuleImpl(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, StringRef ModuleName, FrontendInputFile Input, StringRef OriginalModuleMapFile, StringRef ModuleFileName, llvm::function_ref< void(CompilerInstance &)> PreBuildStep=[](CompilerInstance &) {}, llvm::function_ref< void(CompilerInstance &)> PostBuildStep=[](CompilerInstance &) {})

Compile a module file for the given module, using the options provided by the importing compiler inst...

static bool EnableCodeCompletion(Preprocessor &PP, StringRef Filename, unsigned Line, unsigned Column)

static void pruneModuleCache(const HeaderSearchOptions &HSOpts)

Prune the module cache of modules that haven't been accessed in a long time.

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 compi...

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 compi...

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

Read the AST right after compiling the module.

static Language getLanguageFromOptions(const LangOptions &LangOpts)

Determine the appropriate source input kind based on language options.

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

Diagnose differences between the current definition of the given configuration macro and the definiti...

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

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 void SetUpDiagnosticLog(DiagnosticOptions *DiagOpts, const CodeGenOptions *CodeGenOpts, DiagnosticsEngine &Diags)

static void writeTimestampFile(StringRef TimestampFile)

Write a new timestamp file with the given path.

static void InitializeFileRemapping(DiagnosticsEngine &Diags, SourceManager &SourceMgr, FileManager &FileMgr, const PreprocessorOptions &InitOpts)

static bool compileModule(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, Module *Module, StringRef ModuleFileName)

Compile a module file for the given module in a separate compiler instance, using the options provide...

static void SetupSerializedDiagnostics(DiagnosticOptions *DiagOpts, DiagnosticsEngine &Diags, StringRef OutputFile)

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

static OptionalFileEntryRef getPublicModuleMap(FileEntryRef File, FileManager &FileMgr)

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

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 compi...

Defines the clang::FileManager interface and associated types.

Defines the clang::FrontendAction interface and various convenience abstract classes (clang::ASTFront...

llvm::MachO::Target Target

Defines the clang::Preprocessor interface.

Defines the SourceManager interface.

Defines utilities for dealing with stack allocation and stack space.

Defines version macros and version-related utility functions for Clang.

std::vector< std::string > ModuleSearchPaths

The set of search paths where we API notes can be found for particular modules.

virtual void Initialize(ASTContext &Context)

Initialize - This is called to initialize the consumer, providing the ASTContext.

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

void setASTMutationListener(ASTMutationListener *Listener)

Attach an AST mutation listener to the AST context.

void setExternalSource(IntrusiveRefCntPtr< ExternalASTSource > Source)

Attach an external AST source to the AST context.

Abstract interface for callback invocations by the ASTReader.

RAII object to temporarily add an AST callback listener.

Reads an AST files chain containing the contents of a translation unit.

@ ARR_Missing

The client can handle an AST file that cannot load because it is missing.

@ ARR_None

The client can't handle any AST loading failures.

@ ARR_ConfigurationMismatch

The client can handle an AST file that cannot load because it's compiled configuration doesn't match ...

@ ARR_OutOfDate

The client can handle an AST file that cannot load because it is out-of-date relative to its input fi...

@ ARR_TreatModuleWithErrorsAsOutOfDate

If a module file is marked with errors treat it as out-of-date so the caller can rebuild it.

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.

ASTReadResult

The result of reading the control block of an AST file, which can fail for various reasons.

@ Success

The control block was read successfully.

@ ConfigurationMismatch

The AST file was written with a different language/target configuration.

@ OutOfDate

The AST file is out-of-date relative to its input files, and needs to be regenerated.

@ Failure

The AST file itself appears corrupted.

@ VersionMismatch

The AST file was written by a different version of Clang.

@ HadErrors

The AST file has errors.

@ Missing

The AST file was missing.

ChainedDiagnosticConsumer - Chain two diagnostic clients so that diagnostics go to the first client a...

Abstract interface for a consumer of code-completion information.

Options controlling the behavior of code completion.

CodeGenOptions - Track various options which control how the code is optimized and passed to the back...

std::string DwarfDebugFlags

The string to embed in the debug information for the compile unit, if non-empty.

CompilerInstance - Helper class for managing a single instance of the Clang compiler.

void setFileManager(FileManager *Value)

Replace the current file manager and virtual file system.

void setSourceManager(SourceManager *Value)

setSourceManager - Replace the current source manager.

void createPCHExternalASTSource(StringRef Path, DisableValidationForModuleKind DisableValidation, bool AllowPCHWithCompilerErrors, void *DeserializationListener, bool OwnDeserializationListener)

Create an external AST source to read a PCH file and attach it to the AST context.

DiagnosticConsumer & getDiagnosticClient() const

~CompilerInstance() override

void createPreprocessor(TranslationUnitKind TUKind)

Create the preprocessor, using the invocation, file, and source managers, and replace any existing on...

bool lookupMissingImports(StringRef Name, SourceLocation TriggerLoc) override

Check global module index for missing imports.

void createSourceManager(FileManager &FileMgr)

Create the source manager and replace any existing one with it.

FileManager * createFileManager(IntrusiveRefCntPtr< llvm::vfs::FileSystem > VFS=nullptr)

Create the file manager and replace any existing one with it.

DependencyOutputOptions & getDependencyOutputOpts()

bool hasFileManager() const

TargetInfo * getAuxTarget() const

const PCHContainerReader & getPCHContainerReader() const

Return the appropriate PCHContainerReader depending on the current CodeGenOptions.

DiagnosticsEngine & getDiagnostics() const

Get the current diagnostics engine.

GlobalModuleIndex * loadGlobalModuleIndex(SourceLocation TriggerLoc) override

Load, create, or return global module.

raw_ostream & getVerboseOutputStream()

Get the current stream for verbose output.

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...

void setExternalSemaSource(IntrusiveRefCntPtr< ExternalSemaSource > ESS)

void createDiagnostics(llvm::vfs::FileSystem &VFS, DiagnosticConsumer *Client=nullptr, bool ShouldOwnClient=true)

Create the diagnostics engine using the invocation's diagnostic options and replace any existing one ...

std::string getSpecificModuleCachePath()

ModuleLoadResult loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) override

Attempt to load the given module.

void setInvocation(std::shared_ptr< CompilerInvocation > Value)

setInvocation - Replace the current invocation.

std::shared_ptr< FailedModulesSet > getFailedModulesSetPtr() const

FileSystemOptions & getFileSystemOpts()

bool InitializeSourceManager(const FrontendInputFile &Input)

InitializeSourceManager - Initialize the source manager to set InputFile as the main file.

FileManager & getFileManager() const

Return the current file manager to the caller.

void setBuildGlobalModuleIndex(bool Build)

Set the flag indicating whether we should (re)build the global module index.

std::unique_ptr< Sema > takeSema()

void printDiagnosticStats()

At the end of a compilation, print the number of warnings/errors.

void setASTConsumer(std::unique_ptr< ASTConsumer > Value)

setASTConsumer - Replace the current AST consumer; the compiler instance takes ownership of Value.

PreprocessorOutputOptions & getPreprocessorOutputOpts()

IntrusiveRefCntPtr< ASTReader > getASTReader() const

void setTarget(TargetInfo *Value)

Replace the current Target.

void setModuleDepCollector(std::shared_ptr< ModuleDependencyCollector > Collector)

InMemoryModuleCache & getModuleCache() const

void addDependencyCollector(std::shared_ptr< DependencyCollector > Listener)

void createASTContext()

Create the AST context.

std::unique_ptr< raw_pwrite_stream > createOutputFile(StringRef OutputPath, bool Binary, bool RemoveFileOnSignal, bool UseTemporary, bool CreateMissingDirectories=false)

Create a new output file, optionally deriving the output path name, and add it to the list of tracked...

bool hasASTContext() const

void createModuleFromSource(SourceLocation ImportLoc, StringRef ModuleName, StringRef Source) override

Attempt to create the given module from the specified source buffer.

std::shared_ptr< HeaderSearchOptions > getHeaderSearchOptsPtr() const

void setASTContext(ASTContext *Value)

setASTContext - Replace the current AST context.

Preprocessor & getPreprocessor() const

Return the current preprocessor.

ASTContext & getASTContext() const

void LoadRequestedPlugins()

Load the list of plugins requested in the FrontendOptions.

TargetOptions & getTargetOpts()

void setASTReader(IntrusiveRefCntPtr< ASTReader > Reader)

FrontendOptions & getFrontendOpts()

std::shared_ptr< ModuleDependencyCollector > getModuleDepCollector() const

bool hasDiagnostics() const

void setSema(Sema *S)

Replace the current Sema; the compiler instance takes ownership of S.

HeaderSearchOptions & getHeaderSearchOpts()

void createFrontendTimer()

Create the frontend timer and replace any existing one with it.

void setDiagnostics(DiagnosticsEngine *Value)

setDiagnostics - Replace the current diagnostics engine.

bool hasFailedModulesSet() const

CompilerInvocation & getInvocation()

void setVerboseOutputStream(raw_ostream &Value)

Replace the current stream for verbose output.

PreprocessorOptions & getPreprocessorOpts()

ASTConsumer & getASTConsumer() const

TargetInfo & getTarget() const

llvm::vfs::FileSystem & getVirtualFileSystem() const

void createCodeCompletionConsumer()

Create a code completion consumer using the invocation; note that this will cause the source manager ...

void setCodeCompletionConsumer(CodeCompleteConsumer *Value)

setCodeCompletionConsumer - Replace the current code completion consumer; the compiler instance takes...

bool ExecuteAction(FrontendAction &Act)

ExecuteAction - Execute the provided action against the compiler's CompilerInvocation object.

std::shared_ptr< PCHContainerOperations > getPCHContainerOperations() const

void clearOutputFiles(bool EraseFiles)

clearOutputFiles - Clear the output file list.

DiagnosticOptions & getDiagnosticOpts()

LangOptions & getLangOpts()

CodeGenOptions & getCodeGenOpts()

SourceManager & getSourceManager() const

Return the current source manager.

bool shouldBuildGlobalModuleIndex() const

Indicates whether we should (re)build the global module index.

bool hasSourceManager() const

bool hasASTConsumer() const

APINotesOptions & getAPINotesOpts()

std::unique_ptr< raw_pwrite_stream > createNullOutputFile()

void setAuxTarget(TargetInfo *Value)

Replace the current AuxTarget.

void makeModuleVisible(Module *Mod, Module::NameVisibilityKind Visibility, SourceLocation ImportLoc) override

Make the given module visible.

void createFailedModulesSet()

bool loadModuleFile(StringRef FileName, serialization::ModuleFile *&LoadedModuleFile)

bool hasPreprocessor() const

void setPreprocessor(std::shared_ptr< Preprocessor > Value)

Replace the current preprocessor.

void createSema(TranslationUnitKind TUKind, CodeCompleteConsumer *CompletionConsumer)

Create the Sema object to be used for parsing.

Helper class for holding the data necessary to invoke the compiler.

LangOptions & getLangOpts()

Mutable getters.

FrontendOptions & getFrontendOpts()

std::string getModuleHash() const

Retrieve a module hash string that is suitable for uniquely identifying the conditions under which th...

DependencyOutputOptions - Options for controlling the compiler dependency file generation.

ShowIncludesDestination ShowIncludesDest

Destination of cl.exe style /showIncludes info.

std::string DOTOutputFile

The file to write GraphViz-formatted header dependencies to.

std::string ModuleDependencyOutputDir

The directory to copy module dependencies to when collecting them.

std::string OutputFile

The file to write dependency output to.

std::string HeaderIncludeOutputFile

The file to write header include output to.

unsigned ShowHeaderIncludes

Show header inclusions (-H).

Abstract interface, implemented by clients of the front-end, which formats and prints fully processed...

unsigned getNumErrors() const

virtual void finish()

Callback to inform the diagnostic client that processing of all source files has ended.

unsigned getNumWarnings() const

Used for handling and querying diagnostic IDs.

Options for controlling the compiler diagnostics engine.

std::string DiagnosticLogFile

The file to log diagnostic output to.

std::vector< std::string > SystemHeaderWarningsModules

The list of -Wsystem-headers-in-module=... options used to override whether -Wsystem-headers is enabl...

std::string DiagnosticSerializationFile

The file to serialize diagnostics to (non-appending).

Concrete class used by the front-end to report problems and issues.

DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)

Issue the message to the client.

bool hasErrorOccurred() const

void setClient(DiagnosticConsumer *client, bool ShouldOwnClient=true)

Set the diagnostic client associated with this diagnostic object.

std::unique_ptr< DiagnosticConsumer > takeClient()

Return the current diagnostic client along with ownership of that client.

DiagnosticConsumer * getClient()

Level getDiagnosticLevel(unsigned DiagID, SourceLocation Loc) const

Based on the way the client configured the DiagnosticsEngine object, classify the specified diagnosti...

bool ownsClient() const

Determine whether this DiagnosticsEngine object own its client.

StringRef getName() const

A reference to a FileEntry that includes the name of the file as it was accessed by the FileManager's...

StringRef getName() const

The name of this FileEntry.

StringRef getNameAsRequested() const

The name of this FileEntry, as originally requested without applying any remappings for VFS 'use-exte...

An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...

Implements support for file system lookup, file system caching, and directory search management.

void AddStats(const FileManager &Other)

Import statistics from a child FileManager and add them to this current FileManager.

llvm::vfs::FileSystem & getVirtualFileSystem() const

OptionalFileEntryRef getOptionalFileRef(StringRef Filename, bool OpenFile=false, bool CacheFailure=true)

Get a FileEntryRef if it exists, without doing anything on error.

llvm::Expected< FileEntryRef > getSTDIN()

Get the FileEntryRef for stdin, returning an error if stdin cannot be read.

FileEntryRef getVirtualFileRef(StringRef Filename, off_t Size, time_t ModificationTime)

Retrieve a file entry for a "virtual" file that acts as if there were a file with the given name on d...

OptionalDirectoryEntryRef getOptionalDirectoryRef(StringRef DirName, bool CacheFailure=true)

Get a DirectoryEntryRef if it exists, without doing anything on error.

LLVM_DEPRECATED("Functions returning DirectoryEntry are deprecated.", "getOptionalDirectoryRef()") llvm LLVM_DEPRECATED("Functions returning FileEntry are deprecated.", "getOptionalFileRef()") llvm llvm::Expected< FileEntryRef > getFileRef(StringRef Filename, bool OpenFile=false, bool CacheFailure=true, bool IsText=true)

Lookup, cache, and verify the specified directory (real or virtual).

static FixItHint CreateReplacement(CharSourceRange RemoveRange, StringRef Code)

Create a code modification hint that replaces the given source range with the given code string.

Diagnostic consumer that forwards diagnostics along to an existing, already-initialized diagnostic co...

Abstract base class for actions which can be performed by the frontend.

virtual void EndSourceFile()

Perform any per-file post processing, deallocate per-file objects, and run statistics and output file...

bool PrepareToExecute(CompilerInstance &CI)

Prepare the action to execute on the given compiler instance.

llvm::Error Execute()

Set the source manager's main input file, and run the action.

bool BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &Input)

Prepare the action for processing the input file Input.

virtual bool isModelParsingAction() const

Is this action invoked on a model file?

An input file for the front end.

llvm::MemoryBufferRef getBuffer() const

InputKind getKind() const

StringRef getFile() 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 BuildingImplicitModuleUsesLock

Whether to use a filesystem lock when building implicit modules.

unsigned ModulesShareFileManager

Whether to share the FileManager when building modules.

std::optional< std::string > AuxTargetCPU

Auxiliary target CPU for CUDA/HIP compilation.

std::string StatsFile

Filename to write statistics to.

std::string OutputFile

The output file, if any.

std::string ActionName

The name of the action to run when using a plugin action.

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,...

unsigned GenerateGlobalModuleIndex

Whether we can generate the global module index if needed.

unsigned DisableFree

Disable memory freeing on exit.

SmallVector< FrontendInputFile, 0 > Inputs

The input files and their types.

frontend::ActionKind ProgramAction

The frontend action to perform.

std::optional< std::vector< std::string > > AuxTargetFeatures

Auxiliary target features for CUDA/HIP compilation.

A SourceLocation and its associated SourceManager.

A global index for a set of module files, providing information about the identifiers within those mo...

bool lookupIdentifier(llvm::StringRef Name, HitSet &Hits)

Look for all of the module files with information about the given identifier, e.g....

static llvm::Error writeIndex(FileManager &FileMgr, const PCHContainerReader &PCHContainerRdr, llvm::StringRef Path)

Write a global index into the given.

One of these records is kept for each identifier that is lexed.

tok::TokenKind getTokenID() const

If this is a source-language token (e.g.

IdentifierInfo & get(StringRef Name)

Return the identifier token info for the specified named identifier.

In-memory cache for modules.

bool isPCMFinal(llvm::StringRef Filename) const

Check whether the PCM is final and has been shown to work.

The kind of a file that we've been handed as an input.

@ FPE_Default

Used internally to represent initial unspecified value.

@ FPE_Ignore

Assume that floating-point exceptions are masked.

Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...

std::string ModuleName

The module currently being compiled as specified by -fmodule-name.

Encapsulates the data about a macro definition (e.g.

Describes the result of attempting to load a module.

Abstract interface for a module loader.

bool buildingModule() const

Returns true if this instance is building a module.

llvm::StringMap< Module * >::const_iterator module_iterator

Module * findModule(StringRef Name) const

Retrieve a module with the given name.

module_iterator module_begin() const

OptionalFileEntryRef getModuleMapFileForUniquing(const Module *M) const

std::optional< Module * > getCachedModuleLoad(const IdentifierInfo &II)

Return a cached module load.

module_iterator module_end() const

FileID getContainingModuleMapFileID(const Module *Module) const

Retrieve the module map file containing the definition of the given module.

void resolveLinkAsDependencies(Module *Mod)

Use PendingLinkAsModule information to mark top level link names that are going to be replaced by exp...

void cacheModuleLoad(const IdentifierInfo &II, Module *M)

Cache a module load. M might be nullptr.

Describes a module or submodule.

StringRef getTopLevelModuleName() const

Retrieve the name of the top-level module.

Module * findSubmodule(StringRef Name) const

Find the submodule with the given name.

std::vector< std::string > ConfigMacros

The set of "configuration macros", which are macros that (intentionally) change how this module is bu...

NameVisibilityKind

Describes the visibility of the various names within a particular module.

@ 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.

SourceLocation DefinitionLoc

The location of the module definition.

unsigned IsSystem

Whether this is a "system" module (which assumes that all headers in it are system headers).

std::string Name

The name of this module.

llvm::iterator_range< submodule_iterator > submodules()

OptionalDirectoryEntryRef Directory

The build directory of this module.

unsigned IsFromModuleFile

Whether this module was loaded from a module file.

unsigned HasIncompatibleModuleFile

Whether we tried and failed to load a module file for this module.

std::string getFullModuleName(bool AllowStringLiterals=false) const

Retrieve the full name of this module, including the path from its top-level module.

Module * getTopLevelModule()

Retrieve the top-level module for this (sub)module, which may be this module.

OptionalFileEntryRef getASTFile() const

The serialized AST file for this module, if one was created.

This abstract interface provides operations for unwrapping containers for serialized ASTs (precompile...

@ ReplaceAction

Replace the main action.

PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...

std::vector< std::pair< std::string, std::string > > RemappedFiles

The set of file remappings, which take existing files on the system (the first part of each pair) and...

std::pair< unsigned, bool > PrecompiledPreambleBytes

If non-zero, the implicit PCH include is actually a precompiled preamble that covers this number of b...

bool RemappedFilesKeepOriginalName

True if the SourceManager should report the original file name for contents of files that were remapp...

void resetNonModularOptions()

Reset any options that are not considered when building a module.

bool RetainRemappedFileBuffers

Whether the compiler instance should retain (i.e., not free) the buffers associated with remapped fil...

bool DetailedRecord

Whether we should maintain a detailed record of all macro definitions and expansions.

std::string ImplicitPCHInclude

The implicit PCH included at the start of the translation unit, or empty.

DisableValidationForModuleKind DisablePCHOrModuleValidation

Whether to disable most of the normal validation performed on precompiled headers and module files.

std::vector< std::pair< std::string, bool > > Macros

std::vector< std::pair< std::string, llvm::MemoryBuffer * > > RemappedFileBuffers

The set of file-to-buffer remappings, which take existing files on the system (the first part of each...

Engages in a tight little dance with the lexer to efficiently preprocess tokens.

void markClangModuleAsAffecting(Module *M)

Mark the given clang module as affecting the current clang module or translation unit.

const MacroInfo * getMacroInfo(const IdentifierInfo *II) const

MacroDirective * getLocalMacroDirectiveHistory(const IdentifierInfo *II) const

Given an identifier, return the latest non-imported macro directive for that identifier.

bool SetCodeCompletionPoint(FileEntryRef File, unsigned Line, unsigned Column)

Specify the point at which code-completion will be performed.

const TranslationUnitKind TUKind

The kind of translation unit we are processing.

IdentifierInfo * getIdentifierInfo(StringRef Name) const

Return information about the specified preprocessor identifier token.

SourceManager & getSourceManager() const

static bool checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, const Module &M, DiagnosticsEngine &Diags)

Check that the given module is available, producing a diagnostic if not.

FileManager & getFileManager() const

FileID getPredefinesFileID() const

Returns the FileID for the preprocessor predefines.

HeaderSearch & getHeaderSearchInfo() const

void setPredefines(std::string P)

Set the predefines for this Preprocessor.

IdentifierTable & getIdentifierTable()

Builtin::Context & getBuiltinInfo()

DiagnosticsEngine & getDiagnostics() const

SelectorTable & getSelectorTable()

DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) const

Forwarding function for diagnostics.

A simple code-completion consumer that prints the results it receives in a simple format.

Sema - This implements semantic analysis and AST building for C.

ASTReaderListenter implementation to set SuggestedPredefines of ASTReader which is required to use a ...

Encodes a location in the source.

bool isValid() const

Return true if this is a valid SourceLocation object.

This class handles loading and caching of source files into memory.

FileID getFileID(SourceLocation SpellingLoc) const

Return the FileID for a SourceLocation.

OptionalFileEntryRef getFileEntryRefForID(FileID FID) const

Returns the FileEntryRef for the provided FileID.

void setModuleBuildStack(ModuleBuildStack stack)

Set the module build stack.

FileID createFileID(FileEntryRef SourceFile, SourceLocation IncludePos, SrcMgr::CharacteristicKind FileCharacter, int LoadedID=0, SourceLocation::UIntTy LoadedOffset=0)

Create a new FileID that represents the specified file being #included from the specified IncludePosi...

void setOverridenFilesKeepOriginalName(bool value)

Set true if the SourceManager should report the original file name for contents of files that were ov...

ModuleBuildStack getModuleBuildStack() const

Retrieve the module build stack.

FileID getMainFileID() const

Returns the FileID of the main source file.

void pushModuleBuildStack(StringRef moduleName, FullSourceLoc importLoc)

Push an entry to the module build stack.

void overrideFileContents(FileEntryRef SourceFile, const llvm::MemoryBufferRef &Buffer)

Override the contents of the given source file by providing an already-allocated buffer.

SourceLocation getIncludeLoc(FileID FID) const

Returns the include location if FID is a #include'd file otherwise it returns an invalid location.

void setMainFileID(FileID FID)

Set the file ID for the main source file.

SrcMgr::CharacteristicKind getFileCharacteristic(SourceLocation Loc) const

Return the file characteristic of the specified source location, indicating whether this is a normal ...

A trivial tuple used to represent a source range.

Exposes information about the current target.

const llvm::Triple & getTriple() const

Returns the target triple of the primary target.

static TargetInfo * CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr< TargetOptions > &Opts)

Construct a target for the given options.

virtual void setAuxTarget(const TargetInfo *Aux)

void noSignedCharForObjCBool()

virtual void adjust(DiagnosticsEngine &Diags, LangOptions &Opts)

Set forced language options.

std::string CPU

If given, the name of the target CPU to generate code for.

VerifyDiagnosticConsumer - Create a diagnostic client which will use markers in the input source to c...

Information about a module that has been loaded by the ASTReader.

Defines the clang::TargetInfo interface.

CharacteristicKind

Indicates whether a file or directory holds normal user code, system code, or system code which is im...

@ PluginAction

Run a plugin action,.

@ RewriteObjC

ObjC->C Rewriter.

bool Inv(InterpState &S, CodePtr OpPC)

@ MK_PCH

File is a PCH file treated as such.

@ MK_Preamble

File is a PCH file treated as the preamble.

@ MK_ExplicitModule

File is an explicitly-loaded module.

@ MK_ImplicitModule

File is an implicitly-loaded module.

@ MK_PrebuiltModule

File is from a prebuilt module path.

std::unique_ptr< DiagnosticConsumer > create(StringRef OutputFile, DiagnosticOptions *Diags, bool MergeChildRecords=false)

Returns a DiagnosticConsumer that serializes diagnostics to a bitcode file.

The JSON file list parser is used to communicate input to InstallAPI.

void ApplyHeaderSearchOptions(HeaderSearch &HS, const HeaderSearchOptions &HSOpts, const LangOptions &Lang, const llvm::Triple &triple)

Apply the header search options to get given HeaderSearch object.

void noteBottomOfStack()

Call this once on each thread, as soon after starting the thread as feasible, to note the approximate...

void InitializePreprocessor(Preprocessor &PP, const PreprocessorOptions &PPOpts, const PCHContainerReader &PCHContainerRdr, const FrontendOptions &FEOpts, const CodeGenOptions &CodeGenOpts)

InitializePreprocessor - Initialize the preprocessor getting it and the environment ready to process ...

std::error_code make_error_code(BuildPreambleError Error)

LLVM_READONLY bool isAlphanumeric(unsigned char c)

Return true if this character is an ASCII letter or digit: [a-zA-Z0-9].

Language

The language for the input, used to select and validate the language standard and possible actions.

@ C

Languages that the frontend can parse and compile.

@ Result

The result type of a method or function.

IntrusiveRefCntPtr< llvm::vfs::FileSystem > createVFSFromCompilerInvocation(const CompilerInvocation &CI, DiagnosticsEngine &Diags)

constexpr size_t DesiredStackSize

The amount of stack space that Clang would like to be provided with.

void ProcessWarningOptions(DiagnosticsEngine &Diags, const DiagnosticOptions &Opts, llvm::vfs::FileSystem &VFS, bool ReportDiags=true)

ProcessWarningOptions - Initialize the diagnostic client and process the warning options specified on...

TranslationUnitKind

Describes the kind of translation unit being processed.

void AttachHeaderIncludeGen(Preprocessor &PP, const DependencyOutputOptions &DepOpts, bool ShowAllHeaders=false, StringRef OutputPath={}, bool ShowDepth=true, bool MSStyle=false)

AttachHeaderIncludeGen - Create a header include list generator, and attach it to the given preproces...

DisableValidationForModuleKind

Whether to disable the normal validation performed on precompiled headers and module files when they ...

@ Other

Other implicit parameter.

Visibility

Describes the different kinds of visibility that a declaration may have.

void AttachDependencyGraphGen(Preprocessor &PP, StringRef OutputFile, StringRef SysRoot)

AttachDependencyGraphGen - Create a dependency graph generator, and attach it to the given preprocess...

A source location that has been parsed on the command line.


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