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