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