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