clang 20.0.0git
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
clang::Module Class Reference

Describes a module or submodule. More...

#include "clang/Basic/Module.h"

Classes

struct  Conflict
 A conflict between two modules. More...
 
struct  DirectoryName
 Information about a directory name as found in the module map file. More...
 
struct  Header
 Information about a header directive as found in the module map file. More...
 
struct  LinkLibrary
 A library or framework to link against when an entity from this module is used. More...
 
struct  Requirement
 
struct  UnresolvedConflict
 An unresolved conflict with another module. More...
 
struct  UnresolvedExportDecl
 Describes an exported module that has not yet been resolved (perhaps because the module it refers to has not yet been loaded). More...
 
struct  UnresolvedHeaderDirective
 Stored information about a header directive that was found in the module map file but has not been resolved to a file. More...
 

Public Types

enum  ModuleKind {
  ModuleMapModule , ModuleHeaderUnit , ModuleInterfaceUnit , ModuleImplementationUnit ,
  ModulePartitionInterface , ModulePartitionImplementation , ExplicitGlobalModuleFragment , PrivateModuleFragment ,
  ImplicitGlobalModuleFragment
}
 
enum  HeaderKind {
  HK_Normal , HK_Textual , HK_Private , HK_PrivateTextual ,
  HK_Excluded
}
 
enum  NameVisibilityKind { Hidden , AllVisible }
 Describes the visibility of the various names within a particular module. More...
 
using ExportDecl = llvm::PointerIntPair< Module *, 1, bool >
 Describes an exported module.
 
using submodule_iterator = std::vector< Module * >::iterator
 
using submodule_const_iterator = std::vector< Module * >::const_iterator
 

Public Member Functions

bool isNamedModule () const
 Does this Module is a named module of a standard named module?
 
bool isGlobalModule () const
 Does this Module scope describe a fragment of the global module within some C++ module.
 
bool isExplicitGlobalModule () const
 
bool isImplicitGlobalModule () const
 
bool isPrivateModule () const
 
bool isModuleMapModule () const
 
 Module (StringRef Name, SourceLocation DefinitionLoc, Module *Parent, bool IsFramework, bool IsExplicit, unsigned VisibilityID)
 Construct a new module or submodule.
 
 ~Module ()
 
bool isUnimportable () const
 Determine whether this module has been declared unimportable.
 
bool isUnimportable (const LangOptions &LangOpts, const TargetInfo &Target, Requirement &Req, Module *&ShadowingModule) const
 Determine whether this module has been declared unimportable.
 
bool isForBuilding (const LangOptions &LangOpts) const
 Determine whether this module can be built in this compilation.
 
bool isAvailable () const
 Determine whether this module is available for use within the current translation unit.
 
bool isAvailable (const LangOptions &LangOpts, const TargetInfo &Target, Requirement &Req, UnresolvedHeaderDirective &MissingHeader, Module *&ShadowingModule) const
 Determine whether this module is available for use within the current translation unit.
 
bool isSubModule () const
 Determine whether this module is a submodule.
 
bool isSubModuleOf (const Module *Other) const
 Check if this module is a (possibly transitive) submodule of Other.
 
bool isPartOfFramework () const
 Determine whether this module is a part of a framework, either because it is a framework module or because it is a submodule of a framework module.
 
bool isSubFramework () const
 Determine whether this module is a subframework of another framework.
 
void setParent (Module *M)
 Set the parent of this module.
 
bool isHeaderLikeModule () const
 Is this module have similar semantics as headers.
 
bool isModulePartition () const
 Is this a module partition.
 
bool isModulePartitionImplementation () const
 Is this a module partition implementation unit.
 
bool isModuleImplementation () const
 Is this a module implementation.
 
bool isHeaderUnit () const
 Is this module a header unit.
 
bool isInterfaceOrPartition () const
 
bool isNamedModuleUnit () const
 Is this a C++20 named module unit.
 
bool isModuleInterfaceUnit () const
 
bool isNamedModuleInterfaceHasInit () const
 
StringRef getPrimaryModuleInterfaceName () const
 Get the primary module interface name from a partition.
 
std::string getFullModuleName (bool AllowStringLiterals=false) const
 Retrieve the full name of this module, including the path from its top-level module.
 
bool fullModuleNameIs (ArrayRef< StringRef > nameParts) const
 Whether the full name of this module is equal to joining nameParts with "."s.
 
ModulegetTopLevelModule ()
 Retrieve the top-level module for this (sub)module, which may be this module.
 
const ModulegetTopLevelModule () const
 Retrieve the top-level module for this (sub)module, which may be this module.
 
StringRef getTopLevelModuleName () const
 Retrieve the name of the top-level module.
 
OptionalFileEntryRef getASTFile () const
 The serialized AST file for this module, if one was created.
 
void setASTFile (OptionalFileEntryRef File)
 Set the serialized AST file for the top-level module of this module.
 
std::optional< DirectoryNamegetUmbrellaDirAsWritten () const
 Retrieve the umbrella directory as written.
 
std::optional< HeadergetUmbrellaHeaderAsWritten () const
 Retrieve the umbrella header as written.
 
OptionalDirectoryEntryRef getEffectiveUmbrellaDir () const
 Get the effective umbrella directory for this module: either the one explicitly written in the module map file, or the parent of the umbrella header.
 
void addTopHeader (FileEntryRef File)
 Add a top-level header associated with this module.
 
void addTopHeaderFilename (StringRef Filename)
 Add a top-level header filename associated with this module.
 
ArrayRef< FileEntryRefgetTopHeaders (FileManager &FileMgr)
 The top-level headers associated with this module.
 
bool directlyUses (const Module *Requested)
 Determine whether this module has declared its intention to directly use another module.
 
void addRequirement (StringRef Feature, bool RequiredState, const LangOptions &LangOpts, const TargetInfo &Target)
 Add the given feature requirement to the list of features required by this module.
 
void markUnavailable (bool Unimportable)
 Mark this module and all of its submodules as unavailable.
 
ModulefindSubmodule (StringRef Name) const
 Find the submodule with the given name.
 
ModulefindOrInferSubmodule (StringRef Name)
 
ModulegetGlobalModuleFragment () const
 Get the Global Module Fragment (sub-module) for this module, it there is one.
 
ModulegetPrivateModuleFragment () const
 Get the Private Module Fragment (sub-module) for this module, it there is one.
 
bool isModuleVisible (const Module *M) const
 Determine whether the specified module would be visible to a lookup at the end of this module.
 
unsigned getVisibilityID () const
 
llvm::iterator_range< submodule_iteratorsubmodules ()
 
llvm::iterator_range< submodule_const_iteratorsubmodules () const
 
void getExportedModules (SmallVectorImpl< Module * > &Exported) const
 Appends this module's list of exported modules to Exported.
 
void print (raw_ostream &OS, unsigned Indent=0, bool Dump=false) const
 Print the module map for this module to the given stream.
 
void dump () const
 Dump the contents of this module to the given output stream.
 

Static Public Member Functions

static StringRef getModuleInputBufferName ()
 

Public Attributes

std::string Name
 The name of this module.
 
SourceLocation DefinitionLoc
 The location of the module definition.
 
ModuleKind Kind = ModuleMapModule
 The kind of this module.
 
ModuleParent
 The parent of this module.
 
OptionalDirectoryEntryRef Directory
 The build directory of this module.
 
std::string PresumedModuleMapFile
 The presumed file name for the module map defining this module.
 
std::variant< std::monostate, FileEntryRef, DirectoryEntryRefUmbrella
 The umbrella header or directory.
 
ASTFileSignature Signature
 The module signature.
 
std::string UmbrellaAsWritten
 The name of the umbrella entry, as written in the module map.
 
std::string UmbrellaRelativeToRootModuleDirectory
 
std::string ExportAsModule
 The module through which entities defined in this module will eventually be exposed, for use in "private" modules.
 
std::string APINotesFile
 For the debug info, the path to this module's .apinotes file, if any.
 
SmallVector< Header, 2 > Headers [5]
 The headers that are part of this module.
 
SmallVector< UnresolvedHeaderDirective, 1 > UnresolvedHeaders
 Headers that are mentioned in the module map file but that we have not yet attempted to resolve to a file on the file system.
 
SmallVector< UnresolvedHeaderDirective, 1 > MissingHeaders
 Headers that are mentioned in the module map file but could not be found on the file system.
 
SmallVector< Requirement, 2 > Requirements
 The set of language features required to use this module.
 
ModuleShadowingModule = nullptr
 A module with the same name that shadows this module.
 
unsigned IsUnimportable: 1
 Whether this module has declared itself unimportable, either because it's missing a requirement from Requirements or because it's been shadowed by another module.
 
unsigned HasIncompatibleModuleFile: 1
 Whether we tried and failed to load a module file for this module.
 
unsigned IsAvailable: 1
 Whether this module is available in the current translation unit.
 
unsigned IsFromModuleFile: 1
 Whether this module was loaded from a module file.
 
unsigned IsFramework: 1
 Whether this is a framework module.
 
unsigned IsExplicit: 1
 Whether this is an explicit submodule.
 
unsigned IsSystem: 1
 Whether this is a "system" module (which assumes that all headers in it are system headers).
 
unsigned IsExternC: 1
 Whether this is an 'extern "C"' module (which implicitly puts all headers in it within an 'extern "C"' block, and allows the module to be imported within such a block).
 
unsigned IsInferred: 1
 Whether this is an inferred submodule (module * { ... }).
 
unsigned InferSubmodules: 1
 Whether we should infer submodules for this module based on the headers.
 
unsigned InferExplicitSubmodules: 1
 Whether, when inferring submodules, the inferred submodules should be explicit.
 
unsigned InferExportWildcard: 1
 Whether, when inferring submodules, the inferr submodules should export all modules they import (e.g., the equivalent of "export *").
 
unsigned ConfigMacrosExhaustive: 1
 Whether the set of configuration macros is exhaustive.
 
unsigned NoUndeclaredIncludes: 1
 Whether files in this module can only include non-modular headers and headers from used modules.
 
unsigned ModuleMapIsPrivate: 1
 Whether this module came from a "private" module map, found next to a regular (public) module map.
 
unsigned NamedModuleHasInit: 1
 Whether this C++20 named modules doesn't need an initializer.
 
NameVisibilityKind NameVisibility
 The visibility of names within this particular module.
 
SourceLocation InferredSubmoduleLoc
 The location of the inferred submodule.
 
llvm::SmallSetVector< Module *, 2 > Imports
 The set of modules imported by this module, and on which this module depends.
 
llvm::SmallSetVector< Module *, 2 > AffectingClangModules
 The set of top-level modules that affected the compilation of this module, but were not imported.
 
SmallVector< ExportDecl, 2 > Exports
 The set of export declarations.
 
SmallVector< UnresolvedExportDecl, 2 > UnresolvedExports
 The set of export declarations that have yet to be resolved.
 
SmallVector< Module *, 2 > DirectUses
 The directly used modules.
 
SmallVector< ModuleId, 2 > UnresolvedDirectUses
 The set of use declarations that have yet to be resolved.
 
llvm::SmallSetVector< const Module *, 2 > UndeclaredUses
 When NoUndeclaredIncludes is true, the set of modules this module tried to import but didn't because they are not direct uses.
 
llvm::SmallVector< LinkLibrary, 2 > LinkLibraries
 The set of libraries or frameworks to link against when an entity from this module is used.
 
bool UseExportAsModuleLinkName = false
 Autolinking uses the framework name for linking purposes when this is false and the export_as name otherwise.
 
std::vector< std::string > ConfigMacros
 The set of "configuration macros", which are macros that (intentionally) change how this module is built.
 
std::vector< UnresolvedConflictUnresolvedConflicts
 The list of conflicts for which the module-id has not yet been resolved.
 
std::vector< ConflictConflicts
 The list of conflicts.
 

Static Public Attributes

static const int NumHeaderKinds = HK_Excluded + 1
 

Detailed Description

Describes a module or submodule.

Aligned to 8 bytes to allow for llvm::PointerIntPair<Module *, 3>.

Definition at line 105 of file Module.h.

Member Typedef Documentation

◆ ExportDecl

using clang::Module::ExportDecl = llvm::PointerIntPair<Module *, 1, bool>

Describes an exported module.

The pointer is the module being re-exported, while the bit will be true to indicate that this is a wildcard export.

Definition at line 412 of file Module.h.

◆ submodule_const_iterator

using clang::Module::submodule_const_iterator = std::vector<Module *>::const_iterator

Definition at line 781 of file Module.h.

◆ submodule_iterator

using clang::Module::submodule_iterator = std::vector<Module *>::iterator

Definition at line 780 of file Module.h.

Member Enumeration Documentation

◆ HeaderKind

Enumerator
HK_Normal 
HK_Textual 
HK_Private 
HK_PrivateTextual 
HK_Excluded 

Definition at line 239 of file Module.h.

◆ ModuleKind

Enumerator
ModuleMapModule 

This is a module that was defined by a module map and built out of header files.

ModuleHeaderUnit 

This is a C++20 header unit.

ModuleInterfaceUnit 

This is a C++20 module interface unit.

ModuleImplementationUnit 

This is a C++20 module implementation unit.

ModulePartitionInterface 

This is a C++20 module partition interface.

ModulePartitionImplementation 

This is a C++20 module partition implementation.

ExplicitGlobalModuleFragment 

This is the explicit Global Module Fragment of a modular TU.

As per C++ [module.global.frag].

PrivateModuleFragment 

This is the private module fragment within some C++ module.

ImplicitGlobalModuleFragment 

This is an implicit fragment of the global module which contains only language linkage declarations (made in the purview of the named module).

Definition at line 116 of file Module.h.

◆ NameVisibilityKind

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

Enumerator
Hidden 

All of the names in this module are hidden.

AllVisible 

All of the names in this module are visible.

Definition at line 387 of file Module.h.

Constructor & Destructor Documentation

◆ Module()

Module::Module ( StringRef  Name,
SourceLocation  DefinitionLoc,
Module Parent,
bool  IsFramework,
bool  IsExplicit,
unsigned  VisibilityID 
)

Construct a new module or submodule.

Definition at line 37 of file Module.cpp.

References IsAvailable, isAvailable(), IsExternC, IsSystem, IsUnimportable, isUnimportable(), ModuleMapIsPrivate, Name, NoUndeclaredIncludes, and Parent.

Referenced by clang::Sema::getCurrentModule().

◆ ~Module()

Module::~Module ( )

Definition at line 61 of file Module.cpp.

Member Function Documentation

◆ addRequirement()

void Module::addRequirement ( StringRef  Feature,
bool  RequiredState,
const LangOptions LangOpts,
const TargetInfo Target 
)

Add the given feature requirement to the list of features required by this module.

Parameters
FeatureThe feature that is required by this module (and its submodules).
RequiredStateThe required state of this feature: true if it must be present, false if it must be absent.
LangOptsThe set of language options that will be used to evaluate the availability of this feature.
TargetThe target options that will be used to evaluate the availability of this feature.

Definition at line 319 of file Module.cpp.

References hasFeature(), markUnavailable(), and Requirements.

◆ addTopHeader()

void Module::addTopHeader ( FileEntryRef  File)

Add a top-level header associated with this module.

Definition at line 277 of file Module.cpp.

References clang::File.

Referenced by collectModuleHeaderIncludes().

◆ addTopHeaderFilename()

void clang::Module::addTopHeaderFilename ( StringRef  Filename)
inline

Add a top-level header filename associated with this module.

Definition at line 716 of file Module.h.

References Filename.

◆ directlyUses()

bool Module::directlyUses ( const Module Requested)

Determine whether this module has declared its intention to directly use another module.

Definition at line 293 of file Module.cpp.

References fullModuleNameIs(), getTopLevelModule(), isSubModuleOf(), Name, NoUndeclaredIncludes, Parent, and UndeclaredUses.

Referenced by clang::ModuleMap::diagnoseHeaderInclusion(), and suggestModule().

◆ dump()

LLVM_DUMP_METHOD void Module::dump ( ) const

Dump the contents of this module to the given output stream.

Definition at line 661 of file APINotesYAMLCompiler.cpp.

◆ findOrInferSubmodule()

Module * Module::findOrInferSubmodule ( StringRef  Name)

◆ findSubmodule()

Module * Module::findSubmodule ( StringRef  Name) const

Find the submodule with the given name.

Returns
The submodule if found, or NULL otherwise.

Definition at line 357 of file Module.cpp.

References Name.

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

◆ fullModuleNameIs()

bool Module::fullModuleNameIs ( ArrayRef< StringRef >  nameParts) const

Whether the full name of this module is equal to joining nameParts with "."s.

This is more efficient than getFullModuleName().

Definition at line 260 of file Module.cpp.

References Parent.

Referenced by directlyUses(), and shouldAddRequirement().

◆ getASTFile()

OptionalFileEntryRef clang::Module::getASTFile ( ) const
inline

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

Definition at line 681 of file Module.h.

References getTopLevelModule().

Referenced by clang::ASTSourceDescriptor::ASTSourceDescriptor(), clang::CompilerInstance::loadGlobalModuleIndex(), and setASTFile().

◆ getEffectiveUmbrellaDir()

OptionalDirectoryEntryRef Module::getEffectiveUmbrellaDir ( ) const

Get the effective umbrella directory for this module: either the one explicitly written in the module map file, or the parent of the umbrella header.

Definition at line 269 of file Module.cpp.

References Umbrella.

Referenced by clang::ModuleMap::isHeaderUnavailableInModule().

◆ getExportedModules()

void Module::getExportedModules ( SmallVectorImpl< Module * > &  Exported) const

Appends this module's list of exported modules to Exported.

This provides a subset of immediately imported modules (the ones that are directly exported), not the complete set of exported modules.

Definition at line 402 of file Module.cpp.

References E, Exports, Imports, IsExplicit, and isSubModuleOf().

Referenced by clang::ASTReader::makeModuleVisible().

◆ getFullModuleName()

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

◆ getGlobalModuleFragment()

Module * Module::getGlobalModuleFragment ( ) const

Get the Global Module Fragment (sub-module) for this module, it there is one.

Returns
The GMF sub-module if found, or NULL otherwise.

Definition at line 380 of file Module.cpp.

References isNamedModuleUnit().

◆ getModuleInputBufferName()

static StringRef clang::Module::getModuleInputBufferName ( )
inlinestatic

Definition at line 796 of file Module.h.

Referenced by getInputBufferForModule().

◆ getPrimaryModuleInterfaceName()

StringRef clang::Module::getPrimaryModuleInterfaceName ( ) const
inline

Get the primary module interface name from a partition.

Definition at line 631 of file Module.h.

References getTopLevelModuleName(), isGlobalModule(), isModulePartition(), isPrivateModule(), and Name.

Referenced by clang::Sema::ActOnModuleImport(), and clang::Sema::diagnoseMissingImport().

◆ getPrivateModuleFragment()

Module * Module::getPrivateModuleFragment ( ) const

Get the Private Module Fragment (sub-module) for this module, it there is one.

Returns
The PMF sub-module if found, or NULL otherwise.

Definition at line 391 of file Module.cpp.

References isNamedModuleUnit().

◆ getTopHeaders()

ArrayRef< FileEntryRef > Module::getTopHeaders ( FileManager FileMgr)

The top-level headers associated with this module.

Definition at line 282 of file Module.cpp.

References clang::FileManager::getOptionalFileRef().

◆ getTopLevelModule() [1/2]

Module * clang::Module::getTopLevelModule ( )
inline

◆ getTopLevelModule() [2/2]

const Module * Module::getTopLevelModule ( ) const

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

Definition at line 206 of file Module.cpp.

References clang::Result.

◆ getTopLevelModuleName()

StringRef clang::Module::getTopLevelModuleName ( ) const
inline

◆ getUmbrellaDirAsWritten()

std::optional< DirectoryName > clang::Module::getUmbrellaDirAsWritten ( ) const
inline

Retrieve the umbrella directory as written.

Definition at line 692 of file Module.h.

References Umbrella, UmbrellaAsWritten, and UmbrellaRelativeToRootModuleDirectory.

Referenced by collectModuleHeaderIncludes(), and print().

◆ getUmbrellaHeaderAsWritten()

std::optional< Header > clang::Module::getUmbrellaHeaderAsWritten ( ) const
inline

Retrieve the umbrella header as written.

Definition at line 700 of file Module.h.

References Umbrella, UmbrellaAsWritten, and UmbrellaRelativeToRootModuleDirectory.

Referenced by collectAllSubModulesWithUmbrellaHeader(), collectModuleHeaderIncludes(), getInputBufferForModule(), and print().

◆ getVisibilityID()

unsigned clang::Module::getVisibilityID ( ) const
inline

Definition at line 778 of file Module.h.

Referenced by clang::VisibleModuleSet::getImportLoc().

◆ isAvailable() [1/2]

bool clang::Module::isAvailable ( ) const
inline

Determine whether this module is available for use within the current translation unit.

Definition at line 529 of file Module.h.

References IsAvailable.

Referenced by clang::Preprocessor::checkModuleIsAvailable(), collectModuleHeaderIncludes(), clang::ModuleMap::KnownHeader::isAvailable(), isBetterKnownHeader(), clang::ModuleMap::isHeaderUnavailableInModule(), and Module().

◆ isAvailable() [2/2]

bool Module::isAvailable ( const LangOptions LangOpts,
const TargetInfo Target,
Requirement Req,
UnresolvedHeaderDirective MissingHeader,
Module *&  ShadowingModule 
) const

Determine whether this module is available for use within the current translation unit.

Parameters
LangOptsThe language options used for the current translation unit.
TargetThe target options used for the current translation unit.
ReqIf this module is unavailable because of a missing requirement, this parameter will be set to one of the requirements that is not met for use of this module.
MissingHeaderIf this module is unavailable because of a missing header, this parameter will be set to one of the missing headers.
ShadowingModuleIf this module is unavailable because it is shadowed, this parameter will be set to the shadowing module.

Definition at line 176 of file Module.cpp.

References IsAvailable, isUnimportable(), and ShadowingModule.

◆ isExplicitGlobalModule()

bool clang::Module::isExplicitGlobalModule ( ) const
inline

◆ isForBuilding()

bool Module::isForBuilding ( const LangOptions LangOpts) const

◆ isGlobalModule()

bool clang::Module::isGlobalModule ( ) const
inline

Does this Module scope describe a fragment of the global module within some C++ module.

Definition at line 200 of file Module.h.

References isExplicitGlobalModule(), and isImplicitGlobalModule().

Referenced by getPrimaryModuleInterfaceName(), clang::Decl::isFromGlobalModule(), clang::Sema::isModuleVisible(), and clang::VisibleModuleSet::setVisible().

◆ isHeaderLikeModule()

bool clang::Module::isHeaderLikeModule ( ) const
inline

Is this module have similar semantics as headers.

Definition at line 592 of file Module.h.

References isHeaderUnit(), and isModuleMapModule().

Referenced by clang::Sema::ActOnFunctionDeclarator(), clang::Sema::IsRedefinitionInModule(), and clang::CodeGen::CodeGenModule::Release().

◆ isHeaderUnit()

bool clang::Module::isHeaderUnit ( ) const
inline

Is this module a header unit.

Definition at line 613 of file Module.h.

References Kind, and ModuleHeaderUnit.

Referenced by clang::Sema::ActOnModuleImport(), isHeaderLikeModule(), and clang::Parser::ParseTopLevelDecl().

◆ isImplicitGlobalModule()

bool clang::Module::isImplicitGlobalModule ( ) const
inline

◆ isInterfaceOrPartition()

bool clang::Module::isInterfaceOrPartition ( ) const
inline

◆ isModuleImplementation()

bool clang::Module::isModuleImplementation ( ) const
inline

Is this a module implementation.

Definition at line 608 of file Module.h.

References Kind, and ModuleImplementationUnit.

Referenced by clang::Sema::CheckRedeclarationModuleOwnership(), and isNamedModuleUnit().

◆ isModuleInterfaceUnit()

bool clang::Module::isModuleInterfaceUnit ( ) const
inline

Definition at line 624 of file Module.h.

References Kind, ModuleInterfaceUnit, and ModulePartitionInterface.

◆ isModuleMapModule()

bool clang::Module::isModuleMapModule ( ) const
inline

◆ isModulePartition()

bool clang::Module::isModulePartition ( ) const
inline

◆ isModulePartitionImplementation()

bool clang::Module::isModulePartitionImplementation ( ) const
inline

Is this a module partition implementation unit.

Definition at line 603 of file Module.h.

References Kind, and ModulePartitionImplementation.

Referenced by isImportingModuleUnitFromSameModule().

◆ isModuleVisible()

bool clang::Module::isModuleVisible ( const Module M) const
inline

Determine whether the specified module would be visible to a lookup at the end of this module.

FIXME: This may return incorrect results for (submodules of) the module currently being built, if it's queried before we see all of its imports.

Definition at line 772 of file Module.h.

Referenced by clang::Sema::isModuleVisible().

◆ isNamedModule()

bool clang::Module::isNamedModule ( ) const
inline

◆ isNamedModuleInterfaceHasInit()

bool clang::Module::isNamedModuleInterfaceHasInit ( ) const
inline

Definition at line 628 of file Module.h.

References NamedModuleHasInit.

Referenced by clang::Sema::ActOnEndOfTranslationUnit().

◆ isNamedModuleUnit()

bool clang::Module::isNamedModuleUnit ( ) const
inline

Is this a C++20 named module unit.

Definition at line 620 of file Module.h.

References isInterfaceOrPartition(), and isModuleImplementation().

Referenced by clang::CXX20ModulesGenerator::getEmittingModule(), getGlobalModuleFragment(), and getPrivateModuleFragment().

◆ isPartOfFramework()

bool clang::Module::isPartOfFramework ( ) const
inline

Determine whether this module is a part of a framework, either because it is a framework module or because it is a submodule of a framework module.

Definition at line 568 of file Module.h.

References Parent.

Referenced by isSubFramework(), and clang::ModuleMap::shouldImportRelativeToBuiltinIncludeDir().

◆ isPrivateModule()

bool clang::Module::isPrivateModule ( ) const
inline

◆ isSubFramework()

bool clang::Module::isSubFramework ( ) const
inline

Determine whether this module is a subframework of another framework.

Definition at line 578 of file Module.h.

References IsFramework, isPartOfFramework(), and Parent.

Referenced by inferFrameworkLink().

◆ isSubModule()

bool clang::Module::isSubModule ( ) const
inline

Determine whether this module is a submodule.

Definition at line 555 of file Module.h.

References Parent.

◆ isSubModuleOf()

bool Module::isSubModuleOf ( const Module Other) const

Check if this module is a (possibly transitive) submodule of Other.

The 'A is a submodule of B' relation is a partial order based on the the parent-child relationship between individual modules.

Returns false if Other is nullptr.

Definition at line 198 of file Module.cpp.

References clang::Other, and Parent.

Referenced by directlyUses(), getExportedModules(), and clang::ModuleMap::isHeaderUnavailableInModule().

◆ isUnimportable() [1/2]

bool clang::Module::isUnimportable ( ) const
inline

Determine whether this module has been declared unimportable.

Definition at line 506 of file Module.h.

References IsUnimportable.

Referenced by isAvailable(), clang::ASTReader::makeModuleVisible(), and Module().

◆ isUnimportable() [2/2]

bool Module::isUnimportable ( const LangOptions LangOpts,
const TargetInfo Target,
Requirement Req,
Module *&  ShadowingModule 
) const

Determine whether this module has been declared unimportable.

Parameters
LangOptsThe language options used for the current translation unit.
TargetThe target options used for the current translation unit.
ReqIf this module is unimportable because of a missing requirement, this parameter will be set to one of the requirements that is not met for use of this module.
ShadowingModuleIf this module is unimportable because it is shadowed, this parameter will be set to the shadowing module.

Definition at line 131 of file Module.cpp.

References hasFeature(), IsUnimportable, and ShadowingModule.

◆ markUnavailable()

void Module::markUnavailable ( bool  Unimportable)

Mark this module and all of its submodules as unavailable.

Definition at line 331 of file Module.cpp.

Referenced by addRequirement().

◆ print()

void Module::print ( raw_ostream &  OS,
unsigned  Indent = 0,
bool  Dump = false 
) const

◆ setASTFile()

void clang::Module::setASTFile ( OptionalFileEntryRef  File)
inline

Set the serialized AST file for the top-level module of this module.

Definition at line 686 of file Module.h.

References clang::File, getASTFile(), and getTopLevelModule().

◆ setParent()

void clang::Module::setParent ( Module M)
inline

Set the parent of this module.

This should only be used if the parent could not be set during module creation.

Definition at line 584 of file Module.h.

References Name, and Parent.

◆ submodules() [1/2]

llvm::iterator_range< submodule_iterator > clang::Module::submodules ( )
inline

◆ submodules() [2/2]

llvm::iterator_range< submodule_const_iterator > clang::Module::submodules ( ) const
inline

Definition at line 786 of file Module.h.

Member Data Documentation

◆ AffectingClangModules

llvm::SmallSetVector<Module *, 2> clang::Module::AffectingClangModules

The set of top-level modules that affected the compilation of this module, but were not imported.

Definition at line 406 of file Module.h.

◆ APINotesFile

std::string clang::Module::APINotesFile

For the debug info, the path to this module's .apinotes file, if any.

Definition at line 182 of file Module.h.

Referenced by clang::api_notes::APINotesManager::loadCurrentModuleAPINotes().

◆ ConfigMacros

std::vector<std::string> clang::Module::ConfigMacros

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

Definition at line 472 of file Module.h.

Referenced by checkConfigMacros(), and print().

◆ ConfigMacrosExhaustive

unsigned clang::Module::ConfigMacrosExhaustive

Whether the set of configuration macros is exhaustive.

When the set of configuration macros is exhaustive, meaning that no identifier not in this list should affect how the module is built.

Definition at line 368 of file Module.h.

Referenced by print().

◆ Conflicts

std::vector<Conflict> clang::Module::Conflicts

The list of conflicts.

Definition at line 497 of file Module.h.

Referenced by print(), and clang::ModuleMap::resolveConflicts().

◆ DefinitionLoc

SourceLocation clang::Module::DefinitionLoc

◆ Directory

OptionalDirectoryEntryRef clang::Module::Directory

The build directory of this module.

This is the directory in which the module is notionally built, and relative to which its headers are found.

Definition at line 159 of file Module.h.

Referenced by clang::ASTSourceDescriptor::ASTSourceDescriptor(), compileModule(), clang::api_notes::APINotesManager::getCurrentModuleAPINotes(), and prepareToBuildModule().

◆ DirectUses

SmallVector<Module *, 2> clang::Module::DirectUses

The directly used modules.

Definition at line 436 of file Module.h.

Referenced by print().

◆ ExportAsModule

std::string clang::Module::ExportAsModule

The module through which entities defined in this module will eventually be exposed, for use in "private" modules.

Definition at line 179 of file Module.h.

Referenced by clang::ModuleMap::addLinkAsDependency(), clang::api_notes::APINotesManager::getCurrentModuleAPINotes(), and print().

◆ Exports

SmallVector<ExportDecl, 2> clang::Module::Exports

◆ HasIncompatibleModuleFile

unsigned clang::Module::HasIncompatibleModuleFile

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

Definition at line 309 of file Module.h.

◆ Headers

SmallVector<Header, 2> clang::Module::Headers[5]

The headers that are part of this module.

Definition at line 265 of file Module.h.

Referenced by clang::ModuleMap::addHeader(), collectModuleHeaderIncludes(), print(), and violatesPrivateInclude().

◆ Imports

llvm::SmallSetVector<Module *, 2> clang::Module::Imports

◆ InferExplicitSubmodules

unsigned clang::Module::InferExplicitSubmodules

Whether, when inferring submodules, the inferred submodules should be explicit.

Definition at line 355 of file Module.h.

Referenced by findOrInferSubmodule(), and print().

◆ InferExportWildcard

unsigned clang::Module::InferExportWildcard

Whether, when inferring submodules, the inferr submodules should export all modules they import (e.g., the equivalent of "export *").

Definition at line 360 of file Module.h.

Referenced by findOrInferSubmodule(), and print().

◆ InferredSubmoduleLoc

SourceLocation clang::Module::InferredSubmoduleLoc

The location of the inferred submodule.

Definition at line 398 of file Module.h.

◆ InferSubmodules

unsigned clang::Module::InferSubmodules

Whether we should infer submodules for this module based on the headers.

Submodules can only be inferred for modules with an umbrella header.

Definition at line 350 of file Module.h.

Referenced by findOrInferSubmodule(), clang::ModuleMap::isHeaderUnavailableInModule(), and print().

◆ IsAvailable

unsigned clang::Module::IsAvailable

Whether this module is available in the current translation unit.

If the module is missing headers or does not meet all requirements then this bit will be 0.

Definition at line 316 of file Module.h.

Referenced by isAvailable(), and Module().

◆ IsExplicit

unsigned clang::Module::IsExplicit

Whether this is an explicit submodule.

Definition at line 328 of file Module.h.

Referenced by getExportedModules(), and print().

◆ IsExternC

unsigned clang::Module::IsExternC

Whether this is an 'extern "C"' module (which implicitly puts all headers in it within an 'extern "C"' block, and allows the module to be imported within such a block).

Definition at line 339 of file Module.h.

Referenced by checkModuleImportContext(), collectModuleHeaderIncludes(), getInputBufferForModule(), Module(), and print().

◆ IsFramework

unsigned clang::Module::IsFramework

◆ IsFromModuleFile

unsigned clang::Module::IsFromModuleFile

Whether this module was loaded from a module file.

Definition at line 320 of file Module.h.

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

◆ IsInferred

unsigned clang::Module::IsInferred

Whether this is an inferred submodule (module * { ... }).

Definition at line 343 of file Module.h.

Referenced by clang::ModuleMap::getModuleMapFileIDForUniquing(), prepareToBuildModule(), and clang::ModuleMap::setInferredModuleAllowedBy().

◆ IsSystem

unsigned clang::Module::IsSystem

◆ IsUnimportable

unsigned clang::Module::IsUnimportable

Whether this module has declared itself unimportable, either because it's missing a requirement from Requirements or because it's been shadowed by another module.

Definition at line 305 of file Module.h.

Referenced by isUnimportable(), and Module().

◆ Kind

ModuleKind clang::Module::Kind = ModuleMapModule

◆ LinkLibraries

llvm::SmallVector<LinkLibrary, 2> clang::Module::LinkLibraries

The set of libraries or frameworks to link against when an entity from this module is used.

Definition at line 464 of file Module.h.

Referenced by addLinkOptionsPostorder(), inferFrameworkLink(), and print().

◆ MissingHeaders

SmallVector<UnresolvedHeaderDirective, 1> clang::Module::MissingHeaders

Headers that are mentioned in the module map file but could not be found on the file system.

Definition at line 285 of file Module.h.

Referenced by collectModuleHeaderIncludes(), and print().

◆ ModuleMapIsPrivate

unsigned clang::Module::ModuleMapIsPrivate

Whether this module came from a "private" module map, found next to a regular (public) module map.

Definition at line 378 of file Module.h.

Referenced by clang::api_notes::APINotesManager::getCurrentModuleAPINotes(), and Module().

◆ Name

std::string clang::Module::Name

◆ NamedModuleHasInit

unsigned clang::Module::NamedModuleHasInit

Whether this C++20 named modules doesn't need an initializer.

This is only meaningful for C++20 modules.

Definition at line 383 of file Module.h.

Referenced by isNamedModuleInterfaceHasInit().

◆ NameVisibility

NameVisibilityKind clang::Module::NameVisibility

The visibility of names within this particular module.

Definition at line 395 of file Module.h.

Referenced by clang::ASTReader::makeModuleVisible(), and clang::ASTReader::makeNamesVisible().

◆ NoUndeclaredIncludes

unsigned clang::Module::NoUndeclaredIncludes

Whether files in this module can only include non-modular headers and headers from used modules.

Definition at line 373 of file Module.h.

Referenced by directlyUses(), Module(), needModuleLookup(), and suggestModule().

◆ NumHeaderKinds

const int clang::Module::NumHeaderKinds = HK_Excluded + 1
static

Definition at line 246 of file Module.h.

◆ Parent

Module* clang::Module::Parent

◆ PresumedModuleMapFile

std::string clang::Module::PresumedModuleMapFile

The presumed file name for the module map defining this module.

Only non-empty when building from preprocessed source.

Definition at line 163 of file Module.h.

Referenced by clang::FrontendAction::BeginSourceFile().

◆ Requirements

SmallVector<Requirement, 2> clang::Module::Requirements

The set of language features required to use this module.

If any of these requirements are not available, the IsAvailable bit will be false to indicate that this (sub)module is not available.

Definition at line 296 of file Module.h.

Referenced by addRequirement(), and print().

◆ ShadowingModule

Module* clang::Module::ShadowingModule = nullptr

A module with the same name that shadows this module.

Definition at line 299 of file Module.h.

Referenced by isAvailable(), and isUnimportable().

◆ Signature

ASTFileSignature clang::Module::Signature

The module signature.

Definition at line 169 of file Module.h.

◆ Umbrella

std::variant<std::monostate, FileEntryRef, DirectoryEntryRef> clang::Module::Umbrella

◆ UmbrellaAsWritten

std::string clang::Module::UmbrellaAsWritten

The name of the umbrella entry, as written in the module map.

Definition at line 172 of file Module.h.

Referenced by getUmbrellaDirAsWritten(), getUmbrellaHeaderAsWritten(), clang::ModuleMap::setUmbrellaDirAsWritten(), and clang::ModuleMap::setUmbrellaHeaderAsWritten().

◆ UmbrellaRelativeToRootModuleDirectory

std::string clang::Module::UmbrellaRelativeToRootModuleDirectory

◆ UndeclaredUses

llvm::SmallSetVector<const Module *, 2> clang::Module::UndeclaredUses

When NoUndeclaredIncludes is true, the set of modules this module tried to import but didn't because they are not direct uses.

Definition at line 443 of file Module.h.

Referenced by directlyUses().

◆ UnresolvedConflicts

std::vector<UnresolvedConflict> clang::Module::UnresolvedConflicts

The list of conflicts for which the module-id has not yet been resolved.

Definition at line 485 of file Module.h.

Referenced by print(), and clang::ModuleMap::resolveConflicts().

◆ UnresolvedDirectUses

SmallVector<ModuleId, 2> clang::Module::UnresolvedDirectUses

The set of use declarations that have yet to be resolved.

Definition at line 439 of file Module.h.

Referenced by print().

◆ UnresolvedExports

SmallVector<UnresolvedExportDecl, 2> clang::Module::UnresolvedExports

The set of export declarations that have yet to be resolved.

Definition at line 433 of file Module.h.

Referenced by print(), and clang::ModuleMap::resolveExports().

◆ UnresolvedHeaders

SmallVector<UnresolvedHeaderDirective, 1> clang::Module::UnresolvedHeaders

Headers that are mentioned in the module map file but that we have not yet attempted to resolve to a file on the file system.

Definition at line 281 of file Module.h.

Referenced by print(), and clang::ModuleMap::resolveHeaderDirectives().

◆ UseExportAsModuleLinkName

bool clang::Module::UseExportAsModuleLinkName = false

Autolinking uses the framework name for linking purposes when this is false and the export_as name otherwise.

Definition at line 468 of file Module.h.

Referenced by clang::ModuleMap::addLinkAsDependency(), and addLinkOptionsPostorder().


The documentation for this class was generated from the following files: