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