//===- ASTBitCodes.h - Enum values for the PCH bitcode format ---*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This header defines Bitcode enum values for Clang serialized AST files.
//
// The enum values defined in this file should be considered permanent.  If
// new features are added, they should have values added at the end of the
// respective lists.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_SERIALIZATION_ASTBITCODES_H
#define LLVM_CLANG_SERIALIZATION_ASTBITCODES_H

#include "clang/AST/DeclarationName.h"
#include "clang/AST/Type.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/OperatorKinds.h"
#include "clang/Basic/SourceLocation.h"
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/Bitcode/BitCodes.h"
#include <cassert>
#include <cstdint>

namespace clang {
namespace serialization {

    /// AST file major version number supported by this version of
    /// Clang.
    ///
    /// Whenever the AST file format changes in a way that makes it
    /// incompatible with previous versions (such that a reader
    /// designed for the previous version could not support reading
    /// the new version), this number should be increased.
    ///
    /// Version 4 of AST files also requires that the version control branch and
    /// revision match exactly, since there is no backward compatibility of
    /// AST files at this time.
    const unsigned VERSION_MAJOR = 7;

    /// AST file minor version number supported by this version of
    /// Clang.
    ///
    /// Whenever the AST format changes in a way that is still
    /// compatible with previous versions (such that a reader designed
    /// for the previous version could still support reading the new
    /// version by ignoring new kinds of subblocks), this number
    /// should be increased.
    const unsigned VERSION_MINOR = 0;

    /// An ID number that refers to an identifier in an AST file.
    ///
    /// The ID numbers of identifiers are consecutive (in order of discovery)
    /// 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.
    using DeclID = uint32_t;

    // FIXME: Turn these into classes so we can have some type safety when
    // we go from local ID to global and vice-versa.
    using LocalDeclID = DeclID;
    using GlobalDeclID = DeclID;

    /// An ID number that refers to a type in an AST file.
    ///
    /// The ID of a type is partitioned into two parts: the lower
    /// three bits are used to store the const/volatile/restrict
    /// qualifiers (as with QualType) and the upper bits provide a
    /// type index. The type index values are partitioned into two
    /// sets. The values below NUM_PREDEF_TYPE_IDs are predefined type
    /// IDs (based on the PREDEF_TYPE_*_ID constants), with 0 as a
    /// placeholder for "no type". Values from NUM_PREDEF_TYPE_IDs are
    /// other types that have serialized representations.
    using TypeID = uint32_t;

    /// A type index; the type ID with the qualifier bits removed.
    class TypeIdx {
      uint32_t Idx = 0;

    public:
      TypeIdx() = default;
      explicit TypeIdx(uint32_t index) : Idx(index) {}

      uint32_t getIndex() const { return Idx; }

      TypeID asTypeID(unsigned FastQuals) const {
        if (Idx == uint32_t(-1))
          return TypeID(-1);

        return (Idx << Qualifiers::FastWidth) | FastQuals;
      }

      static TypeIdx fromTypeID(TypeID ID) {
        if (ID == TypeID(-1))
          return TypeIdx(-1);

        return TypeIdx(ID >> Qualifiers::FastWidth);
      }
    };

    /// A structure for putting "fast"-unqualified QualTypes into a
    /// DenseMap.  This uses the standard pointer hash function.
    struct UnsafeQualTypeDenseMapInfo {
      static bool isEqual(QualType A, QualType B) { return A == B; }

      static QualType getEmptyKey() {
        return QualType::getFromOpaquePtr((void*) 1);
      }

      static QualType getTombstoneKey() {
        return QualType::getFromOpaquePtr((void*) 2);
      }

      static unsigned getHashValue(QualType T) {
        assert(!T.getLocalFastQualifiers() &&
               "hash invalid for types with fast quals");
        uintptr_t v = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
        return (unsigned(v) >> 4) ^ (unsigned(v) >> 9);
      }
    };

    /// An ID number that refers to an identifier in an AST file.
    using IdentID = uint32_t;

    /// The number of predefined identifier IDs.
    const unsigned int NUM_PREDEF_IDENT_IDS = 1;

    /// An ID number that refers to a macro in an AST file.
    using MacroID = uint32_t;

    /// A global ID number that refers to a macro in an AST file.
    using GlobalMacroID = uint32_t;

    /// A local to a module ID number that refers to a macro in an
    /// AST file.
    using LocalMacroID = uint32_t;

    /// The number of predefined macro IDs.
    const unsigned int NUM_PREDEF_MACRO_IDS = 1;

    /// An ID number that refers to an ObjC selector in an AST file.
    using SelectorID = uint32_t;

    /// The number of predefined selector IDs.
    const unsigned int NUM_PREDEF_SELECTOR_IDS = 1;

    /// An ID number that refers to a set of CXXBaseSpecifiers in an
    /// AST file.
    using CXXBaseSpecifiersID = uint32_t;

    /// An ID number that refers to a list of CXXCtorInitializers in an
    /// AST file.
    using CXXCtorInitializersID = uint32_t;

    /// An ID number that refers to an entity in the detailed
    /// preprocessing record.
    using PreprocessedEntityID = uint32_t;

    /// An ID number that refers to a submodule in a module file.
    using SubmoduleID = uint32_t;

    /// The number of predefined submodule IDs.
    const unsigned int NUM_PREDEF_SUBMODULE_IDS = 1;

    /// Source range/offset of a preprocessed entity.
    struct PPEntityOffset {
      /// Raw source location of beginning of range.
      unsigned Begin;

      /// Raw source location of end of range.
      unsigned End;

      /// Offset in the AST file.
      uint32_t BitOffset;

      PPEntityOffset(SourceRange R, uint32_t BitOffset)
        : Begin(R.getBegin().getRawEncoding()),
          End(R.getEnd().getRawEncoding()), BitOffset(BitOffset) {}

      SourceLocation getBegin() const {
        return SourceLocation::getFromRawEncoding(Begin);
      }

      SourceLocation getEnd() const {
        return SourceLocation::getFromRawEncoding(End);
      }
    };

    /// Source range of a skipped preprocessor region
    struct PPSkippedRange {
      /// Raw source location of beginning of range.
      unsigned Begin;
      /// Raw source location of end of range.
      unsigned End;

      PPSkippedRange(SourceRange R)
        : Begin(R.getBegin().getRawEncoding()),
          End(R.getEnd().getRawEncoding()) { }

      SourceLocation getBegin() const {
        return SourceLocation::getFromRawEncoding(Begin);
      }
      SourceLocation getEnd() const {
        return SourceLocation::getFromRawEncoding(End);
      }
    };

    /// Source range/offset of a preprocessed entity.
    struct DeclOffset {
      /// Raw source location.
      unsigned Loc = 0;

      /// Offset in the AST file.
      uint32_t BitOffset = 0;

      DeclOffset() = default;
      DeclOffset(SourceLocation Loc, uint32_t BitOffset)
        : Loc(Loc.getRawEncoding()), BitOffset(BitOffset) {}

      void setLocation(SourceLocation L) {
        Loc = L.getRawEncoding();
      }

      SourceLocation getLocation() const {
        return SourceLocation::getFromRawEncoding(Loc);
      }
    };

    /// The number of predefined preprocessed entity IDs.
    const unsigned int NUM_PREDEF_PP_ENTITY_IDS = 1;

    /// Describes the various kinds of blocks that occur within
    /// an AST file.
    enum BlockIDs {
      /// The AST block, which acts as a container around the
      /// full AST block.
      AST_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,

      /// The block containing information about the source
      /// manager.
      SOURCE_MANAGER_BLOCK_ID,

      /// The block containing information about the
      /// preprocessor.
      PREPROCESSOR_BLOCK_ID,

      /// The block containing the definitions of all of the
      /// types and decls used within the AST file.
      DECLTYPES_BLOCK_ID,

      /// The block containing the detailed preprocessing record.
      PREPROCESSOR_DETAIL_BLOCK_ID,

      /// The block containing the submodule structure.
      SUBMODULE_BLOCK_ID,

      /// The block containing comments.
      COMMENTS_BLOCK_ID,

      /// The control block, which contains all of the
      /// information that needs to be validated prior to committing
      /// to loading the AST file.
      CONTROL_BLOCK_ID,

      /// The block of input files, which were used as inputs
      /// to create this AST file.
      ///
      /// This block is part of the control block.
      INPUT_FILES_BLOCK_ID,

      /// The block of configuration options, used to check that
      /// a module is being used in a configuration compatible with the
      /// configuration in which it was built.
      ///
      /// This block is part of the control block.
      OPTIONS_BLOCK_ID,

      /// A block containing a module file extension.
      EXTENSION_BLOCK_ID,

      /// A block with unhashed content.
      ///
      /// These records should not change the \a ASTFileSignature.  See \a
      /// UnhashedControlBlockRecordTypes for the list of records.
      UNHASHED_CONTROL_BLOCK_ID,
    };

    /// Record types that occur within the control block.
    enum ControlRecordTypes {
      /// AST file metadata, including the AST file version number
      /// and information about the compiler used to build this AST file.
      METADATA = 1,

      /// Record code for the list of other AST files imported by
      /// this AST file.
      IMPORTS,

      /// Record code for the original file that was used to
      /// generate the AST file, including both its file ID and its
      /// name.
      ORIGINAL_FILE,

      /// The directory that the PCH was originally created in.
      ORIGINAL_PCH_DIR,

      /// Record code for file ID of the file or buffer that was used to
      /// generate the AST file.
      ORIGINAL_FILE_ID,

      /// Offsets into the input-files block where input files
      /// reside.
      INPUT_FILE_OFFSETS,

      /// Record code for the module name.
      MODULE_NAME,

      /// Record code for the module map file that was used to build this
      /// AST file.
      MODULE_MAP_FILE,

      /// Record code for the module build directory.
      MODULE_DIRECTORY,
    };

    /// Record types that occur within the options block inside
    /// the control block.
    enum OptionsRecordTypes {
      /// Record code for the language options table.
      ///
      /// The record with this code contains the contents of the
      /// LangOptions structure. We serialize the entire contents of
      /// the structure, and let the reader decide which options are
      /// actually important to check.
      LANGUAGE_OPTIONS = 1,

      /// Record code for the target options table.
      TARGET_OPTIONS,

      /// Record code for the filesystem options table.
      FILE_SYSTEM_OPTIONS,

      /// Record code for the headers search options table.
      HEADER_SEARCH_OPTIONS,

      /// Record code for the preprocessor options table.
      PREPROCESSOR_OPTIONS,
    };

    /// Record codes for the unhashed control block.
    enum UnhashedControlBlockRecordTypes {
      /// Record code for the signature that identifiers this AST file.
      SIGNATURE = 1,

      /// Record code for the diagnostic options table.
      DIAGNOSTIC_OPTIONS,

      /// Record code for \#pragma diagnostic mappings.
      DIAG_PRAGMA_MAPPINGS,
    };

    /// Record code for extension blocks.
    enum ExtensionBlockRecordTypes {
      /// Metadata describing this particular extension.
      EXTENSION_METADATA = 1,

      /// The first record ID allocated to the extensions themselves.
      FIRST_EXTENSION_RECORD_ID = 4
    };

    /// Record types that occur within the input-files block
    /// inside the control block.
    enum InputFileRecordTypes {
      /// An input file.
      INPUT_FILE = 1
    };

    /// Record types that occur within the AST block itself.
    enum ASTRecordTypes {
      /// Record code for the offsets of each type.
      ///
      /// The TYPE_OFFSET constant describes the record that occurs
      /// within the AST block. The record itself is an array of offsets that
      /// point into the declarations and types block (identified by
      /// DECLTYPES_BLOCK_ID). The index into the array is based on the ID
      /// of a type. For a given type ID @c T, the lower three bits of
      /// @c T are its qualifiers (const, volatile, restrict), as in
      /// the QualType class. The upper bits, after being shifted and
      /// subtracting NUM_PREDEF_TYPE_IDS, are used to index into the
      /// TYPE_OFFSET block to determine the offset of that type's
      /// corresponding record within the DECLTYPES_BLOCK_ID block.
      TYPE_OFFSET = 1,

      /// Record code for the offsets of each decl.
      ///
      /// The DECL_OFFSET constant describes the record that occurs
      /// within the block identified by DECL_OFFSETS_BLOCK_ID within
      /// the AST block. The record itself is an array of offsets that
      /// point into the declarations and types block (identified by
      /// DECLTYPES_BLOCK_ID). The declaration ID is an index into this
      /// record, after subtracting one to account for the use of
      /// declaration ID 0 for a NULL declaration pointer. Index 0 is
      /// reserved for the translation unit declaration.
      DECL_OFFSET = 2,

      /// Record code for the table of offsets of each
      /// identifier ID.
      ///
      /// The offset table contains offsets into the blob stored in
      /// the IDENTIFIER_TABLE record. Each offset points to the
      /// NULL-terminated string that corresponds to that identifier.
      IDENTIFIER_OFFSET = 3,

      /// This is so that older clang versions, before the introduction
      /// of the control block, can read and reject the newer PCH format.
      /// *DON'T CHANGE THIS NUMBER*.
      METADATA_OLD_FORMAT = 4,

      /// Record code for the identifier table.
      ///
      /// The identifier table is a simple blob that contains
      /// NULL-terminated strings for all of the identifiers
      /// referenced by the AST file. The IDENTIFIER_OFFSET table
      /// contains the mapping from identifier IDs to the characters
      /// in this blob. Note that the starting offsets of all of the
      /// identifiers are odd, so that, when the identifier offset
      /// table is loaded in, we can use the low bit to distinguish
      /// between offsets (for unresolved identifier IDs) and
      /// IdentifierInfo pointers (for already-resolved identifier
      /// IDs).
      IDENTIFIER_TABLE = 5,

      /// Record code for the array of eagerly deserialized decls.
      ///
      /// The AST file contains a list of all of the declarations that should be
      /// eagerly deserialized present within the parsed headers, stored as an
      /// array of declaration IDs. These declarations will be
      /// reported to the AST consumer after the AST file has been
      /// read, since their presence can affect the semantics of the
      /// program (e.g., for code generation).
      EAGERLY_DESERIALIZED_DECLS = 6,

      /// Record code for the set of non-builtin, special
      /// types.
      ///
      /// This record contains the type IDs for the various type nodes
      /// that are constructed during semantic analysis (e.g.,
      /// __builtin_va_list). The SPECIAL_TYPE_* constants provide
      /// offsets into this record.
      SPECIAL_TYPES = 7,

      /// Record code for the extra statistics we gather while
      /// generating an AST file.
      STATISTICS = 8,

      /// Record code for the array of tentative definitions.
      TENTATIVE_DEFINITIONS = 9,

      // ID 10 used to be for a list of extern "C" declarations.

      /// Record code for the table of offsets into the
      /// Objective-C method pool.
      SELECTOR_OFFSETS = 11,

      /// Record code for the Objective-C method pool,
      METHOD_POOL = 12,

      /// The value of the next __COUNTER__ to dispense.
      /// [PP_COUNTER_VALUE, Val]
      PP_COUNTER_VALUE = 13,

      /// Record code for the table of offsets into the block
      /// of source-location information.
      SOURCE_LOCATION_OFFSETS = 14,

      /// Record code for the set of source location entries
      /// that need to be preloaded by the AST reader.
      ///
      /// This set contains the source location entry for the
      /// predefines buffer and for any file entries that need to be
      /// preloaded.
      SOURCE_LOCATION_PRELOADS = 15,

      /// Record code for the set of ext_vector type names.
      EXT_VECTOR_DECLS = 16,

      /// Record code for the array of unused file scoped decls.
      UNUSED_FILESCOPED_DECLS = 17,

      /// Record code for the table of offsets to entries in the
      /// preprocessing record.
      PPD_ENTITIES_OFFSETS = 18,

      /// Record code for the array of VTable uses.
      VTABLE_USES = 19,

      // ID 20 used to be for a list of dynamic classes.

      /// Record code for referenced selector pool.
      REFERENCED_SELECTOR_POOL = 21,

      /// Record code for an update to the TU's lexically contained
      /// declarations.
      TU_UPDATE_LEXICAL = 22,

      // ID 23 used to be for a list of local redeclarations.

      /// Record code for declarations that Sema keeps references of.
      SEMA_DECL_REFS = 24,

      /// Record code for weak undeclared identifiers.
      WEAK_UNDECLARED_IDENTIFIERS = 25,

      /// Record code for pending implicit instantiations.
      PENDING_IMPLICIT_INSTANTIATIONS = 26,

      // ID 27 used to be for a list of replacement decls.

      /// Record code for an update to a decl context's lookup table.
      ///
      /// In practice, this should only be used for the TU and namespaces.
      UPDATE_VISIBLE = 28,

      /// Record for offsets of DECL_UPDATES records for declarations
      /// that were modified after being deserialized and need updates.
      DECL_UPDATE_OFFSETS = 29,

      // ID 30 used to be a decl update record. These are now in the DECLTYPES
      // block.

      // ID 31 used to be a list of offsets to DECL_CXX_BASE_SPECIFIERS records.

      // ID 32 used to be the code for \#pragma diagnostic mappings.

      /// Record code for special CUDA declarations.
      CUDA_SPECIAL_DECL_REFS = 33,

      /// Record code for header search information.
      HEADER_SEARCH_TABLE = 34,

      /// Record code for floating point \#pragma options.
      FP_PRAGMA_OPTIONS = 35,

      /// Record code for enabled OpenCL extensions.
      OPENCL_EXTENSIONS = 36,

      /// The list of delegating constructor declarations.
      DELEGATING_CTORS = 37,

      /// Record code for the set of known namespaces, which are used
      /// for typo correction.
      KNOWN_NAMESPACES = 38,

      /// Record code for the remapping information used to relate
      /// loaded modules to the various offsets and IDs(e.g., source location
      /// offests, declaration and type IDs) that are used in that module to
      /// refer to other modules.
      MODULE_OFFSET_MAP = 39,

      /// Record code for the source manager line table information,
      /// which stores information about \#line directives.
      SOURCE_MANAGER_LINE_TABLE = 40,

      /// Record code for map of Objective-C class definition IDs to the
      /// ObjC categories in a module that are attached to that class.
      OBJC_CATEGORIES_MAP = 41,

      /// Record code for a file sorted array of DeclIDs in a module.
      FILE_SORTED_DECLS = 42,

      /// Record code for an array of all of the (sub)modules that were
      /// imported by the AST file.
      IMPORTED_MODULES = 43,

      // ID 44 used to be a table of merged canonical declarations.
      // ID 45 used to be a list of declaration IDs of local redeclarations.

      /// Record code for the array of Objective-C categories (including
      /// extensions).
      ///
      /// This array can only be interpreted properly using the Objective-C
      /// categories map.
      OBJC_CATEGORIES = 46,

      /// Record code for the table of offsets of each macro ID.
      ///
      /// The offset table contains offsets into the blob stored in
      /// the preprocessor block. Each offset points to the corresponding
      /// macro definition.
      MACRO_OFFSET = 47,

      /// A list of "interesting" identifiers. Only used in C++ (where we
      /// don't normally do lookups into the serialized identifier table). These
      /// are eagerly deserialized.
      INTERESTING_IDENTIFIERS = 48,

      /// Record code for undefined but used functions and variables that
      /// need a definition in this TU.
      UNDEFINED_BUT_USED = 49,

      /// Record code for late parsed template functions.
      LATE_PARSED_TEMPLATE = 50,

      /// Record code for \#pragma optimize options.
      OPTIMIZE_PRAGMA_OPTIONS = 51,

      /// Record code for potentially unused local typedef names.
      UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES = 52,

      // ID 53 used to be a table of constructor initializer records.

      /// Delete expressions that will be analyzed later.
      DELETE_EXPRS_TO_ANALYZE = 54,

      /// Record code for \#pragma ms_struct options.
      MSSTRUCT_PRAGMA_OPTIONS = 55,

      /// Record code for \#pragma ms_struct options.
      POINTERS_TO_MEMBERS_PRAGMA_OPTIONS = 56,

      /// Number of unmatched #pragma clang cuda_force_host_device begin
      /// directives we've seen.
      CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH = 57,

      /// Record code for types associated with OpenCL extensions.
      OPENCL_EXTENSION_TYPES = 58,

      /// Record code for declarations associated with OpenCL extensions.
      OPENCL_EXTENSION_DECLS = 59,

      MODULAR_CODEGEN_DECLS = 60,

      /// Record code for \#pragma pack options.
      PACK_PRAGMA_OPTIONS = 61,

      /// The stack of open #ifs/#ifdefs recorded in a preamble.
      PP_CONDITIONAL_STACK = 62,

      /// A table of skipped ranges within the preprocessing record.
      PPD_SKIPPED_RANGES = 63
    };

    /// Record types used within a source manager block.
    enum SourceManagerRecordTypes {
      /// Describes a source location entry (SLocEntry) for a
      /// file.
      SM_SLOC_FILE_ENTRY = 1,

      /// Describes a source location entry (SLocEntry) for a
      /// buffer.
      SM_SLOC_BUFFER_ENTRY = 2,

      /// Describes a blob that contains the data for a buffer
      /// entry. This kind of record always directly follows a
      /// SM_SLOC_BUFFER_ENTRY record or a SM_SLOC_FILE_ENTRY with an
      /// overridden buffer.
      SM_SLOC_BUFFER_BLOB = 3,

      /// Describes a zlib-compressed blob that contains the data for
      /// a buffer entry.
      SM_SLOC_BUFFER_BLOB_COMPRESSED = 4,

      /// Describes a source location entry (SLocEntry) for a
      /// macro expansion.
      SM_SLOC_EXPANSION_ENTRY = 5
    };

    /// Record types used within a preprocessor block.
    enum PreprocessorRecordTypes {
      // The macros in the PP section are a PP_MACRO_* instance followed by a
      // list of PP_TOKEN instances for each token in the definition.

      /// An object-like macro definition.
      /// [PP_MACRO_OBJECT_LIKE, IdentInfoID, SLoc, IsUsed]
      PP_MACRO_OBJECT_LIKE = 1,

      /// A function-like macro definition.
      /// [PP_MACRO_FUNCTION_LIKE, \<ObjectLikeStuff>, IsC99Varargs,
      /// IsGNUVarars, NumArgs, ArgIdentInfoID* ]
      PP_MACRO_FUNCTION_LIKE = 2,

      /// Describes one token.
      /// [PP_TOKEN, SLoc, Length, IdentInfoID, Kind, Flags]
      PP_TOKEN = 3,

      /// The macro directives history for a particular identifier.
      PP_MACRO_DIRECTIVE_HISTORY = 4,

      /// A macro directive exported by a module.
      /// [PP_MODULE_MACRO, SubmoduleID, MacroID, (Overridden SubmoduleID)*]
      PP_MODULE_MACRO = 5,
    };

    /// Record types used within a preprocessor detail block.
    enum PreprocessorDetailRecordTypes {
      /// Describes a macro expansion within the preprocessing record.
      PPD_MACRO_EXPANSION = 0,

      /// Describes a macro definition within the preprocessing record.
      PPD_MACRO_DEFINITION = 1,

      /// Describes an inclusion directive within the preprocessing
      /// record.
      PPD_INCLUSION_DIRECTIVE = 2
    };

    /// Record types used within a submodule description block.
    enum SubmoduleRecordTypes {
      /// Metadata for submodules as a whole.
      SUBMODULE_METADATA = 0,

      /// Defines the major attributes of a submodule, including its
      /// name and parent.
      SUBMODULE_DEFINITION = 1,

      /// Specifies the umbrella header used to create this module,
      /// if any.
      SUBMODULE_UMBRELLA_HEADER = 2,

      /// Specifies a header that falls into this (sub)module.
      SUBMODULE_HEADER = 3,

      /// Specifies a top-level header that falls into this (sub)module.
      SUBMODULE_TOPHEADER = 4,

      /// Specifies an umbrella directory.
      SUBMODULE_UMBRELLA_DIR = 5,

      /// Specifies the submodules that are imported by this
      /// submodule.
      SUBMODULE_IMPORTS = 6,

      /// Specifies the submodules that are re-exported from this
      /// submodule.
      SUBMODULE_EXPORTS = 7,

      /// Specifies a required feature.
      SUBMODULE_REQUIRES = 8,

      /// Specifies a header that has been explicitly excluded
      /// from this submodule.
      SUBMODULE_EXCLUDED_HEADER = 9,

      /// Specifies a library or framework to link against.
      SUBMODULE_LINK_LIBRARY = 10,

      /// Specifies a configuration macro for this module.
      SUBMODULE_CONFIG_MACRO = 11,

      /// Specifies a conflict with another module.
      SUBMODULE_CONFLICT = 12,

      /// Specifies a header that is private to this submodule.
      SUBMODULE_PRIVATE_HEADER = 13,

      /// Specifies a header that is part of the module but must be
      /// textually included.
      SUBMODULE_TEXTUAL_HEADER = 14,

      /// Specifies a header that is private to this submodule but
      /// must be textually included.
      SUBMODULE_PRIVATE_TEXTUAL_HEADER = 15,

      /// Specifies some declarations with initializers that must be
      /// emitted to initialize the module.
      SUBMODULE_INITIALIZERS = 16,

      /// Specifies the name of the module that will eventually
      /// re-export the entities in this module.
      SUBMODULE_EXPORT_AS = 17,
    };

    /// Record types used within a comments block.
    enum CommentRecordTypes {
      COMMENTS_RAW_COMMENT = 0
    };

    /// \defgroup ASTAST AST file AST constants
    ///
    /// The constants in this group describe various components of the
    /// abstract syntax tree within an AST file.
    ///
    /// @{

    /// Predefined type IDs.
    ///
    /// These type IDs correspond to predefined types in the AST
    /// context, such as built-in types (int) and special place-holder
    /// types (the \<overload> and \<dependent> type markers). Such
    /// types are never actually serialized, since they will be built
    /// by the AST context when it is created.
    enum PredefinedTypeIDs {
      /// The NULL type.
      PREDEF_TYPE_NULL_ID       = 0,

      /// The void type.
      PREDEF_TYPE_VOID_ID       = 1,

      /// The 'bool' or '_Bool' type.
      PREDEF_TYPE_BOOL_ID       = 2,

      /// The 'char' type, when it is unsigned.
      PREDEF_TYPE_CHAR_U_ID     = 3,

      /// The 'unsigned char' type.
      PREDEF_TYPE_UCHAR_ID      = 4,

      /// The 'unsigned short' type.
      PREDEF_TYPE_USHORT_ID     = 5,

      /// The 'unsigned int' type.
      PREDEF_TYPE_UINT_ID       = 6,

      /// The 'unsigned long' type.
      PREDEF_TYPE_ULONG_ID      = 7,

      /// The 'unsigned long long' type.
      PREDEF_TYPE_ULONGLONG_ID  = 8,

      /// The 'char' type, when it is signed.
      PREDEF_TYPE_CHAR_S_ID     = 9,

      /// The 'signed char' type.
      PREDEF_TYPE_SCHAR_ID      = 10,

      /// The C++ 'wchar_t' type.
      PREDEF_TYPE_WCHAR_ID      = 11,

      /// The (signed) 'short' type.
      PREDEF_TYPE_SHORT_ID      = 12,

      /// The (signed) 'int' type.
      PREDEF_TYPE_INT_ID        = 13,

      /// The (signed) 'long' type.
      PREDEF_TYPE_LONG_ID       = 14,

      /// The (signed) 'long long' type.
      PREDEF_TYPE_LONGLONG_ID   = 15,

      /// The 'float' type.
      PREDEF_TYPE_FLOAT_ID      = 16,

      /// The 'double' type.
      PREDEF_TYPE_DOUBLE_ID     = 17,

      /// The 'long double' type.
      PREDEF_TYPE_LONGDOUBLE_ID = 18,

      /// The placeholder type for overloaded function sets.
      PREDEF_TYPE_OVERLOAD_ID   = 19,

      /// The placeholder type for dependent types.
      PREDEF_TYPE_DEPENDENT_ID  = 20,

      /// The '__uint128_t' type.
      PREDEF_TYPE_UINT128_ID    = 21,

      /// The '__int128_t' type.
      PREDEF_TYPE_INT128_ID     = 22,

      /// The type of 'nullptr'.
      PREDEF_TYPE_NULLPTR_ID    = 23,

      /// The C++ 'char16_t' type.
      PREDEF_TYPE_CHAR16_ID     = 24,

      /// The C++ 'char32_t' type.
      PREDEF_TYPE_CHAR32_ID     = 25,

      /// The ObjC 'id' type.
      PREDEF_TYPE_OBJC_ID       = 26,

      /// The ObjC 'Class' type.
      PREDEF_TYPE_OBJC_CLASS    = 27,

      /// The ObjC 'SEL' type.
      PREDEF_TYPE_OBJC_SEL      = 28,

      /// The 'unknown any' placeholder type.
      PREDEF_TYPE_UNKNOWN_ANY   = 29,

      /// The placeholder type for bound member functions.
      PREDEF_TYPE_BOUND_MEMBER  = 30,

      /// The "auto" deduction type.
      PREDEF_TYPE_AUTO_DEDUCT   = 31,

      /// The "auto &&" deduction type.
      PREDEF_TYPE_AUTO_RREF_DEDUCT = 32,

      /// The OpenCL 'half' / ARM NEON __fp16 type.
      PREDEF_TYPE_HALF_ID       = 33,

      /// ARC's unbridged-cast placeholder type.
      PREDEF_TYPE_ARC_UNBRIDGED_CAST = 34,

      /// The pseudo-object placeholder type.
      PREDEF_TYPE_PSEUDO_OBJECT = 35,

      /// The placeholder type for builtin functions.
      PREDEF_TYPE_BUILTIN_FN = 36,

      /// OpenCL event type.
      PREDEF_TYPE_EVENT_ID      = 37,

      /// OpenCL clk event type.
      PREDEF_TYPE_CLK_EVENT_ID  = 38,

      /// OpenCL sampler type.
      PREDEF_TYPE_SAMPLER_ID    = 39,

      /// OpenCL queue type.
      PREDEF_TYPE_QUEUE_ID      = 40,

      /// OpenCL reserve_id type.
      PREDEF_TYPE_RESERVE_ID_ID = 41,

      /// The placeholder type for OpenMP array section.
      PREDEF_TYPE_OMP_ARRAY_SECTION = 42,

      /// The '__float128' type
      PREDEF_TYPE_FLOAT128_ID = 43,

      /// The '_Float16' type
      PREDEF_TYPE_FLOAT16_ID = 44,

      /// The C++ 'char8_t' type.
      PREDEF_TYPE_CHAR8_ID = 45,

      /// \brief The 'short _Accum' type
      PREDEF_TYPE_SHORT_ACCUM_ID    = 46,

      /// \brief The '_Accum' type
      PREDEF_TYPE_ACCUM_ID      = 47,

      /// \brief The 'long _Accum' type
      PREDEF_TYPE_LONG_ACCUM_ID = 48,

      /// \brief The 'unsigned short _Accum' type
      PREDEF_TYPE_USHORT_ACCUM_ID   = 49,

      /// \brief The 'unsigned _Accum' type
      PREDEF_TYPE_UACCUM_ID     = 50,

      /// \brief The 'unsigned long _Accum' type
      PREDEF_TYPE_ULONG_ACCUM_ID    = 51,

      /// \brief The 'short _Fract' type
      PREDEF_TYPE_SHORT_FRACT_ID = 52,

      /// \brief The '_Fract' type
      PREDEF_TYPE_FRACT_ID = 53,

      /// \brief The 'long _Fract' type
      PREDEF_TYPE_LONG_FRACT_ID = 54,

      /// \brief The 'unsigned short _Fract' type
      PREDEF_TYPE_USHORT_FRACT_ID = 55,

      /// \brief The 'unsigned _Fract' type
      PREDEF_TYPE_UFRACT_ID = 56,

      /// \brief The 'unsigned long _Fract' type
      PREDEF_TYPE_ULONG_FRACT_ID = 57,

      /// \brief The '_Sat short _Accum' type
      PREDEF_TYPE_SAT_SHORT_ACCUM_ID = 58,

      /// \brief The '_Sat _Accum' type
      PREDEF_TYPE_SAT_ACCUM_ID = 59,

      /// \brief The '_Sat long _Accum' type
      PREDEF_TYPE_SAT_LONG_ACCUM_ID = 60,

      /// \brief The '_Sat unsigned short _Accum' type
      PREDEF_TYPE_SAT_USHORT_ACCUM_ID = 61,

      /// \brief The '_Sat unsigned _Accum' type
      PREDEF_TYPE_SAT_UACCUM_ID = 62,

      /// \brief The '_Sat unsigned long _Accum' type
      PREDEF_TYPE_SAT_ULONG_ACCUM_ID = 63,

      /// \brief The '_Sat short _Fract' type
      PREDEF_TYPE_SAT_SHORT_FRACT_ID = 64,

      /// \brief The '_Sat _Fract' type
      PREDEF_TYPE_SAT_FRACT_ID = 65,

      /// \brief The '_Sat long _Fract' type
      PREDEF_TYPE_SAT_LONG_FRACT_ID = 66,

      /// \brief The '_Sat unsigned short _Fract' type
      PREDEF_TYPE_SAT_USHORT_FRACT_ID = 67,

      /// \brief The '_Sat unsigned _Fract' type
      PREDEF_TYPE_SAT_UFRACT_ID = 68,

      /// \brief The '_Sat unsigned long _Fract' type
      PREDEF_TYPE_SAT_ULONG_FRACT_ID = 69,

      /// OpenCL image types with auto numeration
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
      PREDEF_TYPE_##Id##_ID,
#include "clang/Basic/OpenCLImageTypes.def"
    };

    /// The number of predefined type IDs that are reserved for
    /// the PREDEF_TYPE_* constants.
    ///
    /// Type IDs for non-predefined types will start at
    /// NUM_PREDEF_TYPE_IDs.
    const unsigned NUM_PREDEF_TYPE_IDS = 200;

    /// Record codes for each kind of type.
    ///
    /// These constants describe the type records that can occur within a
    /// block identified by DECLTYPES_BLOCK_ID in the AST file. Each
    /// constant describes a record for a specific type class in the
    /// AST. Note that DeclCode values share this code space.
    enum TypeCode {
      /// An ExtQualType record.
      TYPE_EXT_QUAL = 1,

      /// A ComplexType record.
      TYPE_COMPLEX = 3,

      /// A PointerType record.
      TYPE_POINTER = 4,

      /// A BlockPointerType record.
      TYPE_BLOCK_POINTER = 5,

      /// An LValueReferenceType record.
      TYPE_LVALUE_REFERENCE = 6,

      /// An RValueReferenceType record.
      TYPE_RVALUE_REFERENCE = 7,

      /// A MemberPointerType record.
      TYPE_MEMBER_POINTER = 8,

      /// A ConstantArrayType record.
      TYPE_CONSTANT_ARRAY = 9,

      /// An IncompleteArrayType record.
      TYPE_INCOMPLETE_ARRAY = 10,

      /// A VariableArrayType record.
      TYPE_VARIABLE_ARRAY = 11,

      /// A VectorType record.
      TYPE_VECTOR = 12,

      /// An ExtVectorType record.
      TYPE_EXT_VECTOR = 13,

      /// A FunctionNoProtoType record.
      TYPE_FUNCTION_NO_PROTO = 14,

      /// A FunctionProtoType record.
      TYPE_FUNCTION_PROTO = 15,

      /// A TypedefType record.
      TYPE_TYPEDEF = 16,

      /// A TypeOfExprType record.
      TYPE_TYPEOF_EXPR = 17,

      /// A TypeOfType record.
      TYPE_TYPEOF = 18,

      /// A RecordType record.
      TYPE_RECORD = 19,

      /// An EnumType record.
      TYPE_ENUM = 20,

      /// An ObjCInterfaceType record.
      TYPE_OBJC_INTERFACE = 21,

      /// An ObjCObjectPointerType record.
      TYPE_OBJC_OBJECT_POINTER = 22,

      /// a DecltypeType record.
      TYPE_DECLTYPE = 23,

      /// An ElaboratedType record.
      TYPE_ELABORATED = 24,

      /// A SubstTemplateTypeParmType record.
      TYPE_SUBST_TEMPLATE_TYPE_PARM = 25,

      /// An UnresolvedUsingType record.
      TYPE_UNRESOLVED_USING = 26,

      /// An InjectedClassNameType record.
      TYPE_INJECTED_CLASS_NAME = 27,

      /// An ObjCObjectType record.
      TYPE_OBJC_OBJECT = 28,

      /// An TemplateTypeParmType record.
      TYPE_TEMPLATE_TYPE_PARM = 29,

      /// An TemplateSpecializationType record.
      TYPE_TEMPLATE_SPECIALIZATION = 30,

      /// A DependentNameType record.
      TYPE_DEPENDENT_NAME = 31,

      /// A DependentTemplateSpecializationType record.
      TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION = 32,

      /// A DependentSizedArrayType record.
      TYPE_DEPENDENT_SIZED_ARRAY = 33,

      /// A ParenType record.
      TYPE_PAREN = 34,

      /// A PackExpansionType record.
      TYPE_PACK_EXPANSION = 35,

      /// An AttributedType record.
      TYPE_ATTRIBUTED = 36,

      /// A SubstTemplateTypeParmPackType record.
      TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK = 37,

      /// A AutoType record.
      TYPE_AUTO = 38,

      /// A UnaryTransformType record.
      TYPE_UNARY_TRANSFORM = 39,

      /// An AtomicType record.
      TYPE_ATOMIC = 40,

      /// A DecayedType record.
      TYPE_DECAYED = 41,

      /// An AdjustedType record.
      TYPE_ADJUSTED = 42,

      /// A PipeType record.
      TYPE_PIPE = 43,

      /// An ObjCTypeParamType record.
      TYPE_OBJC_TYPE_PARAM = 44,

      /// A DeducedTemplateSpecializationType record.
      TYPE_DEDUCED_TEMPLATE_SPECIALIZATION = 45,

      /// A DependentSizedExtVectorType record.
      TYPE_DEPENDENT_SIZED_EXT_VECTOR = 46,

      /// A DependentAddressSpaceType record.
      TYPE_DEPENDENT_ADDRESS_SPACE = 47,

      /// A dependentSizedVectorType record.
      TYPE_DEPENDENT_SIZED_VECTOR = 48
    };

    /// The type IDs for special types constructed by semantic
    /// analysis.
    ///
    /// The constants in this enumeration are indices into the
    /// SPECIAL_TYPES record.
    enum SpecialTypeIDs {
      /// CFConstantString type
      SPECIAL_TYPE_CF_CONSTANT_STRING          = 0,

      /// C FILE typedef type
      SPECIAL_TYPE_FILE                        = 1,

      /// C jmp_buf typedef type
      SPECIAL_TYPE_JMP_BUF                     = 2,

      /// C sigjmp_buf typedef type
      SPECIAL_TYPE_SIGJMP_BUF                  = 3,

      /// Objective-C "id" redefinition type
      SPECIAL_TYPE_OBJC_ID_REDEFINITION        = 4,

      /// Objective-C "Class" redefinition type
      SPECIAL_TYPE_OBJC_CLASS_REDEFINITION     = 5,

      /// Objective-C "SEL" redefinition type
      SPECIAL_TYPE_OBJC_SEL_REDEFINITION       = 6,

      /// C ucontext_t typedef type
      SPECIAL_TYPE_UCONTEXT_T                  = 7
    };

    /// 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 extern "C" context.
      PREDEF_DECL_EXTERN_C_CONTEXT_ID = 12,

      /// The internal '__make_integer_seq' template.
      PREDEF_DECL_MAKE_INTEGER_SEQ_ID = 13,

      /// The internal '__NSConstantString' typedef.
      PREDEF_DECL_CF_CONSTANT_STRING_ID = 14,

      /// The internal '__NSConstantString' tag type.
      PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID = 15,

      /// The internal '__type_pack_element' template.
      PREDEF_DECL_TYPE_PACK_ELEMENT_ID = 16,
    };

    /// 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 = 17;

    /// 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;

    /// Record code for a list of local redeclarations of a declaration.
    /// This can occur within DECLTYPES_BLOCK_ID.
    const unsigned int LOCAL_REDECLARATIONS = 50;

    /// Record codes for each kind of declaration.
    ///
    /// These constants describe the declaration records that can occur within
    /// a declarations block (identified by DECLTYPES_BLOCK_ID). Each
    /// constant describes a record for a specific declaration class
    /// in the AST. Note that TypeCode values share this code space.
    enum DeclCode {
      /// A TypedefDecl record.
      DECL_TYPEDEF = 51,
      /// A TypeAliasDecl record.

      DECL_TYPEALIAS,

      /// An EnumDecl record.
      DECL_ENUM,

      /// A RecordDecl record.
      DECL_RECORD,

      /// An EnumConstantDecl record.
      DECL_ENUM_CONSTANT,

      /// A FunctionDecl record.
      DECL_FUNCTION,

      /// A ObjCMethodDecl record.
      DECL_OBJC_METHOD,

      /// A ObjCInterfaceDecl record.
      DECL_OBJC_INTERFACE,

      /// A ObjCProtocolDecl record.
      DECL_OBJC_PROTOCOL,

      /// A ObjCIvarDecl record.
      DECL_OBJC_IVAR,

      /// A ObjCAtDefsFieldDecl record.
      DECL_OBJC_AT_DEFS_FIELD,

      /// A ObjCCategoryDecl record.
      DECL_OBJC_CATEGORY,

      /// A ObjCCategoryImplDecl record.
      DECL_OBJC_CATEGORY_IMPL,

      /// A ObjCImplementationDecl record.
      DECL_OBJC_IMPLEMENTATION,

      /// A ObjCCompatibleAliasDecl record.
      DECL_OBJC_COMPATIBLE_ALIAS,

      /// A ObjCPropertyDecl record.
      DECL_OBJC_PROPERTY,

      /// A ObjCPropertyImplDecl record.
      DECL_OBJC_PROPERTY_IMPL,

      /// A FieldDecl record.
      DECL_FIELD,

      /// A MSPropertyDecl record.
      DECL_MS_PROPERTY,

      /// A VarDecl record.
      DECL_VAR,

      /// An ImplicitParamDecl record.
      DECL_IMPLICIT_PARAM,

      /// A ParmVarDecl record.
      DECL_PARM_VAR,

      /// A DecompositionDecl record.
      DECL_DECOMPOSITION,

      /// A BindingDecl record.
      DECL_BINDING,

      /// A FileScopeAsmDecl record.
      DECL_FILE_SCOPE_ASM,

      /// A BlockDecl record.
      DECL_BLOCK,

      /// A CapturedDecl record.
      DECL_CAPTURED,

      /// A record that stores the set of declarations that are
      /// lexically stored within a given DeclContext.
      ///
      /// The record itself is a blob that is an array of declaration IDs,
      /// in the order in which those declarations were added to the
      /// declaration context. This data is used when iterating over
      /// the contents of a DeclContext, e.g., via
      /// DeclContext::decls_begin() and DeclContext::decls_end().
      DECL_CONTEXT_LEXICAL,

      /// A record that stores the set of declarations that are
      /// visible from a given DeclContext.
      ///
      /// The record itself stores a set of mappings, each of which
      /// associates a declaration name with one or more declaration
      /// IDs. This data is used when performing qualified name lookup
      /// into a DeclContext via DeclContext::lookup.
      DECL_CONTEXT_VISIBLE,

      /// A LabelDecl record.
      DECL_LABEL,

      /// A NamespaceDecl record.
      DECL_NAMESPACE,

      /// A NamespaceAliasDecl record.
      DECL_NAMESPACE_ALIAS,

      /// A UsingDecl record.
      DECL_USING,

      /// A UsingPackDecl record.
      DECL_USING_PACK,

      /// A UsingShadowDecl record.
      DECL_USING_SHADOW,

      /// A ConstructorUsingShadowDecl record.
      DECL_CONSTRUCTOR_USING_SHADOW,

      /// A UsingDirecitveDecl record.
      DECL_USING_DIRECTIVE,

      /// An UnresolvedUsingValueDecl record.
      DECL_UNRESOLVED_USING_VALUE,

      /// An UnresolvedUsingTypenameDecl record.
      DECL_UNRESOLVED_USING_TYPENAME,

      /// A LinkageSpecDecl record.
      DECL_LINKAGE_SPEC,

      /// An ExportDecl record.
      DECL_EXPORT,

      /// A CXXRecordDecl record.
      DECL_CXX_RECORD,

      /// A CXXDeductionGuideDecl record.
      DECL_CXX_DEDUCTION_GUIDE,

      /// A CXXMethodDecl record.
      DECL_CXX_METHOD,

      /// A CXXConstructorDecl record.
      DECL_CXX_CONSTRUCTOR,

      /// A CXXConstructorDecl record for an inherited constructor.
      DECL_CXX_INHERITED_CONSTRUCTOR,

      /// A CXXDestructorDecl record.
      DECL_CXX_DESTRUCTOR,

      /// A CXXConversionDecl record.
      DECL_CXX_CONVERSION,

      /// An AccessSpecDecl record.
      DECL_ACCESS_SPEC,

      /// A FriendDecl record.
      DECL_FRIEND,

      /// A FriendTemplateDecl record.
      DECL_FRIEND_TEMPLATE,

      /// A ClassTemplateDecl record.
      DECL_CLASS_TEMPLATE,

      /// A ClassTemplateSpecializationDecl record.
      DECL_CLASS_TEMPLATE_SPECIALIZATION,

      /// A ClassTemplatePartialSpecializationDecl record.
      DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION,

      /// A VarTemplateDecl record.
      DECL_VAR_TEMPLATE,

      /// A VarTemplateSpecializationDecl record.
      DECL_VAR_TEMPLATE_SPECIALIZATION,

      /// A VarTemplatePartialSpecializationDecl record.
      DECL_VAR_TEMPLATE_PARTIAL_SPECIALIZATION,

      /// A FunctionTemplateDecl record.
      DECL_FUNCTION_TEMPLATE,

      /// A TemplateTypeParmDecl record.
      DECL_TEMPLATE_TYPE_PARM,

      /// A NonTypeTemplateParmDecl record.
      DECL_NON_TYPE_TEMPLATE_PARM,

      /// A TemplateTemplateParmDecl record.
      DECL_TEMPLATE_TEMPLATE_PARM,

      /// A TypeAliasTemplateDecl record.
      DECL_TYPE_ALIAS_TEMPLATE,

      /// A StaticAssertDecl record.
      DECL_STATIC_ASSERT,

      /// A record containing CXXBaseSpecifiers.
      DECL_CXX_BASE_SPECIFIERS,

      /// A record containing CXXCtorInitializers.
      DECL_CXX_CTOR_INITIALIZERS,

      /// A IndirectFieldDecl record.
      DECL_INDIRECTFIELD,

      /// A NonTypeTemplateParmDecl record that stores an expanded
      /// non-type template parameter pack.
      DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK,

      /// A TemplateTemplateParmDecl record that stores an expanded
      /// template template parameter pack.
      DECL_EXPANDED_TEMPLATE_TEMPLATE_PARM_PACK,

      /// A ClassScopeFunctionSpecializationDecl record a class scope
      /// function specialization. (Microsoft extension).
      DECL_CLASS_SCOPE_FUNCTION_SPECIALIZATION,

      /// An ImportDecl recording a module import.
      DECL_IMPORT,

      /// An OMPThreadPrivateDecl record.
      DECL_OMP_THREADPRIVATE,

      /// An OMPRequiresDecl record.
      DECL_OMP_REQUIRES,
	 
      /// An EmptyDecl record.
      DECL_EMPTY,

      /// An ObjCTypeParamDecl record.
      DECL_OBJC_TYPE_PARAM,

      /// An OMPCapturedExprDecl record.
      DECL_OMP_CAPTUREDEXPR,

      /// A PragmaCommentDecl record.
      DECL_PRAGMA_COMMENT,

      /// A PragmaDetectMismatchDecl record.
      DECL_PRAGMA_DETECT_MISMATCH,

      /// An OMPDeclareReductionDecl record.
      DECL_OMP_DECLARE_REDUCTION,
    };

    /// Record codes for each kind of statement or expression.
    ///
    /// These constants describe the records that describe statements
    /// or expressions. These records  occur within type and declarations
    /// block, so they begin with record values of 128.  Each constant
    /// describes a record for a specific statement or expression class in the
    /// AST.
    enum StmtCode {
      /// A marker record that indicates that we are at the end
      /// of an expression.
      STMT_STOP = 128,

      /// A NULL expression.
      STMT_NULL_PTR,

      /// A reference to a previously [de]serialized Stmt record.
      STMT_REF_PTR,

      /// A NullStmt record.
      STMT_NULL,

      /// A CompoundStmt record.
      STMT_COMPOUND,

      /// A CaseStmt record.
      STMT_CASE,

      /// A DefaultStmt record.
      STMT_DEFAULT,

      /// A LabelStmt record.
      STMT_LABEL,

      /// An AttributedStmt record.
      STMT_ATTRIBUTED,

      /// An IfStmt record.
      STMT_IF,

      /// A SwitchStmt record.
      STMT_SWITCH,

      /// A WhileStmt record.
      STMT_WHILE,

      /// A DoStmt record.
      STMT_DO,

      /// A ForStmt record.
      STMT_FOR,

      /// A GotoStmt record.
      STMT_GOTO,

      /// An IndirectGotoStmt record.
      STMT_INDIRECT_GOTO,

      /// A ContinueStmt record.
      STMT_CONTINUE,

      /// A BreakStmt record.
      STMT_BREAK,

      /// A ReturnStmt record.
      STMT_RETURN,

      /// A DeclStmt record.
      STMT_DECL,

      /// A CapturedStmt record.
      STMT_CAPTURED,

      /// A GCC-style AsmStmt record.
      STMT_GCCASM,

      /// A MS-style AsmStmt record.
      STMT_MSASM,

      /// A PredefinedExpr record.
      EXPR_PREDEFINED,

      /// A DeclRefExpr record.
      EXPR_DECL_REF,

      /// An IntegerLiteral record.
      EXPR_INTEGER_LITERAL,

      /// A FloatingLiteral record.
      EXPR_FLOATING_LITERAL,

      /// An ImaginaryLiteral record.
      EXPR_IMAGINARY_LITERAL,

      /// A StringLiteral record.
      EXPR_STRING_LITERAL,

      /// A CharacterLiteral record.
      EXPR_CHARACTER_LITERAL,

      /// A ParenExpr record.
      EXPR_PAREN,

      /// A ParenListExpr record.
      EXPR_PAREN_LIST,

      /// A UnaryOperator record.
      EXPR_UNARY_OPERATOR,

      /// An OffsetOfExpr record.
      EXPR_OFFSETOF,

      /// A SizefAlignOfExpr record.
      EXPR_SIZEOF_ALIGN_OF,

      /// An ArraySubscriptExpr record.
      EXPR_ARRAY_SUBSCRIPT,

      /// A CallExpr record.
      EXPR_CALL,

      /// A MemberExpr record.
      EXPR_MEMBER,

      /// A BinaryOperator record.
      EXPR_BINARY_OPERATOR,

      /// A CompoundAssignOperator record.
      EXPR_COMPOUND_ASSIGN_OPERATOR,

      /// A ConditionOperator record.
      EXPR_CONDITIONAL_OPERATOR,

      /// An ImplicitCastExpr record.
      EXPR_IMPLICIT_CAST,

      /// A CStyleCastExpr record.
      EXPR_CSTYLE_CAST,

      /// A CompoundLiteralExpr record.
      EXPR_COMPOUND_LITERAL,

      /// An ExtVectorElementExpr record.
      EXPR_EXT_VECTOR_ELEMENT,

      /// An InitListExpr record.
      EXPR_INIT_LIST,

      /// A DesignatedInitExpr record.
      EXPR_DESIGNATED_INIT,

      /// A DesignatedInitUpdateExpr record.
      EXPR_DESIGNATED_INIT_UPDATE,

      /// An NoInitExpr record.
      EXPR_NO_INIT,

      /// An ArrayInitLoopExpr record.
      EXPR_ARRAY_INIT_LOOP,

      /// An ArrayInitIndexExpr record.
      EXPR_ARRAY_INIT_INDEX,

      /// An ImplicitValueInitExpr record.
      EXPR_IMPLICIT_VALUE_INIT,

      /// A VAArgExpr record.
      EXPR_VA_ARG,

      /// An AddrLabelExpr record.
      EXPR_ADDR_LABEL,

      /// A StmtExpr record.
      EXPR_STMT,

      /// A ChooseExpr record.
      EXPR_CHOOSE,

      /// A GNUNullExpr record.
      EXPR_GNU_NULL,

      /// A ShuffleVectorExpr record.
      EXPR_SHUFFLE_VECTOR,

      /// A ConvertVectorExpr record.
      EXPR_CONVERT_VECTOR,

      /// BlockExpr
      EXPR_BLOCK,

      /// A GenericSelectionExpr record.
      EXPR_GENERIC_SELECTION,

      /// A PseudoObjectExpr record.
      EXPR_PSEUDO_OBJECT,

      /// An AtomicExpr record.
      EXPR_ATOMIC,

      // Objective-C

      /// An ObjCStringLiteral record.
      EXPR_OBJC_STRING_LITERAL,

      EXPR_OBJC_BOXED_EXPRESSION,
      EXPR_OBJC_ARRAY_LITERAL,
      EXPR_OBJC_DICTIONARY_LITERAL,

      /// An ObjCEncodeExpr record.
      EXPR_OBJC_ENCODE,

      /// An ObjCSelectorExpr record.
      EXPR_OBJC_SELECTOR_EXPR,

      /// An ObjCProtocolExpr record.
      EXPR_OBJC_PROTOCOL_EXPR,

      /// An ObjCIvarRefExpr record.
      EXPR_OBJC_IVAR_REF_EXPR,

      /// An ObjCPropertyRefExpr record.
      EXPR_OBJC_PROPERTY_REF_EXPR,

      /// An ObjCSubscriptRefExpr record.
      EXPR_OBJC_SUBSCRIPT_REF_EXPR,

      /// UNUSED
      EXPR_OBJC_KVC_REF_EXPR,

      /// An ObjCMessageExpr record.
      EXPR_OBJC_MESSAGE_EXPR,

      /// An ObjCIsa Expr record.
      EXPR_OBJC_ISA,

      /// An ObjCIndirectCopyRestoreExpr record.
      EXPR_OBJC_INDIRECT_COPY_RESTORE,

      /// An ObjCForCollectionStmt record.
      STMT_OBJC_FOR_COLLECTION,

      /// An ObjCAtCatchStmt record.
      STMT_OBJC_CATCH,

      /// An ObjCAtFinallyStmt record.
      STMT_OBJC_FINALLY,

      /// An ObjCAtTryStmt record.
      STMT_OBJC_AT_TRY,

      /// An ObjCAtSynchronizedStmt record.
      STMT_OBJC_AT_SYNCHRONIZED,

      /// An ObjCAtThrowStmt record.
      STMT_OBJC_AT_THROW,

      /// An ObjCAutoreleasePoolStmt record.
      STMT_OBJC_AUTORELEASE_POOL,

      /// An ObjCBoolLiteralExpr record.
      EXPR_OBJC_BOOL_LITERAL,

      /// An ObjCAvailabilityCheckExpr record.
      EXPR_OBJC_AVAILABILITY_CHECK,

      // C++

      /// A CXXCatchStmt record.
      STMT_CXX_CATCH,

      /// A CXXTryStmt record.
      STMT_CXX_TRY,
      /// A CXXForRangeStmt record.

      STMT_CXX_FOR_RANGE,

      /// A CXXOperatorCallExpr record.
      EXPR_CXX_OPERATOR_CALL,

      /// A CXXMemberCallExpr record.
      EXPR_CXX_MEMBER_CALL,

      /// A CXXConstructExpr record.
      EXPR_CXX_CONSTRUCT,

      /// A CXXInheritedCtorInitExpr record.
      EXPR_CXX_INHERITED_CTOR_INIT,

      /// A CXXTemporaryObjectExpr record.
      EXPR_CXX_TEMPORARY_OBJECT,

      /// A CXXStaticCastExpr record.
      EXPR_CXX_STATIC_CAST,

      /// A CXXDynamicCastExpr record.
      EXPR_CXX_DYNAMIC_CAST,

      /// A CXXReinterpretCastExpr record.
      EXPR_CXX_REINTERPRET_CAST,

      /// A CXXConstCastExpr record.
      EXPR_CXX_CONST_CAST,

      /// A CXXFunctionalCastExpr record.
      EXPR_CXX_FUNCTIONAL_CAST,

      /// A UserDefinedLiteral record.
      EXPR_USER_DEFINED_LITERAL,

      /// A CXXStdInitializerListExpr record.
      EXPR_CXX_STD_INITIALIZER_LIST,

      /// A CXXBoolLiteralExpr record.
      EXPR_CXX_BOOL_LITERAL,

      EXPR_CXX_NULL_PTR_LITERAL,  // CXXNullPtrLiteralExpr
      EXPR_CXX_TYPEID_EXPR,       // CXXTypeidExpr (of expr).
      EXPR_CXX_TYPEID_TYPE,       // CXXTypeidExpr (of type).
      EXPR_CXX_THIS,              // CXXThisExpr
      EXPR_CXX_THROW,             // CXXThrowExpr
      EXPR_CXX_DEFAULT_ARG,       // CXXDefaultArgExpr
      EXPR_CXX_DEFAULT_INIT,      // CXXDefaultInitExpr
      EXPR_CXX_BIND_TEMPORARY,    // CXXBindTemporaryExpr

      EXPR_CXX_SCALAR_VALUE_INIT, // CXXScalarValueInitExpr
      EXPR_CXX_NEW,               // CXXNewExpr
      EXPR_CXX_DELETE,            // CXXDeleteExpr
      EXPR_CXX_PSEUDO_DESTRUCTOR, // CXXPseudoDestructorExpr

      EXPR_EXPR_WITH_CLEANUPS,    // ExprWithCleanups

      EXPR_CXX_DEPENDENT_SCOPE_MEMBER,   // CXXDependentScopeMemberExpr
      EXPR_CXX_DEPENDENT_SCOPE_DECL_REF, // DependentScopeDeclRefExpr
      EXPR_CXX_UNRESOLVED_CONSTRUCT,     // CXXUnresolvedConstructExpr
      EXPR_CXX_UNRESOLVED_MEMBER,        // UnresolvedMemberExpr
      EXPR_CXX_UNRESOLVED_LOOKUP,        // UnresolvedLookupExpr

      EXPR_CXX_EXPRESSION_TRAIT,  // ExpressionTraitExpr
      EXPR_CXX_NOEXCEPT,          // CXXNoexceptExpr

      EXPR_OPAQUE_VALUE,          // OpaqueValueExpr
      EXPR_BINARY_CONDITIONAL_OPERATOR,  // BinaryConditionalOperator
      EXPR_TYPE_TRAIT,            // TypeTraitExpr
      EXPR_ARRAY_TYPE_TRAIT,      // ArrayTypeTraitIntExpr

      EXPR_PACK_EXPANSION,        // PackExpansionExpr
      EXPR_SIZEOF_PACK,           // SizeOfPackExpr
      EXPR_SUBST_NON_TYPE_TEMPLATE_PARM, // SubstNonTypeTemplateParmExpr
      EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK,// SubstNonTypeTemplateParmPackExpr
      EXPR_FUNCTION_PARM_PACK,    // FunctionParmPackExpr
      EXPR_MATERIALIZE_TEMPORARY, // MaterializeTemporaryExpr
      EXPR_CXX_FOLD,              // CXXFoldExpr

      // CUDA
      EXPR_CUDA_KERNEL_CALL,       // CUDAKernelCallExpr

      // OpenCL
      EXPR_ASTYPE,                 // AsTypeExpr

      // Microsoft
      EXPR_CXX_PROPERTY_REF_EXPR, // MSPropertyRefExpr
      EXPR_CXX_PROPERTY_SUBSCRIPT_EXPR, // MSPropertySubscriptExpr
      EXPR_CXX_UUIDOF_EXPR,       // CXXUuidofExpr (of expr).
      EXPR_CXX_UUIDOF_TYPE,       // CXXUuidofExpr (of type).
      STMT_SEH_LEAVE,             // SEHLeaveStmt
      STMT_SEH_EXCEPT,            // SEHExceptStmt
      STMT_SEH_FINALLY,           // SEHFinallyStmt
      STMT_SEH_TRY,               // SEHTryStmt

      // OpenMP directives
      STMT_OMP_PARALLEL_DIRECTIVE,
      STMT_OMP_SIMD_DIRECTIVE,
      STMT_OMP_FOR_DIRECTIVE,
      STMT_OMP_FOR_SIMD_DIRECTIVE,
      STMT_OMP_SECTIONS_DIRECTIVE,
      STMT_OMP_SECTION_DIRECTIVE,
      STMT_OMP_SINGLE_DIRECTIVE,
      STMT_OMP_MASTER_DIRECTIVE,
      STMT_OMP_CRITICAL_DIRECTIVE,
      STMT_OMP_PARALLEL_FOR_DIRECTIVE,
      STMT_OMP_PARALLEL_FOR_SIMD_DIRECTIVE,
      STMT_OMP_PARALLEL_SECTIONS_DIRECTIVE,
      STMT_OMP_TASK_DIRECTIVE,
      STMT_OMP_TASKYIELD_DIRECTIVE,
      STMT_OMP_BARRIER_DIRECTIVE,
      STMT_OMP_TASKWAIT_DIRECTIVE,
      STMT_OMP_FLUSH_DIRECTIVE,
      STMT_OMP_ORDERED_DIRECTIVE,
      STMT_OMP_ATOMIC_DIRECTIVE,
      STMT_OMP_TARGET_DIRECTIVE,
      STMT_OMP_TARGET_DATA_DIRECTIVE,
      STMT_OMP_TARGET_ENTER_DATA_DIRECTIVE,
      STMT_OMP_TARGET_EXIT_DATA_DIRECTIVE,
      STMT_OMP_TARGET_PARALLEL_DIRECTIVE,
      STMT_OMP_TARGET_PARALLEL_FOR_DIRECTIVE,
      STMT_OMP_TEAMS_DIRECTIVE,
      STMT_OMP_TASKGROUP_DIRECTIVE,
      STMT_OMP_CANCELLATION_POINT_DIRECTIVE,
      STMT_OMP_CANCEL_DIRECTIVE,
      STMT_OMP_TASKLOOP_DIRECTIVE,
      STMT_OMP_TASKLOOP_SIMD_DIRECTIVE,
      STMT_OMP_DISTRIBUTE_DIRECTIVE,
      STMT_OMP_TARGET_UPDATE_DIRECTIVE,
      STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE,
      STMT_OMP_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE,
      STMT_OMP_DISTRIBUTE_SIMD_DIRECTIVE,
      STMT_OMP_TARGET_PARALLEL_FOR_SIMD_DIRECTIVE,
      STMT_OMP_TARGET_SIMD_DIRECTIVE,
      STMT_OMP_TEAMS_DISTRIBUTE_DIRECTIVE,
      STMT_OMP_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE,
      STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE,
      STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE,
      STMT_OMP_TARGET_TEAMS_DIRECTIVE,
      STMT_OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE,
      STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE,
      STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE,
      STMT_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE,
      EXPR_OMP_ARRAY_SECTION,

      // ARC
      EXPR_OBJC_BRIDGED_CAST,     // ObjCBridgedCastExpr

      STMT_MS_DEPENDENT_EXISTS,   // MSDependentExistsStmt
      EXPR_LAMBDA,                // LambdaExpr
      STMT_COROUTINE_BODY,
      STMT_CORETURN,
      EXPR_COAWAIT,
      EXPR_COYIELD,
      EXPR_DEPENDENT_COAWAIT,
    };

    /// The kinds of designators that can occur in a
    /// DesignatedInitExpr.
    enum DesignatorTypes {
      /// Field designator where only the field name is known.
      DESIG_FIELD_NAME  = 0,

      /// Field designator where the field has been resolved to
      /// a declaration.
      DESIG_FIELD_DECL  = 1,

      /// Array designator.
      DESIG_ARRAY       = 2,

      /// GNU array range designator.
      DESIG_ARRAY_RANGE = 3
    };

    /// The different kinds of data that can occur in a
    /// CtorInitializer.
    enum CtorInitializerType {
      CTOR_INITIALIZER_BASE,
      CTOR_INITIALIZER_DELEGATING,
      CTOR_INITIALIZER_MEMBER,
      CTOR_INITIALIZER_INDIRECT_MEMBER
    };

    /// Describes the redeclarations of a declaration.
    struct LocalRedeclarationsInfo {
      // The ID of the first declaration
      DeclID FirstID;

      // Offset into the array of redeclaration chains.
      unsigned Offset;

      friend bool operator<(const LocalRedeclarationsInfo &X,
                            const LocalRedeclarationsInfo &Y) {
        return X.FirstID < Y.FirstID;
      }

      friend bool operator>(const LocalRedeclarationsInfo &X,
                            const LocalRedeclarationsInfo &Y) {
        return X.FirstID > Y.FirstID;
      }

      friend bool operator<=(const LocalRedeclarationsInfo &X,
                             const LocalRedeclarationsInfo &Y) {
        return X.FirstID <= Y.FirstID;
      }

      friend bool operator>=(const LocalRedeclarationsInfo &X,
                             const LocalRedeclarationsInfo &Y) {
        return X.FirstID >= Y.FirstID;
      }
    };

    /// Describes the categories of an Objective-C class.
    struct ObjCCategoriesInfo {
      // The ID of the definition
      DeclID DefinitionID;

      // Offset into the array of category lists.
      unsigned Offset;

      friend bool operator<(const ObjCCategoriesInfo &X,
                            const ObjCCategoriesInfo &Y) {
        return X.DefinitionID < Y.DefinitionID;
      }

      friend bool operator>(const ObjCCategoriesInfo &X,
                            const ObjCCategoriesInfo &Y) {
        return X.DefinitionID > Y.DefinitionID;
      }

      friend bool operator<=(const ObjCCategoriesInfo &X,
                             const ObjCCategoriesInfo &Y) {
        return X.DefinitionID <= Y.DefinitionID;
      }

      friend bool operator>=(const ObjCCategoriesInfo &X,
                             const ObjCCategoriesInfo &Y) {
        return X.DefinitionID >= Y.DefinitionID;
      }
    };

    /// A key used when looking up entities by \ref DeclarationName.
    ///
    /// Different \ref DeclarationNames are mapped to different keys, but the
    /// same key can occasionally represent multiple names (for names that
    /// contain types, in particular).
    class DeclarationNameKey {
      using NameKind = unsigned;

      NameKind Kind = 0;
      uint64_t Data = 0;

    public:
      DeclarationNameKey() = default;
      DeclarationNameKey(DeclarationName Name);
      DeclarationNameKey(NameKind Kind, uint64_t Data)
          : Kind(Kind), Data(Data) {}

      NameKind getKind() const { return Kind; }

      IdentifierInfo *getIdentifier() const {
        assert(Kind == DeclarationName::Identifier ||
               Kind == DeclarationName::CXXLiteralOperatorName ||
               Kind == DeclarationName::CXXDeductionGuideName);
        return (IdentifierInfo *)Data;
      }

      Selector getSelector() const {
        assert(Kind == DeclarationName::ObjCZeroArgSelector ||
               Kind == DeclarationName::ObjCOneArgSelector ||
               Kind == DeclarationName::ObjCMultiArgSelector);
        return Selector(Data);
      }

      OverloadedOperatorKind getOperatorKind() const {
        assert(Kind == DeclarationName::CXXOperatorName);
        return (OverloadedOperatorKind)Data;
      }

      /// Compute a fingerprint of this key for use in on-disk hash table.
      unsigned getHash() const;

      friend bool operator==(const DeclarationNameKey &A,
                             const DeclarationNameKey &B) {
        return A.Kind == B.Kind && A.Data == B.Data;
      }
    };

    /// @}

} // namespace serialization
} // namespace clang

namespace llvm {

  template <> struct DenseMapInfo<clang::serialization::DeclarationNameKey> {
    static clang::serialization::DeclarationNameKey getEmptyKey() {
      return clang::serialization::DeclarationNameKey(-1, 1);
    }

    static clang::serialization::DeclarationNameKey getTombstoneKey() {
      return clang::serialization::DeclarationNameKey(-1, 2);
    }

    static unsigned
    getHashValue(const clang::serialization::DeclarationNameKey &Key) {
      return Key.getHash();
    }

    static bool isEqual(const clang::serialization::DeclarationNameKey &L,
                        const clang::serialization::DeclarationNameKey &R) {
      return L == R;
    }
  };

} // namespace llvm

#endif // LLVM_CLANG_SERIALIZATION_ASTBITCODES_H
