clang  8.0.0svn
Classes | Namespaces | Macros | Functions
ASTWriter.cpp File Reference
#include "clang/Serialization/ASTWriter.h"
#include "ASTCommon.h"
#include "ASTReaderInternals.h"
#include "MultiOnDiskHashTable.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTUnresolvedSet.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclContextInternals.h"
#include "clang/AST/DeclFriend.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/DeclarationName.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/LambdaCapture.h"
#include "clang/AST/NestedNameSpecifier.h"
#include "clang/AST/RawCommentList.h"
#include "clang/AST/TemplateName.h"
#include "clang/AST/Type.h"
#include "clang/AST/TypeLocVisitor.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/FileSystemOptions.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/Lambda.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/MemoryBufferCache.h"
#include "clang/Basic/Module.h"
#include "clang/Basic/ObjCRuntime.h"
#include "clang/Basic/OpenCLOptions.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/SourceManagerInternals.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Basic/Version.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/MacroInfo.h"
#include "clang/Lex/ModuleMap.h"
#include "clang/Lex/PreprocessingRecord.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Lex/PreprocessorOptions.h"
#include "clang/Lex/Token.h"
#include "clang/Sema/IdentifierResolver.h"
#include "clang/Sema/ObjCMethodList.h"
#include "clang/Sema/Sema.h"
#include "clang/Sema/Weak.h"
#include "clang/Serialization/ASTReader.h"
#include "clang/Serialization/Module.h"
#include "clang/Serialization/ModuleFileExtension.h"
#include "clang/Serialization/SerializationDiagnostic.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Bitcode/BitCodes.h"
#include "llvm/Bitcode/BitstreamWriter.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compression.h"
#include "llvm/Support/DJB.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/EndianStream.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/OnDiskHashTable.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/SHA1.h"
#include "llvm/Support/VersionTuple.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <limits>
#include <memory>
#include <queue>
#include <tuple>
#include <utility>
#include <vector>
#include "clang/AST/TypeNodes.def"
#include "clang/AST/TypeLocNodes.def"
#include "clang/Basic/DiagnosticOptions.def"
#include "clang/Basic/LangOptions.def"
#include "clang/Basic/Sanitizers.def"
#include "clang/Serialization/AttrPCHWrite.inc"

Go to the source code of this file.

Classes

class  clang::ASTTypeWriter
 

Namespaces

 clang
 Dataflow Directional Tag Classes.
 

Macros

#define TYPE(Class, Base)   case Type::Class: Visit##Class##Type(cast<Class##Type>(T)); break;
 
#define ABSTRACT_TYPE(Class, Base)
 
#define TYPE(Class, Base)   void Visit##Class##Type(const Class##Type *T);
 
#define ABSTRACT_TYPE(Class, Base)
 
#define ABSTRACT_TYPELOC(CLASS, PARENT)
 
#define TYPELOC(CLASS, PARENT)   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
 
#define RECORD(X)   EmitRecordID(X, #X, Stream, Record)
 
#define BLOCK(X)   EmitBlockID(X ## _ID, #X, Stream, Record)
 
#define RECORD(X)   EmitRecordID(X, #X, Stream, Record)
 
#define DIAGOPT(Name, Bits, Default)   Record.push_back(DiagOpts.Name);
 
#define ENUM_DIAGOPT(Name, Type, Bits, Default)   Record.push_back(static_cast<unsigned>(DiagOpts.get##Name()));
 
#define LANGOPT(Name, Bits, Default, Description)   Record.push_back(LangOpts.Name);
 
#define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   Record.push_back(static_cast<unsigned>(LangOpts.get##Name()));
 
#define SANITIZER(NAME, ID)   Record.push_back(LangOpts.Sanitize.has(SanitizerKind::ID));
 

Functions

template<typename T , typename Allocator >
static StringRef bytes (const std::vector< T, Allocator > &v)
 
template<typename T >
static StringRef bytes (const SmallVectorImpl< T > &v)
 
static void addExceptionSpec (const FunctionProtoType *T, ASTRecordWriter &Record)
 
static void EmitBlockID (unsigned ID, const char *Name, llvm::BitstreamWriter &Stream, ASTWriter::RecordDataImpl &Record)
 
static void EmitRecordID (unsigned ID, const char *Name, llvm::BitstreamWriter &Stream, ASTWriter::RecordDataImpl &Record)
 
static void AddStmtsExprs (llvm::BitstreamWriter &Stream, ASTWriter::RecordDataImpl &Record)
 
static bool cleanPathForOutput (FileManager &FileMgr, SmallVectorImpl< char > &Path)
 Prepares a path for being written to an AST file by converting it to an absolute path and removing nested '. More...
 
static const char * adjustFilenameForRelocatableAST (const char *Filename, StringRef BaseDir)
 Adjusts the given filename to only write out the portion of the filename that is not part of the system root directory. More...
 
static unsigned CreateSLocFileAbbrev (llvm::BitstreamWriter &Stream)
 Create an abbreviation for the SLocEntry that refers to a file. More...
 
static unsigned CreateSLocBufferAbbrev (llvm::BitstreamWriter &Stream)
 Create an abbreviation for the SLocEntry that refers to a buffer. More...
 
static unsigned CreateSLocBufferBlobAbbrev (llvm::BitstreamWriter &Stream, bool Compressed)
 Create an abbreviation for the SLocEntry that refers to a buffer's blob. More...
 
static unsigned CreateSLocExpansionAbbrev (llvm::BitstreamWriter &Stream)
 Create an abbreviation for the SLocEntry that refers to a macro expansion. More...
 
static void emitBlob (llvm::BitstreamWriter &Stream, StringRef Blob, unsigned SLocBufferBlobCompressedAbbrv, unsigned SLocBufferBlobAbbrv)
 
static bool shouldIgnoreMacro (MacroDirective *MD, bool IsModule, const Preprocessor &PP)
 
static unsigned getNumberOfModules (Module *Mod)
 Compute the number of modules within the given tree (including the given module). More...
 
static NamedDeclgetDeclForLocalLookup (const LangOptions &LangOpts, NamedDecl *D)
 Determine the declaration that should be put into the name lookup table to represent the given declaration in this module. More...
 
template<typename Vector >
static void AddLazyVectorDecls (ASTWriter &Writer, Vector &Vec, ASTWriter::RecordData &Record)
 
static uint64_t EmitCXXBaseSpecifiers (ASTWriter &W, ArrayRef< CXXBaseSpecifier > Bases)
 
static uint64_t EmitCXXCtorInitializers (ASTWriter &W, ArrayRef< CXXCtorInitializer *> CtorInits)
 
static bool isImportedDeclContext (ASTReader *Chain, const Decl *D)
 

Macro Definition Documentation

◆ ABSTRACT_TYPE [1/2]

#define ABSTRACT_TYPE (   Class,
  Base 
)

Definition at line 180 of file ASTWriter.cpp.

◆ ABSTRACT_TYPE [2/2]

#define ABSTRACT_TYPE (   Class,
  Base 
)

Definition at line 180 of file ASTWriter.cpp.

◆ ABSTRACT_TYPELOC

#define ABSTRACT_TYPELOC (   CLASS,
  PARENT 
)

Definition at line 586 of file ASTWriter.cpp.

◆ BLOCK

#define BLOCK (   X)    EmitBlockID(X ## _ID, #X, Stream, Record)

Referenced by AddStmtsExprs().

◆ DIAGOPT

#define DIAGOPT (   Name,
  Bits,
  Default 
)    Record.push_back(DiagOpts.Name);

◆ ENUM_DIAGOPT

#define ENUM_DIAGOPT (   Name,
  Type,
  Bits,
  Default 
)    Record.push_back(static_cast<unsigned>(DiagOpts.get##Name()));

◆ ENUM_LANGOPT

#define ENUM_LANGOPT (   Name,
  Type,
  Bits,
  Default,
  Description 
)    Record.push_back(static_cast<unsigned>(LangOpts.get##Name()));

◆ LANGOPT

#define LANGOPT (   Name,
  Bits,
  Default,
  Description 
)    Record.push_back(LangOpts.Name);

◆ RECORD [1/2]

#define RECORD (   X)    EmitRecordID(X, #X, Stream, Record)

Referenced by AddStmtsExprs().

◆ RECORD [2/2]

#define RECORD (   X)    EmitRecordID(X, #X, Stream, Record)

◆ SANITIZER

#define SANITIZER (   NAME,
  ID 
)    Record.push_back(LangOpts.Sanitize.has(SanitizerKind::ID));

◆ TYPE [1/2]

#define TYPE (   Class,
  Base 
)    case Type::Class: Visit##Class##Type(cast<Class##Type>(T)); break;

Definition at line 179 of file ASTWriter.cpp.

◆ TYPE [2/2]

#define TYPE (   Class,
  Base 
)    void Visit##Class##Type(const Class##Type *T);

Definition at line 179 of file ASTWriter.cpp.

◆ TYPELOC

#define TYPELOC (   CLASS,
  PARENT 
)    void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);

Definition at line 587 of file ASTWriter.cpp.

Function Documentation

◆ addExceptionSpec()

static void addExceptionSpec ( const FunctionProtoType T,
ASTRecordWriter Record 
)
static

◆ AddLazyVectorDecls()

template<typename Vector >
static void AddLazyVectorDecls ( ASTWriter Writer,
Vector &  Vec,
ASTWriter::RecordData Record 
)
static

Definition at line 4642 of file ASTWriter.cpp.

◆ AddStmtsExprs()

static void AddStmtsExprs ( llvm::BitstreamWriter &  Stream,
ASTWriter::RecordDataImpl Record 
)
static

Definition at line 946 of file ASTWriter.cpp.

References BLOCK, clang::serialization::COMMENTS_RAW_COMMENT, clang::serialization::CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH, clang::serialization::CUDA_SPECIAL_DECL_REFS, clang::serialization::DECL_ACCESS_SPEC, clang::serialization::DECL_BLOCK, clang::serialization::DECL_CLASS_SCOPE_FUNCTION_SPECIALIZATION, clang::serialization::DECL_CLASS_TEMPLATE, clang::serialization::DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION, clang::serialization::DECL_CLASS_TEMPLATE_SPECIALIZATION, clang::serialization::DECL_CONTEXT_LEXICAL, clang::serialization::DECL_CONTEXT_VISIBLE, clang::serialization::DECL_CXX_BASE_SPECIFIERS, clang::serialization::DECL_CXX_CONSTRUCTOR, clang::serialization::DECL_CXX_CONVERSION, clang::serialization::DECL_CXX_CTOR_INITIALIZERS, clang::serialization::DECL_CXX_DESTRUCTOR, clang::serialization::DECL_CXX_INHERITED_CONSTRUCTOR, clang::serialization::DECL_CXX_METHOD, clang::serialization::DECL_CXX_RECORD, clang::serialization::DECL_EMPTY, clang::serialization::DECL_ENUM, clang::serialization::DECL_ENUM_CONSTANT, clang::serialization::DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK, clang::serialization::DECL_EXPANDED_TEMPLATE_TEMPLATE_PARM_PACK, clang::serialization::DECL_FIELD, clang::serialization::DECL_FILE_SCOPE_ASM, clang::serialization::DECL_FRIEND, clang::serialization::DECL_FRIEND_TEMPLATE, clang::serialization::DECL_FUNCTION, clang::serialization::DECL_FUNCTION_TEMPLATE, clang::serialization::DECL_IMPLICIT_PARAM, clang::serialization::DECL_IMPORT, clang::serialization::DECL_INDIRECTFIELD, clang::serialization::DECL_LINKAGE_SPEC, clang::serialization::DECL_MS_PROPERTY, clang::serialization::DECL_NAMESPACE, clang::serialization::DECL_NAMESPACE_ALIAS, clang::serialization::DECL_NON_TYPE_TEMPLATE_PARM, clang::serialization::DECL_OBJC_AT_DEFS_FIELD, clang::serialization::DECL_OBJC_CATEGORY, clang::serialization::DECL_OBJC_CATEGORY_IMPL, clang::serialization::DECL_OBJC_COMPATIBLE_ALIAS, clang::serialization::DECL_OBJC_IMPLEMENTATION, clang::serialization::DECL_OBJC_INTERFACE, clang::serialization::DECL_OBJC_IVAR, clang::serialization::DECL_OBJC_METHOD, clang::serialization::DECL_OBJC_PROPERTY, clang::serialization::DECL_OBJC_PROPERTY_IMPL, clang::serialization::DECL_OBJC_PROTOCOL, clang::serialization::DECL_OBJC_TYPE_PARAM, clang::serialization::DECL_OFFSET, clang::serialization::DECL_OMP_CAPTUREDEXPR, clang::serialization::DECL_OMP_DECLARE_REDUCTION, clang::serialization::DECL_OMP_THREADPRIVATE, clang::serialization::DECL_PARM_VAR, clang::serialization::DECL_PRAGMA_COMMENT, clang::serialization::DECL_PRAGMA_DETECT_MISMATCH, clang::serialization::DECL_RECORD, clang::serialization::DECL_STATIC_ASSERT, clang::serialization::DECL_TEMPLATE_TEMPLATE_PARM, clang::serialization::DECL_TEMPLATE_TYPE_PARM, clang::serialization::DECL_TYPE_ALIAS_TEMPLATE, clang::serialization::DECL_TYPEALIAS, clang::serialization::DECL_TYPEDEF, clang::serialization::DECL_UNRESOLVED_USING_TYPENAME, clang::serialization::DECL_UNRESOLVED_USING_VALUE, clang::serialization::DECL_UPDATE_OFFSETS, clang::serialization::DECL_UPDATES, clang::serialization::DECL_USING, clang::serialization::DECL_USING_DIRECTIVE, clang::serialization::DECL_USING_SHADOW, clang::serialization::DECL_VAR, clang::serialization::DECL_VAR_TEMPLATE, clang::serialization::DECL_VAR_TEMPLATE_PARTIAL_SPECIALIZATION, clang::serialization::DECL_VAR_TEMPLATE_SPECIALIZATION, clang::serialization::DELEGATING_CTORS, clang::serialization::DELETE_EXPRS_TO_ANALYZE, clang::serialization::DIAG_PRAGMA_MAPPINGS, clang::serialization::DIAGNOSTIC_OPTIONS, clang::serialization::EAGERLY_DESERIALIZED_DECLS, clang::serialization::EXPR_ADDR_LABEL, clang::serialization::EXPR_ARRAY_SUBSCRIPT, clang::serialization::EXPR_ARRAY_TYPE_TRAIT, clang::serialization::EXPR_BINARY_CONDITIONAL_OPERATOR, clang::serialization::EXPR_BINARY_OPERATOR, clang::serialization::EXPR_BLOCK, clang::serialization::EXPR_CALL, clang::serialization::EXPR_CHARACTER_LITERAL, clang::serialization::EXPR_CHOOSE, clang::serialization::EXPR_COMPOUND_ASSIGN_OPERATOR, clang::serialization::EXPR_COMPOUND_LITERAL, clang::serialization::EXPR_CONDITIONAL_OPERATOR, clang::serialization::EXPR_CSTYLE_CAST, clang::serialization::EXPR_CUDA_KERNEL_CALL, clang::serialization::EXPR_CXX_BIND_TEMPORARY, clang::serialization::EXPR_CXX_BOOL_LITERAL, clang::serialization::EXPR_CXX_CONST_CAST, clang::serialization::EXPR_CXX_CONSTRUCT, clang::serialization::EXPR_CXX_DEFAULT_ARG, clang::serialization::EXPR_CXX_DEFAULT_INIT, clang::serialization::EXPR_CXX_DELETE, clang::serialization::EXPR_CXX_DEPENDENT_SCOPE_DECL_REF, clang::serialization::EXPR_CXX_DEPENDENT_SCOPE_MEMBER, clang::serialization::EXPR_CXX_DYNAMIC_CAST, clang::serialization::EXPR_CXX_EXPRESSION_TRAIT, clang::serialization::EXPR_CXX_FUNCTIONAL_CAST, clang::serialization::EXPR_CXX_MEMBER_CALL, clang::serialization::EXPR_CXX_NEW, clang::serialization::EXPR_CXX_NOEXCEPT, clang::serialization::EXPR_CXX_NULL_PTR_LITERAL, clang::serialization::EXPR_CXX_OPERATOR_CALL, clang::serialization::EXPR_CXX_PSEUDO_DESTRUCTOR, clang::serialization::EXPR_CXX_REINTERPRET_CAST, clang::serialization::EXPR_CXX_SCALAR_VALUE_INIT, clang::serialization::EXPR_CXX_STATIC_CAST, clang::serialization::EXPR_CXX_STD_INITIALIZER_LIST, clang::serialization::EXPR_CXX_TEMPORARY_OBJECT, clang::serialization::EXPR_CXX_THIS, clang::serialization::EXPR_CXX_THROW, clang::serialization::EXPR_CXX_TYPEID_EXPR, clang::serialization::EXPR_CXX_TYPEID_TYPE, clang::serialization::EXPR_CXX_UNRESOLVED_CONSTRUCT, clang::serialization::EXPR_CXX_UNRESOLVED_LOOKUP, clang::serialization::EXPR_CXX_UNRESOLVED_MEMBER, clang::serialization::EXPR_CXX_UUIDOF_EXPR, clang::serialization::EXPR_CXX_UUIDOF_TYPE, clang::serialization::EXPR_DECL_REF, clang::serialization::EXPR_DESIGNATED_INIT, clang::serialization::EXPR_DESIGNATED_INIT_UPDATE, clang::serialization::EXPR_EXPR_WITH_CLEANUPS, clang::serialization::EXPR_EXT_VECTOR_ELEMENT, clang::serialization::EXPR_FLOATING_LITERAL, clang::serialization::EXPR_FUNCTION_PARM_PACK, clang::serialization::EXPR_GENERIC_SELECTION, clang::serialization::EXPR_GNU_NULL, clang::serialization::EXPR_IMAGINARY_LITERAL, clang::serialization::EXPR_IMPLICIT_CAST, clang::serialization::EXPR_IMPLICIT_VALUE_INIT, clang::serialization::EXPR_INIT_LIST, clang::serialization::EXPR_INTEGER_LITERAL, clang::serialization::EXPR_LAMBDA, clang::serialization::EXPR_MATERIALIZE_TEMPORARY, clang::serialization::EXPR_MEMBER, clang::serialization::EXPR_NO_INIT, clang::serialization::EXPR_OBJC_ARRAY_LITERAL, clang::serialization::EXPR_OBJC_BOOL_LITERAL, clang::serialization::EXPR_OBJC_BOXED_EXPRESSION, clang::serialization::EXPR_OBJC_DICTIONARY_LITERAL, clang::serialization::EXPR_OBJC_ENCODE, clang::serialization::EXPR_OBJC_IVAR_REF_EXPR, clang::serialization::EXPR_OBJC_KVC_REF_EXPR, clang::serialization::EXPR_OBJC_MESSAGE_EXPR, clang::serialization::EXPR_OBJC_PROPERTY_REF_EXPR, clang::serialization::EXPR_OBJC_PROTOCOL_EXPR, clang::serialization::EXPR_OBJC_SELECTOR_EXPR, clang::serialization::EXPR_OBJC_STRING_LITERAL, clang::serialization::EXPR_OPAQUE_VALUE, clang::serialization::EXPR_PACK_EXPANSION, clang::serialization::EXPR_PAREN, clang::serialization::EXPR_PAREN_LIST, clang::serialization::EXPR_PREDEFINED, clang::serialization::EXPR_SHUFFLE_VECTOR, clang::serialization::EXPR_SIZEOF_ALIGN_OF, clang::serialization::EXPR_SIZEOF_PACK, clang::serialization::EXPR_STMT, clang::serialization::EXPR_STRING_LITERAL, clang::serialization::EXPR_SUBST_NON_TYPE_TEMPLATE_PARM, clang::serialization::EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK, clang::serialization::EXPR_TYPE_TRAIT, clang::serialization::EXPR_UNARY_OPERATOR, clang::serialization::EXPR_USER_DEFINED_LITERAL, clang::serialization::EXPR_VA_ARG, clang::serialization::EXT_VECTOR_DECLS, clang::serialization::EXTENSION_METADATA, clang::serialization::FILE_SORTED_DECLS, clang::serialization::FILE_SYSTEM_OPTIONS, clang::serialization::FP_PRAGMA_OPTIONS, clang::serialization::HEADER_SEARCH_OPTIONS, clang::serialization::HEADER_SEARCH_TABLE, clang::serialization::IDENTIFIER_OFFSET, clang::serialization::IDENTIFIER_TABLE, clang::serialization::IMPORTED_MODULES, clang::serialization::IMPORTS, clang::serialization::INPUT_FILE, clang::serialization::INPUT_FILE_OFFSETS, clang::serialization::INTERESTING_IDENTIFIERS, clang::serialization::KNOWN_NAMESPACES, clang::serialization::LANGUAGE_OPTIONS, clang::serialization::LATE_PARSED_TEMPLATE, clang::serialization::LOCAL_REDECLARATIONS, clang::serialization::MACRO_OFFSET, clang::serialization::METADATA, clang::serialization::METHOD_POOL, clang::serialization::MODULAR_CODEGEN_DECLS, clang::serialization::MODULE_DIRECTORY, clang::serialization::MODULE_MAP_FILE, clang::serialization::MODULE_NAME, clang::serialization::MODULE_OFFSET_MAP, clang::serialization::MSSTRUCT_PRAGMA_OPTIONS, clang::serialization::OBJC_CATEGORIES, clang::serialization::OBJC_CATEGORIES_MAP, clang::serialization::OPENCL_EXTENSION_DECLS, clang::serialization::OPENCL_EXTENSION_TYPES, clang::serialization::OPENCL_EXTENSIONS, clang::serialization::OPTIMIZE_PRAGMA_OPTIONS, clang::serialization::ORIGINAL_FILE, clang::serialization::ORIGINAL_FILE_ID, clang::serialization::ORIGINAL_PCH_DIR, clang::serialization::PENDING_IMPLICIT_INSTANTIATIONS, clang::serialization::POINTERS_TO_MEMBERS_PRAGMA_OPTIONS, clang::serialization::PP_CONDITIONAL_STACK, clang::serialization::PP_COUNTER_VALUE, clang::serialization::PP_MACRO_DIRECTIVE_HISTORY, clang::serialization::PP_MACRO_FUNCTION_LIKE, clang::serialization::PP_MACRO_OBJECT_LIKE, clang::serialization::PP_MODULE_MACRO, clang::serialization::PP_TOKEN, clang::serialization::PPD_ENTITIES_OFFSETS, clang::serialization::PPD_INCLUSION_DIRECTIVE, clang::serialization::PPD_MACRO_DEFINITION, clang::serialization::PPD_MACRO_EXPANSION, clang::serialization::PPD_SKIPPED_RANGES, clang::serialization::PREPROCESSOR_OPTIONS, RECORD, clang::serialization::REFERENCED_SELECTOR_POOL, clang::serialization::SELECTOR_OFFSETS, clang::serialization::SEMA_DECL_REFS, clang::serialization::SIGNATURE, clang::serialization::SM_SLOC_BUFFER_BLOB, clang::serialization::SM_SLOC_BUFFER_BLOB_COMPRESSED, clang::serialization::SM_SLOC_BUFFER_ENTRY, clang::serialization::SM_SLOC_EXPANSION_ENTRY, clang::serialization::SM_SLOC_FILE_ENTRY, clang::serialization::SOURCE_LOCATION_OFFSETS, clang::serialization::SOURCE_LOCATION_PRELOADS, clang::serialization::SOURCE_MANAGER_LINE_TABLE, clang::serialization::SPECIAL_TYPES, clang::serialization::STATISTICS, clang::serialization::STMT_ATTRIBUTED, clang::serialization::STMT_BREAK, clang::serialization::STMT_CASE, clang::serialization::STMT_COMPOUND, clang::serialization::STMT_CONTINUE, clang::serialization::STMT_CXX_CATCH, clang::serialization::STMT_CXX_FOR_RANGE, clang::serialization::STMT_CXX_TRY, clang::serialization::STMT_DECL, clang::serialization::STMT_DEFAULT, clang::serialization::STMT_DO, clang::serialization::STMT_FOR, clang::serialization::STMT_GCCASM, clang::serialization::STMT_GOTO, clang::serialization::STMT_IF, clang::serialization::STMT_INDIRECT_GOTO, clang::serialization::STMT_LABEL, clang::serialization::STMT_MSASM, clang::serialization::STMT_NULL, clang::serialization::STMT_NULL_PTR, clang::serialization::STMT_OBJC_AT_SYNCHRONIZED, clang::serialization::STMT_OBJC_AT_THROW, clang::serialization::STMT_OBJC_AT_TRY, clang::serialization::STMT_OBJC_CATCH, clang::serialization::STMT_OBJC_FINALLY, clang::serialization::STMT_OBJC_FOR_COLLECTION, clang::serialization::STMT_REF_PTR, clang::serialization::STMT_RETURN, clang::serialization::STMT_STOP, clang::serialization::STMT_SWITCH, clang::serialization::STMT_WHILE, clang::serialization::SUBMODULE_CONFIG_MACRO, clang::serialization::SUBMODULE_CONFLICT, clang::serialization::SUBMODULE_DEFINITION, clang::serialization::SUBMODULE_EXCLUDED_HEADER, clang::serialization::SUBMODULE_EXPORT_AS, clang::serialization::SUBMODULE_EXPORTS, clang::serialization::SUBMODULE_HEADER, clang::serialization::SUBMODULE_IMPORTS, clang::serialization::SUBMODULE_INITIALIZERS, clang::serialization::SUBMODULE_LINK_LIBRARY, clang::serialization::SUBMODULE_METADATA, clang::serialization::SUBMODULE_PRIVATE_HEADER, clang::serialization::SUBMODULE_PRIVATE_TEXTUAL_HEADER, clang::serialization::SUBMODULE_REQUIRES, clang::serialization::SUBMODULE_TEXTUAL_HEADER, clang::serialization::SUBMODULE_TOPHEADER, clang::serialization::SUBMODULE_UMBRELLA_DIR, clang::serialization::SUBMODULE_UMBRELLA_HEADER, clang::serialization::TARGET_OPTIONS, clang::serialization::TENTATIVE_DEFINITIONS, clang::serialization::TU_UPDATE_LEXICAL, clang::serialization::TYPE_ADJUSTED, clang::serialization::TYPE_ATOMIC, clang::serialization::TYPE_ATTRIBUTED, clang::serialization::TYPE_AUTO, clang::serialization::TYPE_BLOCK_POINTER, clang::serialization::TYPE_COMPLEX, clang::serialization::TYPE_CONSTANT_ARRAY, clang::serialization::TYPE_DECAYED, clang::serialization::TYPE_DECLTYPE, clang::serialization::TYPE_DEPENDENT_NAME, clang::serialization::TYPE_DEPENDENT_SIZED_ARRAY, clang::serialization::TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION, clang::serialization::TYPE_ELABORATED, clang::serialization::TYPE_ENUM, clang::serialization::TYPE_EXT_QUAL, clang::serialization::TYPE_EXT_VECTOR, clang::serialization::TYPE_FUNCTION_NO_PROTO, clang::serialization::TYPE_FUNCTION_PROTO, clang::serialization::TYPE_INCOMPLETE_ARRAY, clang::serialization::TYPE_INJECTED_CLASS_NAME, clang::serialization::TYPE_LVALUE_REFERENCE, clang::serialization::TYPE_MEMBER_POINTER, clang::serialization::TYPE_OBJC_INTERFACE, clang::serialization::TYPE_OBJC_OBJECT, clang::serialization::TYPE_OBJC_OBJECT_POINTER, clang::serialization::TYPE_OBJC_TYPE_PARAM, clang::serialization::TYPE_OFFSET, clang::serialization::TYPE_PACK_EXPANSION, clang::serialization::TYPE_PAREN, clang::serialization::TYPE_POINTER, clang::serialization::TYPE_RECORD, clang::serialization::TYPE_RVALUE_REFERENCE, clang::serialization::TYPE_SUBST_TEMPLATE_TYPE_PARM, clang::serialization::TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK, clang::serialization::TYPE_TEMPLATE_SPECIALIZATION, clang::serialization::TYPE_TEMPLATE_TYPE_PARM, clang::serialization::TYPE_TYPEDEF, clang::serialization::TYPE_TYPEOF, clang::serialization::TYPE_TYPEOF_EXPR, clang::serialization::TYPE_UNARY_TRANSFORM, clang::serialization::TYPE_UNRESOLVED_USING, clang::serialization::TYPE_VARIABLE_ARRAY, clang::serialization::TYPE_VECTOR, clang::serialization::UNDEFINED_BUT_USED, clang::serialization::UNUSED_FILESCOPED_DECLS, clang::serialization::UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES, clang::serialization::UPDATE_VISIBLE, clang::serialization::VTABLE_USES, and clang::serialization::WEAK_UNDECLARED_IDENTIFIERS.

◆ adjustFilenameForRelocatableAST()

static const char* adjustFilenameForRelocatableAST ( const char *  Filename,
StringRef  BaseDir 
)
static

Adjusts the given filename to only write out the portion of the filename that is not part of the system root directory.

Parameters
Filenamethe file name to adjust.
BaseDirWhen non-NULL, the PCH file is a relocatable AST file and the returned filename will be adjusted by this root directory.
Returns
either the original filename (if it needs no adjustment) or the adjusted filename (which points into the Filename parameter).

Definition at line 1358 of file ASTWriter.cpp.

References Filename, and clang::prec::Shift.

Referenced by clang::ASTWriter::PreparePathForOutput().

◆ bytes() [1/2]

template<typename T , typename Allocator >
static StringRef bytes ( const std::vector< T, Allocator > &  v)
static

◆ bytes() [2/2]

template<typename T >
static StringRef bytes ( const SmallVectorImpl< T > &  v)
static

Definition at line 127 of file ASTWriter.cpp.

◆ cleanPathForOutput()

static bool cleanPathForOutput ( FileManager FileMgr,
SmallVectorImpl< char > &  Path 
)
static

Prepares a path for being written to an AST file by converting it to an absolute path and removing nested '.

/'s.

Returns
true if the path was changed.

Definition at line 1341 of file ASTWriter.cpp.

References clang::FileManager::makeAbsolutePath().

Referenced by clang::ASTWriter::PreparePathForOutput().

◆ CreateSLocBufferAbbrev()

static unsigned CreateSLocBufferAbbrev ( llvm::BitstreamWriter &  Stream)
static

Create an abbreviation for the SLocEntry that refers to a buffer.

Definition at line 1891 of file ASTWriter.cpp.

References clang::serialization::SM_SLOC_BUFFER_ENTRY.

◆ CreateSLocBufferBlobAbbrev()

static unsigned CreateSLocBufferBlobAbbrev ( llvm::BitstreamWriter &  Stream,
bool  Compressed 
)
static

Create an abbreviation for the SLocEntry that refers to a buffer's blob.

Definition at line 1906 of file ASTWriter.cpp.

References clang::serialization::SM_SLOC_BUFFER_BLOB, and clang::serialization::SM_SLOC_BUFFER_BLOB_COMPRESSED.

◆ CreateSLocExpansionAbbrev()

static unsigned CreateSLocExpansionAbbrev ( llvm::BitstreamWriter &  Stream)
static

◆ CreateSLocFileAbbrev()

static unsigned CreateSLocFileAbbrev ( llvm::BitstreamWriter &  Stream)
static

Create an abbreviation for the SLocEntry that refers to a file.

Definition at line 1872 of file ASTWriter.cpp.

References clang::serialization::SM_SLOC_FILE_ENTRY.

◆ emitBlob()

static void emitBlob ( llvm::BitstreamWriter &  Stream,
StringRef  Blob,
unsigned  SLocBufferBlobCompressedAbbrv,
unsigned  SLocBufferBlobAbbrv 
)
static

Definition at line 2203 of file ASTWriter.cpp.

References clang::Error.

◆ EmitBlockID()

static void EmitBlockID ( unsigned  ID,
const char *  Name,
llvm::BitstreamWriter &  Stream,
ASTWriter::RecordDataImpl Record 
)
static

Definition at line 920 of file ASTWriter.cpp.

◆ EmitCXXBaseSpecifiers()

static uint64_t EmitCXXBaseSpecifiers ( ASTWriter W,
ArrayRef< CXXBaseSpecifier Bases 
)
static

◆ EmitCXXCtorInitializers()

static uint64_t EmitCXXCtorInitializers ( ASTWriter W,
ArrayRef< CXXCtorInitializer *>  CtorInits 
)
static

◆ EmitRecordID()

static void EmitRecordID ( unsigned  ID,
const char *  Name,
llvm::BitstreamWriter &  Stream,
ASTWriter::RecordDataImpl Record 
)
static

Definition at line 936 of file ASTWriter.cpp.

◆ getDeclForLocalLookup()

static NamedDecl* getDeclForLocalLookup ( const LangOptions LangOpts,
NamedDecl D 
)
static

Determine the declaration that should be put into the name lookup table to represent the given declaration in this module.

This is usually D itself, but if D was imported and merged into a local declaration, we want the most recent local declaration instead. The chosen declaration will be the most recent declaration in any module that imports this one.

Definition at line 3535 of file ASTWriter.cpp.

References clang::IdentifierResolver::begin(), clang::serialization::ComputeHash(), clang::frontend::CPlusPlus, clang::IdentifierResolver::end(), clang::First, clang::Decl::getCanonicalDecl(), clang::Decl::getDeclContext(), clang::ASTWriter::getDeclID(), clang::IdentifierInfo::getFETokenInfo(), clang::Preprocessor::getIdentifierTable(), clang::ASTWriter::getLangOpts(), clang::Preprocessor::getLangOpts(), clang::IdentifierInfo::getLength(), clang::ASTWriter::getMacroDirectivesOffset(), clang::IdentifierInfo::getName(), clang::IdentifierInfo::getNameStart(), clang::IdentifierInfo::getObjCOrBuiltinID(), clang::Decl::getPreviousDecl(), clang::DeclContext::getRedeclContext(), clang::IdentifierInfo::hasRevertedBuiltin(), clang::IdentifierInfo::hasRevertedTokenIDToIdentifier(), clang::serialization::IDENTIFIER_OFFSET, clang::serialization::IDENTIFIER_TABLE, clang::IdentifierInfo::isCPlusPlusOperatorKeyword(), clang::IdentifierInfo::isExtensionToken(), clang::Decl::isFromASTFile(), isInterestingIdentifier(), clang::IdentifierInfo::isPoisoned(), and clang::ASTWriter::SetIdentifierOffset().

◆ getNumberOfModules()

static unsigned getNumberOfModules ( Module Mod)
static

Compute the number of modules within the given tree (including the given module).

Definition at line 2807 of file ASTWriter.cpp.

References clang::Module::ConfigMacrosExhaustive, clang::Preprocessor::getFileManager(), clang::Module::getTopHeaders(), clang::Module::getUmbrellaDir(), clang::Module::getUmbrellaHeader(), clang::Module::Headers, clang::Module::HK_Excluded, clang::Module::HK_Normal, clang::Module::HK_Private, clang::Module::HK_PrivateTextual, clang::Module::HK_Textual, clang::Module::Imports, clang::Module::InferExplicitSubmodules, clang::Module::InferExportWildcard, clang::Module::InferSubmodules, clang::Module::IsExplicit, clang::Module::IsExternC, clang::Module::IsFramework, clang::Module::IsSystem, clang::Module::Kind, clang::Module::ModuleMapIsPrivate, clang::Module::Name, clang::serialization::NUM_PREDEF_SUBMODULE_IDS, clang::Module::Parent, clang::Module::Requirements, clang::Module::submodule_begin(), clang::serialization::SUBMODULE_BLOCK_ID, clang::serialization::SUBMODULE_CONFIG_MACRO, clang::serialization::SUBMODULE_CONFLICT, clang::serialization::SUBMODULE_DEFINITION, clang::Module::submodule_end(), clang::serialization::SUBMODULE_EXCLUDED_HEADER, clang::serialization::SUBMODULE_EXPORT_AS, clang::serialization::SUBMODULE_HEADER, clang::serialization::SUBMODULE_LINK_LIBRARY, clang::serialization::SUBMODULE_METADATA, clang::serialization::SUBMODULE_PRIVATE_HEADER, clang::serialization::SUBMODULE_PRIVATE_TEXTUAL_HEADER, clang::serialization::SUBMODULE_REQUIRES, clang::serialization::SUBMODULE_TEXTUAL_HEADER, clang::serialization::SUBMODULE_TOPHEADER, clang::serialization::SUBMODULE_UMBRELLA_DIR, and clang::serialization::SUBMODULE_UMBRELLA_HEADER.

◆ isImportedDeclContext()

static bool isImportedDeclContext ( ASTReader Chain,
const Decl D 
)
static

◆ shouldIgnoreMacro()

static bool shouldIgnoreMacro ( MacroDirective MD,
bool  IsModule,
const Preprocessor PP 
)
static