Home | History | Annotate | Download | only in AST
      1 //===--- Decl.h - Classes for representing declarations ---------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 //  This file defines the Decl subclasses.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_CLANG_AST_DECL_H
     15 #define LLVM_CLANG_AST_DECL_H
     16 
     17 #include "clang/AST/APValue.h"
     18 #include "clang/AST/DeclBase.h"
     19 #include "clang/AST/DeclarationName.h"
     20 #include "clang/AST/ExternalASTSource.h"
     21 #include "clang/AST/Redeclarable.h"
     22 #include "clang/AST/Type.h"
     23 #include "clang/Basic/Linkage.h"
     24 #include "clang/Basic/OperatorKinds.h"
     25 #include "llvm/ADT/ArrayRef.h"
     26 #include "llvm/ADT/Optional.h"
     27 #include "llvm/Support/Compiler.h"
     28 #include "llvm/Support/raw_ostream.h"
     29 #include "llvm/Support/TrailingObjects.h"
     30 
     31 namespace clang {
     32 struct ASTTemplateArgumentListInfo;
     33 class CXXTemporary;
     34 class CompoundStmt;
     35 class DependentFunctionTemplateSpecializationInfo;
     36 class Expr;
     37 class FunctionTemplateDecl;
     38 class FunctionTemplateSpecializationInfo;
     39 class LabelStmt;
     40 class MemberSpecializationInfo;
     41 class Module;
     42 class NestedNameSpecifier;
     43 class ParmVarDecl;
     44 class Stmt;
     45 class StringLiteral;
     46 class TemplateArgumentList;
     47 class TemplateParameterList;
     48 class TypeAliasTemplateDecl;
     49 class TypeLoc;
     50 class UnresolvedSetImpl;
     51 class VarTemplateDecl;
     52 
     53 /// \brief A container of type source information.
     54 ///
     55 /// A client can read the relevant info using TypeLoc wrappers, e.g:
     56 /// @code
     57 /// TypeLoc TL = TypeSourceInfo->getTypeLoc();
     58 /// TL.getStartLoc().print(OS, SrcMgr);
     59 /// @endcode
     60 ///
     61 class TypeSourceInfo {
     62   QualType Ty;
     63   // Contains a memory block after the class, used for type source information,
     64   // allocated by ASTContext.
     65   friend class ASTContext;
     66   TypeSourceInfo(QualType ty) : Ty(ty) { }
     67 public:
     68   /// \brief Return the type wrapped by this type source info.
     69   QualType getType() const { return Ty; }
     70 
     71   /// \brief Return the TypeLoc wrapper for the type source info.
     72   TypeLoc getTypeLoc() const; // implemented in TypeLoc.h
     73 
     74   /// \brief Override the type stored in this TypeSourceInfo. Use with caution!
     75   void overrideType(QualType T) { Ty = T; }
     76 };
     77 
     78 /// TranslationUnitDecl - The top declaration context.
     79 class TranslationUnitDecl : public Decl, public DeclContext {
     80   virtual void anchor();
     81   ASTContext &Ctx;
     82 
     83   /// The (most recently entered) anonymous namespace for this
     84   /// translation unit, if one has been created.
     85   NamespaceDecl *AnonymousNamespace;
     86 
     87   explicit TranslationUnitDecl(ASTContext &ctx);
     88 public:
     89   ASTContext &getASTContext() const { return Ctx; }
     90 
     91   NamespaceDecl *getAnonymousNamespace() const { return AnonymousNamespace; }
     92   void setAnonymousNamespace(NamespaceDecl *D) { AnonymousNamespace = D; }
     93 
     94   static TranslationUnitDecl *Create(ASTContext &C);
     95   // Implement isa/cast/dyncast/etc.
     96   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
     97   static bool classofKind(Kind K) { return K == TranslationUnit; }
     98   static DeclContext *castToDeclContext(const TranslationUnitDecl *D) {
     99     return static_cast<DeclContext *>(const_cast<TranslationUnitDecl*>(D));
    100   }
    101   static TranslationUnitDecl *castFromDeclContext(const DeclContext *DC) {
    102     return static_cast<TranslationUnitDecl *>(const_cast<DeclContext*>(DC));
    103   }
    104 };
    105 
    106 /// \brief Declaration context for names declared as extern "C" in C++. This
    107 /// is neither the semantic nor lexical context for such declarations, but is
    108 /// used to check for conflicts with other extern "C" declarations. Example:
    109 ///
    110 /// \code
    111 ///   namespace N { extern "C" void f(); } // #1
    112 ///   void N::f() {}                       // #2
    113 ///   namespace M { extern "C" void f(); } // #3
    114 /// \endcode
    115 ///
    116 /// The semantic context of #1 is namespace N and its lexical context is the
    117 /// LinkageSpecDecl; the semantic context of #2 is namespace N and its lexical
    118 /// context is the TU. However, both declarations are also visible in the
    119 /// extern "C" context.
    120 ///
    121 /// The declaration at #3 finds it is a redeclaration of \c N::f through
    122 /// lookup in the extern "C" context.
    123 class ExternCContextDecl : public Decl, public DeclContext {
    124   virtual void anchor();
    125 
    126   explicit ExternCContextDecl(TranslationUnitDecl *TU)
    127     : Decl(ExternCContext, TU, SourceLocation()),
    128       DeclContext(ExternCContext) {}
    129 public:
    130   static ExternCContextDecl *Create(const ASTContext &C,
    131                                     TranslationUnitDecl *TU);
    132   // Implement isa/cast/dyncast/etc.
    133   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
    134   static bool classofKind(Kind K) { return K == ExternCContext; }
    135   static DeclContext *castToDeclContext(const ExternCContextDecl *D) {
    136     return static_cast<DeclContext *>(const_cast<ExternCContextDecl*>(D));
    137   }
    138   static ExternCContextDecl *castFromDeclContext(const DeclContext *DC) {
    139     return static_cast<ExternCContextDecl *>(const_cast<DeclContext*>(DC));
    140   }
    141 };
    142 
    143 /// NamedDecl - This represents a decl with a name.  Many decls have names such
    144 /// as ObjCMethodDecl, but not \@class, etc.
    145 class NamedDecl : public Decl {
    146   virtual void anchor();
    147   /// Name - The name of this declaration, which is typically a normal
    148   /// identifier but may also be a special kind of name (C++
    149   /// constructor, Objective-C selector, etc.)
    150   DeclarationName Name;
    151 
    152 private:
    153   NamedDecl *getUnderlyingDeclImpl() LLVM_READONLY;
    154 
    155 protected:
    156   NamedDecl(Kind DK, DeclContext *DC, SourceLocation L, DeclarationName N)
    157     : Decl(DK, DC, L), Name(N) { }
    158 
    159 public:
    160   /// getIdentifier - Get the identifier that names this declaration,
    161   /// if there is one. This will return NULL if this declaration has
    162   /// no name (e.g., for an unnamed class) or if the name is a special
    163   /// name (C++ constructor, Objective-C selector, etc.).
    164   IdentifierInfo *getIdentifier() const { return Name.getAsIdentifierInfo(); }
    165 
    166   /// getName - Get the name of identifier for this declaration as a StringRef.
    167   /// This requires that the declaration have a name and that it be a simple
    168   /// identifier.
    169   StringRef getName() const {
    170     assert(Name.isIdentifier() && "Name is not a simple identifier");
    171     return getIdentifier() ? getIdentifier()->getName() : "";
    172   }
    173 
    174   /// getNameAsString - Get a human-readable name for the declaration, even if
    175   /// it is one of the special kinds of names (C++ constructor, Objective-C
    176   /// selector, etc).  Creating this name requires expensive string
    177   /// manipulation, so it should be called only when performance doesn't matter.
    178   /// For simple declarations, getNameAsCString() should suffice.
    179   //
    180   // FIXME: This function should be renamed to indicate that it is not just an
    181   // alternate form of getName(), and clients should move as appropriate.
    182   //
    183   // FIXME: Deprecated, move clients to getName().
    184   std::string getNameAsString() const { return Name.getAsString(); }
    185 
    186   void printName(raw_ostream &os) const { os << Name; }
    187 
    188   /// getDeclName - Get the actual, stored name of the declaration,
    189   /// which may be a special name.
    190   DeclarationName getDeclName() const { return Name; }
    191 
    192   /// \brief Set the name of this declaration.
    193   void setDeclName(DeclarationName N) { Name = N; }
    194 
    195   /// printQualifiedName - Returns human-readable qualified name for
    196   /// declaration, like A::B::i, for i being member of namespace A::B.
    197   /// If declaration is not member of context which can be named (record,
    198   /// namespace), it will return same result as printName().
    199   /// Creating this name is expensive, so it should be called only when
    200   /// performance doesn't matter.
    201   void printQualifiedName(raw_ostream &OS) const;
    202   void printQualifiedName(raw_ostream &OS, const PrintingPolicy &Policy) const;
    203 
    204   // FIXME: Remove string version.
    205   std::string getQualifiedNameAsString() const;
    206 
    207   /// getNameForDiagnostic - Appends a human-readable name for this
    208   /// declaration into the given stream.
    209   ///
    210   /// This is the method invoked by Sema when displaying a NamedDecl
    211   /// in a diagnostic.  It does not necessarily produce the same
    212   /// result as printName(); for example, class template
    213   /// specializations are printed with their template arguments.
    214   virtual void getNameForDiagnostic(raw_ostream &OS,
    215                                     const PrintingPolicy &Policy,
    216                                     bool Qualified) const;
    217 
    218   /// \brief Determine whether this declaration, if
    219   /// known to be well-formed within its context, will replace the
    220   /// declaration OldD if introduced into scope. A declaration will
    221   /// replace another declaration if, for example, it is a
    222   /// redeclaration of the same variable or function, but not if it is
    223   /// a declaration of a different kind (function vs. class) or an
    224   /// overloaded function.
    225   ///
    226   /// \param IsKnownNewer \c true if this declaration is known to be newer
    227   /// than \p OldD (for instance, if this declaration is newly-created).
    228   bool declarationReplaces(NamedDecl *OldD, bool IsKnownNewer = true) const;
    229 
    230   /// \brief Determine whether this declaration has linkage.
    231   bool hasLinkage() const;
    232 
    233   using Decl::isModulePrivate;
    234   using Decl::setModulePrivate;
    235 
    236   /// \brief Determine whether this declaration is hidden from name lookup.
    237   bool isHidden() const { return Hidden; }
    238 
    239   /// \brief Set whether this declaration is hidden from name lookup.
    240   void setHidden(bool Hide) {
    241     assert((!Hide || isFromASTFile() || hasLocalOwningModuleStorage()) &&
    242            "declaration with no owning module can't be hidden");
    243     Hidden = Hide;
    244   }
    245 
    246   /// \brief Determine whether this declaration is a C++ class member.
    247   bool isCXXClassMember() const {
    248     const DeclContext *DC = getDeclContext();
    249 
    250     // C++0x [class.mem]p1:
    251     //   The enumerators of an unscoped enumeration defined in
    252     //   the class are members of the class.
    253     if (isa<EnumDecl>(DC))
    254       DC = DC->getRedeclContext();
    255 
    256     return DC->isRecord();
    257   }
    258 
    259   /// \brief Determine whether the given declaration is an instance member of
    260   /// a C++ class.
    261   bool isCXXInstanceMember() const;
    262 
    263   /// \brief Determine what kind of linkage this entity has.
    264   /// This is not the linkage as defined by the standard or the codegen notion
    265   /// of linkage. It is just an implementation detail that is used to compute
    266   /// those.
    267   Linkage getLinkageInternal() const;
    268 
    269   /// \brief Get the linkage from a semantic point of view. Entities in
    270   /// anonymous namespaces are external (in c++98).
    271   Linkage getFormalLinkage() const {
    272     return clang::getFormalLinkage(getLinkageInternal());
    273   }
    274 
    275   /// \brief True if this decl has external linkage.
    276   bool hasExternalFormalLinkage() const {
    277     return isExternalFormalLinkage(getLinkageInternal());
    278   }
    279 
    280   bool isExternallyVisible() const {
    281     return clang::isExternallyVisible(getLinkageInternal());
    282   }
    283 
    284   /// \brief Determines the visibility of this entity.
    285   Visibility getVisibility() const {
    286     return getLinkageAndVisibility().getVisibility();
    287   }
    288 
    289   /// \brief Determines the linkage and visibility of this entity.
    290   LinkageInfo getLinkageAndVisibility() const;
    291 
    292   /// Kinds of explicit visibility.
    293   enum ExplicitVisibilityKind {
    294     VisibilityForType,
    295     VisibilityForValue
    296   };
    297 
    298   /// \brief If visibility was explicitly specified for this
    299   /// declaration, return that visibility.
    300   Optional<Visibility>
    301   getExplicitVisibility(ExplicitVisibilityKind kind) const;
    302 
    303   /// \brief True if the computed linkage is valid. Used for consistency
    304   /// checking. Should always return true.
    305   bool isLinkageValid() const;
    306 
    307   /// \brief True if something has required us to compute the linkage
    308   /// of this declaration.
    309   ///
    310   /// Language features which can retroactively change linkage (like a
    311   /// typedef name for linkage purposes) may need to consider this,
    312   /// but hopefully only in transitory ways during parsing.
    313   bool hasLinkageBeenComputed() const {
    314     return hasCachedLinkage();
    315   }
    316 
    317   /// \brief Looks through UsingDecls and ObjCCompatibleAliasDecls for
    318   /// the underlying named decl.
    319   NamedDecl *getUnderlyingDecl() {
    320     // Fast-path the common case.
    321     if (this->getKind() != UsingShadow &&
    322         this->getKind() != ObjCCompatibleAlias)
    323       return this;
    324 
    325     return getUnderlyingDeclImpl();
    326   }
    327   const NamedDecl *getUnderlyingDecl() const {
    328     return const_cast<NamedDecl*>(this)->getUnderlyingDecl();
    329   }
    330 
    331   NamedDecl *getMostRecentDecl() {
    332     return cast<NamedDecl>(static_cast<Decl *>(this)->getMostRecentDecl());
    333   }
    334   const NamedDecl *getMostRecentDecl() const {
    335     return const_cast<NamedDecl*>(this)->getMostRecentDecl();
    336   }
    337 
    338   ObjCStringFormatFamily getObjCFStringFormattingFamily() const;
    339 
    340   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
    341   static bool classofKind(Kind K) { return K >= firstNamed && K <= lastNamed; }
    342 };
    343 
    344 inline raw_ostream &operator<<(raw_ostream &OS, const NamedDecl &ND) {
    345   ND.printName(OS);
    346   return OS;
    347 }
    348 
    349 /// LabelDecl - Represents the declaration of a label.  Labels also have a
    350 /// corresponding LabelStmt, which indicates the position that the label was
    351 /// defined at.  For normal labels, the location of the decl is the same as the
    352 /// location of the statement.  For GNU local labels (__label__), the decl
    353 /// location is where the __label__ is.
    354 class LabelDecl : public NamedDecl {
    355   void anchor() override;
    356   LabelStmt *TheStmt;
    357   StringRef MSAsmName;
    358   bool MSAsmNameResolved;
    359   /// LocStart - For normal labels, this is the same as the main declaration
    360   /// label, i.e., the location of the identifier; for GNU local labels,
    361   /// this is the location of the __label__ keyword.
    362   SourceLocation LocStart;
    363 
    364   LabelDecl(DeclContext *DC, SourceLocation IdentL, IdentifierInfo *II,
    365             LabelStmt *S, SourceLocation StartL)
    366     : NamedDecl(Label, DC, IdentL, II),
    367       TheStmt(S),
    368       MSAsmNameResolved(false),
    369       LocStart(StartL) {}
    370 
    371 public:
    372   static LabelDecl *Create(ASTContext &C, DeclContext *DC,
    373                            SourceLocation IdentL, IdentifierInfo *II);
    374   static LabelDecl *Create(ASTContext &C, DeclContext *DC,
    375                            SourceLocation IdentL, IdentifierInfo *II,
    376                            SourceLocation GnuLabelL);
    377   static LabelDecl *CreateDeserialized(ASTContext &C, unsigned ID);
    378 
    379   LabelStmt *getStmt() const { return TheStmt; }
    380   void setStmt(LabelStmt *T) { TheStmt = T; }
    381 
    382   bool isGnuLocal() const { return LocStart != getLocation(); }
    383   void setLocStart(SourceLocation L) { LocStart = L; }
    384 
    385   SourceRange getSourceRange() const override LLVM_READONLY {
    386     return SourceRange(LocStart, getLocation());
    387   }
    388 
    389   bool isMSAsmLabel() const { return MSAsmName.size() != 0; }
    390   bool isResolvedMSAsmLabel() const { return isMSAsmLabel() && MSAsmNameResolved; }
    391   void setMSAsmLabel(StringRef Name);
    392   StringRef getMSAsmLabel() const { return MSAsmName; }
    393   void setMSAsmLabelResolved() { MSAsmNameResolved = true; }
    394 
    395   // Implement isa/cast/dyncast/etc.
    396   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
    397   static bool classofKind(Kind K) { return K == Label; }
    398 };
    399 
    400 /// NamespaceDecl - Represent a C++ namespace.
    401 class NamespaceDecl : public NamedDecl, public DeclContext,
    402                       public Redeclarable<NamespaceDecl>
    403 {
    404   /// LocStart - The starting location of the source range, pointing
    405   /// to either the namespace or the inline keyword.
    406   SourceLocation LocStart;
    407   /// RBraceLoc - The ending location of the source range.
    408   SourceLocation RBraceLoc;
    409 
    410   /// \brief A pointer to either the anonymous namespace that lives just inside
    411   /// this namespace or to the first namespace in the chain (the latter case
    412   /// only when this is not the first in the chain), along with a
    413   /// boolean value indicating whether this is an inline namespace.
    414   llvm::PointerIntPair<NamespaceDecl *, 1, bool> AnonOrFirstNamespaceAndInline;
    415 
    416   NamespaceDecl(ASTContext &C, DeclContext *DC, bool Inline,
    417                 SourceLocation StartLoc, SourceLocation IdLoc,
    418                 IdentifierInfo *Id, NamespaceDecl *PrevDecl);
    419 
    420   typedef Redeclarable<NamespaceDecl> redeclarable_base;
    421   NamespaceDecl *getNextRedeclarationImpl() override;
    422   NamespaceDecl *getPreviousDeclImpl() override;
    423   NamespaceDecl *getMostRecentDeclImpl() override;
    424 
    425 public:
    426   static NamespaceDecl *Create(ASTContext &C, DeclContext *DC,
    427                                bool Inline, SourceLocation StartLoc,
    428                                SourceLocation IdLoc, IdentifierInfo *Id,
    429                                NamespaceDecl *PrevDecl);
    430 
    431   static NamespaceDecl *CreateDeserialized(ASTContext &C, unsigned ID);
    432 
    433   typedef redeclarable_base::redecl_range redecl_range;
    434   typedef redeclarable_base::redecl_iterator redecl_iterator;
    435   using redeclarable_base::redecls_begin;
    436   using redeclarable_base::redecls_end;
    437   using redeclarable_base::redecls;
    438   using redeclarable_base::getPreviousDecl;
    439   using redeclarable_base::getMostRecentDecl;
    440   using redeclarable_base::isFirstDecl;
    441 
    442   /// \brief Returns true if this is an anonymous namespace declaration.
    443   ///
    444   /// For example:
    445   /// \code
    446   ///   namespace {
    447   ///     ...
    448   ///   };
    449   /// \endcode
    450   /// q.v. C++ [namespace.unnamed]
    451   bool isAnonymousNamespace() const {
    452     return !getIdentifier();
    453   }
    454 
    455   /// \brief Returns true if this is an inline namespace declaration.
    456   bool isInline() const {
    457     return AnonOrFirstNamespaceAndInline.getInt();
    458   }
    459 
    460   /// \brief Set whether this is an inline namespace declaration.
    461   void setInline(bool Inline) {
    462     AnonOrFirstNamespaceAndInline.setInt(Inline);
    463   }
    464 
    465   /// \brief Get the original (first) namespace declaration.
    466   NamespaceDecl *getOriginalNamespace() {
    467     if (isFirstDecl())
    468       return this;
    469 
    470     return AnonOrFirstNamespaceAndInline.getPointer();
    471   }
    472 
    473   /// \brief Get the original (first) namespace declaration.
    474   const NamespaceDecl *getOriginalNamespace() const {
    475     if (isFirstDecl())
    476       return this;
    477 
    478     return AnonOrFirstNamespaceAndInline.getPointer();
    479   }
    480 
    481   /// \brief Return true if this declaration is an original (first) declaration
    482   /// of the namespace. This is false for non-original (subsequent) namespace
    483   /// declarations and anonymous namespaces.
    484   bool isOriginalNamespace() const { return isFirstDecl(); }
    485 
    486   /// \brief Retrieve the anonymous namespace nested inside this namespace,
    487   /// if any.
    488   NamespaceDecl *getAnonymousNamespace() const {
    489     return getOriginalNamespace()->AnonOrFirstNamespaceAndInline.getPointer();
    490   }
    491 
    492   void setAnonymousNamespace(NamespaceDecl *D) {
    493     getOriginalNamespace()->AnonOrFirstNamespaceAndInline.setPointer(D);
    494   }
    495 
    496   /// Retrieves the canonical declaration of this namespace.
    497   NamespaceDecl *getCanonicalDecl() override {
    498     return getOriginalNamespace();
    499   }
    500   const NamespaceDecl *getCanonicalDecl() const {
    501     return getOriginalNamespace();
    502   }
    503 
    504   SourceRange getSourceRange() const override LLVM_READONLY {
    505     return SourceRange(LocStart, RBraceLoc);
    506   }
    507 
    508   SourceLocation getLocStart() const LLVM_READONLY { return LocStart; }
    509   SourceLocation getRBraceLoc() const { return RBraceLoc; }
    510   void setLocStart(SourceLocation L) { LocStart = L; }
    511   void setRBraceLoc(SourceLocation L) { RBraceLoc = L; }
    512 
    513   // Implement isa/cast/dyncast/etc.
    514   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
    515   static bool classofKind(Kind K) { return K == Namespace; }
    516   static DeclContext *castToDeclContext(const NamespaceDecl *D) {
    517     return static_cast<DeclContext *>(const_cast<NamespaceDecl*>(D));
    518   }
    519   static NamespaceDecl *castFromDeclContext(const DeclContext *DC) {
    520     return static_cast<NamespaceDecl *>(const_cast<DeclContext*>(DC));
    521   }
    522 
    523   friend class ASTDeclReader;
    524   friend class ASTDeclWriter;
    525 };
    526 
    527 /// ValueDecl - Represent the declaration of a variable (in which case it is
    528 /// an lvalue) a function (in which case it is a function designator) or
    529 /// an enum constant.
    530 class ValueDecl : public NamedDecl {
    531   void anchor() override;
    532   QualType DeclType;
    533 
    534 protected:
    535   ValueDecl(Kind DK, DeclContext *DC, SourceLocation L,
    536             DeclarationName N, QualType T)
    537     : NamedDecl(DK, DC, L, N), DeclType(T) {}
    538 public:
    539   QualType getType() const { return DeclType; }
    540   void setType(QualType newType) { DeclType = newType; }
    541 
    542   /// \brief Determine whether this symbol is weakly-imported,
    543   ///        or declared with the weak or weak-ref attr.
    544   bool isWeak() const;
    545 
    546   // Implement isa/cast/dyncast/etc.
    547   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
    548   static bool classofKind(Kind K) { return K >= firstValue && K <= lastValue; }
    549 };
    550 
    551 /// QualifierInfo - A struct with extended info about a syntactic
    552 /// name qualifier, to be used for the case of out-of-line declarations.
    553 struct QualifierInfo {
    554   NestedNameSpecifierLoc QualifierLoc;
    555 
    556   /// NumTemplParamLists - The number of "outer" template parameter lists.
    557   /// The count includes all of the template parameter lists that were matched
    558   /// against the template-ids occurring into the NNS and possibly (in the
    559   /// case of an explicit specialization) a final "template <>".
    560   unsigned NumTemplParamLists;
    561 
    562   /// TemplParamLists - A new-allocated array of size NumTemplParamLists,
    563   /// containing pointers to the "outer" template parameter lists.
    564   /// It includes all of the template parameter lists that were matched
    565   /// against the template-ids occurring into the NNS and possibly (in the
    566   /// case of an explicit specialization) a final "template <>".
    567   TemplateParameterList** TemplParamLists;
    568 
    569   /// Default constructor.
    570   QualifierInfo()
    571     : QualifierLoc(), NumTemplParamLists(0), TemplParamLists(nullptr) {}
    572 
    573   /// setTemplateParameterListsInfo - Sets info about "outer" template
    574   /// parameter lists.
    575   void setTemplateParameterListsInfo(ASTContext &Context,
    576                                      ArrayRef<TemplateParameterList *> TPLists);
    577 
    578 private:
    579   // Copy constructor and copy assignment are disabled.
    580   QualifierInfo(const QualifierInfo&) = delete;
    581   QualifierInfo& operator=(const QualifierInfo&) = delete;
    582 };
    583 
    584 /// \brief Represents a ValueDecl that came out of a declarator.
    585 /// Contains type source information through TypeSourceInfo.
    586 class DeclaratorDecl : public ValueDecl {
    587   // A struct representing both a TInfo and a syntactic qualifier,
    588   // to be used for the (uncommon) case of out-of-line declarations.
    589   struct ExtInfo : public QualifierInfo {
    590     TypeSourceInfo *TInfo;
    591   };
    592 
    593   llvm::PointerUnion<TypeSourceInfo*, ExtInfo*> DeclInfo;
    594 
    595   /// InnerLocStart - The start of the source range for this declaration,
    596   /// ignoring outer template declarations.
    597   SourceLocation InnerLocStart;
    598 
    599   bool hasExtInfo() const { return DeclInfo.is<ExtInfo*>(); }
    600   ExtInfo *getExtInfo() { return DeclInfo.get<ExtInfo*>(); }
    601   const ExtInfo *getExtInfo() const { return DeclInfo.get<ExtInfo*>(); }
    602 
    603 protected:
    604   DeclaratorDecl(Kind DK, DeclContext *DC, SourceLocation L,
    605                  DeclarationName N, QualType T, TypeSourceInfo *TInfo,
    606                  SourceLocation StartL)
    607     : ValueDecl(DK, DC, L, N, T), DeclInfo(TInfo), InnerLocStart(StartL) {
    608   }
    609 
    610 public:
    611   TypeSourceInfo *getTypeSourceInfo() const {
    612     return hasExtInfo()
    613       ? getExtInfo()->TInfo
    614       : DeclInfo.get<TypeSourceInfo*>();
    615   }
    616   void setTypeSourceInfo(TypeSourceInfo *TI) {
    617     if (hasExtInfo())
    618       getExtInfo()->TInfo = TI;
    619     else
    620       DeclInfo = TI;
    621   }
    622 
    623   /// getInnerLocStart - Return SourceLocation representing start of source
    624   /// range ignoring outer template declarations.
    625   SourceLocation getInnerLocStart() const { return InnerLocStart; }
    626   void setInnerLocStart(SourceLocation L) { InnerLocStart = L; }
    627 
    628   /// getOuterLocStart - Return SourceLocation representing start of source
    629   /// range taking into account any outer template declarations.
    630   SourceLocation getOuterLocStart() const;
    631 
    632   SourceRange getSourceRange() const override LLVM_READONLY;
    633   SourceLocation getLocStart() const LLVM_READONLY {
    634     return getOuterLocStart();
    635   }
    636 
    637   /// \brief Retrieve the nested-name-specifier that qualifies the name of this
    638   /// declaration, if it was present in the source.
    639   NestedNameSpecifier *getQualifier() const {
    640     return hasExtInfo() ? getExtInfo()->QualifierLoc.getNestedNameSpecifier()
    641                         : nullptr;
    642   }
    643 
    644   /// \brief Retrieve the nested-name-specifier (with source-location
    645   /// information) that qualifies the name of this declaration, if it was
    646   /// present in the source.
    647   NestedNameSpecifierLoc getQualifierLoc() const {
    648     return hasExtInfo() ? getExtInfo()->QualifierLoc
    649                         : NestedNameSpecifierLoc();
    650   }
    651 
    652   void setQualifierInfo(NestedNameSpecifierLoc QualifierLoc);
    653 
    654   unsigned getNumTemplateParameterLists() const {
    655     return hasExtInfo() ? getExtInfo()->NumTemplParamLists : 0;
    656   }
    657   TemplateParameterList *getTemplateParameterList(unsigned index) const {
    658     assert(index < getNumTemplateParameterLists());
    659     return getExtInfo()->TemplParamLists[index];
    660   }
    661   void setTemplateParameterListsInfo(ASTContext &Context,
    662                                      ArrayRef<TemplateParameterList *> TPLists);
    663 
    664   SourceLocation getTypeSpecStartLoc() const;
    665 
    666   // Implement isa/cast/dyncast/etc.
    667   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
    668   static bool classofKind(Kind K) {
    669     return K >= firstDeclarator && K <= lastDeclarator;
    670   }
    671 
    672   friend class ASTDeclReader;
    673   friend class ASTDeclWriter;
    674 };
    675 
    676 /// \brief Structure used to store a statement, the constant value to
    677 /// which it was evaluated (if any), and whether or not the statement
    678 /// is an integral constant expression (if known).
    679 struct EvaluatedStmt {
    680   EvaluatedStmt() : WasEvaluated(false), IsEvaluating(false), CheckedICE(false),
    681                     CheckingICE(false), IsICE(false) { }
    682 
    683   /// \brief Whether this statement was already evaluated.
    684   bool WasEvaluated : 1;
    685 
    686   /// \brief Whether this statement is being evaluated.
    687   bool IsEvaluating : 1;
    688 
    689   /// \brief Whether we already checked whether this statement was an
    690   /// integral constant expression.
    691   bool CheckedICE : 1;
    692 
    693   /// \brief Whether we are checking whether this statement is an
    694   /// integral constant expression.
    695   bool CheckingICE : 1;
    696 
    697   /// \brief Whether this statement is an integral constant expression,
    698   /// or in C++11, whether the statement is a constant expression. Only
    699   /// valid if CheckedICE is true.
    700   bool IsICE : 1;
    701 
    702   Stmt *Value;
    703   APValue Evaluated;
    704 };
    705 
    706 /// VarDecl - An instance of this class is created to represent a variable
    707 /// declaration or definition.
    708 class VarDecl : public DeclaratorDecl, public Redeclarable<VarDecl> {
    709 public:
    710   /// getStorageClassSpecifierString - Return the string used to
    711   /// specify the storage class \p SC.
    712   ///
    713   /// It is illegal to call this function with SC == None.
    714   static const char *getStorageClassSpecifierString(StorageClass SC);
    715 
    716   /// \brief Initialization styles.
    717   enum InitializationStyle {
    718     CInit,    ///< C-style initialization with assignment
    719     CallInit, ///< Call-style initialization (C++98)
    720     ListInit  ///< Direct list-initialization (C++11)
    721   };
    722 
    723   /// \brief Kinds of thread-local storage.
    724   enum TLSKind {
    725     TLS_None,   ///< Not a TLS variable.
    726     TLS_Static, ///< TLS with a known-constant initializer.
    727     TLS_Dynamic ///< TLS with a dynamic initializer.
    728   };
    729 
    730 protected:
    731   /// \brief Placeholder type used in Init to denote an unparsed C++ default
    732   /// argument.
    733   struct UnparsedDefaultArgument;
    734 
    735   /// \brief Placeholder type used in Init to denote an uninstantiated C++
    736   /// default argument.
    737   struct UninstantiatedDefaultArgument;
    738 
    739   typedef llvm::PointerUnion4<Stmt *, EvaluatedStmt *,
    740                               UnparsedDefaultArgument *,
    741                               UninstantiatedDefaultArgument *> InitType;
    742 
    743   /// \brief The initializer for this variable or, for a ParmVarDecl, the
    744   /// C++ default argument.
    745   mutable InitType Init;
    746 
    747 private:
    748   class VarDeclBitfields {
    749     friend class VarDecl;
    750     friend class ASTDeclReader;
    751 
    752     unsigned SClass : 3;
    753     unsigned TSCSpec : 2;
    754     unsigned InitStyle : 2;
    755   };
    756   enum { NumVarDeclBits = 7 };
    757 
    758   friend class ASTDeclReader;
    759   friend class StmtIteratorBase;
    760   friend class ASTNodeImporter;
    761 
    762 protected:
    763   enum { NumParameterIndexBits = 8 };
    764 
    765   class ParmVarDeclBitfields {
    766     friend class ParmVarDecl;
    767     friend class ASTDeclReader;
    768 
    769     unsigned : NumVarDeclBits;
    770 
    771     /// Whether this parameter inherits a default argument from a
    772     /// prior declaration.
    773     unsigned HasInheritedDefaultArg : 1;
    774 
    775     /// Whether this parameter undergoes K&R argument promotion.
    776     unsigned IsKNRPromoted : 1;
    777 
    778     /// Whether this parameter is an ObjC method parameter or not.
    779     unsigned IsObjCMethodParam : 1;
    780 
    781     /// If IsObjCMethodParam, a Decl::ObjCDeclQualifier.
    782     /// Otherwise, the number of function parameter scopes enclosing
    783     /// the function parameter scope in which this parameter was
    784     /// declared.
    785     unsigned ScopeDepthOrObjCQuals : 7;
    786 
    787     /// The number of parameters preceding this parameter in the
    788     /// function parameter scope in which it was declared.
    789     unsigned ParameterIndex : NumParameterIndexBits;
    790   };
    791 
    792   class NonParmVarDeclBitfields {
    793     friend class VarDecl;
    794     friend class ASTDeclReader;
    795 
    796     unsigned : NumVarDeclBits;
    797 
    798     /// \brief Whether this variable is the exception variable in a C++ catch
    799     /// or an Objective-C @catch statement.
    800     unsigned ExceptionVar : 1;
    801 
    802     /// \brief Whether this local variable could be allocated in the return
    803     /// slot of its function, enabling the named return value optimization
    804     /// (NRVO).
    805     unsigned NRVOVariable : 1;
    806 
    807     /// \brief Whether this variable is the for-range-declaration in a C++0x
    808     /// for-range statement.
    809     unsigned CXXForRangeDecl : 1;
    810 
    811     /// \brief Whether this variable is an ARC pseudo-__strong
    812     /// variable;  see isARCPseudoStrong() for details.
    813     unsigned ARCPseudoStrong : 1;
    814 
    815     /// \brief Whether this variable is (C++0x) constexpr.
    816     unsigned IsConstexpr : 1;
    817 
    818     /// \brief Whether this variable is a (C++ Concepts TS) concept.
    819     unsigned IsConcept : 1;
    820 
    821     /// \brief Whether this variable is the implicit variable for a lambda
    822     /// init-capture.
    823     unsigned IsInitCapture : 1;
    824 
    825     /// \brief Whether this local extern variable's previous declaration was
    826     /// declared in the same block scope. This controls whether we should merge
    827     /// the type of this declaration with its previous declaration.
    828     unsigned PreviousDeclInSameBlockScope : 1;
    829   };
    830 
    831   union {
    832     unsigned AllBits;
    833     VarDeclBitfields VarDeclBits;
    834     ParmVarDeclBitfields ParmVarDeclBits;
    835     NonParmVarDeclBitfields NonParmVarDeclBits;
    836   };
    837 
    838   VarDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
    839           SourceLocation IdLoc, IdentifierInfo *Id, QualType T,
    840           TypeSourceInfo *TInfo, StorageClass SC);
    841 
    842   typedef Redeclarable<VarDecl> redeclarable_base;
    843   VarDecl *getNextRedeclarationImpl() override {
    844     return getNextRedeclaration();
    845   }
    846   VarDecl *getPreviousDeclImpl() override {
    847     return getPreviousDecl();
    848   }
    849   VarDecl *getMostRecentDeclImpl() override {
    850     return getMostRecentDecl();
    851   }
    852 
    853 public:
    854   typedef redeclarable_base::redecl_range redecl_range;
    855   typedef redeclarable_base::redecl_iterator redecl_iterator;
    856   using redeclarable_base::redecls_begin;
    857   using redeclarable_base::redecls_end;
    858   using redeclarable_base::redecls;
    859   using redeclarable_base::getPreviousDecl;
    860   using redeclarable_base::getMostRecentDecl;
    861   using redeclarable_base::isFirstDecl;
    862 
    863   static VarDecl *Create(ASTContext &C, DeclContext *DC,
    864                          SourceLocation StartLoc, SourceLocation IdLoc,
    865                          IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo,
    866                          StorageClass S);
    867 
    868   static VarDecl *CreateDeserialized(ASTContext &C, unsigned ID);
    869 
    870   SourceRange getSourceRange() const override LLVM_READONLY;
    871 
    872   /// \brief Returns the storage class as written in the source. For the
    873   /// computed linkage of symbol, see getLinkage.
    874   StorageClass getStorageClass() const {
    875     return (StorageClass) VarDeclBits.SClass;
    876   }
    877   void setStorageClass(StorageClass SC);
    878 
    879   void setTSCSpec(ThreadStorageClassSpecifier TSC) {
    880     VarDeclBits.TSCSpec = TSC;
    881     assert(VarDeclBits.TSCSpec == TSC && "truncation");
    882   }
    883   ThreadStorageClassSpecifier getTSCSpec() const {
    884     return static_cast<ThreadStorageClassSpecifier>(VarDeclBits.TSCSpec);
    885   }
    886   TLSKind getTLSKind() const;
    887 
    888   /// hasLocalStorage - Returns true if a variable with function scope
    889   ///  is a non-static local variable.
    890   bool hasLocalStorage() const {
    891     if (getStorageClass() == SC_None)
    892       // Second check is for C++11 [dcl.stc]p4.
    893       return !isFileVarDecl() && getTSCSpec() == TSCS_unspecified;
    894 
    895     // Global Named Register (GNU extension)
    896     if (getStorageClass() == SC_Register && !isLocalVarDeclOrParm())
    897       return false;
    898 
    899     // Return true for:  Auto, Register.
    900     // Return false for: Extern, Static, PrivateExtern, OpenCLWorkGroupLocal.
    901 
    902     return getStorageClass() >= SC_Auto;
    903   }
    904 
    905   /// isStaticLocal - Returns true if a variable with function scope is a
    906   /// static local variable.
    907   bool isStaticLocal() const {
    908     return (getStorageClass() == SC_Static ||
    909             // C++11 [dcl.stc]p4
    910             (getStorageClass() == SC_None && getTSCSpec() == TSCS_thread_local))
    911       && !isFileVarDecl();
    912   }
    913 
    914   /// \brief Returns true if a variable has extern or __private_extern__
    915   /// storage.
    916   bool hasExternalStorage() const {
    917     return getStorageClass() == SC_Extern ||
    918            getStorageClass() == SC_PrivateExtern;
    919   }
    920 
    921   /// \brief Returns true for all variables that do not have local storage.
    922   ///
    923   /// This includes all global variables as well as static variables declared
    924   /// within a function.
    925   bool hasGlobalStorage() const { return !hasLocalStorage(); }
    926 
    927   /// \brief Get the storage duration of this variable, per C++ [basic.stc].
    928   StorageDuration getStorageDuration() const {
    929     return hasLocalStorage() ? SD_Automatic :
    930            getTSCSpec() ? SD_Thread : SD_Static;
    931   }
    932 
    933   /// \brief Compute the language linkage.
    934   LanguageLinkage getLanguageLinkage() const;
    935 
    936   /// \brief Determines whether this variable is a variable with
    937   /// external, C linkage.
    938   bool isExternC() const;
    939 
    940   /// \brief Determines whether this variable's context is, or is nested within,
    941   /// a C++ extern "C" linkage spec.
    942   bool isInExternCContext() const;
    943 
    944   /// \brief Determines whether this variable's context is, or is nested within,
    945   /// a C++ extern "C++" linkage spec.
    946   bool isInExternCXXContext() const;
    947 
    948   /// isLocalVarDecl - Returns true for local variable declarations
    949   /// other than parameters.  Note that this includes static variables
    950   /// inside of functions. It also includes variables inside blocks.
    951   ///
    952   ///   void foo() { int x; static int y; extern int z; }
    953   ///
    954   bool isLocalVarDecl() const {
    955     if (getKind() != Decl::Var)
    956       return false;
    957     if (const DeclContext *DC = getLexicalDeclContext())
    958       return DC->getRedeclContext()->isFunctionOrMethod();
    959     return false;
    960   }
    961 
    962   /// \brief Similar to isLocalVarDecl but also includes parameters.
    963   bool isLocalVarDeclOrParm() const {
    964     return isLocalVarDecl() || getKind() == Decl::ParmVar;
    965   }
    966 
    967   /// isFunctionOrMethodVarDecl - Similar to isLocalVarDecl, but
    968   /// excludes variables declared in blocks.
    969   bool isFunctionOrMethodVarDecl() const {
    970     if (getKind() != Decl::Var)
    971       return false;
    972     const DeclContext *DC = getLexicalDeclContext()->getRedeclContext();
    973     return DC->isFunctionOrMethod() && DC->getDeclKind() != Decl::Block;
    974   }
    975 
    976   /// \brief Determines whether this is a static data member.
    977   ///
    978   /// This will only be true in C++, and applies to, e.g., the
    979   /// variable 'x' in:
    980   /// \code
    981   /// struct S {
    982   ///   static int x;
    983   /// };
    984   /// \endcode
    985   bool isStaticDataMember() const {
    986     // If it wasn't static, it would be a FieldDecl.
    987     return getKind() != Decl::ParmVar && getDeclContext()->isRecord();
    988   }
    989 
    990   VarDecl *getCanonicalDecl() override;
    991   const VarDecl *getCanonicalDecl() const {
    992     return const_cast<VarDecl*>(this)->getCanonicalDecl();
    993   }
    994 
    995   enum DefinitionKind {
    996     DeclarationOnly,      ///< This declaration is only a declaration.
    997     TentativeDefinition,  ///< This declaration is a tentative definition.
    998     Definition            ///< This declaration is definitely a definition.
    999   };
   1000 
   1001   /// \brief Check whether this declaration is a definition. If this could be
   1002   /// a tentative definition (in C), don't check whether there's an overriding
   1003   /// definition.
   1004   DefinitionKind isThisDeclarationADefinition(ASTContext &) const;
   1005   DefinitionKind isThisDeclarationADefinition() const {
   1006     return isThisDeclarationADefinition(getASTContext());
   1007   }
   1008 
   1009   /// \brief Check whether this variable is defined in this
   1010   /// translation unit.
   1011   DefinitionKind hasDefinition(ASTContext &) const;
   1012   DefinitionKind hasDefinition() const {
   1013     return hasDefinition(getASTContext());
   1014   }
   1015 
   1016   /// \brief Get the tentative definition that acts as the real definition in
   1017   /// a TU. Returns null if there is a proper definition available.
   1018   VarDecl *getActingDefinition();
   1019   const VarDecl *getActingDefinition() const {
   1020     return const_cast<VarDecl*>(this)->getActingDefinition();
   1021   }
   1022 
   1023   /// \brief Get the real (not just tentative) definition for this declaration.
   1024   VarDecl *getDefinition(ASTContext &);
   1025   const VarDecl *getDefinition(ASTContext &C) const {
   1026     return const_cast<VarDecl*>(this)->getDefinition(C);
   1027   }
   1028   VarDecl *getDefinition() {
   1029     return getDefinition(getASTContext());
   1030   }
   1031   const VarDecl *getDefinition() const {
   1032     return const_cast<VarDecl*>(this)->getDefinition();
   1033   }
   1034 
   1035   /// \brief Determine whether this is or was instantiated from an out-of-line
   1036   /// definition of a static data member.
   1037   bool isOutOfLine() const override;
   1038 
   1039   /// \brief If this is a static data member, find its out-of-line definition.
   1040   VarDecl *getOutOfLineDefinition();
   1041 
   1042   /// isFileVarDecl - Returns true for file scoped variable declaration.
   1043   bool isFileVarDecl() const {
   1044     Kind K = getKind();
   1045     if (K == ParmVar || K == ImplicitParam)
   1046       return false;
   1047 
   1048     if (getLexicalDeclContext()->getRedeclContext()->isFileContext())
   1049       return true;
   1050 
   1051     if (isStaticDataMember())
   1052       return true;
   1053 
   1054     return false;
   1055   }
   1056 
   1057   /// getAnyInitializer - Get the initializer for this variable, no matter which
   1058   /// declaration it is attached to.
   1059   const Expr *getAnyInitializer() const {
   1060     const VarDecl *D;
   1061     return getAnyInitializer(D);
   1062   }
   1063 
   1064   /// getAnyInitializer - Get the initializer for this variable, no matter which
   1065   /// declaration it is attached to. Also get that declaration.
   1066   const Expr *getAnyInitializer(const VarDecl *&D) const;
   1067 
   1068   bool hasInit() const {
   1069     return !Init.isNull() && (Init.is<Stmt *>() || Init.is<EvaluatedStmt *>());
   1070   }
   1071   const Expr *getInit() const {
   1072     if (Init.isNull())
   1073       return nullptr;
   1074 
   1075     const Stmt *S = Init.dyn_cast<Stmt *>();
   1076     if (!S) {
   1077       if (EvaluatedStmt *ES = Init.dyn_cast<EvaluatedStmt*>())
   1078         S = ES->Value;
   1079     }
   1080     return (const Expr*) S;
   1081   }
   1082   Expr *getInit() {
   1083     if (Init.isNull())
   1084       return nullptr;
   1085 
   1086     Stmt *S = Init.dyn_cast<Stmt *>();
   1087     if (!S) {
   1088       if (EvaluatedStmt *ES = Init.dyn_cast<EvaluatedStmt*>())
   1089         S = ES->Value;
   1090     }
   1091 
   1092     return (Expr*) S;
   1093   }
   1094 
   1095   /// \brief Retrieve the address of the initializer expression.
   1096   Stmt **getInitAddress() {
   1097     if (EvaluatedStmt *ES = Init.dyn_cast<EvaluatedStmt*>())
   1098       return &ES->Value;
   1099 
   1100     // This union hack tip-toes around strict-aliasing rules.
   1101     union {
   1102       InitType *InitPtr;
   1103       Stmt **StmtPtr;
   1104     };
   1105 
   1106     InitPtr = &Init;
   1107     return StmtPtr;
   1108   }
   1109 
   1110   void setInit(Expr *I);
   1111 
   1112   /// \brief Determine whether this variable's value can be used in a
   1113   /// constant expression, according to the relevant language standard.
   1114   /// This only checks properties of the declaration, and does not check
   1115   /// whether the initializer is in fact a constant expression.
   1116   bool isUsableInConstantExpressions(ASTContext &C) const;
   1117 
   1118   EvaluatedStmt *ensureEvaluatedStmt() const;
   1119 
   1120   /// \brief Attempt to evaluate the value of the initializer attached to this
   1121   /// declaration, and produce notes explaining why it cannot be evaluated or is
   1122   /// not a constant expression. Returns a pointer to the value if evaluation
   1123   /// succeeded, 0 otherwise.
   1124   APValue *evaluateValue() const;
   1125   APValue *evaluateValue(SmallVectorImpl<PartialDiagnosticAt> &Notes) const;
   1126 
   1127   /// \brief Return the already-evaluated value of this variable's
   1128   /// initializer, or NULL if the value is not yet known. Returns pointer
   1129   /// to untyped APValue if the value could not be evaluated.
   1130   APValue *getEvaluatedValue() const {
   1131     if (EvaluatedStmt *Eval = Init.dyn_cast<EvaluatedStmt *>())
   1132       if (Eval->WasEvaluated)
   1133         return &Eval->Evaluated;
   1134 
   1135     return nullptr;
   1136   }
   1137 
   1138   /// \brief Determines whether it is already known whether the
   1139   /// initializer is an integral constant expression or not.
   1140   bool isInitKnownICE() const {
   1141     if (EvaluatedStmt *Eval = Init.dyn_cast<EvaluatedStmt *>())
   1142       return Eval->CheckedICE;
   1143 
   1144     return false;
   1145   }
   1146 
   1147   /// \brief Determines whether the initializer is an integral constant
   1148   /// expression, or in C++11, whether the initializer is a constant
   1149   /// expression.
   1150   ///
   1151   /// \pre isInitKnownICE()
   1152   bool isInitICE() const {
   1153     assert(isInitKnownICE() &&
   1154            "Check whether we already know that the initializer is an ICE");
   1155     return Init.get<EvaluatedStmt *>()->IsICE;
   1156   }
   1157 
   1158   /// \brief Determine whether the value of the initializer attached to this
   1159   /// declaration is an integral constant expression.
   1160   bool checkInitIsICE() const;
   1161 
   1162   void setInitStyle(InitializationStyle Style) {
   1163     VarDeclBits.InitStyle = Style;
   1164   }
   1165 
   1166   /// \brief The style of initialization for this declaration.
   1167   ///
   1168   /// C-style initialization is "int x = 1;". Call-style initialization is
   1169   /// a C++98 direct-initializer, e.g. "int x(1);". The Init expression will be
   1170   /// the expression inside the parens or a "ClassType(a,b,c)" class constructor
   1171   /// expression for class types. List-style initialization is C++11 syntax,
   1172   /// e.g. "int x{1};". Clients can distinguish between different forms of
   1173   /// initialization by checking this value. In particular, "int x = {1};" is
   1174   /// C-style, "int x({1})" is call-style, and "int x{1};" is list-style; the
   1175   /// Init expression in all three cases is an InitListExpr.
   1176   InitializationStyle getInitStyle() const {
   1177     return static_cast<InitializationStyle>(VarDeclBits.InitStyle);
   1178   }
   1179 
   1180   /// \brief Whether the initializer is a direct-initializer (list or call).
   1181   bool isDirectInit() const {
   1182     return getInitStyle() != CInit;
   1183   }
   1184 
   1185   /// \brief Determine whether this variable is the exception variable in a
   1186   /// C++ catch statememt or an Objective-C \@catch statement.
   1187   bool isExceptionVariable() const {
   1188     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.ExceptionVar;
   1189   }
   1190   void setExceptionVariable(bool EV) {
   1191     assert(!isa<ParmVarDecl>(this));
   1192     NonParmVarDeclBits.ExceptionVar = EV;
   1193   }
   1194 
   1195   /// \brief Determine whether this local variable can be used with the named
   1196   /// return value optimization (NRVO).
   1197   ///
   1198   /// The named return value optimization (NRVO) works by marking certain
   1199   /// non-volatile local variables of class type as NRVO objects. These
   1200   /// locals can be allocated within the return slot of their containing
   1201   /// function, in which case there is no need to copy the object to the
   1202   /// return slot when returning from the function. Within the function body,
   1203   /// each return that returns the NRVO object will have this variable as its
   1204   /// NRVO candidate.
   1205   bool isNRVOVariable() const {
   1206     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.NRVOVariable;
   1207   }
   1208   void setNRVOVariable(bool NRVO) {
   1209     assert(!isa<ParmVarDecl>(this));
   1210     NonParmVarDeclBits.NRVOVariable = NRVO;
   1211   }
   1212 
   1213   /// \brief Determine whether this variable is the for-range-declaration in
   1214   /// a C++0x for-range statement.
   1215   bool isCXXForRangeDecl() const {
   1216     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.CXXForRangeDecl;
   1217   }
   1218   void setCXXForRangeDecl(bool FRD) {
   1219     assert(!isa<ParmVarDecl>(this));
   1220     NonParmVarDeclBits.CXXForRangeDecl = FRD;
   1221   }
   1222 
   1223   /// \brief Determine whether this variable is an ARC pseudo-__strong
   1224   /// variable.  A pseudo-__strong variable has a __strong-qualified
   1225   /// type but does not actually retain the object written into it.
   1226   /// Generally such variables are also 'const' for safety.
   1227   bool isARCPseudoStrong() const {
   1228     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.ARCPseudoStrong;
   1229   }
   1230   void setARCPseudoStrong(bool ps) {
   1231     assert(!isa<ParmVarDecl>(this));
   1232     NonParmVarDeclBits.ARCPseudoStrong = ps;
   1233   }
   1234 
   1235   /// Whether this variable is (C++11) constexpr.
   1236   bool isConstexpr() const {
   1237     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.IsConstexpr;
   1238   }
   1239   void setConstexpr(bool IC) {
   1240     assert(!isa<ParmVarDecl>(this));
   1241     NonParmVarDeclBits.IsConstexpr = IC;
   1242   }
   1243 
   1244   /// Whether this variable is (C++ Concepts TS) concept.
   1245   bool isConcept() const {
   1246     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.IsConcept;
   1247   }
   1248   void setConcept(bool IC) {
   1249     assert(!isa<ParmVarDecl>(this));
   1250     NonParmVarDeclBits.IsConcept = IC;
   1251   }
   1252 
   1253   /// Whether this variable is the implicit variable for a lambda init-capture.
   1254   bool isInitCapture() const {
   1255     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.IsInitCapture;
   1256   }
   1257   void setInitCapture(bool IC) {
   1258     assert(!isa<ParmVarDecl>(this));
   1259     NonParmVarDeclBits.IsInitCapture = IC;
   1260   }
   1261 
   1262   /// Whether this local extern variable declaration's previous declaration
   1263   /// was declared in the same block scope. Only correct in C++.
   1264   bool isPreviousDeclInSameBlockScope() const {
   1265     return isa<ParmVarDecl>(this)
   1266                ? false
   1267                : NonParmVarDeclBits.PreviousDeclInSameBlockScope;
   1268   }
   1269   void setPreviousDeclInSameBlockScope(bool Same) {
   1270     assert(!isa<ParmVarDecl>(this));
   1271     NonParmVarDeclBits.PreviousDeclInSameBlockScope = Same;
   1272   }
   1273 
   1274   /// \brief If this variable is an instantiated static data member of a
   1275   /// class template specialization, returns the templated static data member
   1276   /// from which it was instantiated.
   1277   VarDecl *getInstantiatedFromStaticDataMember() const;
   1278 
   1279   /// \brief If this variable is an instantiation of a variable template or a
   1280   /// static data member of a class template, determine what kind of
   1281   /// template specialization or instantiation this is.
   1282   TemplateSpecializationKind getTemplateSpecializationKind() const;
   1283 
   1284   /// \brief If this variable is an instantiation of a variable template or a
   1285   /// static data member of a class template, determine its point of
   1286   /// instantiation.
   1287   SourceLocation getPointOfInstantiation() const;
   1288 
   1289   /// \brief If this variable is an instantiation of a static data member of a
   1290   /// class template specialization, retrieves the member specialization
   1291   /// information.
   1292   MemberSpecializationInfo *getMemberSpecializationInfo() const;
   1293 
   1294   /// \brief For a static data member that was instantiated from a static
   1295   /// data member of a class template, set the template specialiation kind.
   1296   void setTemplateSpecializationKind(TemplateSpecializationKind TSK,
   1297                         SourceLocation PointOfInstantiation = SourceLocation());
   1298 
   1299   /// \brief Specify that this variable is an instantiation of the
   1300   /// static data member VD.
   1301   void setInstantiationOfStaticDataMember(VarDecl *VD,
   1302                                           TemplateSpecializationKind TSK);
   1303 
   1304   /// \brief Retrieves the variable template that is described by this
   1305   /// variable declaration.
   1306   ///
   1307   /// Every variable template is represented as a VarTemplateDecl and a
   1308   /// VarDecl. The former contains template properties (such as
   1309   /// the template parameter lists) while the latter contains the
   1310   /// actual description of the template's
   1311   /// contents. VarTemplateDecl::getTemplatedDecl() retrieves the
   1312   /// VarDecl that from a VarTemplateDecl, while
   1313   /// getDescribedVarTemplate() retrieves the VarTemplateDecl from
   1314   /// a VarDecl.
   1315   VarTemplateDecl *getDescribedVarTemplate() const;
   1316 
   1317   void setDescribedVarTemplate(VarTemplateDecl *Template);
   1318 
   1319   // Implement isa/cast/dyncast/etc.
   1320   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   1321   static bool classofKind(Kind K) { return K >= firstVar && K <= lastVar; }
   1322 };
   1323 
   1324 class ImplicitParamDecl : public VarDecl {
   1325   void anchor() override;
   1326 public:
   1327   static ImplicitParamDecl *Create(ASTContext &C, DeclContext *DC,
   1328                                    SourceLocation IdLoc, IdentifierInfo *Id,
   1329                                    QualType T);
   1330 
   1331   static ImplicitParamDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   1332 
   1333   ImplicitParamDecl(ASTContext &C, DeclContext *DC, SourceLocation IdLoc,
   1334                     IdentifierInfo *Id, QualType Type)
   1335     : VarDecl(ImplicitParam, C, DC, IdLoc, IdLoc, Id, Type,
   1336               /*tinfo*/ nullptr, SC_None) {
   1337     setImplicit();
   1338   }
   1339 
   1340   // Implement isa/cast/dyncast/etc.
   1341   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   1342   static bool classofKind(Kind K) { return K == ImplicitParam; }
   1343 };
   1344 
   1345 /// ParmVarDecl - Represents a parameter to a function.
   1346 class ParmVarDecl : public VarDecl {
   1347 public:
   1348   enum { MaxFunctionScopeDepth = 255 };
   1349   enum { MaxFunctionScopeIndex = 255 };
   1350 
   1351 protected:
   1352   ParmVarDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
   1353               SourceLocation IdLoc, IdentifierInfo *Id, QualType T,
   1354               TypeSourceInfo *TInfo, StorageClass S, Expr *DefArg)
   1355       : VarDecl(DK, C, DC, StartLoc, IdLoc, Id, T, TInfo, S) {
   1356     assert(ParmVarDeclBits.HasInheritedDefaultArg == false);
   1357     assert(ParmVarDeclBits.IsKNRPromoted == false);
   1358     assert(ParmVarDeclBits.IsObjCMethodParam == false);
   1359     setDefaultArg(DefArg);
   1360   }
   1361 
   1362 public:
   1363   static ParmVarDecl *Create(ASTContext &C, DeclContext *DC,
   1364                              SourceLocation StartLoc,
   1365                              SourceLocation IdLoc, IdentifierInfo *Id,
   1366                              QualType T, TypeSourceInfo *TInfo,
   1367                              StorageClass S, Expr *DefArg);
   1368 
   1369   static ParmVarDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   1370 
   1371   SourceRange getSourceRange() const override LLVM_READONLY;
   1372 
   1373   void setObjCMethodScopeInfo(unsigned parameterIndex) {
   1374     ParmVarDeclBits.IsObjCMethodParam = true;
   1375     setParameterIndex(parameterIndex);
   1376   }
   1377 
   1378   void setScopeInfo(unsigned scopeDepth, unsigned parameterIndex) {
   1379     assert(!ParmVarDeclBits.IsObjCMethodParam);
   1380 
   1381     ParmVarDeclBits.ScopeDepthOrObjCQuals = scopeDepth;
   1382     assert(ParmVarDeclBits.ScopeDepthOrObjCQuals == scopeDepth
   1383            && "truncation!");
   1384 
   1385     setParameterIndex(parameterIndex);
   1386   }
   1387 
   1388   bool isObjCMethodParameter() const {
   1389     return ParmVarDeclBits.IsObjCMethodParam;
   1390   }
   1391 
   1392   unsigned getFunctionScopeDepth() const {
   1393     if (ParmVarDeclBits.IsObjCMethodParam) return 0;
   1394     return ParmVarDeclBits.ScopeDepthOrObjCQuals;
   1395   }
   1396 
   1397   /// Returns the index of this parameter in its prototype or method scope.
   1398   unsigned getFunctionScopeIndex() const {
   1399     return getParameterIndex();
   1400   }
   1401 
   1402   ObjCDeclQualifier getObjCDeclQualifier() const {
   1403     if (!ParmVarDeclBits.IsObjCMethodParam) return OBJC_TQ_None;
   1404     return ObjCDeclQualifier(ParmVarDeclBits.ScopeDepthOrObjCQuals);
   1405   }
   1406   void setObjCDeclQualifier(ObjCDeclQualifier QTVal) {
   1407     assert(ParmVarDeclBits.IsObjCMethodParam);
   1408     ParmVarDeclBits.ScopeDepthOrObjCQuals = QTVal;
   1409   }
   1410 
   1411   /// True if the value passed to this parameter must undergo
   1412   /// K&R-style default argument promotion:
   1413   ///
   1414   /// C99 6.5.2.2.
   1415   ///   If the expression that denotes the called function has a type
   1416   ///   that does not include a prototype, the integer promotions are
   1417   ///   performed on each argument, and arguments that have type float
   1418   ///   are promoted to double.
   1419   bool isKNRPromoted() const {
   1420     return ParmVarDeclBits.IsKNRPromoted;
   1421   }
   1422   void setKNRPromoted(bool promoted) {
   1423     ParmVarDeclBits.IsKNRPromoted = promoted;
   1424   }
   1425 
   1426   Expr *getDefaultArg();
   1427   const Expr *getDefaultArg() const {
   1428     return const_cast<ParmVarDecl *>(this)->getDefaultArg();
   1429   }
   1430 
   1431   void setDefaultArg(Expr *defarg) {
   1432     Init = reinterpret_cast<Stmt *>(defarg);
   1433   }
   1434 
   1435   /// \brief Retrieve the source range that covers the entire default
   1436   /// argument.
   1437   SourceRange getDefaultArgRange() const;
   1438   void setUninstantiatedDefaultArg(Expr *arg) {
   1439     Init = reinterpret_cast<UninstantiatedDefaultArgument *>(arg);
   1440   }
   1441   Expr *getUninstantiatedDefaultArg() {
   1442     return (Expr *)Init.get<UninstantiatedDefaultArgument *>();
   1443   }
   1444   const Expr *getUninstantiatedDefaultArg() const {
   1445     return (const Expr *)Init.get<UninstantiatedDefaultArgument *>();
   1446   }
   1447 
   1448   /// hasDefaultArg - Determines whether this parameter has a default argument,
   1449   /// either parsed or not.
   1450   bool hasDefaultArg() const {
   1451     return getInit() || hasUnparsedDefaultArg() ||
   1452       hasUninstantiatedDefaultArg();
   1453   }
   1454 
   1455   /// hasUnparsedDefaultArg - Determines whether this parameter has a
   1456   /// default argument that has not yet been parsed. This will occur
   1457   /// during the processing of a C++ class whose member functions have
   1458   /// default arguments, e.g.,
   1459   /// @code
   1460   ///   class X {
   1461   ///   public:
   1462   ///     void f(int x = 17); // x has an unparsed default argument now
   1463   ///   }; // x has a regular default argument now
   1464   /// @endcode
   1465   bool hasUnparsedDefaultArg() const {
   1466     return Init.is<UnparsedDefaultArgument*>();
   1467   }
   1468 
   1469   bool hasUninstantiatedDefaultArg() const {
   1470     return Init.is<UninstantiatedDefaultArgument*>();
   1471   }
   1472 
   1473   /// setUnparsedDefaultArg - Specify that this parameter has an
   1474   /// unparsed default argument. The argument will be replaced with a
   1475   /// real default argument via setDefaultArg when the class
   1476   /// definition enclosing the function declaration that owns this
   1477   /// default argument is completed.
   1478   void setUnparsedDefaultArg() { Init = (UnparsedDefaultArgument *)nullptr; }
   1479 
   1480   bool hasInheritedDefaultArg() const {
   1481     return ParmVarDeclBits.HasInheritedDefaultArg;
   1482   }
   1483 
   1484   void setHasInheritedDefaultArg(bool I = true) {
   1485     ParmVarDeclBits.HasInheritedDefaultArg = I;
   1486   }
   1487 
   1488   QualType getOriginalType() const;
   1489 
   1490   /// \brief Determine whether this parameter is actually a function
   1491   /// parameter pack.
   1492   bool isParameterPack() const;
   1493 
   1494   /// setOwningFunction - Sets the function declaration that owns this
   1495   /// ParmVarDecl. Since ParmVarDecls are often created before the
   1496   /// FunctionDecls that own them, this routine is required to update
   1497   /// the DeclContext appropriately.
   1498   void setOwningFunction(DeclContext *FD) { setDeclContext(FD); }
   1499 
   1500   // Implement isa/cast/dyncast/etc.
   1501   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   1502   static bool classofKind(Kind K) { return K == ParmVar; }
   1503 
   1504 private:
   1505   enum { ParameterIndexSentinel = (1 << NumParameterIndexBits) - 1 };
   1506 
   1507   void setParameterIndex(unsigned parameterIndex) {
   1508     if (parameterIndex >= ParameterIndexSentinel) {
   1509       setParameterIndexLarge(parameterIndex);
   1510       return;
   1511     }
   1512 
   1513     ParmVarDeclBits.ParameterIndex = parameterIndex;
   1514     assert(ParmVarDeclBits.ParameterIndex == parameterIndex && "truncation!");
   1515   }
   1516   unsigned getParameterIndex() const {
   1517     unsigned d = ParmVarDeclBits.ParameterIndex;
   1518     return d == ParameterIndexSentinel ? getParameterIndexLarge() : d;
   1519   }
   1520 
   1521   void setParameterIndexLarge(unsigned parameterIndex);
   1522   unsigned getParameterIndexLarge() const;
   1523 };
   1524 
   1525 /// FunctionDecl - An instance of this class is created to represent a
   1526 /// function declaration or definition.
   1527 ///
   1528 /// Since a given function can be declared several times in a program,
   1529 /// there may be several FunctionDecls that correspond to that
   1530 /// function. Only one of those FunctionDecls will be found when
   1531 /// traversing the list of declarations in the context of the
   1532 /// FunctionDecl (e.g., the translation unit); this FunctionDecl
   1533 /// contains all of the information known about the function. Other,
   1534 /// previous declarations of the function are available via the
   1535 /// getPreviousDecl() chain.
   1536 class FunctionDecl : public DeclaratorDecl, public DeclContext,
   1537                      public Redeclarable<FunctionDecl> {
   1538 public:
   1539   /// \brief The kind of templated function a FunctionDecl can be.
   1540   enum TemplatedKind {
   1541     TK_NonTemplate,
   1542     TK_FunctionTemplate,
   1543     TK_MemberSpecialization,
   1544     TK_FunctionTemplateSpecialization,
   1545     TK_DependentFunctionTemplateSpecialization
   1546   };
   1547 
   1548 private:
   1549   /// ParamInfo - new[]'d array of pointers to VarDecls for the formal
   1550   /// parameters of this function.  This is null if a prototype or if there are
   1551   /// no formals.
   1552   ParmVarDecl **ParamInfo;
   1553 
   1554   /// DeclsInPrototypeScope - Array of pointers to NamedDecls for
   1555   /// decls defined in the function prototype that are not parameters. E.g.
   1556   /// 'enum Y' in 'void f(enum Y {AA} x) {}'.
   1557   ArrayRef<NamedDecl *> DeclsInPrototypeScope;
   1558 
   1559   LazyDeclStmtPtr Body;
   1560 
   1561   // FIXME: This can be packed into the bitfields in Decl.
   1562   // NOTE: VC++ treats enums as signed, avoid using the StorageClass enum
   1563   unsigned SClass : 2;
   1564   bool IsInline : 1;
   1565   bool IsInlineSpecified : 1;
   1566   bool IsVirtualAsWritten : 1;
   1567   bool IsPure : 1;
   1568   bool HasInheritedPrototype : 1;
   1569   bool HasWrittenPrototype : 1;
   1570   bool IsDeleted : 1;
   1571   bool IsTrivial : 1; // sunk from CXXMethodDecl
   1572   bool IsDefaulted : 1; // sunk from CXXMethoDecl
   1573   bool IsExplicitlyDefaulted : 1; //sunk from CXXMethodDecl
   1574   bool HasImplicitReturnZero : 1;
   1575   bool IsLateTemplateParsed : 1;
   1576   bool IsConstexpr : 1;
   1577 
   1578   /// \brief Indicates if the function uses __try.
   1579   bool UsesSEHTry : 1;
   1580 
   1581   /// \brief Indicates if the function was a definition but its body was
   1582   /// skipped.
   1583   unsigned HasSkippedBody : 1;
   1584 
   1585   /// \brief End part of this FunctionDecl's source range.
   1586   ///
   1587   /// We could compute the full range in getSourceRange(). However, when we're
   1588   /// dealing with a function definition deserialized from a PCH/AST file,
   1589   /// we can only compute the full range once the function body has been
   1590   /// de-serialized, so it's far better to have the (sometimes-redundant)
   1591   /// EndRangeLoc.
   1592   SourceLocation EndRangeLoc;
   1593 
   1594   /// \brief The template or declaration that this declaration
   1595   /// describes or was instantiated from, respectively.
   1596   ///
   1597   /// For non-templates, this value will be NULL. For function
   1598   /// declarations that describe a function template, this will be a
   1599   /// pointer to a FunctionTemplateDecl. For member functions
   1600   /// of class template specializations, this will be a MemberSpecializationInfo
   1601   /// pointer containing information about the specialization.
   1602   /// For function template specializations, this will be a
   1603   /// FunctionTemplateSpecializationInfo, which contains information about
   1604   /// the template being specialized and the template arguments involved in
   1605   /// that specialization.
   1606   llvm::PointerUnion4<FunctionTemplateDecl *,
   1607                       MemberSpecializationInfo *,
   1608                       FunctionTemplateSpecializationInfo *,
   1609                       DependentFunctionTemplateSpecializationInfo *>
   1610     TemplateOrSpecialization;
   1611 
   1612   /// DNLoc - Provides source/type location info for the
   1613   /// declaration name embedded in the DeclaratorDecl base class.
   1614   DeclarationNameLoc DNLoc;
   1615 
   1616   /// \brief Specify that this function declaration is actually a function
   1617   /// template specialization.
   1618   ///
   1619   /// \param C the ASTContext.
   1620   ///
   1621   /// \param Template the function template that this function template
   1622   /// specialization specializes.
   1623   ///
   1624   /// \param TemplateArgs the template arguments that produced this
   1625   /// function template specialization from the template.
   1626   ///
   1627   /// \param InsertPos If non-NULL, the position in the function template
   1628   /// specialization set where the function template specialization data will
   1629   /// be inserted.
   1630   ///
   1631   /// \param TSK the kind of template specialization this is.
   1632   ///
   1633   /// \param TemplateArgsAsWritten location info of template arguments.
   1634   ///
   1635   /// \param PointOfInstantiation point at which the function template
   1636   /// specialization was first instantiated.
   1637   void setFunctionTemplateSpecialization(ASTContext &C,
   1638                                          FunctionTemplateDecl *Template,
   1639                                        const TemplateArgumentList *TemplateArgs,
   1640                                          void *InsertPos,
   1641                                          TemplateSpecializationKind TSK,
   1642                           const TemplateArgumentListInfo *TemplateArgsAsWritten,
   1643                                          SourceLocation PointOfInstantiation);
   1644 
   1645   /// \brief Specify that this record is an instantiation of the
   1646   /// member function FD.
   1647   void setInstantiationOfMemberFunction(ASTContext &C, FunctionDecl *FD,
   1648                                         TemplateSpecializationKind TSK);
   1649 
   1650   void setParams(ASTContext &C, ArrayRef<ParmVarDecl *> NewParamInfo);
   1651 
   1652 protected:
   1653   FunctionDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
   1654                const DeclarationNameInfo &NameInfo,
   1655                QualType T, TypeSourceInfo *TInfo,
   1656                StorageClass S, bool isInlineSpecified,
   1657                bool isConstexprSpecified)
   1658     : DeclaratorDecl(DK, DC, NameInfo.getLoc(), NameInfo.getName(), T, TInfo,
   1659                      StartLoc),
   1660       DeclContext(DK),
   1661       redeclarable_base(C),
   1662       ParamInfo(nullptr), Body(),
   1663       SClass(S),
   1664       IsInline(isInlineSpecified), IsInlineSpecified(isInlineSpecified),
   1665       IsVirtualAsWritten(false), IsPure(false), HasInheritedPrototype(false),
   1666       HasWrittenPrototype(true), IsDeleted(false), IsTrivial(false),
   1667       IsDefaulted(false), IsExplicitlyDefaulted(false),
   1668       HasImplicitReturnZero(false), IsLateTemplateParsed(false),
   1669       IsConstexpr(isConstexprSpecified), UsesSEHTry(false),
   1670       HasSkippedBody(false), EndRangeLoc(NameInfo.getEndLoc()),
   1671       TemplateOrSpecialization(),
   1672       DNLoc(NameInfo.getInfo()) {}
   1673 
   1674   typedef Redeclarable<FunctionDecl> redeclarable_base;
   1675   FunctionDecl *getNextRedeclarationImpl() override {
   1676     return getNextRedeclaration();
   1677   }
   1678   FunctionDecl *getPreviousDeclImpl() override {
   1679     return getPreviousDecl();
   1680   }
   1681   FunctionDecl *getMostRecentDeclImpl() override {
   1682     return getMostRecentDecl();
   1683   }
   1684 
   1685 public:
   1686   typedef redeclarable_base::redecl_range redecl_range;
   1687   typedef redeclarable_base::redecl_iterator redecl_iterator;
   1688   using redeclarable_base::redecls_begin;
   1689   using redeclarable_base::redecls_end;
   1690   using redeclarable_base::redecls;
   1691   using redeclarable_base::getPreviousDecl;
   1692   using redeclarable_base::getMostRecentDecl;
   1693   using redeclarable_base::isFirstDecl;
   1694 
   1695   static FunctionDecl *Create(ASTContext &C, DeclContext *DC,
   1696                               SourceLocation StartLoc, SourceLocation NLoc,
   1697                               DeclarationName N, QualType T,
   1698                               TypeSourceInfo *TInfo,
   1699                               StorageClass SC,
   1700                               bool isInlineSpecified = false,
   1701                               bool hasWrittenPrototype = true,
   1702                               bool isConstexprSpecified = false) {
   1703     DeclarationNameInfo NameInfo(N, NLoc);
   1704     return FunctionDecl::Create(C, DC, StartLoc, NameInfo, T, TInfo,
   1705                                 SC,
   1706                                 isInlineSpecified, hasWrittenPrototype,
   1707                                 isConstexprSpecified);
   1708   }
   1709 
   1710   static FunctionDecl *Create(ASTContext &C, DeclContext *DC,
   1711                               SourceLocation StartLoc,
   1712                               const DeclarationNameInfo &NameInfo,
   1713                               QualType T, TypeSourceInfo *TInfo,
   1714                               StorageClass SC,
   1715                               bool isInlineSpecified,
   1716                               bool hasWrittenPrototype,
   1717                               bool isConstexprSpecified = false);
   1718 
   1719   static FunctionDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   1720 
   1721   DeclarationNameInfo getNameInfo() const {
   1722     return DeclarationNameInfo(getDeclName(), getLocation(), DNLoc);
   1723   }
   1724 
   1725   void getNameForDiagnostic(raw_ostream &OS, const PrintingPolicy &Policy,
   1726                             bool Qualified) const override;
   1727 
   1728   void setRangeEnd(SourceLocation E) { EndRangeLoc = E; }
   1729 
   1730   SourceRange getSourceRange() const override LLVM_READONLY;
   1731 
   1732   /// \brief Returns true if the function has a body (definition). The
   1733   /// function body might be in any of the (re-)declarations of this
   1734   /// function. The variant that accepts a FunctionDecl pointer will
   1735   /// set that function declaration to the actual declaration
   1736   /// containing the body (if there is one).
   1737   bool hasBody(const FunctionDecl *&Definition) const;
   1738 
   1739   bool hasBody() const override {
   1740     const FunctionDecl* Definition;
   1741     return hasBody(Definition);
   1742   }
   1743 
   1744   /// hasTrivialBody - Returns whether the function has a trivial body that does
   1745   /// not require any specific codegen.
   1746   bool hasTrivialBody() const;
   1747 
   1748   /// isDefined - Returns true if the function is defined at all, including
   1749   /// a deleted definition. Except for the behavior when the function is
   1750   /// deleted, behaves like hasBody.
   1751   bool isDefined(const FunctionDecl *&Definition) const;
   1752 
   1753   virtual bool isDefined() const {
   1754     const FunctionDecl* Definition;
   1755     return isDefined(Definition);
   1756   }
   1757 
   1758   /// getBody - Retrieve the body (definition) of the function. The
   1759   /// function body might be in any of the (re-)declarations of this
   1760   /// function. The variant that accepts a FunctionDecl pointer will
   1761   /// set that function declaration to the actual declaration
   1762   /// containing the body (if there is one).
   1763   /// NOTE: For checking if there is a body, use hasBody() instead, to avoid
   1764   /// unnecessary AST de-serialization of the body.
   1765   Stmt *getBody(const FunctionDecl *&Definition) const;
   1766 
   1767   Stmt *getBody() const override {
   1768     const FunctionDecl* Definition;
   1769     return getBody(Definition);
   1770   }
   1771 
   1772   /// isThisDeclarationADefinition - Returns whether this specific
   1773   /// declaration of the function is also a definition. This does not
   1774   /// determine whether the function has been defined (e.g., in a
   1775   /// previous definition); for that information, use isDefined. Note
   1776   /// that this returns false for a defaulted function unless that function
   1777   /// has been implicitly defined (possibly as deleted).
   1778   bool isThisDeclarationADefinition() const {
   1779     return IsDeleted || Body || IsLateTemplateParsed;
   1780   }
   1781 
   1782   /// doesThisDeclarationHaveABody - Returns whether this specific
   1783   /// declaration of the function has a body - that is, if it is a non-
   1784   /// deleted definition.
   1785   bool doesThisDeclarationHaveABody() const {
   1786     return Body || IsLateTemplateParsed;
   1787   }
   1788 
   1789   void setBody(Stmt *B);
   1790   void setLazyBody(uint64_t Offset) { Body = Offset; }
   1791 
   1792   /// Whether this function is variadic.
   1793   bool isVariadic() const;
   1794 
   1795   /// Whether this function is marked as virtual explicitly.
   1796   bool isVirtualAsWritten() const { return IsVirtualAsWritten; }
   1797   void setVirtualAsWritten(bool V) { IsVirtualAsWritten = V; }
   1798 
   1799   /// Whether this virtual function is pure, i.e. makes the containing class
   1800   /// abstract.
   1801   bool isPure() const { return IsPure; }
   1802   void setPure(bool P = true);
   1803 
   1804   /// Whether this templated function will be late parsed.
   1805   bool isLateTemplateParsed() const { return IsLateTemplateParsed; }
   1806   void setLateTemplateParsed(bool ILT = true) { IsLateTemplateParsed = ILT; }
   1807 
   1808   /// Whether this function is "trivial" in some specialized C++ senses.
   1809   /// Can only be true for default constructors, copy constructors,
   1810   /// copy assignment operators, and destructors.  Not meaningful until
   1811   /// the class has been fully built by Sema.
   1812   bool isTrivial() const { return IsTrivial; }
   1813   void setTrivial(bool IT) { IsTrivial = IT; }
   1814 
   1815   /// Whether this function is defaulted per C++0x. Only valid for
   1816   /// special member functions.
   1817   bool isDefaulted() const { return IsDefaulted; }
   1818   void setDefaulted(bool D = true) { IsDefaulted = D; }
   1819 
   1820   /// Whether this function is explicitly defaulted per C++0x. Only valid
   1821   /// for special member functions.
   1822   bool isExplicitlyDefaulted() const { return IsExplicitlyDefaulted; }
   1823   void setExplicitlyDefaulted(bool ED = true) { IsExplicitlyDefaulted = ED; }
   1824 
   1825   /// Whether falling off this function implicitly returns null/zero.
   1826   /// If a more specific implicit return value is required, front-ends
   1827   /// should synthesize the appropriate return statements.
   1828   bool hasImplicitReturnZero() const { return HasImplicitReturnZero; }
   1829   void setHasImplicitReturnZero(bool IRZ) { HasImplicitReturnZero = IRZ; }
   1830 
   1831   /// \brief Whether this function has a prototype, either because one
   1832   /// was explicitly written or because it was "inherited" by merging
   1833   /// a declaration without a prototype with a declaration that has a
   1834   /// prototype.
   1835   bool hasPrototype() const {
   1836     return HasWrittenPrototype || HasInheritedPrototype;
   1837   }
   1838 
   1839   bool hasWrittenPrototype() const { return HasWrittenPrototype; }
   1840 
   1841   /// \brief Whether this function inherited its prototype from a
   1842   /// previous declaration.
   1843   bool hasInheritedPrototype() const { return HasInheritedPrototype; }
   1844   void setHasInheritedPrototype(bool P = true) { HasInheritedPrototype = P; }
   1845 
   1846   /// Whether this is a (C++11) constexpr function or constexpr constructor.
   1847   bool isConstexpr() const { return IsConstexpr; }
   1848   void setConstexpr(bool IC) { IsConstexpr = IC; }
   1849 
   1850   /// \brief Indicates the function uses __try.
   1851   bool usesSEHTry() const { return UsesSEHTry; }
   1852   void setUsesSEHTry(bool UST) { UsesSEHTry = UST; }
   1853 
   1854   /// \brief Whether this function has been deleted.
   1855   ///
   1856   /// A function that is "deleted" (via the C++0x "= delete" syntax)
   1857   /// acts like a normal function, except that it cannot actually be
   1858   /// called or have its address taken. Deleted functions are
   1859   /// typically used in C++ overload resolution to attract arguments
   1860   /// whose type or lvalue/rvalue-ness would permit the use of a
   1861   /// different overload that would behave incorrectly. For example,
   1862   /// one might use deleted functions to ban implicit conversion from
   1863   /// a floating-point number to an Integer type:
   1864   ///
   1865   /// @code
   1866   /// struct Integer {
   1867   ///   Integer(long); // construct from a long
   1868   ///   Integer(double) = delete; // no construction from float or double
   1869   ///   Integer(long double) = delete; // no construction from long double
   1870   /// };
   1871   /// @endcode
   1872   // If a function is deleted, its first declaration must be.
   1873   bool isDeleted() const { return getCanonicalDecl()->IsDeleted; }
   1874   bool isDeletedAsWritten() const { return IsDeleted && !IsDefaulted; }
   1875   void setDeletedAsWritten(bool D = true) { IsDeleted = D; }
   1876 
   1877   /// \brief Determines whether this function is "main", which is the
   1878   /// entry point into an executable program.
   1879   bool isMain() const;
   1880 
   1881   /// \brief Determines whether this function is a MSVCRT user defined entry
   1882   /// point.
   1883   bool isMSVCRTEntryPoint() const;
   1884 
   1885   /// \brief Determines whether this operator new or delete is one
   1886   /// of the reserved global placement operators:
   1887   ///    void *operator new(size_t, void *);
   1888   ///    void *operator new[](size_t, void *);
   1889   ///    void operator delete(void *, void *);
   1890   ///    void operator delete[](void *, void *);
   1891   /// These functions have special behavior under [new.delete.placement]:
   1892   ///    These functions are reserved, a C++ program may not define
   1893   ///    functions that displace the versions in the Standard C++ library.
   1894   ///    The provisions of [basic.stc.dynamic] do not apply to these
   1895   ///    reserved placement forms of operator new and operator delete.
   1896   ///
   1897   /// This function must be an allocation or deallocation function.
   1898   bool isReservedGlobalPlacementOperator() const;
   1899 
   1900   /// \brief Determines whether this function is one of the replaceable
   1901   /// global allocation functions:
   1902   ///    void *operator new(size_t);
   1903   ///    void *operator new(size_t, const std::nothrow_t &) noexcept;
   1904   ///    void *operator new[](size_t);
   1905   ///    void *operator new[](size_t, const std::nothrow_t &) noexcept;
   1906   ///    void operator delete(void *) noexcept;
   1907   ///    void operator delete(void *, std::size_t) noexcept;      [C++1y]
   1908   ///    void operator delete(void *, const std::nothrow_t &) noexcept;
   1909   ///    void operator delete[](void *) noexcept;
   1910   ///    void operator delete[](void *, std::size_t) noexcept;    [C++1y]
   1911   ///    void operator delete[](void *, const std::nothrow_t &) noexcept;
   1912   /// These functions have special behavior under C++1y [expr.new]:
   1913   ///    An implementation is allowed to omit a call to a replaceable global
   1914   ///    allocation function. [...]
   1915   bool isReplaceableGlobalAllocationFunction() const;
   1916 
   1917   /// Compute the language linkage.
   1918   LanguageLinkage getLanguageLinkage() const;
   1919 
   1920   /// \brief Determines whether this function is a function with
   1921   /// external, C linkage.
   1922   bool isExternC() const;
   1923 
   1924   /// \brief Determines whether this function's context is, or is nested within,
   1925   /// a C++ extern "C" linkage spec.
   1926   bool isInExternCContext() const;
   1927 
   1928   /// \brief Determines whether this function's context is, or is nested within,
   1929   /// a C++ extern "C++" linkage spec.
   1930   bool isInExternCXXContext() const;
   1931 
   1932   /// \brief Determines whether this is a global function.
   1933   bool isGlobal() const;
   1934 
   1935   /// \brief Determines whether this function is known to be 'noreturn', through
   1936   /// an attribute on its declaration or its type.
   1937   bool isNoReturn() const;
   1938 
   1939   /// \brief True if the function was a definition but its body was skipped.
   1940   bool hasSkippedBody() const { return HasSkippedBody; }
   1941   void setHasSkippedBody(bool Skipped = true) { HasSkippedBody = Skipped; }
   1942 
   1943   void setPreviousDeclaration(FunctionDecl * PrevDecl);
   1944 
   1945   FunctionDecl *getCanonicalDecl() override;
   1946   const FunctionDecl *getCanonicalDecl() const {
   1947     return const_cast<FunctionDecl*>(this)->getCanonicalDecl();
   1948   }
   1949 
   1950   unsigned getBuiltinID() const;
   1951 
   1952   // Iterator access to formal parameters.
   1953   unsigned param_size() const { return getNumParams(); }
   1954   typedef ParmVarDecl **param_iterator;
   1955   typedef ParmVarDecl * const *param_const_iterator;
   1956   typedef llvm::iterator_range<param_iterator> param_range;
   1957   typedef llvm::iterator_range<param_const_iterator> param_const_range;
   1958 
   1959   param_iterator param_begin() { return param_iterator(ParamInfo); }
   1960   param_iterator param_end() {
   1961     return param_iterator(ParamInfo + param_size());
   1962   }
   1963   param_range params() { return param_range(param_begin(), param_end()); }
   1964 
   1965   param_const_iterator param_begin() const {
   1966     return param_const_iterator(ParamInfo);
   1967   }
   1968   param_const_iterator param_end() const {
   1969     return param_const_iterator(ParamInfo + param_size());
   1970   }
   1971   param_const_range params() const {
   1972     return param_const_range(param_begin(), param_end());
   1973   }
   1974 
   1975   /// getNumParams - Return the number of parameters this function must have
   1976   /// based on its FunctionType.  This is the length of the ParamInfo array
   1977   /// after it has been created.
   1978   unsigned getNumParams() const;
   1979 
   1980   const ParmVarDecl *getParamDecl(unsigned i) const {
   1981     assert(i < getNumParams() && "Illegal param #");
   1982     return ParamInfo[i];
   1983   }
   1984   ParmVarDecl *getParamDecl(unsigned i) {
   1985     assert(i < getNumParams() && "Illegal param #");
   1986     return ParamInfo[i];
   1987   }
   1988   void setParams(ArrayRef<ParmVarDecl *> NewParamInfo) {
   1989     setParams(getASTContext(), NewParamInfo);
   1990   }
   1991 
   1992   // ArrayRef iterface to parameters.
   1993   // FIXME: Should one day replace iterator interface.
   1994   ArrayRef<ParmVarDecl*> parameters() const {
   1995     return llvm::makeArrayRef(ParamInfo, getNumParams());
   1996   }
   1997 
   1998   ArrayRef<NamedDecl *> getDeclsInPrototypeScope() const {
   1999     return DeclsInPrototypeScope;
   2000   }
   2001   void setDeclsInPrototypeScope(ArrayRef<NamedDecl *> NewDecls);
   2002 
   2003   /// getMinRequiredArguments - Returns the minimum number of arguments
   2004   /// needed to call this function. This may be fewer than the number of
   2005   /// function parameters, if some of the parameters have default
   2006   /// arguments (in C++).
   2007   unsigned getMinRequiredArguments() const;
   2008 
   2009   QualType getReturnType() const {
   2010     return getType()->getAs<FunctionType>()->getReturnType();
   2011   }
   2012 
   2013   /// \brief Attempt to compute an informative source range covering the
   2014   /// function return type. This may omit qualifiers and other information with
   2015   /// limited representation in the AST.
   2016   SourceRange getReturnTypeSourceRange() const;
   2017 
   2018   /// \brief Determine the type of an expression that calls this function.
   2019   QualType getCallResultType() const {
   2020     return getType()->getAs<FunctionType>()->getCallResultType(getASTContext());
   2021   }
   2022 
   2023   /// \brief Returns true if this function or its return type has the
   2024   /// warn_unused_result attribute. If the return type has the attribute and
   2025   /// this function is a method of the return type's class, then false will be
   2026   /// returned to avoid spurious warnings on member methods such as assignment
   2027   /// operators.
   2028   bool hasUnusedResultAttr() const;
   2029 
   2030   /// \brief Returns the storage class as written in the source. For the
   2031   /// computed linkage of symbol, see getLinkage.
   2032   StorageClass getStorageClass() const { return StorageClass(SClass); }
   2033 
   2034   /// \brief Determine whether the "inline" keyword was specified for this
   2035   /// function.
   2036   bool isInlineSpecified() const { return IsInlineSpecified; }
   2037 
   2038   /// Set whether the "inline" keyword was specified for this function.
   2039   void setInlineSpecified(bool I) {
   2040     IsInlineSpecified = I;
   2041     IsInline = I;
   2042   }
   2043 
   2044   /// Flag that this function is implicitly inline.
   2045   void setImplicitlyInline() {
   2046     IsInline = true;
   2047   }
   2048 
   2049   /// \brief Determine whether this function should be inlined, because it is
   2050   /// either marked "inline" or "constexpr" or is a member function of a class
   2051   /// that was defined in the class body.
   2052   bool isInlined() const { return IsInline; }
   2053 
   2054   bool isInlineDefinitionExternallyVisible() const;
   2055 
   2056   bool isMSExternInline() const;
   2057 
   2058   bool doesDeclarationForceExternallyVisibleDefinition() const;
   2059 
   2060   /// isOverloadedOperator - Whether this function declaration
   2061   /// represents an C++ overloaded operator, e.g., "operator+".
   2062   bool isOverloadedOperator() const {
   2063     return getOverloadedOperator() != OO_None;
   2064   }
   2065 
   2066   OverloadedOperatorKind getOverloadedOperator() const;
   2067 
   2068   const IdentifierInfo *getLiteralIdentifier() const;
   2069 
   2070   /// \brief If this function is an instantiation of a member function
   2071   /// of a class template specialization, retrieves the function from
   2072   /// which it was instantiated.
   2073   ///
   2074   /// This routine will return non-NULL for (non-templated) member
   2075   /// functions of class templates and for instantiations of function
   2076   /// templates. For example, given:
   2077   ///
   2078   /// \code
   2079   /// template<typename T>
   2080   /// struct X {
   2081   ///   void f(T);
   2082   /// };
   2083   /// \endcode
   2084   ///
   2085   /// The declaration for X<int>::f is a (non-templated) FunctionDecl
   2086   /// whose parent is the class template specialization X<int>. For
   2087   /// this declaration, getInstantiatedFromFunction() will return
   2088   /// the FunctionDecl X<T>::A. When a complete definition of
   2089   /// X<int>::A is required, it will be instantiated from the
   2090   /// declaration returned by getInstantiatedFromMemberFunction().
   2091   FunctionDecl *getInstantiatedFromMemberFunction() const;
   2092 
   2093   /// \brief What kind of templated function this is.
   2094   TemplatedKind getTemplatedKind() const;
   2095 
   2096   /// \brief If this function is an instantiation of a member function of a
   2097   /// class template specialization, retrieves the member specialization
   2098   /// information.
   2099   MemberSpecializationInfo *getMemberSpecializationInfo() const {
   2100     return TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>();
   2101   }
   2102 
   2103   /// \brief Specify that this record is an instantiation of the
   2104   /// member function FD.
   2105   void setInstantiationOfMemberFunction(FunctionDecl *FD,
   2106                                         TemplateSpecializationKind TSK) {
   2107     setInstantiationOfMemberFunction(getASTContext(), FD, TSK);
   2108   }
   2109 
   2110   /// \brief Retrieves the function template that is described by this
   2111   /// function declaration.
   2112   ///
   2113   /// Every function template is represented as a FunctionTemplateDecl
   2114   /// and a FunctionDecl (or something derived from FunctionDecl). The
   2115   /// former contains template properties (such as the template
   2116   /// parameter lists) while the latter contains the actual
   2117   /// description of the template's
   2118   /// contents. FunctionTemplateDecl::getTemplatedDecl() retrieves the
   2119   /// FunctionDecl that describes the function template,
   2120   /// getDescribedFunctionTemplate() retrieves the
   2121   /// FunctionTemplateDecl from a FunctionDecl.
   2122   FunctionTemplateDecl *getDescribedFunctionTemplate() const {
   2123     return TemplateOrSpecialization.dyn_cast<FunctionTemplateDecl*>();
   2124   }
   2125 
   2126   void setDescribedFunctionTemplate(FunctionTemplateDecl *Template) {
   2127     TemplateOrSpecialization = Template;
   2128   }
   2129 
   2130   /// \brief Determine whether this function is a function template
   2131   /// specialization.
   2132   bool isFunctionTemplateSpecialization() const {
   2133     return getPrimaryTemplate() != nullptr;
   2134   }
   2135 
   2136   /// \brief Retrieve the class scope template pattern that this function
   2137   ///  template specialization is instantiated from.
   2138   FunctionDecl *getClassScopeSpecializationPattern() const;
   2139 
   2140   /// \brief If this function is actually a function template specialization,
   2141   /// retrieve information about this function template specialization.
   2142   /// Otherwise, returns NULL.
   2143   FunctionTemplateSpecializationInfo *getTemplateSpecializationInfo() const {
   2144     return TemplateOrSpecialization.
   2145              dyn_cast<FunctionTemplateSpecializationInfo*>();
   2146   }
   2147 
   2148   /// \brief Determines whether this function is a function template
   2149   /// specialization or a member of a class template specialization that can
   2150   /// be implicitly instantiated.
   2151   bool isImplicitlyInstantiable() const;
   2152 
   2153   /// \brief Determines if the given function was instantiated from a
   2154   /// function template.
   2155   bool isTemplateInstantiation() const;
   2156 
   2157   /// \brief Retrieve the function declaration from which this function could
   2158   /// be instantiated, if it is an instantiation (rather than a non-template
   2159   /// or a specialization, for example).
   2160   FunctionDecl *getTemplateInstantiationPattern() const;
   2161 
   2162   /// \brief Retrieve the primary template that this function template
   2163   /// specialization either specializes or was instantiated from.
   2164   ///
   2165   /// If this function declaration is not a function template specialization,
   2166   /// returns NULL.
   2167   FunctionTemplateDecl *getPrimaryTemplate() const;
   2168 
   2169   /// \brief Retrieve the template arguments used to produce this function
   2170   /// template specialization from the primary template.
   2171   ///
   2172   /// If this function declaration is not a function template specialization,
   2173   /// returns NULL.
   2174   const TemplateArgumentList *getTemplateSpecializationArgs() const;
   2175 
   2176   /// \brief Retrieve the template argument list as written in the sources,
   2177   /// if any.
   2178   ///
   2179   /// If this function declaration is not a function template specialization
   2180   /// or if it had no explicit template argument list, returns NULL.
   2181   /// Note that it an explicit template argument list may be written empty,
   2182   /// e.g., template<> void foo<>(char* s);
   2183   const ASTTemplateArgumentListInfo*
   2184   getTemplateSpecializationArgsAsWritten() const;
   2185 
   2186   /// \brief Specify that this function declaration is actually a function
   2187   /// template specialization.
   2188   ///
   2189   /// \param Template the function template that this function template
   2190   /// specialization specializes.
   2191   ///
   2192   /// \param TemplateArgs the template arguments that produced this
   2193   /// function template specialization from the template.
   2194   ///
   2195   /// \param InsertPos If non-NULL, the position in the function template
   2196   /// specialization set where the function template specialization data will
   2197   /// be inserted.
   2198   ///
   2199   /// \param TSK the kind of template specialization this is.
   2200   ///
   2201   /// \param TemplateArgsAsWritten location info of template arguments.
   2202   ///
   2203   /// \param PointOfInstantiation point at which the function template
   2204   /// specialization was first instantiated.
   2205   void setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
   2206                 const TemplateArgumentList *TemplateArgs,
   2207                 void *InsertPos,
   2208                 TemplateSpecializationKind TSK = TSK_ImplicitInstantiation,
   2209                 const TemplateArgumentListInfo *TemplateArgsAsWritten = nullptr,
   2210                 SourceLocation PointOfInstantiation = SourceLocation()) {
   2211     setFunctionTemplateSpecialization(getASTContext(), Template, TemplateArgs,
   2212                                       InsertPos, TSK, TemplateArgsAsWritten,
   2213                                       PointOfInstantiation);
   2214   }
   2215 
   2216   /// \brief Specifies that this function declaration is actually a
   2217   /// dependent function template specialization.
   2218   void setDependentTemplateSpecialization(ASTContext &Context,
   2219                              const UnresolvedSetImpl &Templates,
   2220                       const TemplateArgumentListInfo &TemplateArgs);
   2221 
   2222   DependentFunctionTemplateSpecializationInfo *
   2223   getDependentSpecializationInfo() const {
   2224     return TemplateOrSpecialization.
   2225              dyn_cast<DependentFunctionTemplateSpecializationInfo*>();
   2226   }
   2227 
   2228   /// \brief Determine what kind of template instantiation this function
   2229   /// represents.
   2230   TemplateSpecializationKind getTemplateSpecializationKind() const;
   2231 
   2232   /// \brief Determine what kind of template instantiation this function
   2233   /// represents.
   2234   void setTemplateSpecializationKind(TemplateSpecializationKind TSK,
   2235                         SourceLocation PointOfInstantiation = SourceLocation());
   2236 
   2237   /// \brief Retrieve the (first) point of instantiation of a function template
   2238   /// specialization or a member of a class template specialization.
   2239   ///
   2240   /// \returns the first point of instantiation, if this function was
   2241   /// instantiated from a template; otherwise, returns an invalid source
   2242   /// location.
   2243   SourceLocation getPointOfInstantiation() const;
   2244 
   2245   /// \brief Determine whether this is or was instantiated from an out-of-line
   2246   /// definition of a member function.
   2247   bool isOutOfLine() const override;
   2248 
   2249   /// \brief Identify a memory copying or setting function.
   2250   /// If the given function is a memory copy or setting function, returns
   2251   /// the corresponding Builtin ID. If the function is not a memory function,
   2252   /// returns 0.
   2253   unsigned getMemoryFunctionKind() const;
   2254 
   2255   // Implement isa/cast/dyncast/etc.
   2256   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2257   static bool classofKind(Kind K) {
   2258     return K >= firstFunction && K <= lastFunction;
   2259   }
   2260   static DeclContext *castToDeclContext(const FunctionDecl *D) {
   2261     return static_cast<DeclContext *>(const_cast<FunctionDecl*>(D));
   2262   }
   2263   static FunctionDecl *castFromDeclContext(const DeclContext *DC) {
   2264     return static_cast<FunctionDecl *>(const_cast<DeclContext*>(DC));
   2265   }
   2266 
   2267   friend class ASTDeclReader;
   2268   friend class ASTDeclWriter;
   2269 };
   2270 
   2271 
   2272 /// FieldDecl - An instance of this class is created by Sema::ActOnField to
   2273 /// represent a member of a struct/union/class.
   2274 class FieldDecl : public DeclaratorDecl, public Mergeable<FieldDecl> {
   2275   // FIXME: This can be packed into the bitfields in Decl.
   2276   bool Mutable : 1;
   2277   mutable unsigned CachedFieldIndex : 31;
   2278 
   2279   /// The kinds of value we can store in InitializerOrBitWidth.
   2280   ///
   2281   /// Note that this is compatible with InClassInitStyle except for
   2282   /// ISK_CapturedVLAType.
   2283   enum InitStorageKind {
   2284     /// If the pointer is null, there's nothing special.  Otherwise,
   2285     /// this is a bitfield and the pointer is the Expr* storing the
   2286     /// bit-width.
   2287     ISK_BitWidthOrNothing = (unsigned) ICIS_NoInit,
   2288 
   2289     /// The pointer is an (optional due to delayed parsing) Expr*
   2290     /// holding the copy-initializer.
   2291     ISK_InClassCopyInit = (unsigned) ICIS_CopyInit,
   2292 
   2293     /// The pointer is an (optional due to delayed parsing) Expr*
   2294     /// holding the list-initializer.
   2295     ISK_InClassListInit = (unsigned) ICIS_ListInit,
   2296 
   2297     /// The pointer is a VariableArrayType* that's been captured;
   2298     /// the enclosing context is a lambda or captured statement.
   2299     ISK_CapturedVLAType,
   2300   };
   2301 
   2302   /// \brief Storage for either the bit-width, the in-class
   2303   /// initializer, or the captured variable length array bound.
   2304   ///
   2305   /// We can safely combine these because in-class initializers are
   2306   /// not permitted for bit-fields, and both are exclusive with VLA
   2307   /// captures.
   2308   ///
   2309   /// If the storage kind is ISK_InClassCopyInit or
   2310   /// ISK_InClassListInit, but the initializer is null, then this
   2311   /// field has an in-class initializer which has not yet been parsed
   2312   /// and attached.
   2313   llvm::PointerIntPair<void *, 2, InitStorageKind> InitStorage;
   2314 protected:
   2315   FieldDecl(Kind DK, DeclContext *DC, SourceLocation StartLoc,
   2316             SourceLocation IdLoc, IdentifierInfo *Id,
   2317             QualType T, TypeSourceInfo *TInfo, Expr *BW, bool Mutable,
   2318             InClassInitStyle InitStyle)
   2319     : DeclaratorDecl(DK, DC, IdLoc, Id, T, TInfo, StartLoc),
   2320       Mutable(Mutable), CachedFieldIndex(0),
   2321       InitStorage(BW, (InitStorageKind) InitStyle) {
   2322     assert((!BW || InitStyle == ICIS_NoInit) && "got initializer for bitfield");
   2323   }
   2324 
   2325 public:
   2326   static FieldDecl *Create(const ASTContext &C, DeclContext *DC,
   2327                            SourceLocation StartLoc, SourceLocation IdLoc,
   2328                            IdentifierInfo *Id, QualType T,
   2329                            TypeSourceInfo *TInfo, Expr *BW, bool Mutable,
   2330                            InClassInitStyle InitStyle);
   2331 
   2332   static FieldDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   2333 
   2334   /// getFieldIndex - Returns the index of this field within its record,
   2335   /// as appropriate for passing to ASTRecordLayout::getFieldOffset.
   2336   unsigned getFieldIndex() const;
   2337 
   2338   /// isMutable - Determines whether this field is mutable (C++ only).
   2339   bool isMutable() const { return Mutable; }
   2340 
   2341   /// \brief Determines whether this field is a bitfield.
   2342   bool isBitField() const {
   2343     return InitStorage.getInt() == ISK_BitWidthOrNothing &&
   2344            InitStorage.getPointer() != nullptr;
   2345   }
   2346 
   2347   /// @brief Determines whether this is an unnamed bitfield.
   2348   bool isUnnamedBitfield() const { return isBitField() && !getDeclName(); }
   2349 
   2350   /// isAnonymousStructOrUnion - Determines whether this field is a
   2351   /// representative for an anonymous struct or union. Such fields are
   2352   /// unnamed and are implicitly generated by the implementation to
   2353   /// store the data for the anonymous union or struct.
   2354   bool isAnonymousStructOrUnion() const;
   2355 
   2356   Expr *getBitWidth() const {
   2357     return isBitField()
   2358                ? static_cast<Expr *>(InitStorage.getPointer())
   2359                : nullptr;
   2360   }
   2361   unsigned getBitWidthValue(const ASTContext &Ctx) const;
   2362 
   2363   /// setBitWidth - Set the bit-field width for this member.
   2364   // Note: used by some clients (i.e., do not remove it).
   2365   void setBitWidth(Expr *Width) {
   2366     assert(InitStorage.getInt() == ISK_BitWidthOrNothing &&
   2367            InitStorage.getPointer() == nullptr &&
   2368            "bit width, initializer or captured type already set");
   2369     InitStorage.setPointerAndInt(Width, ISK_BitWidthOrNothing);
   2370   }
   2371 
   2372   /// removeBitWidth - Remove the bit-field width from this member.
   2373   // Note: used by some clients (i.e., do not remove it).
   2374   void removeBitWidth() {
   2375     assert(isBitField() && "no bitfield width to remove");
   2376     InitStorage.setPointerAndInt(nullptr, ISK_BitWidthOrNothing);
   2377   }
   2378 
   2379   /// getInClassInitStyle - Get the kind of (C++11) in-class initializer which
   2380   /// this field has.
   2381   InClassInitStyle getInClassInitStyle() const {
   2382     InitStorageKind storageKind = InitStorage.getInt();
   2383     return (storageKind == ISK_CapturedVLAType
   2384               ? ICIS_NoInit : (InClassInitStyle) storageKind);
   2385   }
   2386 
   2387   /// hasInClassInitializer - Determine whether this member has a C++11 in-class
   2388   /// initializer.
   2389   bool hasInClassInitializer() const {
   2390     return getInClassInitStyle() != ICIS_NoInit;
   2391   }
   2392 
   2393   /// getInClassInitializer - Get the C++11 in-class initializer for this
   2394   /// member, or null if one has not been set. If a valid declaration has an
   2395   /// in-class initializer, but this returns null, then we have not parsed and
   2396   /// attached it yet.
   2397   Expr *getInClassInitializer() const {
   2398     return hasInClassInitializer()
   2399                ? static_cast<Expr *>(InitStorage.getPointer())
   2400                : nullptr;
   2401   }
   2402 
   2403   /// setInClassInitializer - Set the C++11 in-class initializer for this
   2404   /// member.
   2405   void setInClassInitializer(Expr *Init) {
   2406     assert(hasInClassInitializer() &&
   2407            InitStorage.getPointer() == nullptr &&
   2408            "bit width, initializer or captured type already set");
   2409     InitStorage.setPointer(Init);
   2410   }
   2411 
   2412   /// removeInClassInitializer - Remove the C++11 in-class initializer from this
   2413   /// member.
   2414   void removeInClassInitializer() {
   2415     assert(hasInClassInitializer() && "no initializer to remove");
   2416     InitStorage.setPointerAndInt(nullptr, ISK_BitWidthOrNothing);
   2417   }
   2418 
   2419   /// \brief Determine whether this member captures the variable length array
   2420   /// type.
   2421   bool hasCapturedVLAType() const {
   2422     return InitStorage.getInt() == ISK_CapturedVLAType;
   2423   }
   2424 
   2425   /// \brief Get the captured variable length array type.
   2426   const VariableArrayType *getCapturedVLAType() const {
   2427     return hasCapturedVLAType() ? static_cast<const VariableArrayType *>(
   2428                                       InitStorage.getPointer())
   2429                                 : nullptr;
   2430   }
   2431   /// \brief Set the captured variable length array type for this field.
   2432   void setCapturedVLAType(const VariableArrayType *VLAType);
   2433 
   2434   /// getParent - Returns the parent of this field declaration, which
   2435   /// is the struct in which this method is defined.
   2436   const RecordDecl *getParent() const {
   2437     return cast<RecordDecl>(getDeclContext());
   2438   }
   2439 
   2440   RecordDecl *getParent() {
   2441     return cast<RecordDecl>(getDeclContext());
   2442   }
   2443 
   2444   SourceRange getSourceRange() const override LLVM_READONLY;
   2445 
   2446   /// Retrieves the canonical declaration of this field.
   2447   FieldDecl *getCanonicalDecl() override { return getFirstDecl(); }
   2448   const FieldDecl *getCanonicalDecl() const { return getFirstDecl(); }
   2449 
   2450   // Implement isa/cast/dyncast/etc.
   2451   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2452   static bool classofKind(Kind K) { return K >= firstField && K <= lastField; }
   2453 
   2454   friend class ASTDeclReader;
   2455   friend class ASTDeclWriter;
   2456 };
   2457 
   2458 /// EnumConstantDecl - An instance of this object exists for each enum constant
   2459 /// that is defined.  For example, in "enum X {a,b}", each of a/b are
   2460 /// EnumConstantDecl's, X is an instance of EnumDecl, and the type of a/b is a
   2461 /// TagType for the X EnumDecl.
   2462 class EnumConstantDecl : public ValueDecl, public Mergeable<EnumConstantDecl> {
   2463   Stmt *Init; // an integer constant expression
   2464   llvm::APSInt Val; // The value.
   2465 protected:
   2466   EnumConstantDecl(DeclContext *DC, SourceLocation L,
   2467                    IdentifierInfo *Id, QualType T, Expr *E,
   2468                    const llvm::APSInt &V)
   2469     : ValueDecl(EnumConstant, DC, L, Id, T), Init((Stmt*)E), Val(V) {}
   2470 
   2471 public:
   2472 
   2473   static EnumConstantDecl *Create(ASTContext &C, EnumDecl *DC,
   2474                                   SourceLocation L, IdentifierInfo *Id,
   2475                                   QualType T, Expr *E,
   2476                                   const llvm::APSInt &V);
   2477   static EnumConstantDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   2478 
   2479   const Expr *getInitExpr() const { return (const Expr*) Init; }
   2480   Expr *getInitExpr() { return (Expr*) Init; }
   2481   const llvm::APSInt &getInitVal() const { return Val; }
   2482 
   2483   void setInitExpr(Expr *E) { Init = (Stmt*) E; }
   2484   void setInitVal(const llvm::APSInt &V) { Val = V; }
   2485 
   2486   SourceRange getSourceRange() const override LLVM_READONLY;
   2487 
   2488   /// Retrieves the canonical declaration of this enumerator.
   2489   EnumConstantDecl *getCanonicalDecl() override { return getFirstDecl(); }
   2490   const EnumConstantDecl *getCanonicalDecl() const { return getFirstDecl(); }
   2491 
   2492   // Implement isa/cast/dyncast/etc.
   2493   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2494   static bool classofKind(Kind K) { return K == EnumConstant; }
   2495 
   2496   friend class StmtIteratorBase;
   2497 };
   2498 
   2499 /// IndirectFieldDecl - An instance of this class is created to represent a
   2500 /// field injected from an anonymous union/struct into the parent scope.
   2501 /// IndirectFieldDecl are always implicit.
   2502 class IndirectFieldDecl : public ValueDecl,
   2503                           public Mergeable<IndirectFieldDecl> {
   2504   void anchor() override;
   2505   NamedDecl **Chaining;
   2506   unsigned ChainingSize;
   2507 
   2508   IndirectFieldDecl(DeclContext *DC, SourceLocation L,
   2509                     DeclarationName N, QualType T,
   2510                     NamedDecl **CH, unsigned CHS)
   2511     : ValueDecl(IndirectField, DC, L, N, T), Chaining(CH), ChainingSize(CHS) {}
   2512 
   2513 public:
   2514   static IndirectFieldDecl *Create(ASTContext &C, DeclContext *DC,
   2515                                    SourceLocation L, IdentifierInfo *Id,
   2516                                    QualType T, NamedDecl **CH, unsigned CHS);
   2517 
   2518   static IndirectFieldDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   2519 
   2520   typedef NamedDecl * const *chain_iterator;
   2521   typedef llvm::iterator_range<chain_iterator> chain_range;
   2522 
   2523   chain_range chain() const { return chain_range(chain_begin(), chain_end()); }
   2524   chain_iterator chain_begin() const { return chain_iterator(Chaining); }
   2525   chain_iterator chain_end() const {
   2526     return chain_iterator(Chaining + ChainingSize);
   2527   }
   2528 
   2529   unsigned getChainingSize() const { return ChainingSize; }
   2530 
   2531   FieldDecl *getAnonField() const {
   2532     assert(ChainingSize >= 2);
   2533     return cast<FieldDecl>(Chaining[ChainingSize - 1]);
   2534   }
   2535 
   2536   VarDecl *getVarDecl() const {
   2537     assert(ChainingSize >= 2);
   2538     return dyn_cast<VarDecl>(*chain_begin());
   2539   }
   2540 
   2541   IndirectFieldDecl *getCanonicalDecl() override { return getFirstDecl(); }
   2542   const IndirectFieldDecl *getCanonicalDecl() const { return getFirstDecl(); }
   2543 
   2544   // Implement isa/cast/dyncast/etc.
   2545   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2546   static bool classofKind(Kind K) { return K == IndirectField; }
   2547   friend class ASTDeclReader;
   2548 };
   2549 
   2550 /// TypeDecl - Represents a declaration of a type.
   2551 ///
   2552 class TypeDecl : public NamedDecl {
   2553   void anchor() override;
   2554   /// TypeForDecl - This indicates the Type object that represents
   2555   /// this TypeDecl.  It is a cache maintained by
   2556   /// ASTContext::getTypedefType, ASTContext::getTagDeclType, and
   2557   /// ASTContext::getTemplateTypeParmType, and TemplateTypeParmDecl.
   2558   mutable const Type *TypeForDecl;
   2559   /// LocStart - The start of the source range for this declaration.
   2560   SourceLocation LocStart;
   2561   friend class ASTContext;
   2562 
   2563 protected:
   2564   TypeDecl(Kind DK, DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
   2565            SourceLocation StartL = SourceLocation())
   2566     : NamedDecl(DK, DC, L, Id), TypeForDecl(nullptr), LocStart(StartL) {}
   2567 
   2568 public:
   2569   // Low-level accessor. If you just want the type defined by this node,
   2570   // check out ASTContext::getTypeDeclType or one of
   2571   // ASTContext::getTypedefType, ASTContext::getRecordType, etc. if you
   2572   // already know the specific kind of node this is.
   2573   const Type *getTypeForDecl() const { return TypeForDecl; }
   2574   void setTypeForDecl(const Type *TD) { TypeForDecl = TD; }
   2575 
   2576   SourceLocation getLocStart() const LLVM_READONLY { return LocStart; }
   2577   void setLocStart(SourceLocation L) { LocStart = L; }
   2578   SourceRange getSourceRange() const override LLVM_READONLY {
   2579     if (LocStart.isValid())
   2580       return SourceRange(LocStart, getLocation());
   2581     else
   2582       return SourceRange(getLocation());
   2583   }
   2584 
   2585   // Implement isa/cast/dyncast/etc.
   2586   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2587   static bool classofKind(Kind K) { return K >= firstType && K <= lastType; }
   2588 };
   2589 
   2590 
   2591 /// Base class for declarations which introduce a typedef-name.
   2592 class TypedefNameDecl : public TypeDecl, public Redeclarable<TypedefNameDecl> {
   2593   void anchor() override;
   2594   typedef std::pair<TypeSourceInfo*, QualType> ModedTInfo;
   2595   llvm::PointerUnion<TypeSourceInfo*, ModedTInfo*> MaybeModedTInfo;
   2596 
   2597 protected:
   2598   TypedefNameDecl(Kind DK, ASTContext &C, DeclContext *DC,
   2599                   SourceLocation StartLoc, SourceLocation IdLoc,
   2600                   IdentifierInfo *Id, TypeSourceInfo *TInfo)
   2601       : TypeDecl(DK, DC, IdLoc, Id, StartLoc), redeclarable_base(C),
   2602         MaybeModedTInfo(TInfo) {}
   2603 
   2604   typedef Redeclarable<TypedefNameDecl> redeclarable_base;
   2605   TypedefNameDecl *getNextRedeclarationImpl() override {
   2606     return getNextRedeclaration();
   2607   }
   2608   TypedefNameDecl *getPreviousDeclImpl() override {
   2609     return getPreviousDecl();
   2610   }
   2611   TypedefNameDecl *getMostRecentDeclImpl() override {
   2612     return getMostRecentDecl();
   2613   }
   2614 
   2615 public:
   2616   typedef redeclarable_base::redecl_range redecl_range;
   2617   typedef redeclarable_base::redecl_iterator redecl_iterator;
   2618   using redeclarable_base::redecls_begin;
   2619   using redeclarable_base::redecls_end;
   2620   using redeclarable_base::redecls;
   2621   using redeclarable_base::getPreviousDecl;
   2622   using redeclarable_base::getMostRecentDecl;
   2623   using redeclarable_base::isFirstDecl;
   2624 
   2625   bool isModed() const { return MaybeModedTInfo.is<ModedTInfo*>(); }
   2626 
   2627   TypeSourceInfo *getTypeSourceInfo() const {
   2628     return isModed()
   2629       ? MaybeModedTInfo.get<ModedTInfo*>()->first
   2630       : MaybeModedTInfo.get<TypeSourceInfo*>();
   2631   }
   2632   QualType getUnderlyingType() const {
   2633     return isModed()
   2634       ? MaybeModedTInfo.get<ModedTInfo*>()->second
   2635       : MaybeModedTInfo.get<TypeSourceInfo*>()->getType();
   2636   }
   2637   void setTypeSourceInfo(TypeSourceInfo *newType) {
   2638     MaybeModedTInfo = newType;
   2639   }
   2640   void setModedTypeSourceInfo(TypeSourceInfo *unmodedTSI, QualType modedTy) {
   2641     MaybeModedTInfo = new (getASTContext()) ModedTInfo(unmodedTSI, modedTy);
   2642   }
   2643 
   2644   /// Retrieves the canonical declaration of this typedef-name.
   2645   TypedefNameDecl *getCanonicalDecl() override { return getFirstDecl(); }
   2646   const TypedefNameDecl *getCanonicalDecl() const { return getFirstDecl(); }
   2647 
   2648   /// Retrieves the tag declaration for which this is the typedef name for
   2649   /// linkage purposes, if any.
   2650   ///
   2651   /// \param AnyRedecl Look for the tag declaration in any redeclaration of
   2652   /// this typedef declaration.
   2653   TagDecl *getAnonDeclWithTypedefName(bool AnyRedecl = false) const;
   2654 
   2655   // Implement isa/cast/dyncast/etc.
   2656   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2657   static bool classofKind(Kind K) {
   2658     return K >= firstTypedefName && K <= lastTypedefName;
   2659   }
   2660 };
   2661 
   2662 /// TypedefDecl - Represents the declaration of a typedef-name via the 'typedef'
   2663 /// type specifier.
   2664 class TypedefDecl : public TypedefNameDecl {
   2665   TypedefDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
   2666               SourceLocation IdLoc, IdentifierInfo *Id, TypeSourceInfo *TInfo)
   2667       : TypedefNameDecl(Typedef, C, DC, StartLoc, IdLoc, Id, TInfo) {}
   2668 
   2669 public:
   2670   static TypedefDecl *Create(ASTContext &C, DeclContext *DC,
   2671                              SourceLocation StartLoc, SourceLocation IdLoc,
   2672                              IdentifierInfo *Id, TypeSourceInfo *TInfo);
   2673   static TypedefDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   2674 
   2675   SourceRange getSourceRange() const override LLVM_READONLY;
   2676 
   2677   // Implement isa/cast/dyncast/etc.
   2678   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2679   static bool classofKind(Kind K) { return K == Typedef; }
   2680 };
   2681 
   2682 /// TypeAliasDecl - Represents the declaration of a typedef-name via a C++0x
   2683 /// alias-declaration.
   2684 class TypeAliasDecl : public TypedefNameDecl {
   2685   /// The template for which this is the pattern, if any.
   2686   TypeAliasTemplateDecl *Template;
   2687 
   2688   TypeAliasDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
   2689                 SourceLocation IdLoc, IdentifierInfo *Id, TypeSourceInfo *TInfo)
   2690       : TypedefNameDecl(TypeAlias, C, DC, StartLoc, IdLoc, Id, TInfo),
   2691         Template(nullptr) {}
   2692 
   2693 public:
   2694   static TypeAliasDecl *Create(ASTContext &C, DeclContext *DC,
   2695                                SourceLocation StartLoc, SourceLocation IdLoc,
   2696                                IdentifierInfo *Id, TypeSourceInfo *TInfo);
   2697   static TypeAliasDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   2698 
   2699   SourceRange getSourceRange() const override LLVM_READONLY;
   2700 
   2701   TypeAliasTemplateDecl *getDescribedAliasTemplate() const { return Template; }
   2702   void setDescribedAliasTemplate(TypeAliasTemplateDecl *TAT) { Template = TAT; }
   2703 
   2704   // Implement isa/cast/dyncast/etc.
   2705   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2706   static bool classofKind(Kind K) { return K == TypeAlias; }
   2707 };
   2708 
   2709 /// TagDecl - Represents the declaration of a struct/union/class/enum.
   2710 class TagDecl
   2711   : public TypeDecl, public DeclContext, public Redeclarable<TagDecl> {
   2712 public:
   2713   // This is really ugly.
   2714   typedef TagTypeKind TagKind;
   2715 
   2716 private:
   2717   // FIXME: This can be packed into the bitfields in Decl.
   2718   /// TagDeclKind - The TagKind enum.
   2719   unsigned TagDeclKind : 3;
   2720 
   2721   /// IsCompleteDefinition - True if this is a definition ("struct foo
   2722   /// {};"), false if it is a declaration ("struct foo;").  It is not
   2723   /// a definition until the definition has been fully processed.
   2724   bool IsCompleteDefinition : 1;
   2725 
   2726 protected:
   2727   /// IsBeingDefined - True if this is currently being defined.
   2728   bool IsBeingDefined : 1;
   2729 
   2730 private:
   2731   /// IsEmbeddedInDeclarator - True if this tag declaration is
   2732   /// "embedded" (i.e., defined or declared for the very first time)
   2733   /// in the syntax of a declarator.
   2734   bool IsEmbeddedInDeclarator : 1;
   2735 
   2736   /// \brief True if this tag is free standing, e.g. "struct foo;".
   2737   bool IsFreeStanding : 1;
   2738 
   2739 protected:
   2740   // These are used by (and only defined for) EnumDecl.
   2741   unsigned NumPositiveBits : 8;
   2742   unsigned NumNegativeBits : 8;
   2743 
   2744   /// IsScoped - True if this tag declaration is a scoped enumeration. Only
   2745   /// possible in C++11 mode.
   2746   bool IsScoped : 1;
   2747   /// IsScopedUsingClassTag - If this tag declaration is a scoped enum,
   2748   /// then this is true if the scoped enum was declared using the class
   2749   /// tag, false if it was declared with the struct tag. No meaning is
   2750   /// associated if this tag declaration is not a scoped enum.
   2751   bool IsScopedUsingClassTag : 1;
   2752 
   2753   /// IsFixed - True if this is an enumeration with fixed underlying type. Only
   2754   /// possible in C++11, Microsoft extensions, or Objective C mode.
   2755   bool IsFixed : 1;
   2756 
   2757   /// \brief Indicates whether it is possible for declarations of this kind
   2758   /// to have an out-of-date definition.
   2759   ///
   2760   /// This option is only enabled when modules are enabled.
   2761   bool MayHaveOutOfDateDef : 1;
   2762 
   2763   /// Has the full definition of this type been required by a use somewhere in
   2764   /// the TU.
   2765   bool IsCompleteDefinitionRequired : 1;
   2766 private:
   2767   SourceLocation RBraceLoc;
   2768 
   2769   // A struct representing syntactic qualifier info,
   2770   // to be used for the (uncommon) case of out-of-line declarations.
   2771   typedef QualifierInfo ExtInfo;
   2772 
   2773   /// \brief If the (out-of-line) tag declaration name
   2774   /// is qualified, it points to the qualifier info (nns and range);
   2775   /// otherwise, if the tag declaration is anonymous and it is part of
   2776   /// a typedef or alias, it points to the TypedefNameDecl (used for mangling);
   2777   /// otherwise, if the tag declaration is anonymous and it is used as a
   2778   /// declaration specifier for variables, it points to the first VarDecl (used
   2779   /// for mangling);
   2780   /// otherwise, it is a null (TypedefNameDecl) pointer.
   2781   llvm::PointerUnion<TypedefNameDecl *, ExtInfo *> TypedefNameDeclOrQualifier;
   2782 
   2783   bool hasExtInfo() const { return TypedefNameDeclOrQualifier.is<ExtInfo *>(); }
   2784   ExtInfo *getExtInfo() { return TypedefNameDeclOrQualifier.get<ExtInfo *>(); }
   2785   const ExtInfo *getExtInfo() const {
   2786     return TypedefNameDeclOrQualifier.get<ExtInfo *>();
   2787   }
   2788 
   2789 protected:
   2790   TagDecl(Kind DK, TagKind TK, const ASTContext &C, DeclContext *DC,
   2791           SourceLocation L, IdentifierInfo *Id, TagDecl *PrevDecl,
   2792           SourceLocation StartL)
   2793       : TypeDecl(DK, DC, L, Id, StartL), DeclContext(DK), redeclarable_base(C),
   2794         TagDeclKind(TK), IsCompleteDefinition(false), IsBeingDefined(false),
   2795         IsEmbeddedInDeclarator(false), IsFreeStanding(false),
   2796         IsCompleteDefinitionRequired(false),
   2797         TypedefNameDeclOrQualifier((TypedefNameDecl *)nullptr) {
   2798     assert((DK != Enum || TK == TTK_Enum) &&
   2799            "EnumDecl not matched with TTK_Enum");
   2800     setPreviousDecl(PrevDecl);
   2801   }
   2802 
   2803   typedef Redeclarable<TagDecl> redeclarable_base;
   2804   TagDecl *getNextRedeclarationImpl() override {
   2805     return getNextRedeclaration();
   2806   }
   2807   TagDecl *getPreviousDeclImpl() override {
   2808     return getPreviousDecl();
   2809   }
   2810   TagDecl *getMostRecentDeclImpl() override {
   2811     return getMostRecentDecl();
   2812   }
   2813 
   2814   /// @brief Completes the definition of this tag declaration.
   2815   ///
   2816   /// This is a helper function for derived classes.
   2817   void completeDefinition();
   2818 
   2819 public:
   2820   typedef redeclarable_base::redecl_range redecl_range;
   2821   typedef redeclarable_base::redecl_iterator redecl_iterator;
   2822   using redeclarable_base::redecls_begin;
   2823   using redeclarable_base::redecls_end;
   2824   using redeclarable_base::redecls;
   2825   using redeclarable_base::getPreviousDecl;
   2826   using redeclarable_base::getMostRecentDecl;
   2827   using redeclarable_base::isFirstDecl;
   2828 
   2829   SourceLocation getRBraceLoc() const { return RBraceLoc; }
   2830   void setRBraceLoc(SourceLocation L) { RBraceLoc = L; }
   2831 
   2832   /// getInnerLocStart - Return SourceLocation representing start of source
   2833   /// range ignoring outer template declarations.
   2834   SourceLocation getInnerLocStart() const { return getLocStart(); }
   2835 
   2836   /// getOuterLocStart - Return SourceLocation representing start of source
   2837   /// range taking into account any outer template declarations.
   2838   SourceLocation getOuterLocStart() const;
   2839   SourceRange getSourceRange() const override LLVM_READONLY;
   2840 
   2841   TagDecl *getCanonicalDecl() override;
   2842   const TagDecl *getCanonicalDecl() const {
   2843     return const_cast<TagDecl*>(this)->getCanonicalDecl();
   2844   }
   2845 
   2846   /// isThisDeclarationADefinition() - Return true if this declaration
   2847   /// is a completion definition of the type.  Provided for consistency.
   2848   bool isThisDeclarationADefinition() const {
   2849     return isCompleteDefinition();
   2850   }
   2851 
   2852   /// isCompleteDefinition - Return true if this decl has its body
   2853   /// fully specified.
   2854   bool isCompleteDefinition() const {
   2855     return IsCompleteDefinition;
   2856   }
   2857 
   2858   /// \brief Return true if this complete decl is
   2859   /// required to be complete for some existing use.
   2860   bool isCompleteDefinitionRequired() const {
   2861     return IsCompleteDefinitionRequired;
   2862   }
   2863 
   2864   /// isBeingDefined - Return true if this decl is currently being defined.
   2865   bool isBeingDefined() const {
   2866     return IsBeingDefined;
   2867   }
   2868 
   2869   bool isEmbeddedInDeclarator() const {
   2870     return IsEmbeddedInDeclarator;
   2871   }
   2872   void setEmbeddedInDeclarator(bool isInDeclarator) {
   2873     IsEmbeddedInDeclarator = isInDeclarator;
   2874   }
   2875 
   2876   bool isFreeStanding() const { return IsFreeStanding; }
   2877   void setFreeStanding(bool isFreeStanding = true) {
   2878     IsFreeStanding = isFreeStanding;
   2879   }
   2880 
   2881   /// \brief Whether this declaration declares a type that is
   2882   /// dependent, i.e., a type that somehow depends on template
   2883   /// parameters.
   2884   bool isDependentType() const { return isDependentContext(); }
   2885 
   2886   /// @brief Starts the definition of this tag declaration.
   2887   ///
   2888   /// This method should be invoked at the beginning of the definition
   2889   /// of this tag declaration. It will set the tag type into a state
   2890   /// where it is in the process of being defined.
   2891   void startDefinition();
   2892 
   2893   /// getDefinition - Returns the TagDecl that actually defines this
   2894   ///  struct/union/class/enum.  When determining whether or not a
   2895   ///  struct/union/class/enum has a definition, one should use this
   2896   ///  method as opposed to 'isDefinition'.  'isDefinition' indicates
   2897   ///  whether or not a specific TagDecl is defining declaration, not
   2898   ///  whether or not the struct/union/class/enum type is defined.
   2899   ///  This method returns NULL if there is no TagDecl that defines
   2900   ///  the struct/union/class/enum.
   2901   TagDecl *getDefinition() const;
   2902 
   2903   void setCompleteDefinition(bool V) { IsCompleteDefinition = V; }
   2904 
   2905   void setCompleteDefinitionRequired(bool V = true) {
   2906     IsCompleteDefinitionRequired = V;
   2907   }
   2908 
   2909   StringRef getKindName() const {
   2910     return TypeWithKeyword::getTagTypeKindName(getTagKind());
   2911   }
   2912 
   2913   TagKind getTagKind() const {
   2914     return TagKind(TagDeclKind);
   2915   }
   2916 
   2917   void setTagKind(TagKind TK) { TagDeclKind = TK; }
   2918 
   2919   bool isStruct() const { return getTagKind() == TTK_Struct; }
   2920   bool isInterface() const { return getTagKind() == TTK_Interface; }
   2921   bool isClass()  const { return getTagKind() == TTK_Class; }
   2922   bool isUnion()  const { return getTagKind() == TTK_Union; }
   2923   bool isEnum()   const { return getTagKind() == TTK_Enum; }
   2924 
   2925   /// Is this tag type named, either directly or via being defined in
   2926   /// a typedef of this type?
   2927   ///
   2928   /// C++11 [basic.link]p8:
   2929   ///   A type is said to have linkage if and only if:
   2930   ///     - it is a class or enumeration type that is named (or has a
   2931   ///       name for linkage purposes) and the name has linkage; ...
   2932   /// C++11 [dcl.typedef]p9:
   2933   ///   If the typedef declaration defines an unnamed class (or enum),
   2934   ///   the first typedef-name declared by the declaration to be that
   2935   ///   class type (or enum type) is used to denote the class type (or
   2936   ///   enum type) for linkage purposes only.
   2937   ///
   2938   /// C does not have an analogous rule, but the same concept is
   2939   /// nonetheless useful in some places.
   2940   bool hasNameForLinkage() const {
   2941     return (getDeclName() || getTypedefNameForAnonDecl());
   2942   }
   2943 
   2944   TypedefNameDecl *getTypedefNameForAnonDecl() const {
   2945     return hasExtInfo() ? nullptr
   2946                         : TypedefNameDeclOrQualifier.get<TypedefNameDecl *>();
   2947   }
   2948 
   2949   void setTypedefNameForAnonDecl(TypedefNameDecl *TDD);
   2950 
   2951   /// \brief Retrieve the nested-name-specifier that qualifies the name of this
   2952   /// declaration, if it was present in the source.
   2953   NestedNameSpecifier *getQualifier() const {
   2954     return hasExtInfo() ? getExtInfo()->QualifierLoc.getNestedNameSpecifier()
   2955                         : nullptr;
   2956   }
   2957 
   2958   /// \brief Retrieve the nested-name-specifier (with source-location
   2959   /// information) that qualifies the name of this declaration, if it was
   2960   /// present in the source.
   2961   NestedNameSpecifierLoc getQualifierLoc() const {
   2962     return hasExtInfo() ? getExtInfo()->QualifierLoc
   2963                         : NestedNameSpecifierLoc();
   2964   }
   2965 
   2966   void setQualifierInfo(NestedNameSpecifierLoc QualifierLoc);
   2967 
   2968   unsigned getNumTemplateParameterLists() const {
   2969     return hasExtInfo() ? getExtInfo()->NumTemplParamLists : 0;
   2970   }
   2971   TemplateParameterList *getTemplateParameterList(unsigned i) const {
   2972     assert(i < getNumTemplateParameterLists());
   2973     return getExtInfo()->TemplParamLists[i];
   2974   }
   2975   void setTemplateParameterListsInfo(ASTContext &Context,
   2976                                      ArrayRef<TemplateParameterList *> TPLists);
   2977 
   2978   // Implement isa/cast/dyncast/etc.
   2979   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   2980   static bool classofKind(Kind K) { return K >= firstTag && K <= lastTag; }
   2981 
   2982   static DeclContext *castToDeclContext(const TagDecl *D) {
   2983     return static_cast<DeclContext *>(const_cast<TagDecl*>(D));
   2984   }
   2985   static TagDecl *castFromDeclContext(const DeclContext *DC) {
   2986     return static_cast<TagDecl *>(const_cast<DeclContext*>(DC));
   2987   }
   2988 
   2989   friend class ASTDeclReader;
   2990   friend class ASTDeclWriter;
   2991 };
   2992 
   2993 /// EnumDecl - Represents an enum.  In C++11, enums can be forward-declared
   2994 /// with a fixed underlying type, and in C we allow them to be forward-declared
   2995 /// with no underlying type as an extension.
   2996 class EnumDecl : public TagDecl {
   2997   void anchor() override;
   2998   /// IntegerType - This represent the integer type that the enum corresponds
   2999   /// to for code generation purposes.  Note that the enumerator constants may
   3000   /// have a different type than this does.
   3001   ///
   3002   /// If the underlying integer type was explicitly stated in the source
   3003   /// code, this is a TypeSourceInfo* for that type. Otherwise this type
   3004   /// was automatically deduced somehow, and this is a Type*.
   3005   ///
   3006   /// Normally if IsFixed(), this would contain a TypeSourceInfo*, but in
   3007   /// some cases it won't.
   3008   ///
   3009   /// The underlying type of an enumeration never has any qualifiers, so
   3010   /// we can get away with just storing a raw Type*, and thus save an
   3011   /// extra pointer when TypeSourceInfo is needed.
   3012 
   3013   llvm::PointerUnion<const Type*, TypeSourceInfo*> IntegerType;
   3014 
   3015   /// PromotionType - The integer type that values of this type should
   3016   /// promote to.  In C, enumerators are generally of an integer type
   3017   /// directly, but gcc-style large enumerators (and all enumerators
   3018   /// in C++) are of the enum type instead.
   3019   QualType PromotionType;
   3020 
   3021   /// \brief If this enumeration is an instantiation of a member enumeration
   3022   /// of a class template specialization, this is the member specialization
   3023   /// information.
   3024   MemberSpecializationInfo *SpecializationInfo;
   3025 
   3026   EnumDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
   3027            SourceLocation IdLoc, IdentifierInfo *Id, EnumDecl *PrevDecl,
   3028            bool Scoped, bool ScopedUsingClassTag, bool Fixed)
   3029       : TagDecl(Enum, TTK_Enum, C, DC, IdLoc, Id, PrevDecl, StartLoc),
   3030         SpecializationInfo(nullptr) {
   3031     assert(Scoped || !ScopedUsingClassTag);
   3032     IntegerType = (const Type *)nullptr;
   3033     NumNegativeBits = 0;
   3034     NumPositiveBits = 0;
   3035     IsScoped = Scoped;
   3036     IsScopedUsingClassTag = ScopedUsingClassTag;
   3037     IsFixed = Fixed;
   3038   }
   3039 
   3040   void setInstantiationOfMemberEnum(ASTContext &C, EnumDecl *ED,
   3041                                     TemplateSpecializationKind TSK);
   3042 public:
   3043   EnumDecl *getCanonicalDecl() override {
   3044     return cast<EnumDecl>(TagDecl::getCanonicalDecl());
   3045   }
   3046   const EnumDecl *getCanonicalDecl() const {
   3047     return const_cast<EnumDecl*>(this)->getCanonicalDecl();
   3048   }
   3049 
   3050   EnumDecl *getPreviousDecl() {
   3051     return cast_or_null<EnumDecl>(
   3052             static_cast<TagDecl *>(this)->getPreviousDecl());
   3053   }
   3054   const EnumDecl *getPreviousDecl() const {
   3055     return const_cast<EnumDecl*>(this)->getPreviousDecl();
   3056   }
   3057 
   3058   EnumDecl *getMostRecentDecl() {
   3059     return cast<EnumDecl>(static_cast<TagDecl *>(this)->getMostRecentDecl());
   3060   }
   3061   const EnumDecl *getMostRecentDecl() const {
   3062     return const_cast<EnumDecl*>(this)->getMostRecentDecl();
   3063   }
   3064 
   3065   EnumDecl *getDefinition() const {
   3066     return cast_or_null<EnumDecl>(TagDecl::getDefinition());
   3067   }
   3068 
   3069   static EnumDecl *Create(ASTContext &C, DeclContext *DC,
   3070                           SourceLocation StartLoc, SourceLocation IdLoc,
   3071                           IdentifierInfo *Id, EnumDecl *PrevDecl,
   3072                           bool IsScoped, bool IsScopedUsingClassTag,
   3073                           bool IsFixed);
   3074   static EnumDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   3075 
   3076   /// completeDefinition - When created, the EnumDecl corresponds to a
   3077   /// forward-declared enum. This method is used to mark the
   3078   /// declaration as being defined; it's enumerators have already been
   3079   /// added (via DeclContext::addDecl). NewType is the new underlying
   3080   /// type of the enumeration type.
   3081   void completeDefinition(QualType NewType,
   3082                           QualType PromotionType,
   3083                           unsigned NumPositiveBits,
   3084                           unsigned NumNegativeBits);
   3085 
   3086   // enumerator_iterator - Iterates through the enumerators of this
   3087   // enumeration.
   3088   typedef specific_decl_iterator<EnumConstantDecl> enumerator_iterator;
   3089   typedef llvm::iterator_range<specific_decl_iterator<EnumConstantDecl>>
   3090     enumerator_range;
   3091 
   3092   enumerator_range enumerators() const {
   3093     return enumerator_range(enumerator_begin(), enumerator_end());
   3094   }
   3095 
   3096   enumerator_iterator enumerator_begin() const {
   3097     const EnumDecl *E = getDefinition();
   3098     if (!E)
   3099       E = this;
   3100     return enumerator_iterator(E->decls_begin());
   3101   }
   3102 
   3103   enumerator_iterator enumerator_end() const {
   3104     const EnumDecl *E = getDefinition();
   3105     if (!E)
   3106       E = this;
   3107     return enumerator_iterator(E->decls_end());
   3108   }
   3109 
   3110   /// getPromotionType - Return the integer type that enumerators
   3111   /// should promote to.
   3112   QualType getPromotionType() const { return PromotionType; }
   3113 
   3114   /// \brief Set the promotion type.
   3115   void setPromotionType(QualType T) { PromotionType = T; }
   3116 
   3117   /// getIntegerType - Return the integer type this enum decl corresponds to.
   3118   /// This returns a null QualType for an enum forward definition with no fixed
   3119   /// underlying type.
   3120   QualType getIntegerType() const {
   3121     if (!IntegerType)
   3122       return QualType();
   3123     if (const Type *T = IntegerType.dyn_cast<const Type*>())
   3124       return QualType(T, 0);
   3125     return IntegerType.get<TypeSourceInfo*>()->getType().getUnqualifiedType();
   3126   }
   3127 
   3128   /// \brief Set the underlying integer type.
   3129   void setIntegerType(QualType T) { IntegerType = T.getTypePtrOrNull(); }
   3130 
   3131   /// \brief Set the underlying integer type source info.
   3132   void setIntegerTypeSourceInfo(TypeSourceInfo *TInfo) { IntegerType = TInfo; }
   3133 
   3134   /// \brief Return the type source info for the underlying integer type,
   3135   /// if no type source info exists, return 0.
   3136   TypeSourceInfo *getIntegerTypeSourceInfo() const {
   3137     return IntegerType.dyn_cast<TypeSourceInfo*>();
   3138   }
   3139 
   3140   /// \brief Retrieve the source range that covers the underlying type if
   3141   /// specified.
   3142   SourceRange getIntegerTypeRange() const LLVM_READONLY;
   3143 
   3144   /// \brief Returns the width in bits required to store all the
   3145   /// non-negative enumerators of this enum.
   3146   unsigned getNumPositiveBits() const {
   3147     return NumPositiveBits;
   3148   }
   3149   void setNumPositiveBits(unsigned Num) {
   3150     NumPositiveBits = Num;
   3151     assert(NumPositiveBits == Num && "can't store this bitcount");
   3152   }
   3153 
   3154   /// \brief Returns the width in bits required to store all the
   3155   /// negative enumerators of this enum.  These widths include
   3156   /// the rightmost leading 1;  that is:
   3157   ///
   3158   /// MOST NEGATIVE ENUMERATOR     PATTERN     NUM NEGATIVE BITS
   3159   /// ------------------------     -------     -----------------
   3160   ///                       -1     1111111                     1
   3161   ///                      -10     1110110                     5
   3162   ///                     -101     1001011                     8
   3163   unsigned getNumNegativeBits() const {
   3164     return NumNegativeBits;
   3165   }
   3166   void setNumNegativeBits(unsigned Num) {
   3167     NumNegativeBits = Num;
   3168   }
   3169 
   3170   /// \brief Returns true if this is a C++11 scoped enumeration.
   3171   bool isScoped() const {
   3172     return IsScoped;
   3173   }
   3174 
   3175   /// \brief Returns true if this is a C++11 scoped enumeration.
   3176   bool isScopedUsingClassTag() const {
   3177     return IsScopedUsingClassTag;
   3178   }
   3179 
   3180   /// \brief Returns true if this is an Objective-C, C++11, or
   3181   /// Microsoft-style enumeration with a fixed underlying type.
   3182   bool isFixed() const {
   3183     return IsFixed;
   3184   }
   3185 
   3186   /// \brief Returns true if this can be considered a complete type.
   3187   bool isComplete() const {
   3188     return isCompleteDefinition() || isFixed();
   3189   }
   3190 
   3191   /// \brief Returns the enumeration (declared within the template)
   3192   /// from which this enumeration type was instantiated, or NULL if
   3193   /// this enumeration was not instantiated from any template.
   3194   EnumDecl *getInstantiatedFromMemberEnum() const;
   3195 
   3196   /// \brief If this enumeration is a member of a specialization of a
   3197   /// templated class, determine what kind of template specialization
   3198   /// or instantiation this is.
   3199   TemplateSpecializationKind getTemplateSpecializationKind() const;
   3200 
   3201   /// \brief For an enumeration member that was instantiated from a member
   3202   /// enumeration of a templated class, set the template specialiation kind.
   3203   void setTemplateSpecializationKind(TemplateSpecializationKind TSK,
   3204                         SourceLocation PointOfInstantiation = SourceLocation());
   3205 
   3206   /// \brief If this enumeration is an instantiation of a member enumeration of
   3207   /// a class template specialization, retrieves the member specialization
   3208   /// information.
   3209   MemberSpecializationInfo *getMemberSpecializationInfo() const {
   3210     return SpecializationInfo;
   3211   }
   3212 
   3213   /// \brief Specify that this enumeration is an instantiation of the
   3214   /// member enumeration ED.
   3215   void setInstantiationOfMemberEnum(EnumDecl *ED,
   3216                                     TemplateSpecializationKind TSK) {
   3217     setInstantiationOfMemberEnum(getASTContext(), ED, TSK);
   3218   }
   3219 
   3220   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   3221   static bool classofKind(Kind K) { return K == Enum; }
   3222 
   3223   friend class ASTDeclReader;
   3224 };
   3225 
   3226 
   3227 /// RecordDecl - Represents a struct/union/class.  For example:
   3228 ///   struct X;                  // Forward declaration, no "body".
   3229 ///   union Y { int A, B; };     // Has body with members A and B (FieldDecls).
   3230 /// This decl will be marked invalid if *any* members are invalid.
   3231 ///
   3232 class RecordDecl : public TagDecl {
   3233   // FIXME: This can be packed into the bitfields in Decl.
   3234   /// HasFlexibleArrayMember - This is true if this struct ends with a flexible
   3235   /// array member (e.g. int X[]) or if this union contains a struct that does.
   3236   /// If so, this cannot be contained in arrays or other structs as a member.
   3237   bool HasFlexibleArrayMember : 1;
   3238 
   3239   /// AnonymousStructOrUnion - Whether this is the type of an anonymous struct
   3240   /// or union.
   3241   bool AnonymousStructOrUnion : 1;
   3242 
   3243   /// HasObjectMember - This is true if this struct has at least one member
   3244   /// containing an Objective-C object pointer type.
   3245   bool HasObjectMember : 1;
   3246 
   3247   /// HasVolatileMember - This is true if struct has at least one member of
   3248   /// 'volatile' type.
   3249   bool HasVolatileMember : 1;
   3250 
   3251   /// \brief Whether the field declarations of this record have been loaded
   3252   /// from external storage. To avoid unnecessary deserialization of
   3253   /// methods/nested types we allow deserialization of just the fields
   3254   /// when needed.
   3255   mutable bool LoadedFieldsFromExternalStorage : 1;
   3256   friend class DeclContext;
   3257 
   3258 protected:
   3259   RecordDecl(Kind DK, TagKind TK, const ASTContext &C, DeclContext *DC,
   3260              SourceLocation StartLoc, SourceLocation IdLoc,
   3261              IdentifierInfo *Id, RecordDecl *PrevDecl);
   3262 
   3263 public:
   3264   static RecordDecl *Create(const ASTContext &C, TagKind TK, DeclContext *DC,
   3265                             SourceLocation StartLoc, SourceLocation IdLoc,
   3266                             IdentifierInfo *Id, RecordDecl* PrevDecl = nullptr);
   3267   static RecordDecl *CreateDeserialized(const ASTContext &C, unsigned ID);
   3268 
   3269   RecordDecl *getPreviousDecl() {
   3270     return cast_or_null<RecordDecl>(
   3271             static_cast<TagDecl *>(this)->getPreviousDecl());
   3272   }
   3273   const RecordDecl *getPreviousDecl() const {
   3274     return const_cast<RecordDecl*>(this)->getPreviousDecl();
   3275   }
   3276 
   3277   RecordDecl *getMostRecentDecl() {
   3278     return cast<RecordDecl>(static_cast<TagDecl *>(this)->getMostRecentDecl());
   3279   }
   3280   const RecordDecl *getMostRecentDecl() const {
   3281     return const_cast<RecordDecl*>(this)->getMostRecentDecl();
   3282   }
   3283 
   3284   bool hasFlexibleArrayMember() const { return HasFlexibleArrayMember; }
   3285   void setHasFlexibleArrayMember(bool V) { HasFlexibleArrayMember = V; }
   3286 
   3287   /// isAnonymousStructOrUnion - Whether this is an anonymous struct
   3288   /// or union. To be an anonymous struct or union, it must have been
   3289   /// declared without a name and there must be no objects of this
   3290   /// type declared, e.g.,
   3291   /// @code
   3292   ///   union { int i; float f; };
   3293   /// @endcode
   3294   /// is an anonymous union but neither of the following are:
   3295   /// @code
   3296   ///  union X { int i; float f; };
   3297   ///  union { int i; float f; } obj;
   3298   /// @endcode
   3299   bool isAnonymousStructOrUnion() const { return AnonymousStructOrUnion; }
   3300   void setAnonymousStructOrUnion(bool Anon) {
   3301     AnonymousStructOrUnion = Anon;
   3302   }
   3303 
   3304   bool hasObjectMember() const { return HasObjectMember; }
   3305   void setHasObjectMember (bool val) { HasObjectMember = val; }
   3306 
   3307   bool hasVolatileMember() const { return HasVolatileMember; }
   3308   void setHasVolatileMember (bool val) { HasVolatileMember = val; }
   3309 
   3310   bool hasLoadedFieldsFromExternalStorage() const {
   3311     return LoadedFieldsFromExternalStorage;
   3312   }
   3313   void setHasLoadedFieldsFromExternalStorage(bool val) {
   3314     LoadedFieldsFromExternalStorage = val;
   3315   }
   3316 
   3317   /// \brief Determines whether this declaration represents the
   3318   /// injected class name.
   3319   ///
   3320   /// The injected class name in C++ is the name of the class that
   3321   /// appears inside the class itself. For example:
   3322   ///
   3323   /// \code
   3324   /// struct C {
   3325   ///   // C is implicitly declared here as a synonym for the class name.
   3326   /// };
   3327   ///
   3328   /// C::C c; // same as "C c;"
   3329   /// \endcode
   3330   bool isInjectedClassName() const;
   3331 
   3332   /// \brief Determine whether this record is a class describing a lambda
   3333   /// function object.
   3334   bool isLambda() const;
   3335 
   3336   /// \brief Determine whether this record is a record for captured variables in
   3337   /// CapturedStmt construct.
   3338   bool isCapturedRecord() const;
   3339   /// \brief Mark the record as a record for captured variables in CapturedStmt
   3340   /// construct.
   3341   void setCapturedRecord();
   3342 
   3343   /// getDefinition - Returns the RecordDecl that actually defines
   3344   ///  this struct/union/class.  When determining whether or not a
   3345   ///  struct/union/class is completely defined, one should use this
   3346   ///  method as opposed to 'isCompleteDefinition'.
   3347   ///  'isCompleteDefinition' indicates whether or not a specific
   3348   ///  RecordDecl is a completed definition, not whether or not the
   3349   ///  record type is defined.  This method returns NULL if there is
   3350   ///  no RecordDecl that defines the struct/union/tag.
   3351   RecordDecl *getDefinition() const {
   3352     return cast_or_null<RecordDecl>(TagDecl::getDefinition());
   3353   }
   3354 
   3355   // Iterator access to field members. The field iterator only visits
   3356   // the non-static data members of this class, ignoring any static
   3357   // data members, functions, constructors, destructors, etc.
   3358   typedef specific_decl_iterator<FieldDecl> field_iterator;
   3359   typedef llvm::iterator_range<specific_decl_iterator<FieldDecl>> field_range;
   3360 
   3361   field_range fields() const { return field_range(field_begin(), field_end()); }
   3362   field_iterator field_begin() const;
   3363 
   3364   field_iterator field_end() const {
   3365     return field_iterator(decl_iterator());
   3366   }
   3367 
   3368   // field_empty - Whether there are any fields (non-static data
   3369   // members) in this record.
   3370   bool field_empty() const {
   3371     return field_begin() == field_end();
   3372   }
   3373 
   3374   /// completeDefinition - Notes that the definition of this type is
   3375   /// now complete.
   3376   virtual void completeDefinition();
   3377 
   3378   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   3379   static bool classofKind(Kind K) {
   3380     return K >= firstRecord && K <= lastRecord;
   3381   }
   3382 
   3383   /// isMsStrust - Get whether or not this is an ms_struct which can
   3384   /// be turned on with an attribute, pragma, or -mms-bitfields
   3385   /// commandline option.
   3386   bool isMsStruct(const ASTContext &C) const;
   3387 
   3388   /// \brief Whether we are allowed to insert extra padding between fields.
   3389   /// These padding are added to help AddressSanitizer detect
   3390   /// intra-object-overflow bugs.
   3391   bool mayInsertExtraPadding(bool EmitRemark = false) const;
   3392 
   3393   /// Finds the first data member which has a name.
   3394   /// nullptr is returned if no named data member exists.
   3395   const FieldDecl *findFirstNamedDataMember() const;
   3396 
   3397 private:
   3398   /// \brief Deserialize just the fields.
   3399   void LoadFieldsFromExternalStorage() const;
   3400 };
   3401 
   3402 class FileScopeAsmDecl : public Decl {
   3403   virtual void anchor();
   3404   StringLiteral *AsmString;
   3405   SourceLocation RParenLoc;
   3406   FileScopeAsmDecl(DeclContext *DC, StringLiteral *asmstring,
   3407                    SourceLocation StartL, SourceLocation EndL)
   3408     : Decl(FileScopeAsm, DC, StartL), AsmString(asmstring), RParenLoc(EndL) {}
   3409 public:
   3410   static FileScopeAsmDecl *Create(ASTContext &C, DeclContext *DC,
   3411                                   StringLiteral *Str, SourceLocation AsmLoc,
   3412                                   SourceLocation RParenLoc);
   3413 
   3414   static FileScopeAsmDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   3415 
   3416   SourceLocation getAsmLoc() const { return getLocation(); }
   3417   SourceLocation getRParenLoc() const { return RParenLoc; }
   3418   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
   3419   SourceRange getSourceRange() const override LLVM_READONLY {
   3420     return SourceRange(getAsmLoc(), getRParenLoc());
   3421   }
   3422 
   3423   const StringLiteral *getAsmString() const { return AsmString; }
   3424   StringLiteral *getAsmString() { return AsmString; }
   3425   void setAsmString(StringLiteral *Asm) { AsmString = Asm; }
   3426 
   3427   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   3428   static bool classofKind(Kind K) { return K == FileScopeAsm; }
   3429 };
   3430 
   3431 /// BlockDecl - This represents a block literal declaration, which is like an
   3432 /// unnamed FunctionDecl.  For example:
   3433 /// ^{ statement-body }   or   ^(int arg1, float arg2){ statement-body }
   3434 ///
   3435 class BlockDecl : public Decl, public DeclContext {
   3436 public:
   3437   /// A class which contains all the information about a particular
   3438   /// captured value.
   3439   class Capture {
   3440     enum {
   3441       flag_isByRef = 0x1,
   3442       flag_isNested = 0x2
   3443     };
   3444 
   3445     /// The variable being captured.
   3446     llvm::PointerIntPair<VarDecl*, 2> VariableAndFlags;
   3447 
   3448     /// The copy expression, expressed in terms of a DeclRef (or
   3449     /// BlockDeclRef) to the captured variable.  Only required if the
   3450     /// variable has a C++ class type.
   3451     Expr *CopyExpr;
   3452 
   3453   public:
   3454     Capture(VarDecl *variable, bool byRef, bool nested, Expr *copy)
   3455       : VariableAndFlags(variable,
   3456                   (byRef ? flag_isByRef : 0) | (nested ? flag_isNested : 0)),
   3457         CopyExpr(copy) {}
   3458 
   3459     /// The variable being captured.
   3460     VarDecl *getVariable() const { return VariableAndFlags.getPointer(); }
   3461 
   3462     /// Whether this is a "by ref" capture, i.e. a capture of a __block
   3463     /// variable.
   3464     bool isByRef() const { return VariableAndFlags.getInt() & flag_isByRef; }
   3465 
   3466     /// Whether this is a nested capture, i.e. the variable captured
   3467     /// is not from outside the immediately enclosing function/block.
   3468     bool isNested() const { return VariableAndFlags.getInt() & flag_isNested; }
   3469 
   3470     bool hasCopyExpr() const { return CopyExpr != nullptr; }
   3471     Expr *getCopyExpr() const { return CopyExpr; }
   3472     void setCopyExpr(Expr *e) { CopyExpr = e; }
   3473   };
   3474 
   3475 private:
   3476   // FIXME: This can be packed into the bitfields in Decl.
   3477   bool IsVariadic : 1;
   3478   bool CapturesCXXThis : 1;
   3479   bool BlockMissingReturnType : 1;
   3480   bool IsConversionFromLambda : 1;
   3481   /// ParamInfo - new[]'d array of pointers to ParmVarDecls for the formal
   3482   /// parameters of this function.  This is null if a prototype or if there are
   3483   /// no formals.
   3484   ParmVarDecl **ParamInfo;
   3485   unsigned NumParams;
   3486 
   3487   Stmt *Body;
   3488   TypeSourceInfo *SignatureAsWritten;
   3489 
   3490   const Capture *Captures;
   3491   unsigned NumCaptures;
   3492 
   3493   unsigned ManglingNumber;
   3494   Decl *ManglingContextDecl;
   3495 
   3496 protected:
   3497   BlockDecl(DeclContext *DC, SourceLocation CaretLoc)
   3498     : Decl(Block, DC, CaretLoc), DeclContext(Block),
   3499       IsVariadic(false), CapturesCXXThis(false),
   3500       BlockMissingReturnType(true), IsConversionFromLambda(false),
   3501       ParamInfo(nullptr), NumParams(0), Body(nullptr),
   3502       SignatureAsWritten(nullptr), Captures(nullptr), NumCaptures(0),
   3503       ManglingNumber(0), ManglingContextDecl(nullptr) {}
   3504 
   3505 public:
   3506   static BlockDecl *Create(ASTContext &C, DeclContext *DC, SourceLocation L);
   3507   static BlockDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   3508 
   3509   SourceLocation getCaretLocation() const { return getLocation(); }
   3510 
   3511   bool isVariadic() const { return IsVariadic; }
   3512   void setIsVariadic(bool value) { IsVariadic = value; }
   3513 
   3514   CompoundStmt *getCompoundBody() const { return (CompoundStmt*) Body; }
   3515   Stmt *getBody() const override { return (Stmt*) Body; }
   3516   void setBody(CompoundStmt *B) { Body = (Stmt*) B; }
   3517 
   3518   void setSignatureAsWritten(TypeSourceInfo *Sig) { SignatureAsWritten = Sig; }
   3519   TypeSourceInfo *getSignatureAsWritten() const { return SignatureAsWritten; }
   3520 
   3521   // Iterator access to formal parameters.
   3522   unsigned param_size() const { return getNumParams(); }
   3523   typedef ParmVarDecl **param_iterator;
   3524   typedef ParmVarDecl * const *param_const_iterator;
   3525   typedef llvm::iterator_range<param_iterator> param_range;
   3526   typedef llvm::iterator_range<param_const_iterator> param_const_range;
   3527 
   3528   // ArrayRef access to formal parameters.
   3529   // FIXME: Should eventual replace iterator access.
   3530   ArrayRef<ParmVarDecl*> parameters() const {
   3531     return llvm::makeArrayRef(ParamInfo, param_size());
   3532   }
   3533 
   3534   bool param_empty() const { return NumParams == 0; }
   3535   param_range params() { return param_range(param_begin(), param_end()); }
   3536   param_iterator param_begin() { return param_iterator(ParamInfo); }
   3537   param_iterator param_end() {
   3538     return param_iterator(ParamInfo + param_size());
   3539   }
   3540 
   3541   param_const_range params() const {
   3542     return param_const_range(param_begin(), param_end());
   3543   }
   3544   param_const_iterator param_begin() const {
   3545     return param_const_iterator(ParamInfo);
   3546   }
   3547   param_const_iterator param_end() const {
   3548     return param_const_iterator(ParamInfo + param_size());
   3549   }
   3550 
   3551   unsigned getNumParams() const { return NumParams; }
   3552   const ParmVarDecl *getParamDecl(unsigned i) const {
   3553     assert(i < getNumParams() && "Illegal param #");
   3554     return ParamInfo[i];
   3555   }
   3556   ParmVarDecl *getParamDecl(unsigned i) {
   3557     assert(i < getNumParams() && "Illegal param #");
   3558     return ParamInfo[i];
   3559   }
   3560   void setParams(ArrayRef<ParmVarDecl *> NewParamInfo);
   3561 
   3562   /// hasCaptures - True if this block (or its nested blocks) captures
   3563   /// anything of local storage from its enclosing scopes.
   3564   bool hasCaptures() const { return NumCaptures != 0 || CapturesCXXThis; }
   3565 
   3566   /// getNumCaptures - Returns the number of captured variables.
   3567   /// Does not include an entry for 'this'.
   3568   unsigned getNumCaptures() const { return NumCaptures; }
   3569 
   3570   typedef const Capture *capture_iterator;
   3571   typedef const Capture *capture_const_iterator;
   3572   typedef llvm::iterator_range<capture_iterator> capture_range;
   3573   typedef llvm::iterator_range<capture_const_iterator> capture_const_range;
   3574 
   3575   capture_range captures() {
   3576     return capture_range(capture_begin(), capture_end());
   3577   }
   3578   capture_const_range captures() const {
   3579     return capture_const_range(capture_begin(), capture_end());
   3580   }
   3581 
   3582   capture_iterator capture_begin() { return Captures; }
   3583   capture_iterator capture_end() { return Captures + NumCaptures; }
   3584   capture_const_iterator capture_begin() const { return Captures; }
   3585   capture_const_iterator capture_end() const { return Captures + NumCaptures; }
   3586 
   3587   bool capturesCXXThis() const { return CapturesCXXThis; }
   3588   bool blockMissingReturnType() const { return BlockMissingReturnType; }
   3589   void setBlockMissingReturnType(bool val) { BlockMissingReturnType = val; }
   3590 
   3591   bool isConversionFromLambda() const { return IsConversionFromLambda; }
   3592   void setIsConversionFromLambda(bool val) { IsConversionFromLambda = val; }
   3593 
   3594   bool capturesVariable(const VarDecl *var) const;
   3595 
   3596   void setCaptures(ASTContext &Context, ArrayRef<Capture> Captures,
   3597                    bool CapturesCXXThis);
   3598 
   3599    unsigned getBlockManglingNumber() const {
   3600      return ManglingNumber;
   3601    }
   3602    Decl *getBlockManglingContextDecl() const {
   3603      return ManglingContextDecl;
   3604    }
   3605 
   3606   void setBlockMangling(unsigned Number, Decl *Ctx) {
   3607     ManglingNumber = Number;
   3608     ManglingContextDecl = Ctx;
   3609   }
   3610 
   3611   SourceRange getSourceRange() const override LLVM_READONLY;
   3612 
   3613   // Implement isa/cast/dyncast/etc.
   3614   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   3615   static bool classofKind(Kind K) { return K == Block; }
   3616   static DeclContext *castToDeclContext(const BlockDecl *D) {
   3617     return static_cast<DeclContext *>(const_cast<BlockDecl*>(D));
   3618   }
   3619   static BlockDecl *castFromDeclContext(const DeclContext *DC) {
   3620     return static_cast<BlockDecl *>(const_cast<DeclContext*>(DC));
   3621   }
   3622 };
   3623 
   3624 /// \brief This represents the body of a CapturedStmt, and serves as its
   3625 /// DeclContext.
   3626 class CapturedDecl final
   3627     : public Decl,
   3628       public DeclContext,
   3629       private llvm::TrailingObjects<CapturedDecl, ImplicitParamDecl *> {
   3630 protected:
   3631   size_t numTrailingObjects(OverloadToken<ImplicitParamDecl>) {
   3632     return NumParams;
   3633   }
   3634 
   3635 private:
   3636   /// \brief The number of parameters to the outlined function.
   3637   unsigned NumParams;
   3638   /// \brief The position of context parameter in list of parameters.
   3639   unsigned ContextParam;
   3640   /// \brief The body of the outlined function.
   3641   llvm::PointerIntPair<Stmt *, 1, bool> BodyAndNothrow;
   3642 
   3643   explicit CapturedDecl(DeclContext *DC, unsigned NumParams)
   3644     : Decl(Captured, DC, SourceLocation()), DeclContext(Captured),
   3645       NumParams(NumParams), ContextParam(0), BodyAndNothrow(nullptr, false) { }
   3646 
   3647   ImplicitParamDecl *const *getParams() const {
   3648     return getTrailingObjects<ImplicitParamDecl *>();
   3649   }
   3650 
   3651   ImplicitParamDecl **getParams() {
   3652     return getTrailingObjects<ImplicitParamDecl *>();
   3653   }
   3654 
   3655 public:
   3656   static CapturedDecl *Create(ASTContext &C, DeclContext *DC,
   3657                               unsigned NumParams);
   3658   static CapturedDecl *CreateDeserialized(ASTContext &C, unsigned ID,
   3659                                           unsigned NumParams);
   3660 
   3661   Stmt *getBody() const override { return BodyAndNothrow.getPointer(); }
   3662   void setBody(Stmt *B) { BodyAndNothrow.setPointer(B); }
   3663 
   3664   bool isNothrow() const { return BodyAndNothrow.getInt(); }
   3665   void setNothrow(bool Nothrow = true) { BodyAndNothrow.setInt(Nothrow); }
   3666 
   3667   unsigned getNumParams() const { return NumParams; }
   3668 
   3669   ImplicitParamDecl *getParam(unsigned i) const {
   3670     assert(i < NumParams);
   3671     return getParams()[i];
   3672   }
   3673   void setParam(unsigned i, ImplicitParamDecl *P) {
   3674     assert(i < NumParams);
   3675     getParams()[i] = P;
   3676   }
   3677 
   3678   /// \brief Retrieve the parameter containing captured variables.
   3679   ImplicitParamDecl *getContextParam() const {
   3680     assert(ContextParam < NumParams);
   3681     return getParam(ContextParam);
   3682   }
   3683   void setContextParam(unsigned i, ImplicitParamDecl *P) {
   3684     assert(i < NumParams);
   3685     ContextParam = i;
   3686     setParam(i, P);
   3687   }
   3688   unsigned getContextParamPosition() const { return ContextParam; }
   3689 
   3690   typedef ImplicitParamDecl *const *param_iterator;
   3691   typedef llvm::iterator_range<param_iterator> param_range;
   3692 
   3693   /// \brief Retrieve an iterator pointing to the first parameter decl.
   3694   param_iterator param_begin() const { return getParams(); }
   3695   /// \brief Retrieve an iterator one past the last parameter decl.
   3696   param_iterator param_end() const { return getParams() + NumParams; }
   3697 
   3698   /// \brief Retrieve an iterator range for the parameter declarations.
   3699   param_range params() const { return param_range(param_begin(), param_end()); }
   3700 
   3701   // Implement isa/cast/dyncast/etc.
   3702   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   3703   static bool classofKind(Kind K) { return K == Captured; }
   3704   static DeclContext *castToDeclContext(const CapturedDecl *D) {
   3705     return static_cast<DeclContext *>(const_cast<CapturedDecl *>(D));
   3706   }
   3707   static CapturedDecl *castFromDeclContext(const DeclContext *DC) {
   3708     return static_cast<CapturedDecl *>(const_cast<DeclContext *>(DC));
   3709   }
   3710 
   3711   friend class ASTDeclReader;
   3712   friend class ASTDeclWriter;
   3713   friend TrailingObjects;
   3714 };
   3715 
   3716 /// \brief Describes a module import declaration, which makes the contents
   3717 /// of the named module visible in the current translation unit.
   3718 ///
   3719 /// An import declaration imports the named module (or submodule). For example:
   3720 /// \code
   3721 ///   @import std.vector;
   3722 /// \endcode
   3723 ///
   3724 /// Import declarations can also be implicitly generated from
   3725 /// \#include/\#import directives.
   3726 class ImportDecl final : public Decl,
   3727                          llvm::TrailingObjects<ImportDecl, SourceLocation> {
   3728   /// \brief The imported module, along with a bit that indicates whether
   3729   /// we have source-location information for each identifier in the module
   3730   /// name.
   3731   ///
   3732   /// When the bit is false, we only have a single source location for the
   3733   /// end of the import declaration.
   3734   llvm::PointerIntPair<Module *, 1, bool> ImportedAndComplete;
   3735 
   3736   /// \brief The next import in the list of imports local to the translation
   3737   /// unit being parsed (not loaded from an AST file).
   3738   ImportDecl *NextLocalImport;
   3739 
   3740   friend class ASTReader;
   3741   friend class ASTDeclReader;
   3742   friend class ASTContext;
   3743   friend TrailingObjects;
   3744 
   3745   ImportDecl(DeclContext *DC, SourceLocation StartLoc, Module *Imported,
   3746              ArrayRef<SourceLocation> IdentifierLocs);
   3747 
   3748   ImportDecl(DeclContext *DC, SourceLocation StartLoc, Module *Imported,
   3749              SourceLocation EndLoc);
   3750 
   3751   ImportDecl(EmptyShell Empty) : Decl(Import, Empty), NextLocalImport() { }
   3752 
   3753 public:
   3754   /// \brief Create a new module import declaration.
   3755   static ImportDecl *Create(ASTContext &C, DeclContext *DC,
   3756                             SourceLocation StartLoc, Module *Imported,
   3757                             ArrayRef<SourceLocation> IdentifierLocs);
   3758 
   3759   /// \brief Create a new module import declaration for an implicitly-generated
   3760   /// import.
   3761   static ImportDecl *CreateImplicit(ASTContext &C, DeclContext *DC,
   3762                                     SourceLocation StartLoc, Module *Imported,
   3763                                     SourceLocation EndLoc);
   3764 
   3765   /// \brief Create a new, deserialized module import declaration.
   3766   static ImportDecl *CreateDeserialized(ASTContext &C, unsigned ID,
   3767                                         unsigned NumLocations);
   3768 
   3769   /// \brief Retrieve the module that was imported by the import declaration.
   3770   Module *getImportedModule() const { return ImportedAndComplete.getPointer(); }
   3771 
   3772   /// \brief Retrieves the locations of each of the identifiers that make up
   3773   /// the complete module name in the import declaration.
   3774   ///
   3775   /// This will return an empty array if the locations of the individual
   3776   /// identifiers aren't available.
   3777   ArrayRef<SourceLocation> getIdentifierLocs() const;
   3778 
   3779   SourceRange getSourceRange() const override LLVM_READONLY;
   3780 
   3781   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   3782   static bool classofKind(Kind K) { return K == Import; }
   3783 };
   3784 
   3785 /// \brief Represents an empty-declaration.
   3786 class EmptyDecl : public Decl {
   3787   virtual void anchor();
   3788   EmptyDecl(DeclContext *DC, SourceLocation L)
   3789     : Decl(Empty, DC, L) { }
   3790 
   3791 public:
   3792   static EmptyDecl *Create(ASTContext &C, DeclContext *DC,
   3793                            SourceLocation L);
   3794   static EmptyDecl *CreateDeserialized(ASTContext &C, unsigned ID);
   3795 
   3796   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   3797   static bool classofKind(Kind K) { return K == Empty; }
   3798 };
   3799 
   3800 /// Insertion operator for diagnostics.  This allows sending NamedDecl's
   3801 /// into a diagnostic with <<.
   3802 inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
   3803                                            const NamedDecl* ND) {
   3804   DB.AddTaggedVal(reinterpret_cast<intptr_t>(ND),
   3805                   DiagnosticsEngine::ak_nameddecl);
   3806   return DB;
   3807 }
   3808 inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
   3809                                            const NamedDecl* ND) {
   3810   PD.AddTaggedVal(reinterpret_cast<intptr_t>(ND),
   3811                   DiagnosticsEngine::ak_nameddecl);
   3812   return PD;
   3813 }
   3814 
   3815 template<typename decl_type>
   3816 void Redeclarable<decl_type>::setPreviousDecl(decl_type *PrevDecl) {
   3817   // Note: This routine is implemented here because we need both NamedDecl
   3818   // and Redeclarable to be defined.
   3819   assert(RedeclLink.NextIsLatest() &&
   3820          "setPreviousDecl on a decl already in a redeclaration chain");
   3821 
   3822   if (PrevDecl) {
   3823     // Point to previous. Make sure that this is actually the most recent
   3824     // redeclaration, or we can build invalid chains. If the most recent
   3825     // redeclaration is invalid, it won't be PrevDecl, but we want it anyway.
   3826     First = PrevDecl->getFirstDecl();
   3827     assert(First->RedeclLink.NextIsLatest() && "Expected first");
   3828     decl_type *MostRecent = First->getNextRedeclaration();
   3829     RedeclLink = PreviousDeclLink(cast<decl_type>(MostRecent));
   3830 
   3831     // If the declaration was previously visible, a redeclaration of it remains
   3832     // visible even if it wouldn't be visible by itself.
   3833     static_cast<decl_type*>(this)->IdentifierNamespace |=
   3834       MostRecent->getIdentifierNamespace() &
   3835       (Decl::IDNS_Ordinary | Decl::IDNS_Tag | Decl::IDNS_Type);
   3836   } else {
   3837     // Make this first.
   3838     First = static_cast<decl_type*>(this);
   3839   }
   3840 
   3841   // First one will point to this one as latest.
   3842   First->RedeclLink.setLatest(static_cast<decl_type*>(this));
   3843 
   3844   assert(!isa<NamedDecl>(static_cast<decl_type*>(this)) ||
   3845          cast<NamedDecl>(static_cast<decl_type*>(this))->isLinkageValid());
   3846 }
   3847 
   3848 // Inline function definitions.
   3849 
   3850 /// \brief Check if the given decl is complete.
   3851 ///
   3852 /// We use this function to break a cycle between the inline definitions in
   3853 /// Type.h and Decl.h.
   3854 inline bool IsEnumDeclComplete(EnumDecl *ED) {
   3855   return ED->isComplete();
   3856 }
   3857 
   3858 /// \brief Check if the given decl is scoped.
   3859 ///
   3860 /// We use this function to break a cycle between the inline definitions in
   3861 /// Type.h and Decl.h.
   3862 inline bool IsEnumDeclScoped(EnumDecl *ED) {
   3863   return ED->isScoped();
   3864 }
   3865 
   3866 }  // end namespace clang
   3867 
   3868 #endif
   3869