clang API Documentation
#include "clang/Serialization/ASTReader.h"
#include "ASTCommon.h"
#include "ASTReaderInternals.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/NestedNameSpecifier.h"
#include "clang/AST/Type.h"
#include "clang/AST/TypeLocVisitor.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/FileManager.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/Frontend/Utils.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/Scope.h"
#include "clang/Sema/Sema.h"
#include "clang/Serialization/ASTDeserializationListener.h"
#include "clang/Serialization/GlobalModuleIndex.h"
#include "clang/Serialization/ModuleManager.h"
#include "clang/Serialization/SerializationDiagnostic.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Bitcode/BitstreamReader.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cstdio>
#include <iterator>
#include <system_error>
#include "clang/Basic/LangOptions.def"
#include "clang/Basic/Sanitizers.def"
#include "clang/Basic/DiagnosticOptions.def"
#include "clang/AST/TypeLocNodes.def"
#include "clang/Basic/OpenCLExtensions.def"
Go to the source code of this file.
Classes | |
struct | clang::ASTReader::ModuleMacroInfo |
class | clang::TypeLocReader |
class | clang::ASTIdentifierIterator |
An identifier-lookup iterator that enumerates all of the identifiers stored within a set of AST files. More... | |
class | clang::serialization::ReadMethodPoolVisitor |
Namespaces | |
namespace | clang |
namespace | clang::serialization |
Defines | |
#define | LANGOPT(Name, Bits, Default, Description) |
#define | VALUE_LANGOPT(Name, Bits, Default, Description) |
#define | ENUM_LANGOPT(Name, Type, Bits, Default, Description) |
#define | COMPATIBLE_LANGOPT(Name, Bits, Default, Description) |
#define | COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description) |
#define | BENIGN_LANGOPT(Name, Bits, Default, Description) |
#define | BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) |
#define | CHECK_TARGET_OPT(Field, Name) |
#define | LANGOPT(Name, Bits, Default, Description) LangOpts.Name = Record[Idx++]; |
#define | ENUM_LANGOPT(Name, Type, Bits, Default, Description) LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++])); |
#define | SANITIZER(NAME, ID) LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]); |
#define | DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++]; |
#define | ENUM_DIAGOPT(Name, Type, Bits, Default) DiagOpts->set##Name(static_cast<Type>(Record[Idx++])); |
#define | ABSTRACT_TYPELOC(CLASS, PARENT) |
#define | TYPELOC(CLASS, PARENT) void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc); |
#define | OPENCLEXT(nm) SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++]; |
Functions | |
static bool | checkLanguageOptions (const LangOptions &LangOpts, const LangOptions &ExistingLangOpts, DiagnosticsEngine *Diags, bool AllowCompatibleDifferences=true) |
Compare the given set of language options against an existing set of language options. | |
static bool | checkTargetOptions (const TargetOptions &TargetOpts, const TargetOptions &ExistingTargetOpts, DiagnosticsEngine *Diags) |
Compare the given set of target options against an existing set of target options. | |
static bool | checkDiagnosticGroupMappings (DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool Complain) |
static bool | isExtHandlingFromDiagsError (DiagnosticsEngine &Diags) |
static bool | checkDiagnosticMappings (DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) |
static void | collectMacroDefinitions (const PreprocessorOptions &PPOpts, MacroDefinitionsMap &Macros, SmallVectorImpl< StringRef > *MacroNames=nullptr) |
Collect the macro definitions provided by the given preprocessor options. | |
static bool | checkPreprocessorOptions (const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts) |
Check the preprocessor options deserialized from the control block against the preprocessor options in an existing preprocessor. | |
static bool | isInterestingIdentifier (IdentifierInfo &II) |
Whether the given identifier is "interesting". | |
static std::string | resolveFileRelativeToOriginalDir (const std::string &Filename, const std::string &OriginalDir, const std::string &CurrDir) |
If a header file is not found at the path that we expect it to be and the PCH file was moved from its original location, try to resolve the file by assuming that header+PCH were moved together and the header is in the same place relative to the PCH. | |
static bool | areDefinedInSystemModules (MacroInfo *PrevMI, MacroInfo *NewMI, Module *NewOwner, ASTReader &Reader) |
For the given macro definitions, check if they are both in system modules. | |
static void | moveMethodToBackOfGlobalList (Sema &S, ObjCMethodDecl *Method) |
Move the given method to the back of the global list of methods. | |
static void | updateModuleTimestamp (ModuleFile &MF) |
static ASTFileSignature | readASTFileSignature (llvm::BitstreamReader &StreamFile) |
static bool | SkipCursorToBlock (BitstreamCursor &Cursor, unsigned BlockID) |
Given a cursor at the start of an AST file, scan ahead and drop the cursor into the start of the given block ID, returning false on success and true on failure. | |
static ModuleFile * | getDefinitiveModuleFileFor (const DeclContext *DC, ASTReader &Reader) |
Retrieve the "definitive" module file for the definition of the given declaration context, if there is one. | |
static void | PassObjCImplDeclToConsumer (ObjCImplDecl *ImplD, ASTConsumer *Consumer) |
Under non-PCH compilation the consumer receives the objc methods before receiving the implementation, and codegen depends on this. We simulate this by deserializing and passing to consumer the methods of the implementation before passing the deserialized implementation decl. | |
template<typename Key , typename ModuleFile , unsigned InitialCapacity> | |
static void | dumpModuleIDMap (StringRef Name, const ContinuousRangeMap< Key, ModuleFile *, InitialCapacity > &Map) |
static void | addMethodsToPool (Sema &S, ArrayRef< ObjCMethodDecl * > Methods, ObjCMethodList &List) |
Add the given set of methods to the method list. |
#define ABSTRACT_TYPELOC | ( | CLASS, | |
PARENT | |||
) |
Definition at line 5650 of file ASTReader.cpp.
#define BENIGN_ENUM_LANGOPT | ( | Name, | |
Type, | |||
Bits, | |||
Default, | |||
Description | |||
) |
#define BENIGN_LANGOPT | ( | Name, | |
Bits, | |||
Default, | |||
Description | |||
) |
#define CHECK_TARGET_OPT | ( | Field, | |
Name | |||
) |
if (TargetOpts.Field != ExistingTargetOpts.Field) { \ if (Diags) \ Diags->Report(diag::err_pch_targetopt_mismatch) \ << Name << TargetOpts.Field << ExistingTargetOpts.Field; \ return true; \ }
Referenced by checkTargetOptions().
#define COMPATIBLE_ENUM_LANGOPT | ( | Name, | |
Bits, | |||
Default, | |||
Description | |||
) |
if (!AllowCompatibleDifferences) \
ENUM_LANGOPT(Name, Bits, Default, Description)
#define COMPATIBLE_LANGOPT | ( | Name, | |
Bits, | |||
Default, | |||
Description | |||
) |
if (!AllowCompatibleDifferences) \
LANGOPT(Name, Bits, Default, Description)
#define ENUM_DIAGOPT | ( | Name, | |
Type, | |||
Bits, | |||
Default | |||
) | DiagOpts->set##Name(static_cast<Type>(Record[Idx++])); |
#define ENUM_LANGOPT | ( | Name, | |
Type, | |||
Bits, | |||
Default, | |||
Description | |||
) |
if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) { \ if (Diags) \ Diags->Report(diag::err_pch_langopt_value_mismatch) \ << Description; \ return true; \ }
#define ENUM_LANGOPT | ( | Name, | |
Type, | |||
Bits, | |||
Default, | |||
Description | |||
) | LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++])); |
#define LANGOPT | ( | Name, | |
Bits, | |||
Default, | |||
Description | |||
) |
if (ExistingLangOpts.Name != LangOpts.Name) { \ if (Diags) \ Diags->Report(diag::err_pch_langopt_mismatch) \ << Description << LangOpts.Name << ExistingLangOpts.Name; \ return true; \ }
#define OPENCLEXT | ( | nm | ) | SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++]; |
#define SANITIZER | ( | NAME, | |
ID | |||
) | LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]); |
Definition at line 5651 of file ASTReader.cpp.
#define VALUE_LANGOPT | ( | Name, | |
Bits, | |||
Default, | |||
Description | |||
) |
if (ExistingLangOpts.Name != LangOpts.Name) { \ if (Diags) \ Diags->Report(diag::err_pch_langopt_value_mismatch) \ << Description; \ return true; \ }
static void addMethodsToPool | ( | Sema & | S, |
ArrayRef< ObjCMethodDecl * > | Methods, | ||
ObjCMethodList & | List | ||
) | [static] |
Add the given set of methods to the method list.
Definition at line 7096 of file ASTReader.cpp.
References clang::Sema::addMethodToGlobalList().
Referenced by clang::ASTReader::ReadMethodPool().
static bool areDefinedInSystemModules | ( | MacroInfo * | PrevMI, |
MacroInfo * | NewMI, | ||
Module * | NewOwner, | ||
ASTReader & | Reader | ||
) | [static] |
For the given macro definitions, check if they are both in system modules.
Definition at line 1894 of file ASTReader.cpp.
References clang::MacroInfo::getDefinitionLoc(), clang::MacroInfo::getOwningModuleID(), clang::ASTReader::getSourceManager(), clang::ASTReader::getSubmodule(), clang::SourceManager::isInSystemHeader(), and clang::Module::IsSystem.
Referenced by clang::ASTReader::installImportedMacro().
static bool checkDiagnosticGroupMappings | ( | DiagnosticsEngine & | StoredDiags, |
DiagnosticsEngine & | Diags, | ||
bool | Complain | ||
) | [static] |
Definition at line 318 of file ASTReader.cpp.
References clang::DiagnosticsEngine::Error, clang::DiagnosticsEngine::getDiagnosticIDs(), clang::DiagnosticsEngine::getDiagnosticLevel(), and clang::DiagnosticsEngine::Report().
Referenced by checkDiagnosticMappings().
static bool checkDiagnosticMappings | ( | DiagnosticsEngine & | StoredDiags, |
DiagnosticsEngine & | Diags, | ||
bool | IsSystem, | ||
bool | Complain | ||
) | [static] |
Definition at line 355 of file ASTReader.cpp.
References checkDiagnosticGroupMappings(), clang::DiagnosticsEngine::getEnableAllWarnings(), clang::DiagnosticsEngine::getSuppressSystemWarnings(), clang::DiagnosticsEngine::getWarningsAsErrors(), isExtHandlingFromDiagsError(), and clang::DiagnosticsEngine::Report().
Referenced by clang::PCHValidator::ReadDiagnosticOptions().
static bool checkLanguageOptions | ( | const LangOptions & | LangOpts, |
const LangOptions & | ExistingLangOpts, | ||
DiagnosticsEngine * | Diags, | ||
bool | AllowCompatibleDifferences = true |
||
) | [static] |
Compare the given set of language options against an existing set of language options.
Diags | If non-NULL, diagnostics will be emitted via this engine. |
AllowCompatibleDifferences | If true, differences between compatible language options will be permitted. |
Definition at line 166 of file ASTReader.cpp.
References clang::CommentOptions::BlockCommandNames, clang::LangOptions::CommentOpts, clang::LangOptions::ObjCRuntime, and clang::DiagnosticsEngine::Report().
Referenced by clang::PCHValidator::ReadLanguageOptions().
static bool checkPreprocessorOptions | ( | const PreprocessorOptions & | PPOpts, |
const PreprocessorOptions & | ExistingPPOpts, | ||
DiagnosticsEngine * | Diags, | ||
FileManager & | FileMgr, | ||
std::string & | SuggestedPredefines, | ||
const LangOptions & | LangOpts | ||
) | [static] |
Check the preprocessor options deserialized from the control block against the preprocessor options in an existing preprocessor.
Diags | If non-null, produce diagnostics for any mismatches incurred. |
Definition at line 472 of file ASTReader.cpp.
References collectMacroDefinitions(), clang::PreprocessorOptions::DetailedRecord, clang::PreprocessorOptions::ImplicitPCHInclude, clang::PreprocessorOptions::Includes, clang::PreprocessorOptions::MacroIncludes, clang::DiagnosticsEngine::Report(), and clang::PreprocessorOptions::UsePredefines.
Referenced by clang::PCHValidator::ReadPreprocessorOptions().
static bool checkTargetOptions | ( | const TargetOptions & | TargetOpts, |
const TargetOptions & | ExistingTargetOpts, | ||
DiagnosticsEngine * | Diags | ||
) | [static] |
Compare the given set of target options against an existing set of target options.
Diags | If non-NULL, diagnostics will be emitted via this engine. |
Definition at line 230 of file ASTReader.cpp.
References CHECK_TARGET_OPT, clang::TargetOptions::FeaturesAsWritten, and clang::DiagnosticsEngine::Report().
Referenced by clang::PCHValidator::ReadTargetOptions().
static void collectMacroDefinitions | ( | const PreprocessorOptions & | PPOpts, |
MacroDefinitionsMap & | Macros, | ||
SmallVectorImpl< StringRef > * | MacroNames = nullptr |
||
) | [static] |
Collect the macro definitions provided by the given preprocessor options.
Definition at line 433 of file ASTReader.cpp.
References clang::PreprocessorOptions::Macros.
Referenced by checkPreprocessorOptions().
static void dumpModuleIDMap | ( | StringRef | Name, |
const ContinuousRangeMap< Key, ModuleFile *, InitialCapacity > & | Map | ||
) | [static] |
Definition at line 6837 of file ASTReader.cpp.
Referenced by clang::ASTReader::dump().
static ModuleFile* getDefinitiveModuleFileFor | ( | const DeclContext * | DC, |
ASTReader & | Reader | ||
) | [static] |
Retrieve the "definitive" module file for the definition of the given declaration context, if there is one.
The "definitive" module file is the only place where we need to look to find information about the declarations within the given declaration context. For example, C++ and Objective-C classes, C structs/unions, and Objective-C protocols, categories, and extensions are all defined in a single place in the source code, so they have definitive module files associated with them. C++ namespaces, on the other hand, can have definitions in multiple different module files.
Note: this needs to be kept in sync with ASTWriter::AddedVisibleDecl's NDEBUG checking.
Definition at line 6515 of file ASTReader.cpp.
References clang::serialization::getDefinitiveDeclContext(), and clang::ASTReader::getOwningModuleFile().
Referenced by clang::ASTReader::FindExternalVisibleDeclsByName().
static bool isExtHandlingFromDiagsError | ( | DiagnosticsEngine & | Diags | ) | [static] |
Definition at line 348 of file ASTReader.cpp.
References clang::diag::Error, clang::DiagnosticsEngine::getExtensionHandlingBehavior(), clang::DiagnosticsEngine::getWarningsAsErrors(), and clang::diag::Warning.
Referenced by checkDiagnosticMappings().
static bool isInterestingIdentifier | ( | IdentifierInfo & | II | ) | [static] |
Whether the given identifier is "interesting".
Definition at line 698 of file ASTReader.cpp.
References clang::IdentifierInfo::getFETokenInfo(), clang::IdentifierInfo::getObjCOrBuiltinID(), clang::IdentifierInfo::hadMacroDefinition(), clang::IdentifierInfo::hasRevertedTokenIDToIdentifier(), clang::IdentifierInfo::isExtensionToken(), and clang::IdentifierInfo::isPoisoned().
Referenced by clang::serialization::reader::ASTIdentifierLookupTrait::ReadData().
static void moveMethodToBackOfGlobalList | ( | Sema & | S, |
ObjCMethodDecl * | Method | ||
) | [static] |
Move the given method to the back of the global list of methods.
Definition at line 3430 of file ASTReader.cpp.
References clang::ObjCMethodList::getNext(), clang::ObjCMethodDecl::getSelector(), clang::ObjCMethodDecl::isInstanceMethod(), and clang::Sema::MethodPool.
Referenced by clang::ASTReader::makeNamesVisible().
static void PassObjCImplDeclToConsumer | ( | ObjCImplDecl * | ImplD, |
ASTConsumer * | Consumer | ||
) | [static] |
Under non-PCH compilation the consumer receives the objc methods before receiving the implementation, and codegen depends on this. We simulate this by deserializing and passing to consumer the methods of the implementation before passing the deserialized implementation decl.
Definition at line 6684 of file ASTReader.cpp.
References clang::ASTConsumer::HandleInterestingDecl(), and clang::ObjCContainerDecl::methods().
static ASTFileSignature readASTFileSignature | ( | llvm::BitstreamReader & | StreamFile | ) | [static] |
Definition at line 4083 of file ASTReader.cpp.
References clang::serialization::CONTROL_BLOCK_ID, Record, clang::serialization::SIGNATURE, and SkipCursorToBlock().
static std::string resolveFileRelativeToOriginalDir | ( | const std::string & | Filename, |
const std::string & | OriginalDir, | ||
const std::string & | CurrDir | ||
) | [static] |
If a header file is not found at the path that we expect it to be and the PCH file was moved from its original location, try to resolve the file by assuming that header+PCH were moved together and the header is in the same place relative to the PCH.
Definition at line 1137 of file ASTReader.cpp.
static bool SkipCursorToBlock | ( | BitstreamCursor & | Cursor, |
unsigned | BlockID | ||
) | [static] |
Given a cursor at the start of an AST file, scan ahead and drop the cursor into the start of the given block ID, returning false on success and true on failure.
Definition at line 4056 of file ASTReader.cpp.
References clang::diag::Error, and Record.
Referenced by clang::ASTReader::getOriginalSourceFile(), clang::ASTReader::readASTFileControlBlock(), and readASTFileSignature().
static void updateModuleTimestamp | ( | ModuleFile & | MF | ) | [static] |
Definition at line 3575 of file ASTReader.cpp.
References clang::serialization::ModuleFile::getTimestampFilename().
Referenced by clang::ASTReader::ReadAST().