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