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