clang
3.9.0
|
#include "clang/Serialization/ASTWriter.h"
#include "clang/Serialization/ModuleFileExtension.h"
#include "ASTCommon.h"
#include "ASTReaderInternals.h"
#include "MultiOnDiskHashTable.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclContextInternals.h"
#include "clang/AST/DeclFriend.h"
#include "clang/AST/DeclLookups.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/Type.h"
#include "clang/AST/TypeLocVisitor.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/FileSystemStatCache.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/SourceManagerInternals.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Basic/Version.h"
#include "clang/Basic/VersionTuple.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/MacroInfo.h"
#include "clang/Lex/PreprocessingRecord.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Lex/PreprocessorOptions.h"
#include "clang/Sema/IdentifierResolver.h"
#include "clang/Sema/Sema.h"
#include "clang/Serialization/ASTReader.h"
#include "clang/Serialization/SerializationDiagnostic.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Bitcode/BitstreamWriter.h"
#include "llvm/Support/Compression.h"
#include "llvm/Support/EndianStream.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/OnDiskHashTable.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Process.h"
#include <algorithm>
#include <cstdio>
#include <string.h>
#include <utility>
#include "clang/AST/TypeNodes.def"
#include "clang/AST/TypeLocNodes.def"
#include "clang/Basic/LangOptions.def"
#include "clang/Basic/Sanitizers.def"
#include "clang/Basic/DiagnosticOptions.def"
#include "clang/Basic/OpenCLExtensions.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 | 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)); |
#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 | OPENCLEXT(nm) Record.push_back(Opts.nm); |
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 ASTFileSignature | getSignature () |
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 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 NamedDecl * | getDeclForLocalLookup (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) |
#define ABSTRACT_TYPE | ( | Class, | |
Base | |||
) |
Definition at line 127 of file ASTWriter.cpp.
#define ABSTRACT_TYPE | ( | Class, | |
Base | |||
) |
Definition at line 127 of file ASTWriter.cpp.
#define ABSTRACT_TYPELOC | ( | CLASS, | |
PARENT | |||
) |
Definition at line 493 of file ASTWriter.cpp.
#define BLOCK | ( | X | ) | EmitBlockID(X ## _ID, #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 ENUM_LANGOPT | ( | Name, | |
Type, | |||
Bits, | |||
Default, | |||
Description | |||
) | Record.push_back(static_cast<unsigned>(LangOpts.get##Name())); |
#define LANGOPT | ( | Name, | |
Bits, | |||
Default, | |||
Description | |||
) | Record.push_back(LangOpts.Name); |
#define OPENCLEXT | ( | nm | ) | Record.push_back(Opts.nm); |
#define RECORD | ( | X | ) | EmitRecordID(X, #X, Stream, Record) |
Referenced by AddStmtsExprs().
#define RECORD | ( | X | ) | EmitRecordID(X, #X, Stream, Record) |
#define SANITIZER | ( | NAME, | |
ID | |||
) | Record.push_back(LangOpts.Sanitize.has(SanitizerKind::ID)); |
Definition at line 126 of file ASTWriter.cpp.
Definition at line 126 of file ASTWriter.cpp.
Definition at line 494 of file ASTWriter.cpp.
|
static |
Definition at line 235 of file ASTWriter.cpp.
References clang::ASTRecordWriter::AddDeclRef(), clang::ASTRecordWriter::AddStmt(), clang::ASTRecordWriter::AddTypeRef(), clang::EST_ComputedNoexcept, clang::EST_Dynamic, clang::EST_Unevaluated, clang::EST_Uninstantiated, clang::FunctionProtoType::getExceptionSpecDecl(), clang::FunctionProtoType::getExceptionSpecTemplate(), clang::FunctionProtoType::getExceptionSpecType(), clang::FunctionProtoType::getExceptionType(), clang::FunctionProtoType::getNoexceptExpr(), clang::FunctionProtoType::getNumExceptions(), I, and clang::ASTRecordWriter::push_back().
|
static |
Definition at line 4143 of file ASTWriter.cpp.
References clang::ASTWriter::AddDeclRef(), E, and I.
|
static |
Definition at line 777 of file ASTWriter.cpp.
References 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, RECORD, 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, and clang::serialization::STMT_WHILE.
|
static |
Adjusts the given filename to only write out the portion of the filename that is not part of the system root directory.
Filename | the file name to adjust. |
BaseDir | When non-NULL, the PCH file is a relocatable AST file and the returned filename will be adjusted by this root directory. |
Filename
parameter). Definition at line 1178 of file ASTWriter.cpp.
References Filename.
Referenced by clang::ASTWriter::PreparePathForOutput().
|
static |
Definition at line 69 of file ASTWriter.cpp.
Referenced by clang::Sema::BuildObjCBoxedExpr(), bytesSincePreviousTabOrLineBegin(), clang::driver::tools::Clang::ConstructJob(), clang::ASTReader::getMemoryBufferSizes(), clang::LLVM_ALIGNAS(), operator new(), and clang::PreprocessedEntity::operator new().
|
static |
Definition at line 76 of file ASTWriter.cpp.
|
static |
Prepares a path for being written to an AST file by converting it to an absolute path and removing nested '.
/'s.
true
if the path was changed. Definition at line 1161 of file ASTWriter.cpp.
References clang::FileManager::makeAbsolutePath().
Referenced by clang::ASTWriter::PreparePathForOutput().
|
static |
Create an abbreviation for the SLocEntry that refers to a buffer.
Definition at line 1660 of file ASTWriter.cpp.
References clang::serialization::SM_SLOC_BUFFER_ENTRY.
|
static |
Create an abbreviation for the SLocEntry that refers to a buffer's blob.
Definition at line 1675 of file ASTWriter.cpp.
References clang::serialization::SM_SLOC_BUFFER_BLOB, and clang::serialization::SM_SLOC_BUFFER_BLOB_COMPRESSED.
|
static |
Create an abbreviation for the SLocEntry that refers to a macro expansion.
Definition at line 1690 of file ASTWriter.cpp.
References clang::serialization::SM_SLOC_EXPANSION_ENTRY.
|
static |
Create an abbreviation for the SLocEntry that refers to a file.
Definition at line 1641 of file ASTWriter.cpp.
References clang::serialization::SM_SLOC_FILE_ENTRY.
|
static |
Definition at line 751 of file ASTWriter.cpp.
|
static |
Definition at line 5410 of file ASTWriter.cpp.
References clang::ASTRecordWriter::AddCXXBaseSpecifier(), clang::serialization::DECL_CXX_BASE_SPECIFIERS, clang::ASTRecordWriter::Emit(), and clang::ASTRecordWriter::push_back().
Referenced by clang::ASTRecordWriter::AddCXXBaseSpecifiers().
|
static |
Definition at line 5428 of file ASTWriter.cpp.
References clang::ASTRecordWriter::AddDeclRef(), clang::ASTRecordWriter::AddSourceLocation(), clang::ASTRecordWriter::AddStmt(), clang::ASTRecordWriter::AddTypeSourceInfo(), clang::serialization::CTOR_INITIALIZER_BASE, clang::serialization::CTOR_INITIALIZER_DELEGATING, clang::serialization::CTOR_INITIALIZER_INDIRECT_MEMBER, clang::serialization::CTOR_INITIALIZER_MEMBER, clang::serialization::DECL_CXX_CTOR_INITIALIZERS, clang::ASTRecordWriter::Emit(), and clang::ASTRecordWriter::push_back().
Referenced by clang::ASTRecordWriter::AddCXXCtorInitializers().
|
static |
Definition at line 767 of file ASTWriter.cpp.
|
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 3102 of file ASTWriter.cpp.
Compute the number of modules within the given tree (including the given module).
Definition at line 2439 of file ASTWriter.cpp.
References clang::Module::submodule_begin(), and clang::Module::submodule_end().
|
static |
Definition at line 1214 of file ASTWriter.cpp.
References S.
Definition at line 5657 of file ASTWriter.cpp.
|
static |