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