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