[NFC] Move DeclID from serialization/ASTBitCodes.h to AST/DeclID.h (#89873)
Previously, the DeclID is defined in serialization/ASTBitCodes.h under clang::serialization namespace. However, actually the DeclID is not purely used in serialization part. The DeclID is already widely used in AST and all around the clang project via classes like `LazyPtrDecl` or calling `ExternalASTSource::getExernalDecl()`. All such uses are via the raw underlying type of `DeclID` as `uint32_t`. This is not pretty good. This patch moves the DeclID class family to a new header `AST/DeclID.h` so that the whole project can use the wrapped class `DeclID`, `GlobalDeclID` and `LocalDeclID` instead of the raw underlying type. This can improve the readability and the type safety.
This commit is contained in:
parent
fd5f06eb6d
commit
c2a98fdeb3
@ -455,7 +455,7 @@ class ASTContext : public RefCountedBase<ASTContext> {
|
||||
/// initialization of another module).
|
||||
struct PerModuleInitializers {
|
||||
llvm::SmallVector<Decl*, 4> Initializers;
|
||||
llvm::SmallVector<Decl::DeclID, 4> LazyInitializers;
|
||||
llvm::SmallVector<DeclID, 4> LazyInitializers;
|
||||
|
||||
void resolve(ASTContext &Ctx);
|
||||
};
|
||||
@ -1059,7 +1059,7 @@ public:
|
||||
/// or an ImportDecl nominating another module that has initializers.
|
||||
void addModuleInitializer(Module *M, Decl *Init);
|
||||
|
||||
void addLazyModuleInitializers(Module *M, ArrayRef<Decl::DeclID> IDs);
|
||||
void addLazyModuleInitializers(Module *M, ArrayRef<DeclID> IDs);
|
||||
|
||||
/// Get the initializations to perform when importing a module, if any.
|
||||
ArrayRef<Decl*> getModuleInitializers(Module *M);
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
|
||||
#include "clang/AST/ASTDumperUtils.h"
|
||||
#include "clang/AST/AttrIterator.h"
|
||||
#include "clang/AST/DeclID.h"
|
||||
#include "clang/AST/DeclarationName.h"
|
||||
#include "clang/AST/SelectorLocationsKind.h"
|
||||
#include "clang/Basic/IdentifierTable.h"
|
||||
@ -239,9 +240,6 @@ public:
|
||||
ModulePrivate
|
||||
};
|
||||
|
||||
/// An ID number that refers to a declaration in an AST file.
|
||||
using DeclID = uint32_t;
|
||||
|
||||
protected:
|
||||
/// The next declaration within the same lexical
|
||||
/// DeclContext. These pointers form the linked list that is
|
||||
|
||||
177
clang/include/clang/AST/DeclID.h
Normal file
177
clang/include/clang/AST/DeclID.h
Normal file
@ -0,0 +1,177 @@
|
||||
//===--- DeclID.h - ID number for deserialized declarations ----*- C++ -*-===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file defines DeclID class family to describe the deserialized
|
||||
// declarations. The DeclID is widely used in AST via LazyDeclPtr, or calls to
|
||||
// `ExternalASTSource::getExternalDecl`. It will be helpful for type safety to
|
||||
// require the use of `DeclID` to explicit.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_CLANG_AST_DECLID_H
|
||||
#define LLVM_CLANG_AST_DECLID_H
|
||||
|
||||
#include "llvm/ADT/iterator.h"
|
||||
|
||||
namespace clang {
|
||||
|
||||
/// Predefined declaration IDs.
|
||||
///
|
||||
/// These declaration IDs correspond to predefined declarations in the AST
|
||||
/// context, such as the NULL declaration ID. Such declarations are never
|
||||
/// actually serialized, since they will be built by the AST context when
|
||||
/// it is created.
|
||||
enum PredefinedDeclIDs {
|
||||
/// The NULL declaration.
|
||||
PREDEF_DECL_NULL_ID = 0,
|
||||
|
||||
/// The translation unit.
|
||||
PREDEF_DECL_TRANSLATION_UNIT_ID = 1,
|
||||
|
||||
/// The Objective-C 'id' type.
|
||||
PREDEF_DECL_OBJC_ID_ID = 2,
|
||||
|
||||
/// The Objective-C 'SEL' type.
|
||||
PREDEF_DECL_OBJC_SEL_ID = 3,
|
||||
|
||||
/// The Objective-C 'Class' type.
|
||||
PREDEF_DECL_OBJC_CLASS_ID = 4,
|
||||
|
||||
/// The Objective-C 'Protocol' type.
|
||||
PREDEF_DECL_OBJC_PROTOCOL_ID = 5,
|
||||
|
||||
/// The signed 128-bit integer type.
|
||||
PREDEF_DECL_INT_128_ID = 6,
|
||||
|
||||
/// The unsigned 128-bit integer type.
|
||||
PREDEF_DECL_UNSIGNED_INT_128_ID = 7,
|
||||
|
||||
/// The internal 'instancetype' typedef.
|
||||
PREDEF_DECL_OBJC_INSTANCETYPE_ID = 8,
|
||||
|
||||
/// The internal '__builtin_va_list' typedef.
|
||||
PREDEF_DECL_BUILTIN_VA_LIST_ID = 9,
|
||||
|
||||
/// The internal '__va_list_tag' struct, if any.
|
||||
PREDEF_DECL_VA_LIST_TAG = 10,
|
||||
|
||||
/// The internal '__builtin_ms_va_list' typedef.
|
||||
PREDEF_DECL_BUILTIN_MS_VA_LIST_ID = 11,
|
||||
|
||||
/// The predeclared '_GUID' struct.
|
||||
PREDEF_DECL_BUILTIN_MS_GUID_ID = 12,
|
||||
|
||||
/// The extern "C" context.
|
||||
PREDEF_DECL_EXTERN_C_CONTEXT_ID = 13,
|
||||
|
||||
/// The internal '__make_integer_seq' template.
|
||||
PREDEF_DECL_MAKE_INTEGER_SEQ_ID = 14,
|
||||
|
||||
/// The internal '__NSConstantString' typedef.
|
||||
PREDEF_DECL_CF_CONSTANT_STRING_ID = 15,
|
||||
|
||||
/// The internal '__NSConstantString' tag type.
|
||||
PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID = 16,
|
||||
|
||||
/// The internal '__type_pack_element' template.
|
||||
PREDEF_DECL_TYPE_PACK_ELEMENT_ID = 17,
|
||||
};
|
||||
|
||||
/// The number of declaration IDs that are predefined.
|
||||
///
|
||||
/// For more information about predefined declarations, see the
|
||||
/// \c PredefinedDeclIDs type and the PREDEF_DECL_*_ID constants.
|
||||
const unsigned int NUM_PREDEF_DECL_IDS = 18;
|
||||
|
||||
/// An ID number that refers to a declaration in an AST file.
|
||||
///
|
||||
/// The ID numbers of declarations are consecutive (in order of
|
||||
/// discovery), with values below NUM_PREDEF_DECL_IDS being reserved.
|
||||
/// At the start of a chain of precompiled headers, declaration ID 1 is
|
||||
/// used for the translation unit declaration.
|
||||
using DeclID = uint32_t;
|
||||
|
||||
class LocalDeclID {
|
||||
public:
|
||||
explicit LocalDeclID(DeclID ID) : ID(ID) {}
|
||||
|
||||
DeclID get() const { return ID; }
|
||||
|
||||
private:
|
||||
DeclID ID;
|
||||
};
|
||||
|
||||
/// Wrapper class for DeclID. This is helpful to not mix the use of LocalDeclID
|
||||
/// and GlobalDeclID to improve the type safety.
|
||||
class GlobalDeclID {
|
||||
public:
|
||||
GlobalDeclID() : ID(PREDEF_DECL_NULL_ID) {}
|
||||
explicit GlobalDeclID(DeclID ID) : ID(ID) {}
|
||||
|
||||
DeclID get() const { return ID; }
|
||||
|
||||
explicit operator DeclID() const { return ID; }
|
||||
|
||||
friend bool operator==(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID == RHS.ID;
|
||||
}
|
||||
friend bool operator!=(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID != RHS.ID;
|
||||
}
|
||||
// We may sort the global decl ID.
|
||||
friend bool operator<(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID < RHS.ID;
|
||||
}
|
||||
friend bool operator>(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID > RHS.ID;
|
||||
}
|
||||
friend bool operator<=(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID <= RHS.ID;
|
||||
}
|
||||
friend bool operator>=(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID >= RHS.ID;
|
||||
}
|
||||
|
||||
private:
|
||||
DeclID ID;
|
||||
};
|
||||
|
||||
/// A helper iterator adaptor to convert the iterators to `SmallVector<DeclID>`
|
||||
/// to the iterators to `SmallVector<GlobalDeclID>`.
|
||||
class GlobalDeclIDIterator
|
||||
: public llvm::iterator_adaptor_base<GlobalDeclIDIterator, const DeclID *,
|
||||
std::forward_iterator_tag,
|
||||
GlobalDeclID> {
|
||||
public:
|
||||
GlobalDeclIDIterator() : iterator_adaptor_base(nullptr) {}
|
||||
|
||||
GlobalDeclIDIterator(const DeclID *ID) : iterator_adaptor_base(ID) {}
|
||||
|
||||
value_type operator*() const { return GlobalDeclID(*I); }
|
||||
|
||||
bool operator==(const GlobalDeclIDIterator &RHS) const { return I == RHS.I; }
|
||||
};
|
||||
|
||||
/// A helper iterator adaptor to convert the iterators to
|
||||
/// `SmallVector<GlobalDeclID>` to the iterators to `SmallVector<DeclID>`.
|
||||
class DeclIDIterator
|
||||
: public llvm::iterator_adaptor_base<DeclIDIterator, const GlobalDeclID *,
|
||||
std::forward_iterator_tag, DeclID> {
|
||||
public:
|
||||
DeclIDIterator() : iterator_adaptor_base(nullptr) {}
|
||||
|
||||
DeclIDIterator(const GlobalDeclID *ID) : iterator_adaptor_base(ID) {}
|
||||
|
||||
value_type operator*() const { return DeclID(*I); }
|
||||
|
||||
bool operator==(const DeclIDIterator &RHS) const { return I == RHS.I; }
|
||||
};
|
||||
|
||||
} // namespace clang
|
||||
|
||||
#endif
|
||||
@ -797,7 +797,7 @@ protected:
|
||||
///
|
||||
/// The first value in the array is the number of specializations/partial
|
||||
/// specializations that follow.
|
||||
Decl::DeclID *LazySpecializations = nullptr;
|
||||
DeclID *LazySpecializations = nullptr;
|
||||
|
||||
/// The set of "injected" template arguments used within this
|
||||
/// template.
|
||||
|
||||
@ -99,7 +99,7 @@ public:
|
||||
/// passes back decl sets as VisibleDeclaration objects.
|
||||
///
|
||||
/// The default implementation of this method is a no-op.
|
||||
virtual Decl *GetExternalDecl(Decl::DeclID ID);
|
||||
virtual Decl *GetExternalDecl(DeclID ID);
|
||||
|
||||
/// Resolve a selector ID into a selector.
|
||||
///
|
||||
@ -579,7 +579,7 @@ using LazyDeclStmtPtr =
|
||||
|
||||
/// A lazy pointer to a declaration.
|
||||
using LazyDeclPtr =
|
||||
LazyOffsetPtr<Decl, Decl::DeclID, &ExternalASTSource::GetExternalDecl>;
|
||||
LazyOffsetPtr<Decl, DeclID, &ExternalASTSource::GetExternalDecl>;
|
||||
|
||||
/// A lazy pointer to a set of CXXCtorInitializers.
|
||||
using LazyCXXCtorInitializersPtr =
|
||||
|
||||
@ -241,7 +241,7 @@ private:
|
||||
|
||||
/// A list of the serialization ID numbers for each of the top-level
|
||||
/// declarations parsed within the precompiled preamble.
|
||||
std::vector<serialization::DeclID> TopLevelDeclsInPreamble;
|
||||
std::vector<DeclID> TopLevelDeclsInPreamble;
|
||||
|
||||
/// Whether we should be caching code-completion results.
|
||||
bool ShouldCacheCodeCompletionResults : 1;
|
||||
|
||||
@ -35,7 +35,7 @@ public:
|
||||
void IdentifierRead(serialization::IdentID ID, IdentifierInfo *II) override;
|
||||
void MacroRead(serialization::MacroID ID, MacroInfo *MI) override;
|
||||
void TypeRead(serialization::TypeIdx Idx, QualType T) override;
|
||||
void DeclRead(serialization::DeclID ID, const Decl *D) override;
|
||||
void DeclRead(DeclID ID, const Decl *D) override;
|
||||
void SelectorRead(serialization::SelectorID iD, Selector Sel) override;
|
||||
void MacroDefinitionRead(serialization::PreprocessedEntityID,
|
||||
MacroDefinitionRecord *MD) override;
|
||||
|
||||
@ -65,7 +65,7 @@ public:
|
||||
|
||||
/// Resolve a declaration ID into a declaration, potentially
|
||||
/// building a new declaration.
|
||||
Decl *GetExternalDecl(Decl::DeclID ID) override;
|
||||
Decl *GetExternalDecl(DeclID ID) override;
|
||||
|
||||
/// Complete the redeclaration chain if it's been extended since the
|
||||
/// previous generation of the AST source.
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
#ifndef LLVM_CLANG_SERIALIZATION_ASTBITCODES_H
|
||||
#define LLVM_CLANG_SERIALIZATION_ASTBITCODES_H
|
||||
|
||||
#include "clang/AST/DeclID.h"
|
||||
#include "clang/AST/DeclarationName.h"
|
||||
#include "clang/AST/Type.h"
|
||||
#include "clang/Basic/IdentifierTable.h"
|
||||
@ -59,92 +60,6 @@ const unsigned VERSION_MINOR = 1;
|
||||
/// and start at 1. 0 is reserved for NULL.
|
||||
using IdentifierID = uint32_t;
|
||||
|
||||
/// An ID number that refers to a declaration in an AST file.
|
||||
///
|
||||
/// The ID numbers of declarations are consecutive (in order of
|
||||
/// discovery), with values below NUM_PREDEF_DECL_IDS being reserved.
|
||||
/// At the start of a chain of precompiled headers, declaration ID 1 is
|
||||
/// used for the translation unit declaration.
|
||||
///
|
||||
/// FIXME: Merge with Decl::DeclID
|
||||
using DeclID = uint32_t;
|
||||
|
||||
class LocalDeclID {
|
||||
public:
|
||||
explicit LocalDeclID(DeclID ID) : ID(ID) {}
|
||||
|
||||
DeclID get() const { return ID; }
|
||||
|
||||
private:
|
||||
DeclID ID;
|
||||
};
|
||||
|
||||
/// Wrapper class for DeclID. This is helpful to not mix the use of LocalDeclID
|
||||
/// and GlobalDeclID to improve the type safety.
|
||||
class GlobalDeclID {
|
||||
public:
|
||||
GlobalDeclID() : ID(0) {}
|
||||
explicit GlobalDeclID(DeclID ID) : ID(ID) {}
|
||||
|
||||
DeclID get() const { return ID; }
|
||||
|
||||
explicit operator DeclID() const { return ID; }
|
||||
|
||||
friend bool operator==(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID == RHS.ID;
|
||||
}
|
||||
friend bool operator!=(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID != RHS.ID;
|
||||
}
|
||||
// We may sort the global decl ID.
|
||||
friend bool operator<(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID < RHS.ID;
|
||||
}
|
||||
friend bool operator>(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID > RHS.ID;
|
||||
}
|
||||
friend bool operator<=(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID <= RHS.ID;
|
||||
}
|
||||
friend bool operator>=(const GlobalDeclID &LHS, const GlobalDeclID &RHS) {
|
||||
return LHS.ID >= RHS.ID;
|
||||
}
|
||||
|
||||
private:
|
||||
DeclID ID;
|
||||
};
|
||||
|
||||
/// A helper iterator adaptor to convert the iterators to `SmallVector<DeclID>`
|
||||
/// to the iterators to `SmallVector<GlobalDeclID>`.
|
||||
class GlobalDeclIDIterator
|
||||
: public llvm::iterator_adaptor_base<GlobalDeclIDIterator, const DeclID *,
|
||||
std::forward_iterator_tag,
|
||||
GlobalDeclID> {
|
||||
public:
|
||||
GlobalDeclIDIterator() : iterator_adaptor_base(nullptr) {}
|
||||
|
||||
GlobalDeclIDIterator(const DeclID *ID) : iterator_adaptor_base(ID) {}
|
||||
|
||||
value_type operator*() const { return GlobalDeclID(*I); }
|
||||
|
||||
bool operator==(const GlobalDeclIDIterator &RHS) const { return I == RHS.I; }
|
||||
};
|
||||
|
||||
/// A helper iterator adaptor to convert the iterators to
|
||||
/// `SmallVector<GlobalDeclID>` to the iterators to `SmallVector<DeclID>`.
|
||||
class DeclIDIterator
|
||||
: public llvm::iterator_adaptor_base<DeclIDIterator, const GlobalDeclID *,
|
||||
std::forward_iterator_tag, DeclID> {
|
||||
public:
|
||||
DeclIDIterator() : iterator_adaptor_base(nullptr) {}
|
||||
|
||||
DeclIDIterator(const GlobalDeclID *ID) : iterator_adaptor_base(ID) {}
|
||||
|
||||
value_type operator*() const { return DeclID(*I); }
|
||||
|
||||
bool operator==(const DeclIDIterator &RHS) const { return I == RHS.I; }
|
||||
};
|
||||
|
||||
/// An ID number that refers to a type in an AST file.
|
||||
///
|
||||
/// The ID of a type is partitioned into two parts: the lower
|
||||
@ -1238,74 +1153,6 @@ enum SpecialTypeIDs {
|
||||
/// The number of special type IDs.
|
||||
const unsigned NumSpecialTypeIDs = 8;
|
||||
|
||||
/// Predefined declaration IDs.
|
||||
///
|
||||
/// These declaration IDs correspond to predefined declarations in the AST
|
||||
/// context, such as the NULL declaration ID. Such declarations are never
|
||||
/// actually serialized, since they will be built by the AST context when
|
||||
/// it is created.
|
||||
enum PredefinedDeclIDs {
|
||||
/// The NULL declaration.
|
||||
PREDEF_DECL_NULL_ID = 0,
|
||||
|
||||
/// The translation unit.
|
||||
PREDEF_DECL_TRANSLATION_UNIT_ID = 1,
|
||||
|
||||
/// The Objective-C 'id' type.
|
||||
PREDEF_DECL_OBJC_ID_ID = 2,
|
||||
|
||||
/// The Objective-C 'SEL' type.
|
||||
PREDEF_DECL_OBJC_SEL_ID = 3,
|
||||
|
||||
/// The Objective-C 'Class' type.
|
||||
PREDEF_DECL_OBJC_CLASS_ID = 4,
|
||||
|
||||
/// The Objective-C 'Protocol' type.
|
||||
PREDEF_DECL_OBJC_PROTOCOL_ID = 5,
|
||||
|
||||
/// The signed 128-bit integer type.
|
||||
PREDEF_DECL_INT_128_ID = 6,
|
||||
|
||||
/// The unsigned 128-bit integer type.
|
||||
PREDEF_DECL_UNSIGNED_INT_128_ID = 7,
|
||||
|
||||
/// The internal 'instancetype' typedef.
|
||||
PREDEF_DECL_OBJC_INSTANCETYPE_ID = 8,
|
||||
|
||||
/// The internal '__builtin_va_list' typedef.
|
||||
PREDEF_DECL_BUILTIN_VA_LIST_ID = 9,
|
||||
|
||||
/// The internal '__va_list_tag' struct, if any.
|
||||
PREDEF_DECL_VA_LIST_TAG = 10,
|
||||
|
||||
/// The internal '__builtin_ms_va_list' typedef.
|
||||
PREDEF_DECL_BUILTIN_MS_VA_LIST_ID = 11,
|
||||
|
||||
/// The predeclared '_GUID' struct.
|
||||
PREDEF_DECL_BUILTIN_MS_GUID_ID = 12,
|
||||
|
||||
/// The extern "C" context.
|
||||
PREDEF_DECL_EXTERN_C_CONTEXT_ID = 13,
|
||||
|
||||
/// The internal '__make_integer_seq' template.
|
||||
PREDEF_DECL_MAKE_INTEGER_SEQ_ID = 14,
|
||||
|
||||
/// The internal '__NSConstantString' typedef.
|
||||
PREDEF_DECL_CF_CONSTANT_STRING_ID = 15,
|
||||
|
||||
/// The internal '__NSConstantString' tag type.
|
||||
PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID = 16,
|
||||
|
||||
/// The internal '__type_pack_element' template.
|
||||
PREDEF_DECL_TYPE_PACK_ELEMENT_ID = 17,
|
||||
};
|
||||
|
||||
/// The number of declaration IDs that are predefined.
|
||||
///
|
||||
/// For more information about predefined declarations, see the
|
||||
/// \c PredefinedDeclIDs type and the PREDEF_DECL_*_ID constants.
|
||||
const unsigned int NUM_PREDEF_DECL_IDS = 18;
|
||||
|
||||
/// Record of updates for a declaration that was modified after
|
||||
/// being deserialized. This can occur within DECLTYPES_BLOCK_ID.
|
||||
const unsigned int DECL_UPDATES = 49;
|
||||
@ -2231,9 +2078,9 @@ template <> struct DenseMapInfo<clang::serialization::DeclarationNameKey> {
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct DenseMapInfo<clang::serialization::GlobalDeclID> {
|
||||
using DeclID = clang::serialization::DeclID;
|
||||
using GlobalDeclID = clang::serialization::GlobalDeclID;
|
||||
template <> struct DenseMapInfo<clang::GlobalDeclID> {
|
||||
using DeclID = clang::DeclID;
|
||||
using GlobalDeclID = clang::GlobalDeclID;
|
||||
|
||||
static GlobalDeclID getEmptyKey() {
|
||||
return GlobalDeclID(DenseMapInfo<DeclID>::getEmptyKey());
|
||||
|
||||
@ -44,7 +44,7 @@ public:
|
||||
/// unqualified.
|
||||
virtual void TypeRead(serialization::TypeIdx Idx, QualType T) { }
|
||||
/// A decl was deserialized from the AST file.
|
||||
virtual void DeclRead(serialization::DeclID ID, const Decl *D) { }
|
||||
virtual void DeclRead(DeclID ID, const Decl *D) {}
|
||||
/// A selector was read from the AST file.
|
||||
virtual void SelectorRead(serialization::SelectorID iD, Selector Sel) {}
|
||||
/// A macro definition was read from the AST file.
|
||||
|
||||
@ -501,10 +501,7 @@ private:
|
||||
/// = I + 1 has already been loaded.
|
||||
llvm::PagedVector<Decl *> DeclsLoaded;
|
||||
|
||||
static_assert(std::is_same_v<serialization::DeclID, Decl::DeclID>);
|
||||
|
||||
using GlobalDeclMapType =
|
||||
ContinuousRangeMap<serialization::GlobalDeclID, ModuleFile *, 4>;
|
||||
using GlobalDeclMapType = ContinuousRangeMap<GlobalDeclID, ModuleFile *, 4>;
|
||||
|
||||
/// Mapping from global declaration IDs to the module in which the
|
||||
/// declaration resides.
|
||||
@ -512,16 +509,15 @@ private:
|
||||
|
||||
using FileOffset = std::pair<ModuleFile *, uint64_t>;
|
||||
using FileOffsetsTy = SmallVector<FileOffset, 2>;
|
||||
using DeclUpdateOffsetsMap =
|
||||
llvm::DenseMap<serialization::GlobalDeclID, FileOffsetsTy>;
|
||||
using DeclUpdateOffsetsMap = llvm::DenseMap<GlobalDeclID, FileOffsetsTy>;
|
||||
|
||||
/// Declarations that have modifications residing in a later file
|
||||
/// in the chain.
|
||||
DeclUpdateOffsetsMap DeclUpdateOffsets;
|
||||
|
||||
using DelayedNamespaceOffsetMapTy = llvm::DenseMap<
|
||||
serialization::GlobalDeclID,
|
||||
std::pair</*LexicalOffset*/ uint64_t, /*VisibleOffset*/ uint64_t>>;
|
||||
using DelayedNamespaceOffsetMapTy =
|
||||
llvm::DenseMap<GlobalDeclID, std::pair</*LexicalOffset*/ uint64_t,
|
||||
/*VisibleOffset*/ uint64_t>>;
|
||||
|
||||
/// Mapping from global declaration IDs to the lexical and visible block
|
||||
/// offset for delayed namespace in reduced BMI.
|
||||
@ -535,13 +531,12 @@ private:
|
||||
|
||||
struct PendingUpdateRecord {
|
||||
Decl *D;
|
||||
serialization::GlobalDeclID ID;
|
||||
GlobalDeclID ID;
|
||||
|
||||
// Whether the declaration was just deserialized.
|
||||
bool JustLoaded;
|
||||
|
||||
PendingUpdateRecord(serialization::GlobalDeclID ID, Decl *D,
|
||||
bool JustLoaded)
|
||||
PendingUpdateRecord(GlobalDeclID ID, Decl *D, bool JustLoaded)
|
||||
: D(D), ID(ID), JustLoaded(JustLoaded) {}
|
||||
};
|
||||
|
||||
@ -594,10 +589,10 @@ private:
|
||||
|
||||
struct FileDeclsInfo {
|
||||
ModuleFile *Mod = nullptr;
|
||||
ArrayRef<serialization::LocalDeclID> Decls;
|
||||
ArrayRef<LocalDeclID> Decls;
|
||||
|
||||
FileDeclsInfo() = default;
|
||||
FileDeclsInfo(ModuleFile *Mod, ArrayRef<serialization::LocalDeclID> Decls)
|
||||
FileDeclsInfo(ModuleFile *Mod, ArrayRef<LocalDeclID> Decls)
|
||||
: Mod(Mod), Decls(Decls) {}
|
||||
};
|
||||
|
||||
@ -608,8 +603,7 @@ private:
|
||||
/// Decl::Kind, DeclID pairs.
|
||||
using unalighed_decl_id_t =
|
||||
llvm::support::detail::packed_endian_specific_integral<
|
||||
serialization::DeclID, llvm::endianness::native,
|
||||
llvm::support::unaligned>;
|
||||
DeclID, llvm::endianness::native, llvm::support::unaligned>;
|
||||
using LexicalContents = ArrayRef<unalighed_decl_id_t>;
|
||||
|
||||
/// Map from a DeclContext to its lexical contents.
|
||||
@ -635,8 +629,7 @@ private:
|
||||
|
||||
/// Updates to the visible declarations of declaration contexts that
|
||||
/// haven't been loaded yet.
|
||||
llvm::DenseMap<serialization::GlobalDeclID, DeclContextVisibleUpdates>
|
||||
PendingVisibleUpdates;
|
||||
llvm::DenseMap<GlobalDeclID, DeclContextVisibleUpdates> PendingVisibleUpdates;
|
||||
|
||||
/// The set of C++ or Objective-C classes that have forward
|
||||
/// declarations that have not yet been linked to their definitions.
|
||||
@ -662,8 +655,7 @@ private:
|
||||
/// Read the record that describes the visible contents of a DC.
|
||||
bool ReadVisibleDeclContextStorage(ModuleFile &M,
|
||||
llvm::BitstreamCursor &Cursor,
|
||||
uint64_t Offset,
|
||||
serialization::GlobalDeclID ID);
|
||||
uint64_t Offset, GlobalDeclID ID);
|
||||
|
||||
/// A vector containing identifiers that have already been
|
||||
/// loaded.
|
||||
@ -816,14 +808,14 @@ private:
|
||||
/// This contains the data loaded from all EAGERLY_DESERIALIZED_DECLS blocks
|
||||
/// in the chain. The referenced declarations are deserialized and passed to
|
||||
/// the consumer eagerly.
|
||||
SmallVector<serialization::GlobalDeclID, 16> EagerlyDeserializedDecls;
|
||||
SmallVector<GlobalDeclID, 16> EagerlyDeserializedDecls;
|
||||
|
||||
/// The IDs of all tentative definitions stored in the chain.
|
||||
///
|
||||
/// Sema keeps track of all tentative definitions in a TU because it has to
|
||||
/// complete them and pass them on to CodeGen. Thus, tentative definitions in
|
||||
/// the PCH chain must be eagerly deserialized.
|
||||
SmallVector<serialization::GlobalDeclID, 16> TentativeDefinitions;
|
||||
SmallVector<GlobalDeclID, 16> TentativeDefinitions;
|
||||
|
||||
/// The IDs of all CXXRecordDecls stored in the chain whose VTables are
|
||||
/// used.
|
||||
@ -831,7 +823,7 @@ private:
|
||||
/// CodeGen has to emit VTables for these records, so they have to be eagerly
|
||||
/// deserialized.
|
||||
struct VTableUse {
|
||||
serialization::GlobalDeclID ID;
|
||||
GlobalDeclID ID;
|
||||
SourceLocation::UIntTy RawLoc;
|
||||
bool Used;
|
||||
};
|
||||
@ -844,7 +836,7 @@ private:
|
||||
/// instantiation where the first value is the ID of the decl and the second
|
||||
/// is the instantiation location.
|
||||
struct PendingInstantiation {
|
||||
serialization::GlobalDeclID ID;
|
||||
GlobalDeclID ID;
|
||||
SourceLocation::UIntTy RawLoc;
|
||||
};
|
||||
SmallVector<PendingInstantiation, 64> PendingInstantiations;
|
||||
@ -857,11 +849,11 @@ private:
|
||||
|
||||
/// A snapshot of Sema's unused file-scoped variable tracking, for
|
||||
/// generating warnings.
|
||||
SmallVector<serialization::GlobalDeclID, 16> UnusedFileScopedDecls;
|
||||
SmallVector<GlobalDeclID, 16> UnusedFileScopedDecls;
|
||||
|
||||
/// A list of all the delegating constructors we've seen, to diagnose
|
||||
/// cycles.
|
||||
SmallVector<serialization::GlobalDeclID, 4> DelegatingCtorDecls;
|
||||
SmallVector<GlobalDeclID, 4> DelegatingCtorDecls;
|
||||
|
||||
/// Method selectors used in a @selector expression. Used for
|
||||
/// implementation of -Wselector.
|
||||
@ -874,7 +866,7 @@ private:
|
||||
/// The IDs of type aliases for ext_vectors that exist in the chain.
|
||||
///
|
||||
/// Used by Sema for finding sugared names for ext_vectors in diagnostics.
|
||||
SmallVector<serialization::GlobalDeclID, 4> ExtVectorDecls;
|
||||
SmallVector<GlobalDeclID, 4> ExtVectorDecls;
|
||||
|
||||
//@}
|
||||
|
||||
@ -885,7 +877,7 @@ private:
|
||||
/// The IDs of all potentially unused typedef names in the chain.
|
||||
///
|
||||
/// Sema tracks these to emit warnings.
|
||||
SmallVector<serialization::GlobalDeclID, 16> UnusedLocalTypedefNameCandidates;
|
||||
SmallVector<GlobalDeclID, 16> UnusedLocalTypedefNameCandidates;
|
||||
|
||||
/// Our current depth in #pragma cuda force_host_device begin/end
|
||||
/// macros.
|
||||
@ -894,7 +886,7 @@ private:
|
||||
/// The IDs of the declarations Sema stores directly.
|
||||
///
|
||||
/// Sema tracks a few important decls, such as namespace std, directly.
|
||||
SmallVector<serialization::GlobalDeclID, 4> SemaDeclRefs;
|
||||
SmallVector<GlobalDeclID, 4> SemaDeclRefs;
|
||||
|
||||
/// The IDs of the types ASTContext stores directly.
|
||||
///
|
||||
@ -905,7 +897,7 @@ private:
|
||||
///
|
||||
/// The AST context tracks a few important decls, currently cudaConfigureCall,
|
||||
/// directly.
|
||||
SmallVector<serialization::GlobalDeclID, 2> CUDASpecialDeclRefs;
|
||||
SmallVector<GlobalDeclID, 2> CUDASpecialDeclRefs;
|
||||
|
||||
/// The floating point pragma option settings.
|
||||
SmallVector<uint64_t, 1> FPPragmaOptions;
|
||||
@ -954,12 +946,12 @@ private:
|
||||
llvm::DenseMap<const Decl *, std::set<std::string>> OpenCLDeclExtMap;
|
||||
|
||||
/// A list of the namespaces we've seen.
|
||||
SmallVector<serialization::GlobalDeclID, 4> KnownNamespaces;
|
||||
SmallVector<GlobalDeclID, 4> KnownNamespaces;
|
||||
|
||||
/// A list of undefined decls with internal linkage followed by the
|
||||
/// SourceLocation of a matching ODR-use.
|
||||
struct UndefinedButUsedDecl {
|
||||
serialization::GlobalDeclID ID;
|
||||
GlobalDeclID ID;
|
||||
SourceLocation::UIntTy RawLoc;
|
||||
};
|
||||
SmallVector<UndefinedButUsedDecl, 8> UndefinedButUsed;
|
||||
@ -974,8 +966,7 @@ private:
|
||||
/// The IDs of all decls to be checked for deferred diags.
|
||||
///
|
||||
/// Sema tracks these to emit deferred diags.
|
||||
llvm::SmallSetVector<serialization::GlobalDeclID, 4>
|
||||
DeclsToCheckForDeferredDiags;
|
||||
llvm::SmallSetVector<GlobalDeclID, 4> DeclsToCheckForDeferredDiags;
|
||||
|
||||
private:
|
||||
struct ImportedSubmodule {
|
||||
@ -1112,7 +1103,7 @@ private:
|
||||
///
|
||||
/// The declarations on the identifier chain for these identifiers will be
|
||||
/// loaded once the recursive loading has completed.
|
||||
llvm::MapVector<IdentifierInfo *, SmallVector<serialization::GlobalDeclID, 4>>
|
||||
llvm::MapVector<IdentifierInfo *, SmallVector<GlobalDeclID, 4>>
|
||||
PendingIdentifierInfos;
|
||||
|
||||
/// The set of lookup results that we have faked in order to support
|
||||
@ -1157,8 +1148,8 @@ private:
|
||||
/// been loaded but its DeclContext was not set yet.
|
||||
struct PendingDeclContextInfo {
|
||||
Decl *D;
|
||||
serialization::GlobalDeclID SemaDC;
|
||||
serialization::GlobalDeclID LexicalDC;
|
||||
GlobalDeclID SemaDC;
|
||||
GlobalDeclID LexicalDC;
|
||||
};
|
||||
|
||||
/// The set of Decls that have been loaded but their DeclContexts are
|
||||
@ -1239,8 +1230,7 @@ private:
|
||||
/// module is loaded.
|
||||
SmallVector<ObjCInterfaceDecl *, 16> ObjCClassesLoaded;
|
||||
|
||||
using KeyDeclsMap =
|
||||
llvm::DenseMap<Decl *, SmallVector<serialization::GlobalDeclID, 2>>;
|
||||
using KeyDeclsMap = llvm::DenseMap<Decl *, SmallVector<GlobalDeclID, 2>>;
|
||||
|
||||
/// A mapping from canonical declarations to the set of global
|
||||
/// declaration IDs for key declaration that have been merged with that
|
||||
@ -1449,7 +1439,7 @@ private:
|
||||
QualType readTypeRecord(unsigned Index);
|
||||
RecordLocation TypeCursorForIndex(unsigned Index);
|
||||
void LoadedDecl(unsigned Index, Decl *D);
|
||||
Decl *ReadDeclRecord(serialization::GlobalDeclID ID);
|
||||
Decl *ReadDeclRecord(GlobalDeclID ID);
|
||||
void markIncompleteDeclChain(Decl *D);
|
||||
|
||||
/// Returns the most recent declaration of a declaration (which must be
|
||||
@ -1457,11 +1447,10 @@ private:
|
||||
/// merged into its redecl chain.
|
||||
Decl *getMostRecentExistingDecl(Decl *D);
|
||||
|
||||
RecordLocation DeclCursorForID(serialization::GlobalDeclID ID,
|
||||
SourceLocation &Location);
|
||||
RecordLocation DeclCursorForID(GlobalDeclID ID, SourceLocation &Location);
|
||||
void loadDeclUpdateRecords(PendingUpdateRecord &Record);
|
||||
void loadPendingDeclChain(Decl *D, uint64_t LocalOffset);
|
||||
void loadObjCCategories(serialization::GlobalDeclID ID, ObjCInterfaceDecl *D,
|
||||
void loadObjCCategories(GlobalDeclID ID, ObjCInterfaceDecl *D,
|
||||
unsigned PreviousGeneration = 0);
|
||||
|
||||
RecordLocation getLocalBitOffset(uint64_t GlobalOffset);
|
||||
@ -1496,11 +1485,10 @@ private:
|
||||
unsigned ClientLoadCapabilities);
|
||||
|
||||
public:
|
||||
class ModuleDeclIterator
|
||||
: public llvm::iterator_adaptor_base<
|
||||
ModuleDeclIterator, const serialization::LocalDeclID *,
|
||||
std::random_access_iterator_tag, const Decl *, ptrdiff_t,
|
||||
const Decl *, const Decl *> {
|
||||
class ModuleDeclIterator : public llvm::iterator_adaptor_base<
|
||||
ModuleDeclIterator, const LocalDeclID *,
|
||||
std::random_access_iterator_tag, const Decl *,
|
||||
ptrdiff_t, const Decl *, const Decl *> {
|
||||
ASTReader *Reader = nullptr;
|
||||
ModuleFile *Mod = nullptr;
|
||||
|
||||
@ -1508,7 +1496,7 @@ public:
|
||||
ModuleDeclIterator() : iterator_adaptor_base(nullptr) {}
|
||||
|
||||
ModuleDeclIterator(ASTReader *Reader, ModuleFile *Mod,
|
||||
const serialization::LocalDeclID *Pos)
|
||||
const LocalDeclID *Pos)
|
||||
: iterator_adaptor_base(Pos), Reader(Reader), Mod(Mod) {}
|
||||
|
||||
value_type operator*() const {
|
||||
@ -1536,9 +1524,8 @@ private:
|
||||
|
||||
void pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name);
|
||||
|
||||
void addPendingDeclContextInfo(Decl *D,
|
||||
serialization::GlobalDeclID SemaDC,
|
||||
serialization::GlobalDeclID LexicalDC) {
|
||||
void addPendingDeclContextInfo(Decl *D, GlobalDeclID SemaDC,
|
||||
GlobalDeclID LexicalDC) {
|
||||
assert(D);
|
||||
PendingDeclContextInfo Info = { D, SemaDC, LexicalDC };
|
||||
PendingDeclContextInfos.push_back(Info);
|
||||
@ -1916,38 +1903,36 @@ public:
|
||||
|
||||
/// Map from a local declaration ID within a given module to a
|
||||
/// global declaration ID.
|
||||
serialization::GlobalDeclID
|
||||
getGlobalDeclID(ModuleFile &F, serialization::LocalDeclID LocalID) const;
|
||||
GlobalDeclID getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const;
|
||||
|
||||
/// Returns true if global DeclID \p ID originated from module \p M.
|
||||
bool isDeclIDFromModule(serialization::GlobalDeclID ID, ModuleFile &M) const;
|
||||
bool isDeclIDFromModule(GlobalDeclID ID, ModuleFile &M) const;
|
||||
|
||||
/// Retrieve the module file that owns the given declaration, or NULL
|
||||
/// if the declaration is not from a module file.
|
||||
ModuleFile *getOwningModuleFile(const Decl *D);
|
||||
|
||||
/// Returns the source location for the decl \p ID.
|
||||
SourceLocation getSourceLocationForDeclID(serialization::GlobalDeclID ID);
|
||||
SourceLocation getSourceLocationForDeclID(GlobalDeclID ID);
|
||||
|
||||
/// Resolve a declaration ID into a declaration, potentially
|
||||
/// building a new declaration.
|
||||
Decl *GetDecl(serialization::GlobalDeclID ID);
|
||||
Decl *GetExternalDecl(Decl::DeclID ID) override;
|
||||
Decl *GetDecl(GlobalDeclID ID);
|
||||
Decl *GetExternalDecl(DeclID ID) override;
|
||||
|
||||
/// Resolve a declaration ID into a declaration. Return 0 if it's not
|
||||
/// been loaded yet.
|
||||
Decl *GetExistingDecl(serialization::GlobalDeclID ID);
|
||||
Decl *GetExistingDecl(GlobalDeclID ID);
|
||||
|
||||
/// Reads a declaration with the given local ID in the given module.
|
||||
Decl *GetLocalDecl(ModuleFile &F, serialization::LocalDeclID LocalID) {
|
||||
Decl *GetLocalDecl(ModuleFile &F, LocalDeclID LocalID) {
|
||||
return GetDecl(getGlobalDeclID(F, LocalID));
|
||||
}
|
||||
|
||||
/// Reads a declaration with the given local ID in the given module.
|
||||
///
|
||||
/// \returns The requested declaration, casted to the given return type.
|
||||
template <typename T>
|
||||
T *GetLocalDeclAs(ModuleFile &F, serialization::LocalDeclID LocalID) {
|
||||
template <typename T> T *GetLocalDeclAs(ModuleFile &F, LocalDeclID LocalID) {
|
||||
return cast_or_null<T>(GetLocalDecl(F, LocalID));
|
||||
}
|
||||
|
||||
@ -1956,16 +1941,14 @@ public:
|
||||
///
|
||||
/// \returns the global ID of the given declaration as known in the given
|
||||
/// module file.
|
||||
serialization::DeclID
|
||||
mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
|
||||
serialization::GlobalDeclID GlobalID);
|
||||
DeclID mapGlobalIDToModuleFileGlobalID(ModuleFile &M, GlobalDeclID GlobalID);
|
||||
|
||||
/// Reads a declaration ID from the given position in a record in the
|
||||
/// given module.
|
||||
///
|
||||
/// \returns The declaration ID read from the record, adjusted to a global ID.
|
||||
serialization::GlobalDeclID
|
||||
ReadDeclID(ModuleFile &F, const RecordData &Record, unsigned &Idx);
|
||||
GlobalDeclID ReadDeclID(ModuleFile &F, const RecordData &Record,
|
||||
unsigned &Idx);
|
||||
|
||||
/// Reads a declaration from the given position in a record in the
|
||||
/// given module.
|
||||
@ -2139,10 +2122,9 @@ public:
|
||||
void LoadSelector(Selector Sel);
|
||||
|
||||
void SetIdentifierInfo(unsigned ID, IdentifierInfo *II);
|
||||
void SetGloballyVisibleDecls(
|
||||
IdentifierInfo *II,
|
||||
const SmallVectorImpl<serialization::GlobalDeclID> &DeclIDs,
|
||||
SmallVectorImpl<Decl *> *Decls = nullptr);
|
||||
void SetGloballyVisibleDecls(IdentifierInfo *II,
|
||||
const SmallVectorImpl<GlobalDeclID> &DeclIDs,
|
||||
SmallVectorImpl<Decl *> *Decls = nullptr);
|
||||
|
||||
/// Report a diagnostic.
|
||||
DiagnosticBuilder Diag(unsigned DiagID) const;
|
||||
@ -2383,7 +2365,7 @@ public:
|
||||
|
||||
// Contains the IDs for declarations that were requested before we have
|
||||
// access to a Sema object.
|
||||
SmallVector<serialization::GlobalDeclID, 16> PreloadedDeclIDs;
|
||||
SmallVector<GlobalDeclID, 16> PreloadedDeclIDs;
|
||||
|
||||
/// Retrieve the semantic analysis object used to analyze the
|
||||
/// translation unit in which the precompiled header is being
|
||||
|
||||
@ -136,7 +136,7 @@ public:
|
||||
/// Reads a declaration with the given local ID in the given module.
|
||||
///
|
||||
/// \returns The requested declaration, casted to the given return type.
|
||||
template <typename T> T *GetLocalDeclAs(serialization::LocalDeclID LocalID) {
|
||||
template <typename T> T *GetLocalDeclAs(LocalDeclID LocalID) {
|
||||
return cast_or_null<T>(Reader->GetLocalDecl(*F, LocalID));
|
||||
}
|
||||
|
||||
@ -182,9 +182,7 @@ public:
|
||||
/// Reads a declaration ID from the given position in this record.
|
||||
///
|
||||
/// \returns The declaration ID read from the record, adjusted to a global ID.
|
||||
serialization::GlobalDeclID readDeclID() {
|
||||
return Reader->ReadDeclID(*F, Record, Idx);
|
||||
}
|
||||
GlobalDeclID readDeclID() { return Reader->ReadDeclID(*F, Record, Idx); }
|
||||
|
||||
/// Reads a declaration from the given position in a record in the
|
||||
/// given module, advancing Idx.
|
||||
|
||||
@ -212,10 +212,10 @@ private:
|
||||
llvm::SmallVector<NamespaceDecl *, 16> DelayedNamespace;
|
||||
|
||||
/// The first ID number we can use for our own declarations.
|
||||
serialization::DeclID FirstDeclID = serialization::NUM_PREDEF_DECL_IDS;
|
||||
DeclID FirstDeclID = clang::NUM_PREDEF_DECL_IDS;
|
||||
|
||||
/// The decl ID that will be assigned to the next new decl.
|
||||
serialization::DeclID NextDeclID = FirstDeclID;
|
||||
DeclID NextDeclID = FirstDeclID;
|
||||
|
||||
/// Map that provides the ID numbers of each declaration within
|
||||
/// the output stream, as well as those deserialized from a chained PCH.
|
||||
@ -223,7 +223,7 @@ private:
|
||||
/// The ID numbers of declarations are consecutive (in order of
|
||||
/// discovery) and start at 2. 1 is reserved for the translation
|
||||
/// unit, while 0 is reserved for NULL.
|
||||
llvm::DenseMap<const Decl *, serialization::DeclID> DeclIDs;
|
||||
llvm::DenseMap<const Decl *, DeclID> DeclIDs;
|
||||
|
||||
/// Offset of each declaration in the bitstream, indexed by
|
||||
/// the declaration's ID.
|
||||
@ -234,8 +234,7 @@ private:
|
||||
uint64_t DeclTypesBlockStartOffset = 0;
|
||||
|
||||
/// Sorted (by file offset) vector of pairs of file offset/DeclID.
|
||||
using LocDeclIDsTy =
|
||||
SmallVector<std::pair<unsigned, serialization::DeclID>, 64>;
|
||||
using LocDeclIDsTy = SmallVector<std::pair<unsigned, DeclID>, 64>;
|
||||
struct DeclIDInFileInfo {
|
||||
LocDeclIDsTy DeclIDs;
|
||||
|
||||
@ -250,7 +249,7 @@ private:
|
||||
/// that it contains.
|
||||
FileDeclIDsTy FileDeclIDs;
|
||||
|
||||
void associateDeclWithFile(const Decl *D, serialization::DeclID);
|
||||
void associateDeclWithFile(const Decl *D, DeclID);
|
||||
|
||||
/// The first ID number we can use for our own types.
|
||||
serialization::TypeID FirstTypeID = serialization::NUM_PREDEF_TYPE_IDS;
|
||||
@ -421,8 +420,8 @@ private:
|
||||
/// headers. The declarations themselves are stored as declaration
|
||||
/// IDs, since they will be written out to an EAGERLY_DESERIALIZED_DECLS
|
||||
/// record.
|
||||
SmallVector<serialization::DeclID, 16> EagerlyDeserializedDecls;
|
||||
SmallVector<serialization::DeclID, 16> ModularCodegenDecls;
|
||||
SmallVector<DeclID, 16> EagerlyDeserializedDecls;
|
||||
SmallVector<DeclID, 16> ModularCodegenDecls;
|
||||
|
||||
/// DeclContexts that have received extensions since their serialized
|
||||
/// form.
|
||||
@ -708,8 +707,7 @@ public:
|
||||
if (D->isFromASTFile())
|
||||
return false;
|
||||
auto I = DeclIDs.find(D);
|
||||
return (I == DeclIDs.end() ||
|
||||
I->second >= serialization::NUM_PREDEF_DECL_IDS);
|
||||
return (I == DeclIDs.end() || I->second >= clang::NUM_PREDEF_DECL_IDS);
|
||||
};
|
||||
|
||||
/// Emit a reference to a declaration.
|
||||
@ -718,11 +716,11 @@ public:
|
||||
void AddEmittedDeclRef(const Decl *D, RecordDataImpl &Record);
|
||||
|
||||
/// Force a declaration to be emitted and get its ID.
|
||||
serialization::DeclID GetDeclRef(const Decl *D);
|
||||
DeclID GetDeclRef(const Decl *D);
|
||||
|
||||
/// Determine the declaration ID of an already-emitted
|
||||
/// declaration.
|
||||
serialization::DeclID getDeclID(const Decl *D);
|
||||
DeclID getDeclID(const Decl *D);
|
||||
|
||||
/// Whether or not the declaration got emitted. If not, it wouldn't be
|
||||
/// emitted.
|
||||
|
||||
@ -459,10 +459,10 @@ public:
|
||||
const DeclOffset *DeclOffsets = nullptr;
|
||||
|
||||
/// Base declaration ID for declarations local to this module.
|
||||
serialization::DeclID BaseDeclID = 0;
|
||||
DeclID BaseDeclID = 0;
|
||||
|
||||
/// Remapping table for declaration IDs in this module.
|
||||
ContinuousRangeMap<serialization::DeclID, int, 2> DeclRemap;
|
||||
ContinuousRangeMap<DeclID, int, 2> DeclRemap;
|
||||
|
||||
/// Mapping from the module files that this module file depends on
|
||||
/// to the base declaration ID for that module as it is understood within this
|
||||
@ -471,10 +471,10 @@ public:
|
||||
/// This is effectively a reverse global-to-local mapping for declaration
|
||||
/// IDs, so that we can interpret a true global ID (for this translation unit)
|
||||
/// as a local ID (for this module file).
|
||||
llvm::DenseMap<ModuleFile *, serialization::DeclID> GlobalToLocalDeclIDs;
|
||||
llvm::DenseMap<ModuleFile *, DeclID> GlobalToLocalDeclIDs;
|
||||
|
||||
/// Array of file-level DeclIDs sorted by file.
|
||||
const serialization::LocalDeclID *FileSortedDecls = nullptr;
|
||||
const LocalDeclID *FileSortedDecls = nullptr;
|
||||
unsigned NumFileSortedDecls = 0;
|
||||
|
||||
/// Array of category list location information within this
|
||||
|
||||
@ -1083,8 +1083,7 @@ void ASTContext::addModuleInitializer(Module *M, Decl *D) {
|
||||
Inits->Initializers.push_back(D);
|
||||
}
|
||||
|
||||
void ASTContext::addLazyModuleInitializers(Module *M,
|
||||
ArrayRef<Decl::DeclID> IDs) {
|
||||
void ASTContext::addLazyModuleInitializers(Module *M, ArrayRef<DeclID> IDs) {
|
||||
auto *&Inits = ModuleInitializers[M];
|
||||
if (!Inits)
|
||||
Inits = new (*this) PerModuleInitializers;
|
||||
|
||||
@ -2151,7 +2151,7 @@ VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation StartL,
|
||||
return new (C, DC) VarDecl(Var, C, DC, StartL, IdL, Id, T, TInfo, S);
|
||||
}
|
||||
|
||||
VarDecl *VarDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
VarDecl *VarDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID)
|
||||
VarDecl(Var, C, nullptr, SourceLocation(), SourceLocation(), nullptr,
|
||||
QualType(), nullptr, SC_None);
|
||||
@ -2929,7 +2929,7 @@ QualType ParmVarDecl::getOriginalType() const {
|
||||
return T;
|
||||
}
|
||||
|
||||
ParmVarDecl *ParmVarDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
ParmVarDecl *ParmVarDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID)
|
||||
ParmVarDecl(ParmVar, C, nullptr, SourceLocation(), SourceLocation(),
|
||||
nullptr, QualType(), nullptr, SC_None, nullptr);
|
||||
@ -4553,7 +4553,7 @@ FieldDecl *FieldDecl::Create(const ASTContext &C, DeclContext *DC,
|
||||
BW, Mutable, InitStyle);
|
||||
}
|
||||
|
||||
FieldDecl *FieldDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
FieldDecl *FieldDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) FieldDecl(Field, nullptr, SourceLocation(),
|
||||
SourceLocation(), nullptr, QualType(), nullptr,
|
||||
nullptr, false, ICIS_NoInit);
|
||||
@ -4863,7 +4863,7 @@ EnumDecl *EnumDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return Enum;
|
||||
}
|
||||
|
||||
EnumDecl *EnumDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
EnumDecl *EnumDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
EnumDecl *Enum =
|
||||
new (C, ID) EnumDecl(C, nullptr, SourceLocation(), SourceLocation(),
|
||||
nullptr, nullptr, false, false, false);
|
||||
@ -5025,7 +5025,7 @@ RecordDecl *RecordDecl::Create(const ASTContext &C, TagKind TK, DeclContext *DC,
|
||||
return R;
|
||||
}
|
||||
|
||||
RecordDecl *RecordDecl::CreateDeserialized(const ASTContext &C, Decl::DeclID ID) {
|
||||
RecordDecl *RecordDecl::CreateDeserialized(const ASTContext &C, DeclID ID) {
|
||||
RecordDecl *R = new (C, ID)
|
||||
RecordDecl(Record, TagTypeKind::Struct, C, nullptr, SourceLocation(),
|
||||
SourceLocation(), nullptr, nullptr);
|
||||
@ -5297,7 +5297,7 @@ PragmaCommentDecl *PragmaCommentDecl::Create(const ASTContext &C,
|
||||
}
|
||||
|
||||
PragmaCommentDecl *PragmaCommentDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID,
|
||||
DeclID ID,
|
||||
unsigned ArgSize) {
|
||||
return new (C, ID, additionalSizeToAlloc<char>(ArgSize + 1))
|
||||
PragmaCommentDecl(nullptr, SourceLocation(), PCK_Unknown);
|
||||
@ -5322,7 +5322,7 @@ PragmaDetectMismatchDecl::Create(const ASTContext &C, TranslationUnitDecl *DC,
|
||||
}
|
||||
|
||||
PragmaDetectMismatchDecl *
|
||||
PragmaDetectMismatchDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
PragmaDetectMismatchDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned NameValueSize) {
|
||||
return new (C, ID, additionalSizeToAlloc<char>(NameValueSize + 1))
|
||||
PragmaDetectMismatchDecl(nullptr, SourceLocation(), 0);
|
||||
@ -5349,7 +5349,7 @@ LabelDecl *LabelDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return new (C, DC) LabelDecl(DC, IdentL, II, nullptr, GnuLabelL);
|
||||
}
|
||||
|
||||
LabelDecl *LabelDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
LabelDecl *LabelDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) LabelDecl(nullptr, SourceLocation(), nullptr, nullptr,
|
||||
SourceLocation());
|
||||
}
|
||||
@ -5390,7 +5390,7 @@ ImplicitParamDecl *ImplicitParamDecl::Create(ASTContext &C, QualType Type,
|
||||
}
|
||||
|
||||
ImplicitParamDecl *ImplicitParamDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) ImplicitParamDecl(C, QualType(), ImplicitParamKind::Other);
|
||||
}
|
||||
|
||||
@ -5408,7 +5408,7 @@ FunctionDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
|
||||
return New;
|
||||
}
|
||||
|
||||
FunctionDecl *FunctionDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
FunctionDecl *FunctionDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) FunctionDecl(
|
||||
Function, C, nullptr, SourceLocation(), DeclarationNameInfo(), QualType(),
|
||||
nullptr, SC_None, false, false, ConstexprSpecKind::Unspecified, nullptr);
|
||||
@ -5418,7 +5418,7 @@ BlockDecl *BlockDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L) {
|
||||
return new (C, DC) BlockDecl(DC, L);
|
||||
}
|
||||
|
||||
BlockDecl *BlockDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
BlockDecl *BlockDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) BlockDecl(nullptr, SourceLocation());
|
||||
}
|
||||
|
||||
@ -5432,7 +5432,7 @@ CapturedDecl *CapturedDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
CapturedDecl(DC, NumParams);
|
||||
}
|
||||
|
||||
CapturedDecl *CapturedDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
CapturedDecl *CapturedDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned NumParams) {
|
||||
return new (C, ID, additionalSizeToAlloc<ImplicitParamDecl *>(NumParams))
|
||||
CapturedDecl(nullptr, NumParams);
|
||||
@ -5458,8 +5458,8 @@ EnumConstantDecl *EnumConstantDecl::Create(ASTContext &C, EnumDecl *CD,
|
||||
return new (C, CD) EnumConstantDecl(C, CD, L, Id, T, E, V);
|
||||
}
|
||||
|
||||
EnumConstantDecl *
|
||||
EnumConstantDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
EnumConstantDecl *EnumConstantDecl::CreateDeserialized(ASTContext &C,
|
||||
DeclID ID) {
|
||||
return new (C, ID) EnumConstantDecl(C, nullptr, SourceLocation(), nullptr,
|
||||
QualType(), nullptr, llvm::APSInt());
|
||||
}
|
||||
@ -5486,7 +5486,7 @@ IndirectFieldDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
|
||||
}
|
||||
|
||||
IndirectFieldDecl *IndirectFieldDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID)
|
||||
IndirectFieldDecl(C, nullptr, SourceLocation(), DeclarationName(),
|
||||
QualType(), std::nullopt);
|
||||
@ -5547,7 +5547,7 @@ bool TypedefNameDecl::isTransparentTagSlow() const {
|
||||
return isTransparent;
|
||||
}
|
||||
|
||||
TypedefDecl *TypedefDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
TypedefDecl *TypedefDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) TypedefDecl(C, nullptr, SourceLocation(), SourceLocation(),
|
||||
nullptr, nullptr);
|
||||
}
|
||||
@ -5560,7 +5560,7 @@ TypeAliasDecl *TypeAliasDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return new (C, DC) TypeAliasDecl(C, DC, StartLoc, IdLoc, Id, TInfo);
|
||||
}
|
||||
|
||||
TypeAliasDecl *TypeAliasDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
TypeAliasDecl *TypeAliasDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) TypeAliasDecl(C, nullptr, SourceLocation(),
|
||||
SourceLocation(), nullptr, nullptr);
|
||||
}
|
||||
@ -5591,7 +5591,7 @@ FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
FileScopeAsmDecl *FileScopeAsmDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) FileScopeAsmDecl(nullptr, nullptr, SourceLocation(),
|
||||
SourceLocation());
|
||||
}
|
||||
@ -5609,7 +5609,7 @@ TopLevelStmtDecl *TopLevelStmtDecl::Create(ASTContext &C, Stmt *Statement) {
|
||||
}
|
||||
|
||||
TopLevelStmtDecl *TopLevelStmtDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID)
|
||||
TopLevelStmtDecl(/*DC=*/nullptr, SourceLocation(), /*S=*/nullptr);
|
||||
}
|
||||
@ -5630,7 +5630,7 @@ EmptyDecl *EmptyDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L) {
|
||||
return new (C, DC) EmptyDecl(DC, L);
|
||||
}
|
||||
|
||||
EmptyDecl *EmptyDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
EmptyDecl *EmptyDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) EmptyDecl(nullptr, SourceLocation());
|
||||
}
|
||||
|
||||
@ -5663,7 +5663,7 @@ HLSLBufferDecl *HLSLBufferDecl::Create(ASTContext &C,
|
||||
return Result;
|
||||
}
|
||||
|
||||
HLSLBufferDecl *HLSLBufferDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
HLSLBufferDecl *HLSLBufferDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) HLSLBufferDecl(nullptr, false, SourceLocation(), nullptr,
|
||||
SourceLocation(), SourceLocation());
|
||||
}
|
||||
@ -5719,7 +5719,7 @@ ImportDecl *ImportDecl::CreateImplicit(ASTContext &C, DeclContext *DC,
|
||||
return Import;
|
||||
}
|
||||
|
||||
ImportDecl *ImportDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
ImportDecl *ImportDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned NumLocations) {
|
||||
return new (C, ID, additionalSizeToAlloc<SourceLocation>(NumLocations))
|
||||
ImportDecl(EmptyShell());
|
||||
@ -5752,6 +5752,6 @@ ExportDecl *ExportDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return new (C, DC) ExportDecl(DC, ExportLoc);
|
||||
}
|
||||
|
||||
ExportDecl *ExportDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
ExportDecl *ExportDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) ExportDecl(nullptr, SourceLocation());
|
||||
}
|
||||
|
||||
@ -70,8 +70,8 @@ void Decl::updateOutOfDate(IdentifierInfo &II) const {
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#include "clang/AST/DeclNodes.inc"
|
||||
|
||||
void *Decl::operator new(std::size_t Size, const ASTContext &Context,
|
||||
Decl::DeclID ID, std::size_t Extra) {
|
||||
void *Decl::operator new(std::size_t Size, const ASTContext &Context, DeclID ID,
|
||||
std::size_t Extra) {
|
||||
// Allocate an extra 8 bytes worth of storage, which ensures that the
|
||||
// resulting pointer will still be 8-byte aligned.
|
||||
static_assert(sizeof(unsigned) * 2 >= alignof(Decl),
|
||||
|
||||
@ -57,7 +57,7 @@ using namespace clang;
|
||||
|
||||
void AccessSpecDecl::anchor() {}
|
||||
|
||||
AccessSpecDecl *AccessSpecDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
AccessSpecDecl *AccessSpecDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) AccessSpecDecl(EmptyShell());
|
||||
}
|
||||
|
||||
@ -160,8 +160,8 @@ CXXRecordDecl::CreateLambda(const ASTContext &C, DeclContext *DC,
|
||||
return R;
|
||||
}
|
||||
|
||||
CXXRecordDecl *
|
||||
CXXRecordDecl::CreateDeserialized(const ASTContext &C, Decl::DeclID ID) {
|
||||
CXXRecordDecl *CXXRecordDecl::CreateDeserialized(const ASTContext &C,
|
||||
DeclID ID) {
|
||||
auto *R = new (C, ID)
|
||||
CXXRecordDecl(CXXRecord, TagTypeKind::Struct, C, nullptr,
|
||||
SourceLocation(), SourceLocation(), nullptr, nullptr);
|
||||
@ -2163,7 +2163,7 @@ CXXDeductionGuideDecl *CXXDeductionGuideDecl::Create(
|
||||
}
|
||||
|
||||
CXXDeductionGuideDecl *CXXDeductionGuideDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) CXXDeductionGuideDecl(
|
||||
C, nullptr, SourceLocation(), ExplicitSpecifier(), DeclarationNameInfo(),
|
||||
QualType(), nullptr, SourceLocation(), nullptr,
|
||||
@ -2176,7 +2176,7 @@ RequiresExprBodyDecl *RequiresExprBodyDecl::Create(
|
||||
}
|
||||
|
||||
RequiresExprBodyDecl *RequiresExprBodyDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) RequiresExprBodyDecl(C, nullptr, SourceLocation());
|
||||
}
|
||||
|
||||
@ -2281,7 +2281,7 @@ CXXMethodDecl::Create(ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc,
|
||||
isInline, ConstexprKind, EndLocation, TrailingRequiresClause);
|
||||
}
|
||||
|
||||
CXXMethodDecl *CXXMethodDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
CXXMethodDecl *CXXMethodDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) CXXMethodDecl(
|
||||
CXXMethod, C, nullptr, SourceLocation(), DeclarationNameInfo(),
|
||||
QualType(), nullptr, SC_None, false, false,
|
||||
@ -2699,7 +2699,7 @@ CXXConstructorDecl::CXXConstructorDecl(
|
||||
void CXXConstructorDecl::anchor() {}
|
||||
|
||||
CXXConstructorDecl *CXXConstructorDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID,
|
||||
DeclID ID,
|
||||
uint64_t AllocKind) {
|
||||
bool hasTrailingExplicit = static_cast<bool>(AllocKind & TAKHasTailExplicit);
|
||||
bool isInheritingConstructor =
|
||||
@ -2845,8 +2845,8 @@ bool CXXConstructorDecl::isSpecializationCopyingObject() const {
|
||||
|
||||
void CXXDestructorDecl::anchor() {}
|
||||
|
||||
CXXDestructorDecl *
|
||||
CXXDestructorDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
CXXDestructorDecl *CXXDestructorDecl::CreateDeserialized(ASTContext &C,
|
||||
DeclID ID) {
|
||||
return new (C, ID) CXXDestructorDecl(
|
||||
C, nullptr, SourceLocation(), DeclarationNameInfo(), QualType(), nullptr,
|
||||
false, false, false, ConstexprSpecKind::Unspecified, nullptr);
|
||||
@ -2877,8 +2877,8 @@ void CXXDestructorDecl::setOperatorDelete(FunctionDecl *OD, Expr *ThisArg) {
|
||||
|
||||
void CXXConversionDecl::anchor() {}
|
||||
|
||||
CXXConversionDecl *
|
||||
CXXConversionDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
CXXConversionDecl *CXXConversionDecl::CreateDeserialized(ASTContext &C,
|
||||
DeclID ID) {
|
||||
return new (C, ID) CXXConversionDecl(
|
||||
C, nullptr, SourceLocation(), DeclarationNameInfo(), QualType(), nullptr,
|
||||
false, false, ExplicitSpecifier(), ConstexprSpecKind::Unspecified,
|
||||
@ -2923,8 +2923,7 @@ LinkageSpecDecl *LinkageSpecDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return new (C, DC) LinkageSpecDecl(DC, ExternLoc, LangLoc, Lang, HasBraces);
|
||||
}
|
||||
|
||||
LinkageSpecDecl *LinkageSpecDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
LinkageSpecDecl *LinkageSpecDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID)
|
||||
LinkageSpecDecl(nullptr, SourceLocation(), SourceLocation(),
|
||||
LinkageSpecLanguageIDs::C, false);
|
||||
@ -2946,7 +2945,7 @@ UsingDirectiveDecl *UsingDirectiveDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
UsingDirectiveDecl *UsingDirectiveDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) UsingDirectiveDecl(nullptr, SourceLocation(),
|
||||
SourceLocation(),
|
||||
NestedNameSpecifierLoc(),
|
||||
@ -2985,7 +2984,7 @@ NamespaceDecl *NamespaceDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
NamespaceDecl(C, DC, Inline, StartLoc, IdLoc, Id, PrevDecl, Nested);
|
||||
}
|
||||
|
||||
NamespaceDecl *NamespaceDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
NamespaceDecl *NamespaceDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) NamespaceDecl(C, nullptr, false, SourceLocation(),
|
||||
SourceLocation(), nullptr, nullptr, false);
|
||||
}
|
||||
@ -3046,8 +3045,8 @@ NamespaceAliasDecl *NamespaceAliasDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
QualifierLoc, IdentLoc, Namespace);
|
||||
}
|
||||
|
||||
NamespaceAliasDecl *
|
||||
NamespaceAliasDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
NamespaceAliasDecl *NamespaceAliasDecl::CreateDeserialized(ASTContext &C,
|
||||
DeclID ID) {
|
||||
return new (C, ID) NamespaceAliasDecl(C, nullptr, SourceLocation(),
|
||||
SourceLocation(), nullptr,
|
||||
NestedNameSpecifierLoc(),
|
||||
@ -3102,8 +3101,7 @@ UsingShadowDecl::UsingShadowDecl(Kind K, ASTContext &C, EmptyShell Empty)
|
||||
: NamedDecl(K, nullptr, SourceLocation(), DeclarationName()),
|
||||
redeclarable_base(C) {}
|
||||
|
||||
UsingShadowDecl *
|
||||
UsingShadowDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
UsingShadowDecl *UsingShadowDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) UsingShadowDecl(UsingShadow, C, EmptyShell());
|
||||
}
|
||||
|
||||
@ -3126,7 +3124,7 @@ ConstructorUsingShadowDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
ConstructorUsingShadowDecl *
|
||||
ConstructorUsingShadowDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
ConstructorUsingShadowDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) ConstructorUsingShadowDecl(C, EmptyShell());
|
||||
}
|
||||
|
||||
@ -3174,7 +3172,7 @@ UsingDecl *UsingDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation UL,
|
||||
return new (C, DC) UsingDecl(DC, UL, QualifierLoc, NameInfo, HasTypename);
|
||||
}
|
||||
|
||||
UsingDecl *UsingDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
UsingDecl *UsingDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) UsingDecl(nullptr, SourceLocation(),
|
||||
NestedNameSpecifierLoc(), DeclarationNameInfo(),
|
||||
false);
|
||||
@ -3198,7 +3196,7 @@ UsingEnumDecl *UsingEnumDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
UsingEnumDecl(DC, EnumType->getType()->getAsTagDecl()->getDeclName(), UL, EL, NL, EnumType);
|
||||
}
|
||||
|
||||
UsingEnumDecl *UsingEnumDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
UsingEnumDecl *UsingEnumDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID)
|
||||
UsingEnumDecl(nullptr, DeclarationName(), SourceLocation(),
|
||||
SourceLocation(), SourceLocation(), nullptr);
|
||||
@ -3217,7 +3215,7 @@ UsingPackDecl *UsingPackDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return new (C, DC, Extra) UsingPackDecl(DC, InstantiatedFrom, UsingDecls);
|
||||
}
|
||||
|
||||
UsingPackDecl *UsingPackDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
UsingPackDecl *UsingPackDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned NumExpansions) {
|
||||
size_t Extra = additionalSizeToAlloc<NamedDecl *>(NumExpansions);
|
||||
auto *Result =
|
||||
@ -3243,7 +3241,7 @@ UnresolvedUsingValueDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
UnresolvedUsingValueDecl *
|
||||
UnresolvedUsingValueDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
UnresolvedUsingValueDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) UnresolvedUsingValueDecl(nullptr, QualType(),
|
||||
SourceLocation(),
|
||||
NestedNameSpecifierLoc(),
|
||||
@ -3273,7 +3271,7 @@ UnresolvedUsingTypenameDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
UnresolvedUsingTypenameDecl *
|
||||
UnresolvedUsingTypenameDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
UnresolvedUsingTypenameDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) UnresolvedUsingTypenameDecl(
|
||||
nullptr, SourceLocation(), SourceLocation(), NestedNameSpecifierLoc(),
|
||||
SourceLocation(), nullptr, SourceLocation());
|
||||
@ -3286,7 +3284,7 @@ UnresolvedUsingIfExistsDecl::Create(ASTContext &Ctx, DeclContext *DC,
|
||||
}
|
||||
|
||||
UnresolvedUsingIfExistsDecl *
|
||||
UnresolvedUsingIfExistsDecl::CreateDeserialized(ASTContext &Ctx, Decl::DeclID ID) {
|
||||
UnresolvedUsingIfExistsDecl::CreateDeserialized(ASTContext &Ctx, DeclID ID) {
|
||||
return new (Ctx, ID)
|
||||
UnresolvedUsingIfExistsDecl(nullptr, SourceLocation(), DeclarationName());
|
||||
}
|
||||
@ -3310,7 +3308,7 @@ StaticAssertDecl *StaticAssertDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
StaticAssertDecl *StaticAssertDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) StaticAssertDecl(nullptr, SourceLocation(), nullptr,
|
||||
nullptr, SourceLocation(), false);
|
||||
}
|
||||
@ -3332,7 +3330,7 @@ BindingDecl *BindingDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return new (C, DC) BindingDecl(DC, IdLoc, Id);
|
||||
}
|
||||
|
||||
BindingDecl *BindingDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
BindingDecl *BindingDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) BindingDecl(nullptr, SourceLocation(), nullptr);
|
||||
}
|
||||
|
||||
@ -3363,7 +3361,7 @@ DecompositionDecl *DecompositionDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
DecompositionDecl *DecompositionDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID,
|
||||
DeclID ID,
|
||||
unsigned NumBindings) {
|
||||
size_t Extra = additionalSizeToAlloc<BindingDecl *>(NumBindings);
|
||||
auto *Result = new (C, ID, Extra)
|
||||
@ -3401,8 +3399,7 @@ MSPropertyDecl *MSPropertyDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return new (C, DC) MSPropertyDecl(DC, L, N, T, TInfo, StartL, Getter, Setter);
|
||||
}
|
||||
|
||||
MSPropertyDecl *MSPropertyDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
MSPropertyDecl *MSPropertyDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) MSPropertyDecl(nullptr, SourceLocation(),
|
||||
DeclarationName(), QualType(), nullptr,
|
||||
SourceLocation(), nullptr, nullptr);
|
||||
@ -3419,7 +3416,7 @@ MSGuidDecl *MSGuidDecl::Create(const ASTContext &C, QualType T, Parts P) {
|
||||
return new (C, DC) MSGuidDecl(DC, T, P);
|
||||
}
|
||||
|
||||
MSGuidDecl *MSGuidDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
MSGuidDecl *MSGuidDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) MSGuidDecl(nullptr, QualType(), Parts());
|
||||
}
|
||||
|
||||
@ -3529,7 +3526,7 @@ UnnamedGlobalConstantDecl::Create(const ASTContext &C, QualType T,
|
||||
}
|
||||
|
||||
UnnamedGlobalConstantDecl *
|
||||
UnnamedGlobalConstantDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
UnnamedGlobalConstantDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID)
|
||||
UnnamedGlobalConstantDecl(C, nullptr, QualType(), APValue());
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ FriendDecl *FriendDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return FD;
|
||||
}
|
||||
|
||||
FriendDecl *FriendDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
FriendDecl *FriendDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned FriendTypeNumTPLists) {
|
||||
std::size_t Extra =
|
||||
additionalSizeToAlloc<TemplateParameterList *>(FriendTypeNumTPLists);
|
||||
|
||||
@ -862,7 +862,7 @@ ObjCMethodDecl *ObjCMethodDecl::Create(
|
||||
isImplicitlyDeclared, isDefined, impControl, HasRelatedResultType);
|
||||
}
|
||||
|
||||
ObjCMethodDecl *ObjCMethodDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
ObjCMethodDecl *ObjCMethodDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) ObjCMethodDecl(SourceLocation(), SourceLocation(),
|
||||
Selector(), QualType(), nullptr, nullptr);
|
||||
}
|
||||
@ -1486,7 +1486,7 @@ ObjCTypeParamDecl *ObjCTypeParamDecl::Create(ASTContext &ctx, DeclContext *dc,
|
||||
}
|
||||
|
||||
ObjCTypeParamDecl *ObjCTypeParamDecl::CreateDeserialized(ASTContext &ctx,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (ctx, ID) ObjCTypeParamDecl(ctx, nullptr,
|
||||
ObjCTypeParamVariance::Invariant,
|
||||
SourceLocation(), 0, SourceLocation(),
|
||||
@ -1551,7 +1551,7 @@ ObjCInterfaceDecl *ObjCInterfaceDecl::Create(
|
||||
}
|
||||
|
||||
ObjCInterfaceDecl *ObjCInterfaceDecl::CreateDeserialized(const ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
auto *Result = new (C, ID)
|
||||
ObjCInterfaceDecl(C, nullptr, SourceLocation(), nullptr, nullptr,
|
||||
SourceLocation(), nullptr, false);
|
||||
@ -1865,7 +1865,7 @@ ObjCIvarDecl *ObjCIvarDecl::Create(ASTContext &C, ObjCContainerDecl *DC,
|
||||
synthesized);
|
||||
}
|
||||
|
||||
ObjCIvarDecl *ObjCIvarDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
ObjCIvarDecl *ObjCIvarDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) ObjCIvarDecl(nullptr, SourceLocation(), SourceLocation(),
|
||||
nullptr, QualType(), nullptr,
|
||||
ObjCIvarDecl::None, nullptr, false);
|
||||
@ -1914,7 +1914,7 @@ ObjCAtDefsFieldDecl
|
||||
}
|
||||
|
||||
ObjCAtDefsFieldDecl *ObjCAtDefsFieldDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) ObjCAtDefsFieldDecl(nullptr, SourceLocation(),
|
||||
SourceLocation(), nullptr, QualType(),
|
||||
nullptr);
|
||||
@ -1949,7 +1949,7 @@ ObjCProtocolDecl *ObjCProtocolDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
ObjCProtocolDecl *ObjCProtocolDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
ObjCProtocolDecl *Result =
|
||||
new (C, ID) ObjCProtocolDecl(C, nullptr, nullptr, SourceLocation(),
|
||||
SourceLocation(), nullptr);
|
||||
@ -2148,7 +2148,7 @@ ObjCCategoryDecl *ObjCCategoryDecl::Create(
|
||||
}
|
||||
|
||||
ObjCCategoryDecl *ObjCCategoryDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) ObjCCategoryDecl(nullptr, SourceLocation(),
|
||||
SourceLocation(), SourceLocation(),
|
||||
nullptr, nullptr, nullptr);
|
||||
@ -2189,7 +2189,7 @@ ObjCCategoryImplDecl *ObjCCategoryImplDecl::Create(
|
||||
}
|
||||
|
||||
ObjCCategoryImplDecl *ObjCCategoryImplDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) ObjCCategoryImplDecl(nullptr, nullptr, nullptr,
|
||||
SourceLocation(), SourceLocation(),
|
||||
SourceLocation());
|
||||
@ -2296,7 +2296,7 @@ ObjCImplementationDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
ObjCImplementationDecl *
|
||||
ObjCImplementationDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
ObjCImplementationDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) ObjCImplementationDecl(nullptr, nullptr, nullptr,
|
||||
SourceLocation(), SourceLocation());
|
||||
}
|
||||
@ -2339,7 +2339,7 @@ ObjCCompatibleAliasDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
ObjCCompatibleAliasDecl *
|
||||
ObjCCompatibleAliasDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
ObjCCompatibleAliasDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) ObjCCompatibleAliasDecl(nullptr, SourceLocation(),
|
||||
nullptr, nullptr);
|
||||
}
|
||||
@ -2360,7 +2360,7 @@ ObjCPropertyDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
|
||||
}
|
||||
|
||||
ObjCPropertyDecl *ObjCPropertyDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) ObjCPropertyDecl(nullptr, SourceLocation(), nullptr,
|
||||
SourceLocation(), SourceLocation(),
|
||||
QualType(), nullptr, None);
|
||||
@ -2393,7 +2393,7 @@ ObjCPropertyImplDecl *ObjCPropertyImplDecl::Create(ASTContext &C,
|
||||
}
|
||||
|
||||
ObjCPropertyImplDecl *ObjCPropertyImplDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) ObjCPropertyImplDecl(nullptr, SourceLocation(),
|
||||
SourceLocation(), nullptr, Dynamic,
|
||||
nullptr, SourceLocation());
|
||||
|
||||
@ -35,9 +35,8 @@ OMPThreadPrivateDecl *OMPThreadPrivateDecl::Create(ASTContext &C,
|
||||
return D;
|
||||
}
|
||||
|
||||
OMPThreadPrivateDecl *OMPThreadPrivateDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID,
|
||||
unsigned N) {
|
||||
OMPThreadPrivateDecl *
|
||||
OMPThreadPrivateDecl::CreateDeserialized(ASTContext &C, DeclID ID, unsigned N) {
|
||||
return OMPDeclarativeDirective::createEmptyDirective<OMPThreadPrivateDecl>(
|
||||
C, ID, 0, N);
|
||||
}
|
||||
@ -63,7 +62,7 @@ OMPAllocateDecl *OMPAllocateDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return D;
|
||||
}
|
||||
|
||||
OMPAllocateDecl *OMPAllocateDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
OMPAllocateDecl *OMPAllocateDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned NVars,
|
||||
unsigned NClauses) {
|
||||
return OMPDeclarativeDirective::createEmptyDirective<OMPAllocateDecl>(
|
||||
@ -89,7 +88,7 @@ OMPRequiresDecl *OMPRequiresDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
L);
|
||||
}
|
||||
|
||||
OMPRequiresDecl *OMPRequiresDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
OMPRequiresDecl *OMPRequiresDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned N) {
|
||||
return OMPDeclarativeDirective::createEmptyDirective<OMPRequiresDecl>(
|
||||
C, ID, N, 0, SourceLocation());
|
||||
@ -117,7 +116,7 @@ OMPDeclareReductionDecl *OMPDeclareReductionDecl::Create(
|
||||
}
|
||||
|
||||
OMPDeclareReductionDecl *
|
||||
OMPDeclareReductionDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
OMPDeclareReductionDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) OMPDeclareReductionDecl(
|
||||
OMPDeclareReduction, /*DC=*/nullptr, SourceLocation(), DeclarationName(),
|
||||
QualType(), /*PrevDeclInScope=*/nullptr);
|
||||
@ -147,9 +146,8 @@ OMPDeclareMapperDecl *OMPDeclareMapperDecl::Create(
|
||||
C, DC, Clauses, 1, L, Name, T, VarName, PrevDeclInScope);
|
||||
}
|
||||
|
||||
OMPDeclareMapperDecl *OMPDeclareMapperDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID,
|
||||
unsigned N) {
|
||||
OMPDeclareMapperDecl *
|
||||
OMPDeclareMapperDecl::CreateDeserialized(ASTContext &C, DeclID ID, unsigned N) {
|
||||
return OMPDeclarativeDirective::createEmptyDirective<OMPDeclareMapperDecl>(
|
||||
C, ID, N, 1, SourceLocation(), DeclarationName(), QualType(),
|
||||
DeclarationName(), /*PrevDeclInScope=*/nullptr);
|
||||
@ -179,7 +177,7 @@ OMPCapturedExprDecl *OMPCapturedExprDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
OMPCapturedExprDecl *OMPCapturedExprDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) OMPCapturedExprDecl(C, nullptr, nullptr, QualType(),
|
||||
/*TInfo=*/nullptr, SourceLocation());
|
||||
}
|
||||
|
||||
@ -337,7 +337,7 @@ void RedeclarableTemplateDecl::loadLazySpecializationsImpl() const {
|
||||
CommonBase *CommonBasePtr = getMostRecentDecl()->getCommonPtr();
|
||||
if (CommonBasePtr->LazySpecializations) {
|
||||
ASTContext &Context = getASTContext();
|
||||
Decl::DeclID *Specs = CommonBasePtr->LazySpecializations;
|
||||
DeclID *Specs = CommonBasePtr->LazySpecializations;
|
||||
CommonBasePtr->LazySpecializations = nullptr;
|
||||
for (uint32_t I = 0, N = *Specs++; I != N; ++I)
|
||||
(void)Context.getExternalSource()->GetExternalDecl(Specs[I]);
|
||||
@ -418,7 +418,7 @@ FunctionTemplateDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
|
||||
}
|
||||
|
||||
FunctionTemplateDecl *FunctionTemplateDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) FunctionTemplateDecl(C, nullptr, SourceLocation(),
|
||||
DeclarationName(), nullptr, nullptr);
|
||||
}
|
||||
@ -503,7 +503,7 @@ ClassTemplateDecl *ClassTemplateDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
ClassTemplateDecl *ClassTemplateDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) ClassTemplateDecl(C, nullptr, SourceLocation(),
|
||||
DeclarationName(), nullptr, nullptr);
|
||||
}
|
||||
@ -652,14 +652,14 @@ TemplateTypeParmDecl *TemplateTypeParmDecl::Create(
|
||||
}
|
||||
|
||||
TemplateTypeParmDecl *
|
||||
TemplateTypeParmDecl::CreateDeserialized(const ASTContext &C, Decl::DeclID ID) {
|
||||
TemplateTypeParmDecl::CreateDeserialized(const ASTContext &C, DeclID ID) {
|
||||
return new (C, ID)
|
||||
TemplateTypeParmDecl(nullptr, SourceLocation(), SourceLocation(), nullptr,
|
||||
false, false, std::nullopt);
|
||||
}
|
||||
|
||||
TemplateTypeParmDecl *
|
||||
TemplateTypeParmDecl::CreateDeserialized(const ASTContext &C, Decl::DeclID ID,
|
||||
TemplateTypeParmDecl::CreateDeserialized(const ASTContext &C, DeclID ID,
|
||||
bool HasTypeConstraint) {
|
||||
return new (C, ID,
|
||||
additionalSizeToAlloc<TypeConstraint>(HasTypeConstraint ? 1 : 0))
|
||||
@ -759,7 +759,7 @@ NonTypeTemplateParmDecl *NonTypeTemplateParmDecl::Create(
|
||||
}
|
||||
|
||||
NonTypeTemplateParmDecl *
|
||||
NonTypeTemplateParmDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
NonTypeTemplateParmDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
bool HasTypeConstraint) {
|
||||
return new (C, ID, additionalSizeToAlloc<std::pair<QualType,
|
||||
TypeSourceInfo *>,
|
||||
@ -770,7 +770,7 @@ NonTypeTemplateParmDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
}
|
||||
|
||||
NonTypeTemplateParmDecl *
|
||||
NonTypeTemplateParmDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
NonTypeTemplateParmDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned NumExpandedTypes,
|
||||
bool HasTypeConstraint) {
|
||||
auto *NTTP =
|
||||
@ -836,13 +836,13 @@ TemplateTemplateParmDecl::Create(const ASTContext &C, DeclContext *DC,
|
||||
}
|
||||
|
||||
TemplateTemplateParmDecl *
|
||||
TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) TemplateTemplateParmDecl(nullptr, SourceLocation(), 0, 0,
|
||||
false, nullptr, false, nullptr);
|
||||
}
|
||||
|
||||
TemplateTemplateParmDecl *
|
||||
TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID,
|
||||
TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, DeclID ID,
|
||||
unsigned NumExpansions) {
|
||||
auto *TTP =
|
||||
new (C, ID, additionalSizeToAlloc<TemplateParameterList *>(NumExpansions))
|
||||
@ -948,8 +948,7 @@ ClassTemplateSpecializationDecl::Create(ASTContext &Context, TagKind TK,
|
||||
}
|
||||
|
||||
ClassTemplateSpecializationDecl *
|
||||
ClassTemplateSpecializationDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
ClassTemplateSpecializationDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
auto *Result =
|
||||
new (C, ID) ClassTemplateSpecializationDecl(C, ClassTemplateSpecialization);
|
||||
Result->setMayHaveOutOfDateDef(false);
|
||||
@ -1035,8 +1034,7 @@ ConceptDecl *ConceptDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return TD;
|
||||
}
|
||||
|
||||
ConceptDecl *ConceptDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
ConceptDecl *ConceptDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
ConceptDecl *Result = new (C, ID) ConceptDecl(nullptr, SourceLocation(),
|
||||
DeclarationName(),
|
||||
nullptr, nullptr);
|
||||
@ -1070,7 +1068,7 @@ ImplicitConceptSpecializationDecl *ImplicitConceptSpecializationDecl::Create(
|
||||
|
||||
ImplicitConceptSpecializationDecl *
|
||||
ImplicitConceptSpecializationDecl::CreateDeserialized(
|
||||
const ASTContext &C, Decl::DeclID ID, unsigned NumTemplateArgs) {
|
||||
const ASTContext &C, DeclID ID, unsigned NumTemplateArgs) {
|
||||
return new (C, ID, additionalSizeToAlloc<TemplateArgument>(NumTemplateArgs))
|
||||
ImplicitConceptSpecializationDecl(EmptyShell{}, NumTemplateArgs);
|
||||
}
|
||||
@ -1133,7 +1131,7 @@ Create(ASTContext &Context, TagKind TK,DeclContext *DC,
|
||||
|
||||
ClassTemplatePartialSpecializationDecl *
|
||||
ClassTemplatePartialSpecializationDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
auto *Result = new (C, ID) ClassTemplatePartialSpecializationDecl(C);
|
||||
Result->setMayHaveOutOfDateDef(false);
|
||||
return Result;
|
||||
@ -1160,7 +1158,7 @@ FriendTemplateDecl::Create(ASTContext &Context, DeclContext *DC,
|
||||
}
|
||||
|
||||
FriendTemplateDecl *FriendTemplateDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) FriendTemplateDecl(EmptyShell());
|
||||
}
|
||||
|
||||
@ -1180,7 +1178,7 @@ TypeAliasTemplateDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
|
||||
}
|
||||
|
||||
TypeAliasTemplateDecl *TypeAliasTemplateDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) TypeAliasTemplateDecl(C, nullptr, SourceLocation(),
|
||||
DeclarationName(), nullptr, nullptr);
|
||||
}
|
||||
@ -1217,8 +1215,7 @@ VarTemplateDecl *VarTemplateDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
return TD;
|
||||
}
|
||||
|
||||
VarTemplateDecl *VarTemplateDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
VarTemplateDecl *VarTemplateDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID) VarTemplateDecl(C, nullptr, SourceLocation(),
|
||||
DeclarationName(), nullptr, nullptr);
|
||||
}
|
||||
@ -1340,7 +1337,7 @@ VarTemplateSpecializationDecl *VarTemplateSpecializationDecl::Create(
|
||||
}
|
||||
|
||||
VarTemplateSpecializationDecl *
|
||||
VarTemplateSpecializationDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
VarTemplateSpecializationDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
return new (C, ID)
|
||||
VarTemplateSpecializationDecl(VarTemplateSpecialization, C);
|
||||
}
|
||||
@ -1432,7 +1429,7 @@ VarTemplatePartialSpecializationDecl::Create(
|
||||
|
||||
VarTemplatePartialSpecializationDecl *
|
||||
VarTemplatePartialSpecializationDecl::CreateDeserialized(ASTContext &C,
|
||||
Decl::DeclID ID) {
|
||||
DeclID ID) {
|
||||
return new (C, ID) VarTemplatePartialSpecializationDecl(C);
|
||||
}
|
||||
|
||||
@ -1546,7 +1543,7 @@ TemplateParamObjectDecl *TemplateParamObjectDecl::Create(const ASTContext &C,
|
||||
}
|
||||
|
||||
TemplateParamObjectDecl *
|
||||
TemplateParamObjectDecl::CreateDeserialized(ASTContext &C, Decl::DeclID ID) {
|
||||
TemplateParamObjectDecl::CreateDeserialized(ASTContext &C, DeclID ID) {
|
||||
auto *TPOD = new (C, ID) TemplateParamObjectDecl(nullptr, QualType(), APValue());
|
||||
C.addDestruction(&TPOD->Value);
|
||||
return TPOD;
|
||||
|
||||
@ -68,7 +68,7 @@ bool ExternalASTSource::layoutRecordType(
|
||||
return false;
|
||||
}
|
||||
|
||||
Decl *ExternalASTSource::GetExternalDecl(Decl::DeclID ID) { return nullptr; }
|
||||
Decl *ExternalASTSource::GetExternalDecl(DeclID ID) { return nullptr; }
|
||||
|
||||
Selector ExternalASTSource::GetExternalSelector(uint32_t ID) {
|
||||
return Selector();
|
||||
|
||||
@ -1067,7 +1067,7 @@ public:
|
||||
|
||||
std::vector<Decl *> takeTopLevelDecls() { return std::move(TopLevelDecls); }
|
||||
|
||||
std::vector<serialization::DeclID> takeTopLevelDeclIDs() {
|
||||
std::vector<DeclID> takeTopLevelDeclIDs() {
|
||||
return std::move(TopLevelDeclIDs);
|
||||
}
|
||||
|
||||
@ -1101,7 +1101,7 @@ public:
|
||||
private:
|
||||
unsigned Hash = 0;
|
||||
std::vector<Decl *> TopLevelDecls;
|
||||
std::vector<serialization::DeclID> TopLevelDeclIDs;
|
||||
std::vector<DeclID> TopLevelDeclIDs;
|
||||
llvm::SmallVector<ASTUnit::StandaloneDiagnostic, 4> PreambleDiags;
|
||||
};
|
||||
|
||||
|
||||
@ -80,7 +80,7 @@ public:
|
||||
if (Previous)
|
||||
Previous->TypeRead(Idx, T);
|
||||
}
|
||||
void DeclRead(serialization::DeclID ID, const Decl *D) override {
|
||||
void DeclRead(DeclID ID, const Decl *D) override {
|
||||
if (Previous)
|
||||
Previous->DeclRead(ID, D);
|
||||
}
|
||||
@ -102,7 +102,7 @@ public:
|
||||
bool DeletePrevious)
|
||||
: DelegatingDeserializationListener(Previous, DeletePrevious) {}
|
||||
|
||||
void DeclRead(serialization::DeclID ID, const Decl *D) override {
|
||||
void DeclRead(DeclID ID, const Decl *D) override {
|
||||
llvm::outs() << "PCH DECL: " << D->getDeclKindName();
|
||||
if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) {
|
||||
llvm::outs() << " - ";
|
||||
@ -128,7 +128,7 @@ public:
|
||||
: DelegatingDeserializationListener(Previous, DeletePrevious), Ctx(Ctx),
|
||||
NamesToCheck(NamesToCheck) {}
|
||||
|
||||
void DeclRead(serialization::DeclID ID, const Decl *D) override {
|
||||
void DeclRead(DeclID ID, const Decl *D) override {
|
||||
if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
|
||||
if (NamesToCheck.find(ND->getNameAsString()) != NamesToCheck.end()) {
|
||||
unsigned DiagID
|
||||
|
||||
@ -52,8 +52,7 @@ void MultiplexASTDeserializationListener::TypeRead(
|
||||
Listeners[i]->TypeRead(Idx, T);
|
||||
}
|
||||
|
||||
void MultiplexASTDeserializationListener::DeclRead(
|
||||
serialization::DeclID ID, const Decl *D) {
|
||||
void MultiplexASTDeserializationListener::DeclRead(DeclID ID, const Decl *D) {
|
||||
for (size_t i = 0, e = Listeners.size(); i != e; ++i)
|
||||
Listeners[i]->DeclRead(ID, D);
|
||||
}
|
||||
|
||||
@ -46,7 +46,7 @@ void MultiplexExternalSemaSource::AddSource(ExternalSemaSource *Source) {
|
||||
// ExternalASTSource.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Decl *MultiplexExternalSemaSource::GetExternalDecl(Decl::DeclID ID) {
|
||||
Decl *MultiplexExternalSemaSource::GetExternalDecl(DeclID ID) {
|
||||
for(size_t i = 0; i < Sources.size(); ++i)
|
||||
if (Decl *Result = Sources[i]->GetExternalDecl(ID))
|
||||
return Result;
|
||||
|
||||
@ -7668,8 +7668,7 @@ GlobalDeclID ASTReader::getGlobalDeclID(ModuleFile &F,
|
||||
return GlobalDeclID(ID + I->second);
|
||||
}
|
||||
|
||||
bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
|
||||
ModuleFile &M) const {
|
||||
bool ASTReader::isDeclIDFromModule(GlobalDeclID ID, ModuleFile &M) const {
|
||||
// Predefined decls aren't from any module.
|
||||
if (ID.get() < NUM_PREDEF_DECL_IDS)
|
||||
return false;
|
||||
@ -7821,8 +7820,8 @@ DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
|
||||
assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
|
||||
ModuleFile *Owner = I->second;
|
||||
|
||||
llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
|
||||
= M.GlobalToLocalDeclIDs.find(Owner);
|
||||
llvm::DenseMap<ModuleFile *, DeclID>::iterator Pos =
|
||||
M.GlobalToLocalDeclIDs.find(Owner);
|
||||
if (Pos == M.GlobalToLocalDeclIDs.end())
|
||||
return 0;
|
||||
|
||||
@ -7872,7 +7871,7 @@ void ASTReader::FindExternalLexicalDecls(
|
||||
if (!IsKindWeWant(K))
|
||||
continue;
|
||||
|
||||
auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
|
||||
auto ID = (DeclID) + LexicalDecls[I + 1];
|
||||
|
||||
// Don't add predefined declarations to the lexical context more
|
||||
// than once.
|
||||
@ -7954,7 +7953,7 @@ void ASTReader::FindFileRegionDecls(FileID File,
|
||||
SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
|
||||
|
||||
DeclIDComp DIDComp(*this, *DInfo.Mod);
|
||||
ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
|
||||
ArrayRef<LocalDeclID>::iterator BeginIt =
|
||||
llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
|
||||
if (BeginIt != DInfo.Decls.begin())
|
||||
--BeginIt;
|
||||
@ -7967,13 +7966,12 @@ void ASTReader::FindFileRegionDecls(FileID File,
|
||||
->isTopLevelDeclInObjCContainer())
|
||||
--BeginIt;
|
||||
|
||||
ArrayRef<serialization::LocalDeclID>::iterator EndIt =
|
||||
ArrayRef<LocalDeclID>::iterator EndIt =
|
||||
llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
|
||||
if (EndIt != DInfo.Decls.end())
|
||||
++EndIt;
|
||||
|
||||
for (ArrayRef<serialization::LocalDeclID>::iterator
|
||||
DIt = BeginIt; DIt != EndIt; ++DIt)
|
||||
for (ArrayRef<LocalDeclID>::iterator DIt = BeginIt; DIt != EndIt; ++DIt)
|
||||
Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
|
||||
}
|
||||
|
||||
|
||||
@ -279,7 +279,7 @@ namespace clang {
|
||||
IDs.erase(std::unique(IDs.begin(), IDs.end()), IDs.end());
|
||||
}
|
||||
|
||||
auto *Result = new (C) serialization::DeclID[1 + IDs.size()];
|
||||
auto *Result = new (C) DeclID[1 + IDs.size()];
|
||||
*Result = IDs.size();
|
||||
|
||||
std::copy(DeclIDIterator(IDs.begin()), DeclIDIterator(IDs.end()),
|
||||
@ -4215,7 +4215,7 @@ void ASTReader::loadDeclUpdateRecords(PendingUpdateRecord &Record) {
|
||||
// The declaration may have been modified by files later in the chain.
|
||||
// If this is the case, read the record containing the updates from each file
|
||||
// and pass it to ASTDeclReader to make the modifications.
|
||||
serialization::GlobalDeclID ID = Record.ID;
|
||||
GlobalDeclID ID = Record.ID;
|
||||
Decl *D = Record.D;
|
||||
ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
|
||||
DeclUpdateOffsetsMap::iterator UpdI = DeclUpdateOffsets.find(ID);
|
||||
@ -4357,7 +4357,7 @@ namespace {
|
||||
llvm::SmallPtrSetImpl<ObjCCategoryDecl *> &Deserialized;
|
||||
ObjCCategoryDecl *Tail = nullptr;
|
||||
llvm::DenseMap<DeclarationName, ObjCCategoryDecl *> NameCategoryMap;
|
||||
serialization::GlobalDeclID InterfaceID;
|
||||
GlobalDeclID InterfaceID;
|
||||
unsigned PreviousGeneration;
|
||||
|
||||
void add(ObjCCategoryDecl *Cat) {
|
||||
@ -4399,11 +4399,10 @@ namespace {
|
||||
}
|
||||
|
||||
public:
|
||||
ObjCCategoriesVisitor(ASTReader &Reader,
|
||||
ObjCInterfaceDecl *Interface,
|
||||
llvm::SmallPtrSetImpl<ObjCCategoryDecl *> &Deserialized,
|
||||
serialization::GlobalDeclID InterfaceID,
|
||||
unsigned PreviousGeneration)
|
||||
ObjCCategoriesVisitor(
|
||||
ASTReader &Reader, ObjCInterfaceDecl *Interface,
|
||||
llvm::SmallPtrSetImpl<ObjCCategoryDecl *> &Deserialized,
|
||||
GlobalDeclID InterfaceID, unsigned PreviousGeneration)
|
||||
: Reader(Reader), Interface(Interface), Deserialized(Deserialized),
|
||||
InterfaceID(InterfaceID), PreviousGeneration(PreviousGeneration) {
|
||||
// Populate the name -> category map with the set of known categories.
|
||||
@ -4457,8 +4456,7 @@ namespace {
|
||||
|
||||
} // namespace
|
||||
|
||||
void ASTReader::loadObjCCategories(serialization::GlobalDeclID ID,
|
||||
ObjCInterfaceDecl *D,
|
||||
void ASTReader::loadObjCCategories(GlobalDeclID ID, ObjCInterfaceDecl *D,
|
||||
unsigned PreviousGeneration) {
|
||||
ObjCCategoriesVisitor Visitor(*this, D, CategoriesDeserialized, ID,
|
||||
PreviousGeneration);
|
||||
|
||||
@ -5100,7 +5100,7 @@ void ASTWriter::WriteSpecialDeclRecords(Sema &SemaRef) {
|
||||
Stream.EmitRecord(SEMA_DECL_REFS, SemaDeclRefs);
|
||||
|
||||
// Write the record containing decls to be checked for deferred diags.
|
||||
SmallVector<serialization::DeclID, 64> DeclsToCheckForDeferredDiags;
|
||||
SmallVector<DeclID, 64> DeclsToCheckForDeferredDiags;
|
||||
for (auto *D : SemaRef.DeclsToCheckForDeferredDiags)
|
||||
if (wasDeclEmitted(D))
|
||||
DeclsToCheckForDeferredDiags.push_back(getDeclID(D));
|
||||
@ -6079,7 +6079,7 @@ void ASTWriter::associateDeclWithFile(const Decl *D, DeclID ID) {
|
||||
if (!Info)
|
||||
Info = std::make_unique<DeclIDInFileInfo>();
|
||||
|
||||
std::pair<unsigned, serialization::DeclID> LocDecl(Offset, ID);
|
||||
std::pair<unsigned, DeclID> LocDecl(Offset, ID);
|
||||
LocDeclIDsTy &Decls = Info->DeclIDs;
|
||||
Decls.push_back(LocDecl);
|
||||
}
|
||||
|
||||
@ -2786,9 +2786,9 @@ void ASTWriter::WriteDecl(ASTContext &Context, Decl *D) {
|
||||
"serializing");
|
||||
|
||||
// Determine the ID for this declaration.
|
||||
serialization::DeclID ID;
|
||||
DeclID ID;
|
||||
assert(!D->isFromASTFile() && "should not be emitting imported decl");
|
||||
serialization::DeclID &IDR = DeclIDs[D];
|
||||
DeclID &IDR = DeclIDs[D];
|
||||
if (IDR == 0)
|
||||
IDR = NextDeclID++;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user