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