1 //===--- Sema.h - Semantic Analysis & AST Building --------------*- 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 Sema class, which performs semantic analysis and 11 // builds ASTs. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_SEMA_SEMA_H 16 #define LLVM_CLANG_SEMA_SEMA_H 17 18 #include "clang/AST/Attr.h" 19 #include "clang/AST/DeclarationName.h" 20 #include "clang/AST/Expr.h" 21 #include "clang/AST/ExprObjC.h" 22 #include "clang/AST/ExternalASTSource.h" 23 #include "clang/AST/LocInfoType.h" 24 #include "clang/AST/MangleNumberingContext.h" 25 #include "clang/AST/NSAPI.h" 26 #include "clang/AST/PrettyPrinter.h" 27 #include "clang/AST/TypeLoc.h" 28 #include "clang/Basic/ExpressionTraits.h" 29 #include "clang/Basic/LangOptions.h" 30 #include "clang/Basic/Module.h" 31 #include "clang/Basic/OpenMPKinds.h" 32 #include "clang/Basic/PragmaKinds.h" 33 #include "clang/Basic/Specifiers.h" 34 #include "clang/Basic/TemplateKinds.h" 35 #include "clang/Basic/TypeTraits.h" 36 #include "clang/Sema/AnalysisBasedWarnings.h" 37 #include "clang/Sema/CleanupInfo.h" 38 #include "clang/Sema/DeclSpec.h" 39 #include "clang/Sema/ExternalSemaSource.h" 40 #include "clang/Sema/IdentifierResolver.h" 41 #include "clang/Sema/ObjCMethodList.h" 42 #include "clang/Sema/Ownership.h" 43 #include "clang/Sema/Scope.h" 44 #include "clang/Sema/ScopeInfo.h" 45 #include "clang/Sema/TypoCorrection.h" 46 #include "clang/Sema/Weak.h" 47 #include "llvm/ADT/ArrayRef.h" 48 #include "llvm/ADT/Optional.h" 49 #include "llvm/ADT/SetVector.h" 50 #include "llvm/ADT/SmallPtrSet.h" 51 #include "llvm/ADT/SmallVector.h" 52 #include "llvm/ADT/TinyPtrVector.h" 53 #include <deque> 54 #include <memory> 55 #include <string> 56 #include <vector> 57 58 namespace llvm { 59 class APSInt; 60 template <typename ValueT> struct DenseMapInfo; 61 template <typename ValueT, typename ValueInfoT> class DenseSet; 62 class SmallBitVector; 63 class InlineAsmIdentifierInfo; 64 } 65 66 namespace clang { 67 class ADLResult; 68 class ASTConsumer; 69 class ASTContext; 70 class ASTMutationListener; 71 class ASTReader; 72 class ASTWriter; 73 class ArrayType; 74 class AttributeList; 75 class BlockDecl; 76 class CapturedDecl; 77 class CXXBasePath; 78 class CXXBasePaths; 79 class CXXBindTemporaryExpr; 80 typedef SmallVector<CXXBaseSpecifier*, 4> CXXCastPath; 81 class CXXConstructorDecl; 82 class CXXConversionDecl; 83 class CXXDeleteExpr; 84 class CXXDestructorDecl; 85 class CXXFieldCollector; 86 class CXXMemberCallExpr; 87 class CXXMethodDecl; 88 class CXXScopeSpec; 89 class CXXTemporary; 90 class CXXTryStmt; 91 class CallExpr; 92 class ClassTemplateDecl; 93 class ClassTemplatePartialSpecializationDecl; 94 class ClassTemplateSpecializationDecl; 95 class VarTemplatePartialSpecializationDecl; 96 class CodeCompleteConsumer; 97 class CodeCompletionAllocator; 98 class CodeCompletionTUInfo; 99 class CodeCompletionResult; 100 class Decl; 101 class DeclAccessPair; 102 class DeclContext; 103 class DeclRefExpr; 104 class DeclaratorDecl; 105 class DeducedTemplateArgument; 106 class DependentDiagnostic; 107 class DesignatedInitExpr; 108 class Designation; 109 class EnableIfAttr; 110 class EnumConstantDecl; 111 class Expr; 112 class ExtVectorType; 113 class FormatAttr; 114 class FriendDecl; 115 class FunctionDecl; 116 class FunctionProtoType; 117 class FunctionTemplateDecl; 118 class ImplicitConversionSequence; 119 class InitListExpr; 120 class InitializationKind; 121 class InitializationSequence; 122 class InitializedEntity; 123 class IntegerLiteral; 124 class LabelStmt; 125 class LambdaExpr; 126 class LangOptions; 127 class LocalInstantiationScope; 128 class LookupResult; 129 class MacroInfo; 130 typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath; 131 class ModuleLoader; 132 class MultiLevelTemplateArgumentList; 133 class NamedDecl; 134 class ObjCCategoryDecl; 135 class ObjCCategoryImplDecl; 136 class ObjCCompatibleAliasDecl; 137 class ObjCContainerDecl; 138 class ObjCImplDecl; 139 class ObjCImplementationDecl; 140 class ObjCInterfaceDecl; 141 class ObjCIvarDecl; 142 template <class T> class ObjCList; 143 class ObjCMessageExpr; 144 class ObjCMethodDecl; 145 class ObjCPropertyDecl; 146 class ObjCProtocolDecl; 147 class OMPThreadPrivateDecl; 148 class OMPDeclareReductionDecl; 149 class OMPDeclareSimdDecl; 150 class OMPClause; 151 struct OverloadCandidate; 152 class OverloadCandidateSet; 153 class OverloadExpr; 154 class ParenListExpr; 155 class ParmVarDecl; 156 class Preprocessor; 157 class PseudoDestructorTypeStorage; 158 class PseudoObjectExpr; 159 class QualType; 160 class StandardConversionSequence; 161 class Stmt; 162 class StringLiteral; 163 class SwitchStmt; 164 class TemplateArgument; 165 class TemplateArgumentList; 166 class TemplateArgumentLoc; 167 class TemplateDecl; 168 class TemplateParameterList; 169 class TemplatePartialOrderingContext; 170 class TemplateTemplateParmDecl; 171 class Token; 172 class TypeAliasDecl; 173 class TypedefDecl; 174 class TypedefNameDecl; 175 class TypeLoc; 176 class TypoCorrectionConsumer; 177 class UnqualifiedId; 178 class UnresolvedLookupExpr; 179 class UnresolvedMemberExpr; 180 class UnresolvedSetImpl; 181 class UnresolvedSetIterator; 182 class UsingDecl; 183 class UsingShadowDecl; 184 class ValueDecl; 185 class VarDecl; 186 class VarTemplateSpecializationDecl; 187 class VisibilityAttr; 188 class VisibleDeclConsumer; 189 class IndirectFieldDecl; 190 struct DeductionFailureInfo; 191 class TemplateSpecCandidateSet; 192 193 namespace sema { 194 class AccessedEntity; 195 class BlockScopeInfo; 196 class CapturedRegionScopeInfo; 197 class CapturingScopeInfo; 198 class CompoundScopeInfo; 199 class DelayedDiagnostic; 200 class DelayedDiagnosticPool; 201 class FunctionScopeInfo; 202 class LambdaScopeInfo; 203 class PossiblyUnreachableDiag; 204 class TemplateDeductionInfo; 205 } 206 207 namespace threadSafety { 208 class BeforeSet; 209 void threadSafetyCleanup(BeforeSet* Cache); 210 } 211 212 // FIXME: No way to easily map from TemplateTypeParmTypes to 213 // TemplateTypeParmDecls, so we have this horrible PointerUnion. 214 typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType*, NamedDecl*>, 215 SourceLocation> UnexpandedParameterPack; 216 217 /// Describes whether we've seen any nullability information for the given 218 /// file. 219 struct FileNullability { 220 /// The first pointer declarator (of any pointer kind) in the file that does 221 /// not have a corresponding nullability annotation. 222 SourceLocation PointerLoc; 223 224 /// Which kind of pointer declarator we saw. 225 uint8_t PointerKind; 226 227 /// Whether we saw any type nullability annotations in the given file. 228 bool SawTypeNullability = false; 229 }; 230 231 /// A mapping from file IDs to a record of whether we've seen nullability 232 /// information in that file. 233 class FileNullabilityMap { 234 /// A mapping from file IDs to the nullability information for each file ID. 235 llvm::DenseMap<FileID, FileNullability> Map; 236 237 /// A single-element cache based on the file ID. 238 struct { 239 FileID File; 240 FileNullability Nullability; 241 } Cache; 242 243 public: 244 FileNullability &operator[](FileID file) { 245 // Check the single-element cache. 246 if (file == Cache.File) 247 return Cache.Nullability; 248 249 // It's not in the single-element cache; flush the cache if we have one. 250 if (!Cache.File.isInvalid()) { 251 Map[Cache.File] = Cache.Nullability; 252 } 253 254 // Pull this entry into the cache. 255 Cache.File = file; 256 Cache.Nullability = Map[file]; 257 return Cache.Nullability; 258 } 259 }; 260 261 /// Sema - This implements semantic analysis and AST building for C. 262 class Sema { 263 Sema(const Sema &) = delete; 264 void operator=(const Sema &) = delete; 265 266 ///\brief Source of additional semantic information. 267 ExternalSemaSource *ExternalSource; 268 269 ///\brief Whether Sema has generated a multiplexer and has to delete it. 270 bool isMultiplexExternalSource; 271 272 static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD); 273 274 bool isVisibleSlow(const NamedDecl *D); 275 shouldLinkPossiblyHiddenDecl(const NamedDecl * Old,const NamedDecl * New)276 bool shouldLinkPossiblyHiddenDecl(const NamedDecl *Old, 277 const NamedDecl *New) { 278 // We are about to link these. It is now safe to compute the linkage of 279 // the new decl. If the new decl has external linkage, we will 280 // link it with the hidden decl (which also has external linkage) and 281 // it will keep having external linkage. If it has internal linkage, we 282 // will not link it. Since it has no previous decls, it will remain 283 // with internal linkage. 284 return isVisible(Old) || New->isExternallyVisible(); 285 } 286 bool shouldLinkPossiblyHiddenDecl(LookupResult &Old, const NamedDecl *New); 287 288 public: 289 typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy; 290 typedef OpaquePtr<TemplateName> TemplateTy; 291 typedef OpaquePtr<QualType> TypeTy; 292 293 OpenCLOptions OpenCLFeatures; 294 FPOptions FPFeatures; 295 296 const LangOptions &LangOpts; 297 Preprocessor &PP; 298 ASTContext &Context; 299 ASTConsumer &Consumer; 300 DiagnosticsEngine &Diags; 301 SourceManager &SourceMgr; 302 303 /// \brief Flag indicating whether or not to collect detailed statistics. 304 bool CollectStats; 305 306 /// \brief Code-completion consumer. 307 CodeCompleteConsumer *CodeCompleter; 308 309 /// CurContext - This is the current declaration context of parsing. 310 DeclContext *CurContext; 311 312 /// \brief Generally null except when we temporarily switch decl contexts, 313 /// like in \see ActOnObjCTemporaryExitContainerContext. 314 DeclContext *OriginalLexicalContext; 315 316 /// VAListTagName - The declaration name corresponding to __va_list_tag. 317 /// This is used as part of a hack to omit that class from ADL results. 318 DeclarationName VAListTagName; 319 320 bool MSStructPragmaOn; // True when \#pragma ms_struct on 321 322 /// \brief Controls member pointer representation format under the MS ABI. 323 LangOptions::PragmaMSPointersToMembersKind 324 MSPointerToMemberRepresentationMethod; 325 326 /// Stack of active SEH __finally scopes. Can be empty. 327 SmallVector<Scope*, 2> CurrentSEHFinally; 328 329 /// \brief Source location for newly created implicit MSInheritanceAttrs 330 SourceLocation ImplicitMSInheritanceAttrLoc; 331 332 enum PragmaMsStackAction { 333 PSK_Reset = 0x0, // #pragma () 334 PSK_Set = 0x1, // #pragma (value) 335 PSK_Push = 0x2, // #pragma (push[, id]) 336 PSK_Pop = 0x4, // #pragma (pop[, id]) 337 PSK_Show = 0x8, // #pragma (show) -- only for "pack"! 338 PSK_Push_Set = PSK_Push | PSK_Set, // #pragma (push[, id], value) 339 PSK_Pop_Set = PSK_Pop | PSK_Set, // #pragma (pop[, id], value) 340 }; 341 342 template<typename ValueType> 343 struct PragmaStack { 344 struct Slot { 345 llvm::StringRef StackSlotLabel; 346 ValueType Value; 347 SourceLocation PragmaLocation; SlotPragmaStack::Slot348 Slot(llvm::StringRef StackSlotLabel, 349 ValueType Value, 350 SourceLocation PragmaLocation) 351 : StackSlotLabel(StackSlotLabel), Value(Value), 352 PragmaLocation(PragmaLocation) {} 353 }; 354 void Act(SourceLocation PragmaLocation, 355 PragmaMsStackAction Action, 356 llvm::StringRef StackSlotLabel, 357 ValueType Value); 358 359 // MSVC seems to add artificial slots to #pragma stacks on entering a C++ 360 // method body to restore the stacks on exit, so it works like this: 361 // 362 // struct S { 363 // #pragma <name>(push, InternalPragmaSlot, <current_pragma_value>) 364 // void Method {} 365 // #pragma <name>(pop, InternalPragmaSlot) 366 // }; 367 // 368 // It works even with #pragma vtordisp, although MSVC doesn't support 369 // #pragma vtordisp(push [, id], n) 370 // syntax. 371 // 372 // Push / pop a named sentinel slot. SentinelActionPragmaStack373 void SentinelAction(PragmaMsStackAction Action, StringRef Label) { 374 assert((Action == PSK_Push || Action == PSK_Pop) && 375 "Can only push / pop #pragma stack sentinels!"); 376 Act(CurrentPragmaLocation, Action, Label, CurrentValue); 377 } 378 379 // Constructors. PragmaStackPragmaStack380 explicit PragmaStack(const ValueType &Default) 381 : DefaultValue(Default), CurrentValue(Default) {} 382 383 SmallVector<Slot, 2> Stack; 384 ValueType DefaultValue; // Value used for PSK_Reset action. 385 ValueType CurrentValue; 386 SourceLocation CurrentPragmaLocation; 387 }; 388 // FIXME: We should serialize / deserialize these if they occur in a PCH (but 389 // we shouldn't do so if they're in a module). 390 391 /// \brief Whether to insert vtordisps prior to virtual bases in the Microsoft 392 /// C++ ABI. Possible values are 0, 1, and 2, which mean: 393 /// 394 /// 0: Suppress all vtordisps 395 /// 1: Insert vtordisps in the presence of vbase overrides and non-trivial 396 /// structors 397 /// 2: Always insert vtordisps to support RTTI on partially constructed 398 /// objects 399 PragmaStack<MSVtorDispAttr::Mode> VtorDispStack; 400 // #pragma pack. 401 // Sentinel to represent when the stack is set to mac68k alignment. 402 static const unsigned kMac68kAlignmentSentinel = ~0U; 403 PragmaStack<unsigned> PackStack; 404 // Segment #pragmas. 405 PragmaStack<StringLiteral *> DataSegStack; 406 PragmaStack<StringLiteral *> BSSSegStack; 407 PragmaStack<StringLiteral *> ConstSegStack; 408 PragmaStack<StringLiteral *> CodeSegStack; 409 410 // RAII object to push / pop sentinel slots for all MS #pragma stacks. 411 // Actions should be performed only if we enter / exit a C++ method body. 412 class PragmaStackSentinelRAII { 413 public: 414 PragmaStackSentinelRAII(Sema &S, StringRef SlotLabel, bool ShouldAct); 415 ~PragmaStackSentinelRAII(); 416 417 private: 418 Sema &S; 419 StringRef SlotLabel; 420 bool ShouldAct; 421 }; 422 423 /// A mapping that describes the nullability we've seen in each header file. 424 FileNullabilityMap NullabilityMap; 425 426 /// Last section used with #pragma init_seg. 427 StringLiteral *CurInitSeg; 428 SourceLocation CurInitSegLoc; 429 430 /// VisContext - Manages the stack for \#pragma GCC visibility. 431 void *VisContext; // Really a "PragmaVisStack*" 432 433 /// \brief This represents the last location of a "#pragma clang optimize off" 434 /// directive if such a directive has not been closed by an "on" yet. If 435 /// optimizations are currently "on", this is set to an invalid location. 436 SourceLocation OptimizeOffPragmaLocation; 437 438 /// \brief Flag indicating if Sema is building a recovery call expression. 439 /// 440 /// This flag is used to avoid building recovery call expressions 441 /// if Sema is already doing so, which would cause infinite recursions. 442 bool IsBuildingRecoveryCallExpr; 443 444 /// Used to control the generation of ExprWithCleanups. 445 CleanupInfo Cleanup; 446 447 /// ExprCleanupObjects - This is the stack of objects requiring 448 /// cleanup that are created by the current full expression. The 449 /// element type here is ExprWithCleanups::Object. 450 SmallVector<BlockDecl*, 8> ExprCleanupObjects; 451 452 /// \brief Store a list of either DeclRefExprs or MemberExprs 453 /// that contain a reference to a variable (constant) that may or may not 454 /// be odr-used in this Expr, and we won't know until all lvalue-to-rvalue 455 /// and discarded value conversions have been applied to all subexpressions 456 /// of the enclosing full expression. This is cleared at the end of each 457 /// full expression. 458 llvm::SmallPtrSet<Expr*, 2> MaybeODRUseExprs; 459 460 /// \brief Stack containing information about each of the nested 461 /// function, block, and method scopes that are currently active. 462 /// 463 /// This array is never empty. Clients should ignore the first 464 /// element, which is used to cache a single FunctionScopeInfo 465 /// that's used to parse every top-level function. 466 SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes; 467 468 typedef LazyVector<TypedefNameDecl *, ExternalSemaSource, 469 &ExternalSemaSource::ReadExtVectorDecls, 2, 2> 470 ExtVectorDeclsType; 471 472 /// ExtVectorDecls - This is a list all the extended vector types. This allows 473 /// us to associate a raw vector type with one of the ext_vector type names. 474 /// This is only necessary for issuing pretty diagnostics. 475 ExtVectorDeclsType ExtVectorDecls; 476 477 /// FieldCollector - Collects CXXFieldDecls during parsing of C++ classes. 478 std::unique_ptr<CXXFieldCollector> FieldCollector; 479 480 typedef llvm::SmallSetVector<const NamedDecl*, 16> NamedDeclSetType; 481 482 /// \brief Set containing all declared private fields that are not used. 483 NamedDeclSetType UnusedPrivateFields; 484 485 /// \brief Set containing all typedefs that are likely unused. 486 llvm::SmallSetVector<const TypedefNameDecl *, 4> 487 UnusedLocalTypedefNameCandidates; 488 489 /// \brief Delete-expressions to be analyzed at the end of translation unit 490 /// 491 /// This list contains class members, and locations of delete-expressions 492 /// that could not be proven as to whether they mismatch with new-expression 493 /// used in initializer of the field. 494 typedef std::pair<SourceLocation, bool> DeleteExprLoc; 495 typedef llvm::SmallVector<DeleteExprLoc, 4> DeleteLocs; 496 llvm::MapVector<FieldDecl *, DeleteLocs> DeleteExprs; 497 498 typedef llvm::SmallPtrSet<const CXXRecordDecl*, 8> RecordDeclSetTy; 499 500 /// PureVirtualClassDiagSet - a set of class declarations which we have 501 /// emitted a list of pure virtual functions. Used to prevent emitting the 502 /// same list more than once. 503 std::unique_ptr<RecordDeclSetTy> PureVirtualClassDiagSet; 504 505 /// ParsingInitForAutoVars - a set of declarations with auto types for which 506 /// we are currently parsing the initializer. 507 llvm::SmallPtrSet<const Decl*, 4> ParsingInitForAutoVars; 508 509 /// \brief Look for a locally scoped extern "C" declaration by the given name. 510 NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name); 511 512 typedef LazyVector<VarDecl *, ExternalSemaSource, 513 &ExternalSemaSource::ReadTentativeDefinitions, 2, 2> 514 TentativeDefinitionsType; 515 516 /// \brief All the tentative definitions encountered in the TU. 517 TentativeDefinitionsType TentativeDefinitions; 518 519 typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource, 520 &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2> 521 UnusedFileScopedDeclsType; 522 523 /// \brief The set of file scoped decls seen so far that have not been used 524 /// and must warn if not used. Only contains the first declaration. 525 UnusedFileScopedDeclsType UnusedFileScopedDecls; 526 527 typedef LazyVector<CXXConstructorDecl *, ExternalSemaSource, 528 &ExternalSemaSource::ReadDelegatingConstructors, 2, 2> 529 DelegatingCtorDeclsType; 530 531 /// \brief All the delegating constructors seen so far in the file, used for 532 /// cycle detection at the end of the TU. 533 DelegatingCtorDeclsType DelegatingCtorDecls; 534 535 /// \brief All the overriding functions seen during a class definition 536 /// that had their exception spec checks delayed, plus the overridden 537 /// function. 538 SmallVector<std::pair<const CXXMethodDecl*, const CXXMethodDecl*>, 2> 539 DelayedExceptionSpecChecks; 540 541 /// \brief All the members seen during a class definition which were both 542 /// explicitly defaulted and had explicitly-specified exception 543 /// specifications, along with the function type containing their 544 /// user-specified exception specification. Those exception specifications 545 /// were overridden with the default specifications, but we still need to 546 /// check whether they are compatible with the default specification, and 547 /// we can't do that until the nesting set of class definitions is complete. 548 SmallVector<std::pair<CXXMethodDecl*, const FunctionProtoType*>, 2> 549 DelayedDefaultedMemberExceptionSpecs; 550 551 typedef llvm::MapVector<const FunctionDecl *, LateParsedTemplate *> 552 LateParsedTemplateMapT; 553 LateParsedTemplateMapT LateParsedTemplateMap; 554 555 /// \brief Callback to the parser to parse templated functions when needed. 556 typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT); 557 typedef void LateTemplateParserCleanupCB(void *P); 558 LateTemplateParserCB *LateTemplateParser; 559 LateTemplateParserCleanupCB *LateTemplateParserCleanup; 560 void *OpaqueParser; 561 SetLateTemplateParser(LateTemplateParserCB * LTP,LateTemplateParserCleanupCB * LTPCleanup,void * P)562 void SetLateTemplateParser(LateTemplateParserCB *LTP, 563 LateTemplateParserCleanupCB *LTPCleanup, 564 void *P) { 565 LateTemplateParser = LTP; 566 LateTemplateParserCleanup = LTPCleanup; 567 OpaqueParser = P; 568 } 569 570 class DelayedDiagnostics; 571 572 class DelayedDiagnosticsState { 573 sema::DelayedDiagnosticPool *SavedPool; 574 friend class Sema::DelayedDiagnostics; 575 }; 576 typedef DelayedDiagnosticsState ParsingDeclState; 577 typedef DelayedDiagnosticsState ProcessingContextState; 578 579 /// A class which encapsulates the logic for delaying diagnostics 580 /// during parsing and other processing. 581 class DelayedDiagnostics { 582 /// \brief The current pool of diagnostics into which delayed 583 /// diagnostics should go. 584 sema::DelayedDiagnosticPool *CurPool; 585 586 public: DelayedDiagnostics()587 DelayedDiagnostics() : CurPool(nullptr) {} 588 589 /// Adds a delayed diagnostic. 590 void add(const sema::DelayedDiagnostic &diag); // in DelayedDiagnostic.h 591 592 /// Determines whether diagnostics should be delayed. shouldDelayDiagnostics()593 bool shouldDelayDiagnostics() { return CurPool != nullptr; } 594 595 /// Returns the current delayed-diagnostics pool. getCurrentPool()596 sema::DelayedDiagnosticPool *getCurrentPool() const { 597 return CurPool; 598 } 599 600 /// Enter a new scope. Access and deprecation diagnostics will be 601 /// collected in this pool. push(sema::DelayedDiagnosticPool & pool)602 DelayedDiagnosticsState push(sema::DelayedDiagnosticPool &pool) { 603 DelayedDiagnosticsState state; 604 state.SavedPool = CurPool; 605 CurPool = &pool; 606 return state; 607 } 608 609 /// Leave a delayed-diagnostic state that was previously pushed. 610 /// Do not emit any of the diagnostics. This is performed as part 611 /// of the bookkeeping of popping a pool "properly". popWithoutEmitting(DelayedDiagnosticsState state)612 void popWithoutEmitting(DelayedDiagnosticsState state) { 613 CurPool = state.SavedPool; 614 } 615 616 /// Enter a new scope where access and deprecation diagnostics are 617 /// not delayed. pushUndelayed()618 DelayedDiagnosticsState pushUndelayed() { 619 DelayedDiagnosticsState state; 620 state.SavedPool = CurPool; 621 CurPool = nullptr; 622 return state; 623 } 624 625 /// Undo a previous pushUndelayed(). popUndelayed(DelayedDiagnosticsState state)626 void popUndelayed(DelayedDiagnosticsState state) { 627 assert(CurPool == nullptr); 628 CurPool = state.SavedPool; 629 } 630 } DelayedDiagnostics; 631 632 /// A RAII object to temporarily push a declaration context. 633 class ContextRAII { 634 private: 635 Sema &S; 636 DeclContext *SavedContext; 637 ProcessingContextState SavedContextState; 638 QualType SavedCXXThisTypeOverride; 639 640 public: 641 ContextRAII(Sema &S, DeclContext *ContextToPush, bool NewThisContext = true) S(S)642 : S(S), SavedContext(S.CurContext), 643 SavedContextState(S.DelayedDiagnostics.pushUndelayed()), 644 SavedCXXThisTypeOverride(S.CXXThisTypeOverride) 645 { 646 assert(ContextToPush && "pushing null context"); 647 S.CurContext = ContextToPush; 648 if (NewThisContext) 649 S.CXXThisTypeOverride = QualType(); 650 } 651 pop()652 void pop() { 653 if (!SavedContext) return; 654 S.CurContext = SavedContext; 655 S.DelayedDiagnostics.popUndelayed(SavedContextState); 656 S.CXXThisTypeOverride = SavedCXXThisTypeOverride; 657 SavedContext = nullptr; 658 } 659 ~ContextRAII()660 ~ContextRAII() { 661 pop(); 662 } 663 }; 664 665 /// \brief RAII object to handle the state changes required to synthesize 666 /// a function body. 667 class SynthesizedFunctionScope { 668 Sema &S; 669 Sema::ContextRAII SavedContext; 670 671 public: SynthesizedFunctionScope(Sema & S,DeclContext * DC)672 SynthesizedFunctionScope(Sema &S, DeclContext *DC) 673 : S(S), SavedContext(S, DC) 674 { 675 S.PushFunctionScope(); 676 S.PushExpressionEvaluationContext(Sema::PotentiallyEvaluated); 677 } 678 ~SynthesizedFunctionScope()679 ~SynthesizedFunctionScope() { 680 S.PopExpressionEvaluationContext(); 681 S.PopFunctionScopeInfo(); 682 } 683 }; 684 685 /// WeakUndeclaredIdentifiers - Identifiers contained in 686 /// \#pragma weak before declared. rare. may alias another 687 /// identifier, declared or undeclared 688 llvm::MapVector<IdentifierInfo *, WeakInfo> WeakUndeclaredIdentifiers; 689 690 /// ExtnameUndeclaredIdentifiers - Identifiers contained in 691 /// \#pragma redefine_extname before declared. Used in Solaris system headers 692 /// to define functions that occur in multiple standards to call the version 693 /// in the currently selected standard. 694 llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*> ExtnameUndeclaredIdentifiers; 695 696 697 /// \brief Load weak undeclared identifiers from the external source. 698 void LoadExternalWeakUndeclaredIdentifiers(); 699 700 /// WeakTopLevelDecl - Translation-unit scoped declarations generated by 701 /// \#pragma weak during processing of other Decls. 702 /// I couldn't figure out a clean way to generate these in-line, so 703 /// we store them here and handle separately -- which is a hack. 704 /// It would be best to refactor this. 705 SmallVector<Decl*,2> WeakTopLevelDecl; 706 707 IdentifierResolver IdResolver; 708 709 /// Translation Unit Scope - useful to Objective-C actions that need 710 /// to lookup file scope declarations in the "ordinary" C decl namespace. 711 /// For example, user-defined classes, built-in "id" type, etc. 712 Scope *TUScope; 713 714 /// \brief The C++ "std" namespace, where the standard library resides. 715 LazyDeclPtr StdNamespace; 716 717 /// \brief The C++ "std::bad_alloc" class, which is defined by the C++ 718 /// standard library. 719 LazyDeclPtr StdBadAlloc; 720 721 /// \brief The C++ "std::initializer_list" template, which is defined in 722 /// \<initializer_list>. 723 ClassTemplateDecl *StdInitializerList; 724 725 /// \brief The C++ "type_info" declaration, which is defined in \<typeinfo>. 726 RecordDecl *CXXTypeInfoDecl; 727 728 /// \brief The MSVC "_GUID" struct, which is defined in MSVC header files. 729 RecordDecl *MSVCGuidDecl; 730 731 /// \brief Caches identifiers/selectors for NSFoundation APIs. 732 std::unique_ptr<NSAPI> NSAPIObj; 733 734 /// \brief The declaration of the Objective-C NSNumber class. 735 ObjCInterfaceDecl *NSNumberDecl; 736 737 /// \brief The declaration of the Objective-C NSValue class. 738 ObjCInterfaceDecl *NSValueDecl; 739 740 /// \brief Pointer to NSNumber type (NSNumber *). 741 QualType NSNumberPointer; 742 743 /// \brief Pointer to NSValue type (NSValue *). 744 QualType NSValuePointer; 745 746 /// \brief The Objective-C NSNumber methods used to create NSNumber literals. 747 ObjCMethodDecl *NSNumberLiteralMethods[NSAPI::NumNSNumberLiteralMethods]; 748 749 /// \brief The declaration of the Objective-C NSString class. 750 ObjCInterfaceDecl *NSStringDecl; 751 752 /// \brief Pointer to NSString type (NSString *). 753 QualType NSStringPointer; 754 755 /// \brief The declaration of the stringWithUTF8String: method. 756 ObjCMethodDecl *StringWithUTF8StringMethod; 757 758 /// \brief The declaration of the valueWithBytes:objCType: method. 759 ObjCMethodDecl *ValueWithBytesObjCTypeMethod; 760 761 /// \brief The declaration of the Objective-C NSArray class. 762 ObjCInterfaceDecl *NSArrayDecl; 763 764 /// \brief The declaration of the arrayWithObjects:count: method. 765 ObjCMethodDecl *ArrayWithObjectsMethod; 766 767 /// \brief The declaration of the Objective-C NSDictionary class. 768 ObjCInterfaceDecl *NSDictionaryDecl; 769 770 /// \brief The declaration of the dictionaryWithObjects:forKeys:count: method. 771 ObjCMethodDecl *DictionaryWithObjectsMethod; 772 773 /// \brief id<NSCopying> type. 774 QualType QIDNSCopying; 775 776 /// \brief will hold 'respondsToSelector:' 777 Selector RespondsToSelectorSel; 778 779 /// \brief counter for internal MS Asm label names. 780 unsigned MSAsmLabelNameCounter; 781 782 /// A flag to remember whether the implicit forms of operator new and delete 783 /// have been declared. 784 bool GlobalNewDeleteDeclared; 785 786 /// A flag to indicate that we're in a context that permits abstract 787 /// references to fields. This is really a 788 bool AllowAbstractFieldReference; 789 790 /// \brief Describes how the expressions currently being parsed are 791 /// evaluated at run-time, if at all. 792 enum ExpressionEvaluationContext { 793 /// \brief The current expression and its subexpressions occur within an 794 /// unevaluated operand (C++11 [expr]p7), such as the subexpression of 795 /// \c sizeof, where the type of the expression may be significant but 796 /// no code will be generated to evaluate the value of the expression at 797 /// run time. 798 Unevaluated, 799 800 /// \brief The current expression occurs within a discarded statement. 801 /// This behaves largely similarly to an unevaluated operand in preventing 802 /// definitions from being required, but not in other ways. 803 DiscardedStatement, 804 805 /// \brief The current expression occurs within an unevaluated 806 /// operand that unconditionally permits abstract references to 807 /// fields, such as a SIZE operator in MS-style inline assembly. 808 UnevaluatedAbstract, 809 810 /// \brief The current context is "potentially evaluated" in C++11 terms, 811 /// but the expression is evaluated at compile-time (like the values of 812 /// cases in a switch statement). 813 ConstantEvaluated, 814 815 /// \brief The current expression is potentially evaluated at run time, 816 /// which means that code may be generated to evaluate the value of the 817 /// expression at run time. 818 PotentiallyEvaluated, 819 820 /// \brief The current expression is potentially evaluated, but any 821 /// declarations referenced inside that expression are only used if 822 /// in fact the current expression is used. 823 /// 824 /// This value is used when parsing default function arguments, for which 825 /// we would like to provide diagnostics (e.g., passing non-POD arguments 826 /// through varargs) but do not want to mark declarations as "referenced" 827 /// until the default argument is used. 828 PotentiallyEvaluatedIfUsed 829 }; 830 831 /// \brief Data structure used to record current or nested 832 /// expression evaluation contexts. 833 struct ExpressionEvaluationContextRecord { 834 /// \brief The expression evaluation context. 835 ExpressionEvaluationContext Context; 836 837 /// \brief Whether the enclosing context needed a cleanup. 838 CleanupInfo ParentCleanup; 839 840 /// \brief Whether we are in a decltype expression. 841 bool IsDecltype; 842 843 /// \brief The number of active cleanup objects when we entered 844 /// this expression evaluation context. 845 unsigned NumCleanupObjects; 846 847 /// \brief The number of typos encountered during this expression evaluation 848 /// context (i.e. the number of TypoExprs created). 849 unsigned NumTypos; 850 851 llvm::SmallPtrSet<Expr*, 2> SavedMaybeODRUseExprs; 852 853 /// \brief The lambdas that are present within this context, if it 854 /// is indeed an unevaluated context. 855 SmallVector<LambdaExpr *, 2> Lambdas; 856 857 /// \brief The declaration that provides context for lambda expressions 858 /// and block literals if the normal declaration context does not 859 /// suffice, e.g., in a default function argument. 860 Decl *ManglingContextDecl; 861 862 /// \brief The context information used to mangle lambda expressions 863 /// and block literals within this context. 864 /// 865 /// This mangling information is allocated lazily, since most contexts 866 /// do not have lambda expressions or block literals. 867 IntrusiveRefCntPtr<MangleNumberingContext> MangleNumbering; 868 869 /// \brief If we are processing a decltype type, a set of call expressions 870 /// for which we have deferred checking the completeness of the return type. 871 SmallVector<CallExpr *, 8> DelayedDecltypeCalls; 872 873 /// \brief If we are processing a decltype type, a set of temporary binding 874 /// expressions for which we have deferred checking the destructor. 875 SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds; 876 ExpressionEvaluationContextRecordExpressionEvaluationContextRecord877 ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context, 878 unsigned NumCleanupObjects, 879 CleanupInfo ParentCleanup, 880 Decl *ManglingContextDecl, 881 bool IsDecltype) 882 : Context(Context), ParentCleanup(ParentCleanup), 883 IsDecltype(IsDecltype), NumCleanupObjects(NumCleanupObjects), 884 NumTypos(0), 885 ManglingContextDecl(ManglingContextDecl), MangleNumbering() { } 886 887 /// \brief Retrieve the mangling numbering context, used to consistently 888 /// number constructs like lambdas for mangling. 889 MangleNumberingContext &getMangleNumberingContext(ASTContext &Ctx); 890 isUnevaluatedExpressionEvaluationContextRecord891 bool isUnevaluated() const { 892 return Context == Unevaluated || Context == UnevaluatedAbstract; 893 } 894 }; 895 896 /// A stack of expression evaluation contexts. 897 SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts; 898 899 /// \brief Compute the mangling number context for a lambda expression or 900 /// block literal. 901 /// 902 /// \param DC - The DeclContext containing the lambda expression or 903 /// block literal. 904 /// \param[out] ManglingContextDecl - Returns the ManglingContextDecl 905 /// associated with the context, if relevant. 906 MangleNumberingContext *getCurrentMangleNumberContext( 907 const DeclContext *DC, 908 Decl *&ManglingContextDecl); 909 910 911 /// SpecialMemberOverloadResult - The overloading result for a special member 912 /// function. 913 /// 914 /// This is basically a wrapper around PointerIntPair. The lowest bits of the 915 /// integer are used to determine whether overload resolution succeeded. 916 class SpecialMemberOverloadResult : public llvm::FastFoldingSetNode { 917 public: 918 enum Kind { 919 NoMemberOrDeleted, 920 Ambiguous, 921 Success 922 }; 923 924 private: 925 llvm::PointerIntPair<CXXMethodDecl*, 2> Pair; 926 927 public: SpecialMemberOverloadResult(const llvm::FoldingSetNodeID & ID)928 SpecialMemberOverloadResult(const llvm::FoldingSetNodeID &ID) 929 : FastFoldingSetNode(ID) 930 {} 931 getMethod()932 CXXMethodDecl *getMethod() const { return Pair.getPointer(); } setMethod(CXXMethodDecl * MD)933 void setMethod(CXXMethodDecl *MD) { Pair.setPointer(MD); } 934 getKind()935 Kind getKind() const { return static_cast<Kind>(Pair.getInt()); } setKind(Kind K)936 void setKind(Kind K) { Pair.setInt(K); } 937 }; 938 939 /// \brief A cache of special member function overload resolution results 940 /// for C++ records. 941 llvm::FoldingSet<SpecialMemberOverloadResult> SpecialMemberCache; 942 943 /// \brief A cache of the flags available in enumerations with the flag_bits 944 /// attribute. 945 mutable llvm::DenseMap<const EnumDecl*, llvm::APInt> FlagBitsCache; 946 947 /// \brief The kind of translation unit we are processing. 948 /// 949 /// When we're processing a complete translation unit, Sema will perform 950 /// end-of-translation-unit semantic tasks (such as creating 951 /// initializers for tentative definitions in C) once parsing has 952 /// completed. Modules and precompiled headers perform different kinds of 953 /// checks. 954 TranslationUnitKind TUKind; 955 956 llvm::BumpPtrAllocator BumpAlloc; 957 958 /// \brief The number of SFINAE diagnostics that have been trapped. 959 unsigned NumSFINAEErrors; 960 961 typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>> 962 UnparsedDefaultArgInstantiationsMap; 963 964 /// \brief A mapping from parameters with unparsed default arguments to the 965 /// set of instantiations of each parameter. 966 /// 967 /// This mapping is a temporary data structure used when parsing 968 /// nested class templates or nested classes of class templates, 969 /// where we might end up instantiating an inner class before the 970 /// default arguments of its methods have been parsed. 971 UnparsedDefaultArgInstantiationsMap UnparsedDefaultArgInstantiations; 972 973 // Contains the locations of the beginning of unparsed default 974 // argument locations. 975 llvm::DenseMap<ParmVarDecl *, SourceLocation> UnparsedDefaultArgLocs; 976 977 /// UndefinedInternals - all the used, undefined objects which require a 978 /// definition in this translation unit. 979 llvm::MapVector<NamedDecl *, SourceLocation> UndefinedButUsed; 980 981 /// Obtain a sorted list of functions that are undefined but ODR-used. 982 void getUndefinedButUsed( 983 SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined); 984 985 /// Retrieves list of suspicious delete-expressions that will be checked at 986 /// the end of translation unit. 987 const llvm::MapVector<FieldDecl *, DeleteLocs> & 988 getMismatchingDeleteExpressions() const; 989 990 typedef std::pair<ObjCMethodList, ObjCMethodList> GlobalMethods; 991 typedef llvm::DenseMap<Selector, GlobalMethods> GlobalMethodPool; 992 993 /// Method Pool - allows efficient lookup when typechecking messages to "id". 994 /// We need to maintain a list, since selectors can have differing signatures 995 /// across classes. In Cocoa, this happens to be extremely uncommon (only 1% 996 /// of selectors are "overloaded"). 997 /// At the head of the list it is recorded whether there were 0, 1, or >= 2 998 /// methods inside categories with a particular selector. 999 GlobalMethodPool MethodPool; 1000 1001 /// Method selectors used in a \@selector expression. Used for implementation 1002 /// of -Wselector. 1003 llvm::MapVector<Selector, SourceLocation> ReferencedSelectors; 1004 1005 /// Kinds of C++ special members. 1006 enum CXXSpecialMember { 1007 CXXDefaultConstructor, 1008 CXXCopyConstructor, 1009 CXXMoveConstructor, 1010 CXXCopyAssignment, 1011 CXXMoveAssignment, 1012 CXXDestructor, 1013 CXXInvalid 1014 }; 1015 1016 typedef std::pair<CXXRecordDecl*, CXXSpecialMember> SpecialMemberDecl; 1017 1018 /// The C++ special members which we are currently in the process of 1019 /// declaring. If this process recursively triggers the declaration of the 1020 /// same special member, we should act as if it is not yet declared. 1021 llvm::SmallSet<SpecialMemberDecl, 4> SpecialMembersBeingDeclared; 1022 1023 void ReadMethodPool(Selector Sel); 1024 void updateOutOfDateSelector(Selector Sel); 1025 1026 /// Private Helper predicate to check for 'self'. 1027 bool isSelfExpr(Expr *RExpr); 1028 bool isSelfExpr(Expr *RExpr, const ObjCMethodDecl *Method); 1029 1030 /// \brief Cause the active diagnostic on the DiagosticsEngine to be 1031 /// emitted. This is closely coupled to the SemaDiagnosticBuilder class and 1032 /// should not be used elsewhere. 1033 void EmitCurrentDiagnostic(unsigned DiagID); 1034 1035 /// Records and restores the FP_CONTRACT state on entry/exit of compound 1036 /// statements. 1037 class FPContractStateRAII { 1038 public: FPContractStateRAII(Sema & S)1039 FPContractStateRAII(Sema& S) 1040 : S(S), OldFPContractState(S.FPFeatures.fp_contract) {} ~FPContractStateRAII()1041 ~FPContractStateRAII() { 1042 S.FPFeatures.fp_contract = OldFPContractState; 1043 } 1044 private: 1045 Sema& S; 1046 bool OldFPContractState : 1; 1047 }; 1048 1049 void addImplicitTypedef(StringRef Name, QualType T); 1050 1051 public: 1052 Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, 1053 TranslationUnitKind TUKind = TU_Complete, 1054 CodeCompleteConsumer *CompletionConsumer = nullptr); 1055 ~Sema(); 1056 1057 /// \brief Perform initialization that occurs after the parser has been 1058 /// initialized but before it parses anything. 1059 void Initialize(); 1060 getLangOpts()1061 const LangOptions &getLangOpts() const { return LangOpts; } getOpenCLOptions()1062 OpenCLOptions &getOpenCLOptions() { return OpenCLFeatures; } getFPOptions()1063 FPOptions &getFPOptions() { return FPFeatures; } 1064 getDiagnostics()1065 DiagnosticsEngine &getDiagnostics() const { return Diags; } getSourceManager()1066 SourceManager &getSourceManager() const { return SourceMgr; } getPreprocessor()1067 Preprocessor &getPreprocessor() const { return PP; } getASTContext()1068 ASTContext &getASTContext() const { return Context; } getASTConsumer()1069 ASTConsumer &getASTConsumer() const { return Consumer; } 1070 ASTMutationListener *getASTMutationListener() const; getExternalSource()1071 ExternalSemaSource* getExternalSource() const { return ExternalSource; } 1072 1073 ///\brief Registers an external source. If an external source already exists, 1074 /// creates a multiplex external source and appends to it. 1075 /// 1076 ///\param[in] E - A non-null external sema source. 1077 /// 1078 void addExternalSource(ExternalSemaSource *E); 1079 1080 void PrintStats() const; 1081 1082 /// \brief Helper class that creates diagnostics with optional 1083 /// template instantiation stacks. 1084 /// 1085 /// This class provides a wrapper around the basic DiagnosticBuilder 1086 /// class that emits diagnostics. SemaDiagnosticBuilder is 1087 /// responsible for emitting the diagnostic (as DiagnosticBuilder 1088 /// does) and, if the diagnostic comes from inside a template 1089 /// instantiation, printing the template instantiation stack as 1090 /// well. 1091 class SemaDiagnosticBuilder : public DiagnosticBuilder { 1092 Sema &SemaRef; 1093 unsigned DiagID; 1094 1095 public: SemaDiagnosticBuilder(DiagnosticBuilder & DB,Sema & SemaRef,unsigned DiagID)1096 SemaDiagnosticBuilder(DiagnosticBuilder &DB, Sema &SemaRef, unsigned DiagID) 1097 : DiagnosticBuilder(DB), SemaRef(SemaRef), DiagID(DiagID) { } 1098 1099 // This is a cunning lie. DiagnosticBuilder actually performs move 1100 // construction in its copy constructor (but due to varied uses, it's not 1101 // possible to conveniently express this as actual move construction). So 1102 // the default copy ctor here is fine, because the base class disables the 1103 // source anyway, so the user-defined ~SemaDiagnosticBuilder is a safe no-op 1104 // in that case anwyay. 1105 SemaDiagnosticBuilder(const SemaDiagnosticBuilder&) = default; 1106 ~SemaDiagnosticBuilder()1107 ~SemaDiagnosticBuilder() { 1108 // If we aren't active, there is nothing to do. 1109 if (!isActive()) return; 1110 1111 // Otherwise, we need to emit the diagnostic. First flush the underlying 1112 // DiagnosticBuilder data, and clear the diagnostic builder itself so it 1113 // won't emit the diagnostic in its own destructor. 1114 // 1115 // This seems wasteful, in that as written the DiagnosticBuilder dtor will 1116 // do its own needless checks to see if the diagnostic needs to be 1117 // emitted. However, because we take care to ensure that the builder 1118 // objects never escape, a sufficiently smart compiler will be able to 1119 // eliminate that code. 1120 FlushCounts(); 1121 Clear(); 1122 1123 // Dispatch to Sema to emit the diagnostic. 1124 SemaRef.EmitCurrentDiagnostic(DiagID); 1125 } 1126 1127 /// Teach operator<< to produce an object of the correct type. 1128 template<typename T> 1129 friend const SemaDiagnosticBuilder &operator<<( 1130 const SemaDiagnosticBuilder &Diag, const T &Value) { 1131 const DiagnosticBuilder &BaseDiag = Diag; 1132 BaseDiag << Value; 1133 return Diag; 1134 } 1135 }; 1136 1137 /// \brief Emit a diagnostic. Diag(SourceLocation Loc,unsigned DiagID)1138 SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) { 1139 DiagnosticBuilder DB = Diags.Report(Loc, DiagID); 1140 return SemaDiagnosticBuilder(DB, *this, DiagID); 1141 } 1142 1143 /// \brief Emit a partial diagnostic. 1144 SemaDiagnosticBuilder Diag(SourceLocation Loc, const PartialDiagnostic& PD); 1145 1146 /// \brief Build a partial diagnostic. 1147 PartialDiagnostic PDiag(unsigned DiagID = 0); // in SemaInternal.h 1148 1149 bool findMacroSpelling(SourceLocation &loc, StringRef name); 1150 1151 /// \brief Get a string to suggest for zero-initialization of a type. 1152 std::string 1153 getFixItZeroInitializerForType(QualType T, SourceLocation Loc) const; 1154 std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const; 1155 1156 /// \brief Calls \c Lexer::getLocForEndOfToken() 1157 SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0); 1158 1159 /// \brief Retrieve the module loader associated with the preprocessor. 1160 ModuleLoader &getModuleLoader() const; 1161 1162 void emitAndClearUnusedLocalTypedefWarnings(); 1163 1164 void ActOnEndOfTranslationUnit(); 1165 1166 void CheckDelegatingCtorCycles(); 1167 1168 Scope *getScopeForContext(DeclContext *Ctx); 1169 1170 void PushFunctionScope(); 1171 void PushBlockScope(Scope *BlockScope, BlockDecl *Block); 1172 sema::LambdaScopeInfo *PushLambdaScope(); 1173 1174 /// \brief This is used to inform Sema what the current TemplateParameterDepth 1175 /// is during Parsing. Currently it is used to pass on the depth 1176 /// when parsing generic lambda 'auto' parameters. 1177 void RecordParsingTemplateParameterDepth(unsigned Depth); 1178 1179 void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD, 1180 RecordDecl *RD, 1181 CapturedRegionKind K); 1182 void 1183 PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr, 1184 const Decl *D = nullptr, 1185 const BlockExpr *blkExpr = nullptr); 1186 getCurFunction()1187 sema::FunctionScopeInfo *getCurFunction() const { 1188 return FunctionScopes.back(); 1189 } 1190 getEnclosingFunction()1191 sema::FunctionScopeInfo *getEnclosingFunction() const { 1192 if (FunctionScopes.empty()) 1193 return nullptr; 1194 1195 for (int e = FunctionScopes.size()-1; e >= 0; --e) { 1196 if (isa<sema::BlockScopeInfo>(FunctionScopes[e])) 1197 continue; 1198 return FunctionScopes[e]; 1199 } 1200 return nullptr; 1201 } 1202 1203 template <typename ExprT> 1204 void recordUseOfEvaluatedWeak(const ExprT *E, bool IsRead=true) { 1205 if (!isUnevaluatedContext()) 1206 getCurFunction()->recordUseOfWeak(E, IsRead); 1207 } 1208 1209 void PushCompoundScope(); 1210 void PopCompoundScope(); 1211 1212 sema::CompoundScopeInfo &getCurCompoundScope() const; 1213 1214 bool hasAnyUnrecoverableErrorsInThisFunction() const; 1215 1216 /// \brief Retrieve the current block, if any. 1217 sema::BlockScopeInfo *getCurBlock(); 1218 1219 /// \brief Retrieve the current lambda scope info, if any. 1220 sema::LambdaScopeInfo *getCurLambda(); 1221 1222 /// \brief Retrieve the current generic lambda info, if any. 1223 sema::LambdaScopeInfo *getCurGenericLambda(); 1224 1225 /// \brief Retrieve the current captured region, if any. 1226 sema::CapturedRegionScopeInfo *getCurCapturedRegion(); 1227 1228 /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls WeakTopLevelDecls()1229 SmallVectorImpl<Decl *> &WeakTopLevelDecls() { return WeakTopLevelDecl; } 1230 1231 void ActOnComment(SourceRange Comment); 1232 1233 //===--------------------------------------------------------------------===// 1234 // Type Analysis / Processing: SemaType.cpp. 1235 // 1236 1237 QualType BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, 1238 const DeclSpec *DS = nullptr); 1239 QualType BuildQualifiedType(QualType T, SourceLocation Loc, unsigned CVRA, 1240 const DeclSpec *DS = nullptr); 1241 QualType BuildPointerType(QualType T, 1242 SourceLocation Loc, DeclarationName Entity); 1243 QualType BuildReferenceType(QualType T, bool LValueRef, 1244 SourceLocation Loc, DeclarationName Entity); 1245 QualType BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, 1246 Expr *ArraySize, unsigned Quals, 1247 SourceRange Brackets, DeclarationName Entity); 1248 QualType BuildExtVectorType(QualType T, Expr *ArraySize, 1249 SourceLocation AttrLoc); 1250 1251 bool CheckFunctionReturnType(QualType T, SourceLocation Loc); 1252 1253 /// \brief Build a function type. 1254 /// 1255 /// This routine checks the function type according to C++ rules and 1256 /// under the assumption that the result type and parameter types have 1257 /// just been instantiated from a template. It therefore duplicates 1258 /// some of the behavior of GetTypeForDeclarator, but in a much 1259 /// simpler form that is only suitable for this narrow use case. 1260 /// 1261 /// \param T The return type of the function. 1262 /// 1263 /// \param ParamTypes The parameter types of the function. This array 1264 /// will be modified to account for adjustments to the types of the 1265 /// function parameters. 1266 /// 1267 /// \param Loc The location of the entity whose type involves this 1268 /// function type or, if there is no such entity, the location of the 1269 /// type that will have function type. 1270 /// 1271 /// \param Entity The name of the entity that involves the function 1272 /// type, if known. 1273 /// 1274 /// \param EPI Extra information about the function type. Usually this will 1275 /// be taken from an existing function with the same prototype. 1276 /// 1277 /// \returns A suitable function type, if there are no errors. The 1278 /// unqualified type will always be a FunctionProtoType. 1279 /// Otherwise, returns a NULL type. 1280 QualType BuildFunctionType(QualType T, 1281 MutableArrayRef<QualType> ParamTypes, 1282 SourceLocation Loc, DeclarationName Entity, 1283 const FunctionProtoType::ExtProtoInfo &EPI); 1284 1285 QualType BuildMemberPointerType(QualType T, QualType Class, 1286 SourceLocation Loc, 1287 DeclarationName Entity); 1288 QualType BuildBlockPointerType(QualType T, 1289 SourceLocation Loc, DeclarationName Entity); 1290 QualType BuildParenType(QualType T); 1291 QualType BuildAtomicType(QualType T, SourceLocation Loc); 1292 QualType BuildPipeType(QualType T, 1293 SourceLocation Loc); 1294 1295 TypeSourceInfo *GetTypeForDeclarator(Declarator &D, Scope *S); 1296 TypeSourceInfo *GetTypeForDeclaratorCast(Declarator &D, QualType FromTy); 1297 TypeSourceInfo *GetTypeSourceInfoForDeclarator(Declarator &D, QualType T, 1298 TypeSourceInfo *ReturnTypeInfo); 1299 1300 /// \brief Package the given type and TSI into a ParsedType. 1301 ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo); 1302 DeclarationNameInfo GetNameForDeclarator(Declarator &D); 1303 DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name); 1304 static QualType GetTypeFromParser(ParsedType Ty, 1305 TypeSourceInfo **TInfo = nullptr); 1306 CanThrowResult canThrow(const Expr *E); 1307 const FunctionProtoType *ResolveExceptionSpec(SourceLocation Loc, 1308 const FunctionProtoType *FPT); 1309 void UpdateExceptionSpec(FunctionDecl *FD, 1310 const FunctionProtoType::ExceptionSpecInfo &ESI); 1311 bool CheckSpecifiedExceptionType(QualType &T, SourceRange Range); 1312 bool CheckDistantExceptionSpec(QualType T); 1313 bool CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New); 1314 bool CheckEquivalentExceptionSpec( 1315 const FunctionProtoType *Old, SourceLocation OldLoc, 1316 const FunctionProtoType *New, SourceLocation NewLoc); 1317 bool CheckEquivalentExceptionSpec( 1318 const PartialDiagnostic &DiagID, const PartialDiagnostic & NoteID, 1319 const FunctionProtoType *Old, SourceLocation OldLoc, 1320 const FunctionProtoType *New, SourceLocation NewLoc, 1321 bool *MissingExceptionSpecification = nullptr, 1322 bool *MissingEmptyExceptionSpecification = nullptr, 1323 bool AllowNoexceptAllMatchWithNoSpec = false, 1324 bool IsOperatorNew = false); 1325 bool CheckExceptionSpecSubset( 1326 const PartialDiagnostic &DiagID, const PartialDiagnostic & NoteID, 1327 const FunctionProtoType *Superset, SourceLocation SuperLoc, 1328 const FunctionProtoType *Subset, SourceLocation SubLoc); 1329 bool CheckParamExceptionSpec(const PartialDiagnostic & NoteID, 1330 const FunctionProtoType *Target, SourceLocation TargetLoc, 1331 const FunctionProtoType *Source, SourceLocation SourceLoc); 1332 1333 TypeResult ActOnTypeName(Scope *S, Declarator &D); 1334 1335 /// \brief The parser has parsed the context-sensitive type 'instancetype' 1336 /// in an Objective-C message declaration. Return the appropriate type. 1337 ParsedType ActOnObjCInstanceType(SourceLocation Loc); 1338 1339 /// \brief Abstract class used to diagnose incomplete types. 1340 struct TypeDiagnoser { TypeDiagnoserTypeDiagnoser1341 TypeDiagnoser() {} 1342 1343 virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) = 0; ~TypeDiagnoserTypeDiagnoser1344 virtual ~TypeDiagnoser() {} 1345 }; 1346 getPrintable(int I)1347 static int getPrintable(int I) { return I; } getPrintable(unsigned I)1348 static unsigned getPrintable(unsigned I) { return I; } getPrintable(bool B)1349 static bool getPrintable(bool B) { return B; } getPrintable(const char * S)1350 static const char * getPrintable(const char *S) { return S; } getPrintable(StringRef S)1351 static StringRef getPrintable(StringRef S) { return S; } getPrintable(const std::string & S)1352 static const std::string &getPrintable(const std::string &S) { return S; } getPrintable(const IdentifierInfo * II)1353 static const IdentifierInfo *getPrintable(const IdentifierInfo *II) { 1354 return II; 1355 } getPrintable(DeclarationName N)1356 static DeclarationName getPrintable(DeclarationName N) { return N; } getPrintable(QualType T)1357 static QualType getPrintable(QualType T) { return T; } getPrintable(SourceRange R)1358 static SourceRange getPrintable(SourceRange R) { return R; } getPrintable(SourceLocation L)1359 static SourceRange getPrintable(SourceLocation L) { return L; } getPrintable(const Expr * E)1360 static SourceRange getPrintable(const Expr *E) { return E->getSourceRange(); } getPrintable(TypeLoc TL)1361 static SourceRange getPrintable(TypeLoc TL) { return TL.getSourceRange();} 1362 1363 template <typename... Ts> class BoundTypeDiagnoser : public TypeDiagnoser { 1364 unsigned DiagID; 1365 std::tuple<const Ts &...> Args; 1366 1367 template <std::size_t... Is> emit(const SemaDiagnosticBuilder & DB,llvm::index_sequence<Is...>)1368 void emit(const SemaDiagnosticBuilder &DB, 1369 llvm::index_sequence<Is...>) const { 1370 // Apply all tuple elements to the builder in order. 1371 bool Dummy[] = {false, (DB << getPrintable(std::get<Is>(Args)))...}; 1372 (void)Dummy; 1373 } 1374 1375 public: BoundTypeDiagnoser(unsigned DiagID,const Ts &...Args)1376 BoundTypeDiagnoser(unsigned DiagID, const Ts &...Args) 1377 : TypeDiagnoser(), DiagID(DiagID), Args(Args...) { 1378 assert(DiagID != 0 && "no diagnostic for type diagnoser"); 1379 } 1380 diagnose(Sema & S,SourceLocation Loc,QualType T)1381 void diagnose(Sema &S, SourceLocation Loc, QualType T) override { 1382 const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID); 1383 emit(DB, llvm::index_sequence_for<Ts...>()); 1384 DB << T; 1385 } 1386 }; 1387 1388 private: 1389 bool RequireCompleteTypeImpl(SourceLocation Loc, QualType T, 1390 TypeDiagnoser *Diagnoser); 1391 1392 VisibleModuleSet VisibleModules; 1393 llvm::SmallVector<VisibleModuleSet, 16> VisibleModulesStack; 1394 1395 Module *CachedFakeTopLevelModule; 1396 1397 public: 1398 /// \brief Get the module owning an entity. 1399 Module *getOwningModule(Decl *Entity); 1400 1401 /// \brief Make a merged definition of an existing hidden definition \p ND 1402 /// visible at the specified location. 1403 void makeMergedDefinitionVisible(NamedDecl *ND, SourceLocation Loc); 1404 isModuleVisible(Module * M)1405 bool isModuleVisible(Module *M) { return VisibleModules.isVisible(M); } 1406 1407 /// Determine whether a declaration is visible to name lookup. isVisible(const NamedDecl * D)1408 bool isVisible(const NamedDecl *D) { 1409 return !D->isHidden() || isVisibleSlow(D); 1410 } 1411 1412 /// Determine whether any declaration of an entity is visible. 1413 bool 1414 hasVisibleDeclaration(const NamedDecl *D, 1415 llvm::SmallVectorImpl<Module *> *Modules = nullptr) { 1416 return isVisible(D) || hasVisibleDeclarationSlow(D, Modules); 1417 } 1418 bool hasVisibleDeclarationSlow(const NamedDecl *D, 1419 llvm::SmallVectorImpl<Module *> *Modules); 1420 1421 bool hasVisibleMergedDefinition(NamedDecl *Def); 1422 1423 /// Determine if \p D has a visible definition. If not, suggest a declaration 1424 /// that should be made visible to expose the definition. 1425 bool hasVisibleDefinition(NamedDecl *D, NamedDecl **Suggested, 1426 bool OnlyNeedComplete = false); hasVisibleDefinition(const NamedDecl * D)1427 bool hasVisibleDefinition(const NamedDecl *D) { 1428 NamedDecl *Hidden; 1429 return hasVisibleDefinition(const_cast<NamedDecl*>(D), &Hidden); 1430 } 1431 1432 /// Determine if the template parameter \p D has a visible default argument. 1433 bool 1434 hasVisibleDefaultArgument(const NamedDecl *D, 1435 llvm::SmallVectorImpl<Module *> *Modules = nullptr); 1436 1437 /// Determine if there is a visible declaration of \p D that is a member 1438 /// specialization declaration (as opposed to an instantiated declaration). 1439 bool hasVisibleMemberSpecialization( 1440 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr); 1441 1442 /// Determine if \p A and \p B are equivalent internal linkage declarations 1443 /// from different modules, and thus an ambiguity error can be downgraded to 1444 /// an extension warning. 1445 bool isEquivalentInternalLinkageDeclaration(const NamedDecl *A, 1446 const NamedDecl *B); 1447 void diagnoseEquivalentInternalLinkageDeclarations( 1448 SourceLocation Loc, const NamedDecl *D, 1449 ArrayRef<const NamedDecl *> Equiv); 1450 isCompleteType(SourceLocation Loc,QualType T)1451 bool isCompleteType(SourceLocation Loc, QualType T) { 1452 return !RequireCompleteTypeImpl(Loc, T, nullptr); 1453 } 1454 bool RequireCompleteType(SourceLocation Loc, QualType T, 1455 TypeDiagnoser &Diagnoser); 1456 bool RequireCompleteType(SourceLocation Loc, QualType T, 1457 unsigned DiagID); 1458 1459 template <typename... Ts> RequireCompleteType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)1460 bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID, 1461 const Ts &...Args) { 1462 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 1463 return RequireCompleteType(Loc, T, Diagnoser); 1464 } 1465 1466 void completeExprArrayBound(Expr *E); 1467 bool RequireCompleteExprType(Expr *E, TypeDiagnoser &Diagnoser); 1468 bool RequireCompleteExprType(Expr *E, unsigned DiagID); 1469 1470 template <typename... Ts> RequireCompleteExprType(Expr * E,unsigned DiagID,const Ts &...Args)1471 bool RequireCompleteExprType(Expr *E, unsigned DiagID, const Ts &...Args) { 1472 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 1473 return RequireCompleteExprType(E, Diagnoser); 1474 } 1475 1476 bool RequireLiteralType(SourceLocation Loc, QualType T, 1477 TypeDiagnoser &Diagnoser); 1478 bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID); 1479 1480 template <typename... Ts> RequireLiteralType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)1481 bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID, 1482 const Ts &...Args) { 1483 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 1484 return RequireLiteralType(Loc, T, Diagnoser); 1485 } 1486 1487 QualType getElaboratedType(ElaboratedTypeKeyword Keyword, 1488 const CXXScopeSpec &SS, QualType T); 1489 1490 QualType BuildTypeofExprType(Expr *E, SourceLocation Loc); 1491 /// If AsUnevaluated is false, E is treated as though it were an evaluated 1492 /// context, such as when building a type for decltype(auto). 1493 QualType BuildDecltypeType(Expr *E, SourceLocation Loc, 1494 bool AsUnevaluated = true); 1495 QualType BuildUnaryTransformType(QualType BaseType, 1496 UnaryTransformType::UTTKind UKind, 1497 SourceLocation Loc); 1498 1499 //===--------------------------------------------------------------------===// 1500 // Symbol table / Decl tracking callbacks: SemaDecl.cpp. 1501 // 1502 1503 struct SkipBodyInfo { SkipBodyInfoSkipBodyInfo1504 SkipBodyInfo() : ShouldSkip(false), Previous(nullptr) {} 1505 bool ShouldSkip; 1506 NamedDecl *Previous; 1507 }; 1508 1509 /// List of decls defined in a function prototype. This contains EnumConstants 1510 /// that incorrectly end up in translation unit scope because there is no 1511 /// function to pin them on. ActOnFunctionDeclarator reads this list and patches 1512 /// them into the FunctionDecl. 1513 std::vector<NamedDecl*> DeclsInPrototypeScope; 1514 1515 DeclGroupPtrTy ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType = nullptr); 1516 1517 void DiagnoseUseOfUnimplementedSelectors(); 1518 1519 bool isSimpleTypeSpecifier(tok::TokenKind Kind) const; 1520 1521 ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, 1522 Scope *S, CXXScopeSpec *SS = nullptr, 1523 bool isClassName = false, bool HasTrailingDot = false, 1524 ParsedType ObjectType = nullptr, 1525 bool IsCtorOrDtorName = false, 1526 bool WantNontrivialTypeSourceInfo = false, 1527 IdentifierInfo **CorrectedII = nullptr); 1528 TypeSpecifierType isTagName(IdentifierInfo &II, Scope *S); 1529 bool isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S); 1530 void DiagnoseUnknownTypeName(IdentifierInfo *&II, 1531 SourceLocation IILoc, 1532 Scope *S, 1533 CXXScopeSpec *SS, 1534 ParsedType &SuggestedType, 1535 bool AllowClassTemplates = false); 1536 1537 /// Attempt to behave like MSVC in situations where lookup of an unqualified 1538 /// type name has failed in a dependent context. In these situations, we 1539 /// automatically form a DependentTypeName that will retry lookup in a related 1540 /// scope during instantiation. 1541 ParsedType ActOnMSVCUnknownTypeName(const IdentifierInfo &II, 1542 SourceLocation NameLoc, 1543 bool IsTemplateTypeArg); 1544 1545 /// \brief Describes the result of the name lookup and resolution performed 1546 /// by \c ClassifyName(). 1547 enum NameClassificationKind { 1548 NC_Unknown, 1549 NC_Error, 1550 NC_Keyword, 1551 NC_Type, 1552 NC_Expression, 1553 NC_NestedNameSpecifier, 1554 NC_TypeTemplate, 1555 NC_VarTemplate, 1556 NC_FunctionTemplate 1557 }; 1558 1559 class NameClassification { 1560 NameClassificationKind Kind; 1561 ExprResult Expr; 1562 TemplateName Template; 1563 ParsedType Type; 1564 const IdentifierInfo *Keyword; 1565 NameClassification(NameClassificationKind Kind)1566 explicit NameClassification(NameClassificationKind Kind) : Kind(Kind) {} 1567 1568 public: NameClassification(ExprResult Expr)1569 NameClassification(ExprResult Expr) : Kind(NC_Expression), Expr(Expr) {} 1570 NameClassification(ParsedType Type)1571 NameClassification(ParsedType Type) : Kind(NC_Type), Type(Type) {} 1572 NameClassification(const IdentifierInfo * Keyword)1573 NameClassification(const IdentifierInfo *Keyword) 1574 : Kind(NC_Keyword), Keyword(Keyword) { } 1575 Error()1576 static NameClassification Error() { 1577 return NameClassification(NC_Error); 1578 } 1579 Unknown()1580 static NameClassification Unknown() { 1581 return NameClassification(NC_Unknown); 1582 } 1583 NestedNameSpecifier()1584 static NameClassification NestedNameSpecifier() { 1585 return NameClassification(NC_NestedNameSpecifier); 1586 } 1587 TypeTemplate(TemplateName Name)1588 static NameClassification TypeTemplate(TemplateName Name) { 1589 NameClassification Result(NC_TypeTemplate); 1590 Result.Template = Name; 1591 return Result; 1592 } 1593 VarTemplate(TemplateName Name)1594 static NameClassification VarTemplate(TemplateName Name) { 1595 NameClassification Result(NC_VarTemplate); 1596 Result.Template = Name; 1597 return Result; 1598 } 1599 FunctionTemplate(TemplateName Name)1600 static NameClassification FunctionTemplate(TemplateName Name) { 1601 NameClassification Result(NC_FunctionTemplate); 1602 Result.Template = Name; 1603 return Result; 1604 } 1605 getKind()1606 NameClassificationKind getKind() const { return Kind; } 1607 getType()1608 ParsedType getType() const { 1609 assert(Kind == NC_Type); 1610 return Type; 1611 } 1612 getExpression()1613 ExprResult getExpression() const { 1614 assert(Kind == NC_Expression); 1615 return Expr; 1616 } 1617 getTemplateName()1618 TemplateName getTemplateName() const { 1619 assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate || 1620 Kind == NC_VarTemplate); 1621 return Template; 1622 } 1623 getTemplateNameKind()1624 TemplateNameKind getTemplateNameKind() const { 1625 switch (Kind) { 1626 case NC_TypeTemplate: 1627 return TNK_Type_template; 1628 case NC_FunctionTemplate: 1629 return TNK_Function_template; 1630 case NC_VarTemplate: 1631 return TNK_Var_template; 1632 default: 1633 llvm_unreachable("unsupported name classification."); 1634 } 1635 } 1636 }; 1637 1638 /// \brief Perform name lookup on the given name, classifying it based on 1639 /// the results of name lookup and the following token. 1640 /// 1641 /// This routine is used by the parser to resolve identifiers and help direct 1642 /// parsing. When the identifier cannot be found, this routine will attempt 1643 /// to correct the typo and classify based on the resulting name. 1644 /// 1645 /// \param S The scope in which we're performing name lookup. 1646 /// 1647 /// \param SS The nested-name-specifier that precedes the name. 1648 /// 1649 /// \param Name The identifier. If typo correction finds an alternative name, 1650 /// this pointer parameter will be updated accordingly. 1651 /// 1652 /// \param NameLoc The location of the identifier. 1653 /// 1654 /// \param NextToken The token following the identifier. Used to help 1655 /// disambiguate the name. 1656 /// 1657 /// \param IsAddressOfOperand True if this name is the operand of a unary 1658 /// address of ('&') expression, assuming it is classified as an 1659 /// expression. 1660 /// 1661 /// \param CCC The correction callback, if typo correction is desired. 1662 NameClassification 1663 ClassifyName(Scope *S, CXXScopeSpec &SS, IdentifierInfo *&Name, 1664 SourceLocation NameLoc, const Token &NextToken, 1665 bool IsAddressOfOperand, 1666 std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr); 1667 1668 Decl *ActOnDeclarator(Scope *S, Declarator &D); 1669 1670 NamedDecl *HandleDeclarator(Scope *S, Declarator &D, 1671 MultiTemplateParamsArg TemplateParameterLists); 1672 void RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S); 1673 bool DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo Info); 1674 bool diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, 1675 DeclarationName Name, 1676 SourceLocation Loc); 1677 void 1678 diagnoseIgnoredQualifiers(unsigned DiagID, unsigned Quals, 1679 SourceLocation FallbackLoc, 1680 SourceLocation ConstQualLoc = SourceLocation(), 1681 SourceLocation VolatileQualLoc = SourceLocation(), 1682 SourceLocation RestrictQualLoc = SourceLocation(), 1683 SourceLocation AtomicQualLoc = SourceLocation(), 1684 SourceLocation UnalignedQualLoc = SourceLocation()); 1685 1686 static bool adjustContextForLocalExternDecl(DeclContext *&DC); 1687 void DiagnoseFunctionSpecifiers(const DeclSpec &DS); 1688 void CheckShadow(Scope *S, VarDecl *D, const LookupResult& R); 1689 void CheckShadow(Scope *S, VarDecl *D); 1690 1691 /// Warn if 'E', which is an expression that is about to be modified, refers 1692 /// to a shadowing declaration. 1693 void CheckShadowingDeclModification(Expr *E, SourceLocation Loc); 1694 1695 private: 1696 /// Map of current shadowing declarations to shadowed declarations. Warn if 1697 /// it looks like the user is trying to modify the shadowing declaration. 1698 llvm::DenseMap<const NamedDecl *, const NamedDecl *> ShadowingDecls; 1699 1700 public: 1701 void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange); 1702 void handleTagNumbering(const TagDecl *Tag, Scope *TagScope); 1703 void setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, 1704 TypedefNameDecl *NewTD); 1705 void CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *D); 1706 NamedDecl* ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC, 1707 TypeSourceInfo *TInfo, 1708 LookupResult &Previous); 1709 NamedDecl* ActOnTypedefNameDecl(Scope* S, DeclContext* DC, TypedefNameDecl *D, 1710 LookupResult &Previous, bool &Redeclaration); 1711 NamedDecl *ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, 1712 TypeSourceInfo *TInfo, 1713 LookupResult &Previous, 1714 MultiTemplateParamsArg TemplateParamLists, 1715 bool &AddToScope); 1716 // Returns true if the variable declaration is a redeclaration 1717 bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous); 1718 void CheckVariableDeclarationType(VarDecl *NewVD); 1719 void CheckCompleteVariableDeclaration(VarDecl *var); 1720 void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D); 1721 1722 NamedDecl* ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, 1723 TypeSourceInfo *TInfo, 1724 LookupResult &Previous, 1725 MultiTemplateParamsArg TemplateParamLists, 1726 bool &AddToScope); 1727 bool AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD); 1728 1729 bool CheckConstexprFunctionDecl(const FunctionDecl *FD); 1730 bool CheckConstexprFunctionBody(const FunctionDecl *FD, Stmt *Body); 1731 1732 void DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD); 1733 void FindHiddenVirtualMethods(CXXMethodDecl *MD, 1734 SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods); 1735 void NoteHiddenVirtualMethods(CXXMethodDecl *MD, 1736 SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods); 1737 // Returns true if the function declaration is a redeclaration 1738 bool CheckFunctionDeclaration(Scope *S, 1739 FunctionDecl *NewFD, LookupResult &Previous, 1740 bool IsExplicitSpecialization); 1741 void CheckMain(FunctionDecl *FD, const DeclSpec &D); 1742 void CheckMSVCRTEntryPoint(FunctionDecl *FD); 1743 Decl *ActOnParamDeclarator(Scope *S, Declarator &D); 1744 ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC, 1745 SourceLocation Loc, 1746 QualType T); 1747 ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc, 1748 SourceLocation NameLoc, IdentifierInfo *Name, 1749 QualType T, TypeSourceInfo *TSInfo, 1750 StorageClass SC); 1751 void ActOnParamDefaultArgument(Decl *param, 1752 SourceLocation EqualLoc, 1753 Expr *defarg); 1754 void ActOnParamUnparsedDefaultArgument(Decl *param, 1755 SourceLocation EqualLoc, 1756 SourceLocation ArgLoc); 1757 void ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc); 1758 bool SetParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg, 1759 SourceLocation EqualLoc); 1760 1761 void AddInitializerToDecl(Decl *dcl, Expr *init, bool DirectInit, 1762 bool TypeMayContainAuto); 1763 void ActOnUninitializedDecl(Decl *dcl, bool TypeMayContainAuto); 1764 void ActOnInitializerError(Decl *Dcl); 1765 void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc); 1766 void ActOnCXXForRangeDecl(Decl *D); 1767 StmtResult ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc, 1768 IdentifierInfo *Ident, 1769 ParsedAttributes &Attrs, 1770 SourceLocation AttrEnd); 1771 void SetDeclDeleted(Decl *dcl, SourceLocation DelLoc); 1772 void SetDeclDefaulted(Decl *dcl, SourceLocation DefaultLoc); 1773 void FinalizeDeclaration(Decl *D); 1774 DeclGroupPtrTy FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, 1775 ArrayRef<Decl *> Group); 1776 DeclGroupPtrTy BuildDeclaratorGroup(MutableArrayRef<Decl *> Group, 1777 bool TypeMayContainAuto = true); 1778 1779 /// Should be called on all declarations that might have attached 1780 /// documentation comments. 1781 void ActOnDocumentableDecl(Decl *D); 1782 void ActOnDocumentableDecls(ArrayRef<Decl *> Group); 1783 1784 void ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D, 1785 SourceLocation LocAfterDecls); 1786 void CheckForFunctionRedefinition( 1787 FunctionDecl *FD, const FunctionDecl *EffectiveDefinition = nullptr, 1788 SkipBodyInfo *SkipBody = nullptr); 1789 Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D, 1790 MultiTemplateParamsArg TemplateParamLists, 1791 SkipBodyInfo *SkipBody = nullptr); 1792 Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D, 1793 SkipBodyInfo *SkipBody = nullptr); 1794 void ActOnStartOfObjCMethodDef(Scope *S, Decl *D); isObjCMethodDecl(Decl * D)1795 bool isObjCMethodDecl(Decl *D) { 1796 return D && isa<ObjCMethodDecl>(D); 1797 } 1798 1799 /// \brief Determine whether we can delay parsing the body of a function or 1800 /// function template until it is used, assuming we don't care about emitting 1801 /// code for that function. 1802 /// 1803 /// This will be \c false if we may need the body of the function in the 1804 /// middle of parsing an expression (where it's impractical to switch to 1805 /// parsing a different function), for instance, if it's constexpr in C++11 1806 /// or has an 'auto' return type in C++14. These cases are essentially bugs. 1807 bool canDelayFunctionBody(const Declarator &D); 1808 1809 /// \brief Determine whether we can skip parsing the body of a function 1810 /// definition, assuming we don't care about analyzing its body or emitting 1811 /// code for that function. 1812 /// 1813 /// This will be \c false only if we may need the body of the function in 1814 /// order to parse the rest of the program (for instance, if it is 1815 /// \c constexpr in C++11 or has an 'auto' return type in C++14). 1816 bool canSkipFunctionBody(Decl *D); 1817 1818 void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope); 1819 Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body); 1820 Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation); 1821 Decl *ActOnSkippedFunctionBody(Decl *Decl); 1822 void ActOnFinishInlineFunctionDef(FunctionDecl *D); 1823 1824 /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an 1825 /// attribute for which parsing is delayed. 1826 void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs); 1827 1828 /// \brief Diagnose any unused parameters in the given sequence of 1829 /// ParmVarDecl pointers. 1830 void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters); 1831 1832 /// \brief Diagnose whether the size of parameters or return value of a 1833 /// function or obj-c method definition is pass-by-value and larger than a 1834 /// specified threshold. 1835 void 1836 DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters, 1837 QualType ReturnTy, NamedDecl *D); 1838 1839 void DiagnoseInvalidJumps(Stmt *Body); 1840 Decl *ActOnFileScopeAsmDecl(Expr *expr, 1841 SourceLocation AsmLoc, 1842 SourceLocation RParenLoc); 1843 1844 /// \brief Handle a C++11 empty-declaration and attribute-declaration. 1845 Decl *ActOnEmptyDeclaration(Scope *S, 1846 AttributeList *AttrList, 1847 SourceLocation SemiLoc); 1848 1849 /// \brief The parser has processed a module import declaration. 1850 /// 1851 /// \param AtLoc The location of the '@' symbol, if any. 1852 /// 1853 /// \param ImportLoc The location of the 'import' keyword. 1854 /// 1855 /// \param Path The module access path. 1856 DeclResult ActOnModuleImport(SourceLocation AtLoc, SourceLocation ImportLoc, 1857 ModuleIdPath Path); 1858 1859 /// \brief The parser has processed a module import translated from a 1860 /// #include or similar preprocessing directive. 1861 void ActOnModuleInclude(SourceLocation DirectiveLoc, Module *Mod); 1862 1863 /// \brief The parsed has entered a submodule. 1864 void ActOnModuleBegin(SourceLocation DirectiveLoc, Module *Mod); 1865 /// \brief The parser has left a submodule. 1866 void ActOnModuleEnd(SourceLocation DirectiveLoc, Module *Mod); 1867 1868 /// \brief Check if module import may be found in the current context, 1869 /// emit error if not. 1870 void diagnoseMisplacedModuleImport(Module *M, SourceLocation ImportLoc); 1871 1872 /// \brief Create an implicit import of the given module at the given 1873 /// source location, for error recovery, if possible. 1874 /// 1875 /// This routine is typically used when an entity found by name lookup 1876 /// is actually hidden within a module that we know about but the user 1877 /// has forgotten to import. 1878 void createImplicitModuleImportForErrorRecovery(SourceLocation Loc, 1879 Module *Mod); 1880 1881 /// Kinds of missing import. Note, the values of these enumerators correspond 1882 /// to %select values in diagnostics. 1883 enum class MissingImportKind { 1884 Declaration, 1885 Definition, 1886 DefaultArgument, 1887 ExplicitSpecialization, 1888 PartialSpecialization 1889 }; 1890 1891 /// \brief Diagnose that the specified declaration needs to be visible but 1892 /// isn't, and suggest a module import that would resolve the problem. 1893 void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl, 1894 MissingImportKind MIK, bool Recover = true); 1895 void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl, 1896 SourceLocation DeclLoc, ArrayRef<Module *> Modules, 1897 MissingImportKind MIK, bool Recover); 1898 1899 /// \brief We've found a use of a templated declaration that would trigger an 1900 /// implicit instantiation. Check that any relevant explicit specializations 1901 /// and partial specializations are visible, and diagnose if not. 1902 void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec); 1903 1904 /// \brief We've found a use of a template specialization that would select a 1905 /// partial specialization. Check that the partial specialization is visible, 1906 /// and diagnose if not. 1907 void checkPartialSpecializationVisibility(SourceLocation Loc, 1908 NamedDecl *Spec); 1909 1910 /// \brief Retrieve a suitable printing policy. getPrintingPolicy()1911 PrintingPolicy getPrintingPolicy() const { 1912 return getPrintingPolicy(Context, PP); 1913 } 1914 1915 /// \brief Retrieve a suitable printing policy. 1916 static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx, 1917 const Preprocessor &PP); 1918 1919 /// Scope actions. 1920 void ActOnPopScope(SourceLocation Loc, Scope *S); 1921 void ActOnTranslationUnitScope(Scope *S); 1922 1923 Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, 1924 RecordDecl *&AnonRecord); 1925 Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, 1926 MultiTemplateParamsArg TemplateParams, 1927 bool IsExplicitInstantiation, 1928 RecordDecl *&AnonRecord); 1929 1930 Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, 1931 AccessSpecifier AS, 1932 RecordDecl *Record, 1933 const PrintingPolicy &Policy); 1934 1935 Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS, 1936 RecordDecl *Record); 1937 1938 bool isAcceptableTagRedeclaration(const TagDecl *Previous, 1939 TagTypeKind NewTag, bool isDefinition, 1940 SourceLocation NewTagLoc, 1941 const IdentifierInfo *Name); 1942 1943 enum TagUseKind { 1944 TUK_Reference, // Reference to a tag: 'struct foo *X;' 1945 TUK_Declaration, // Fwd decl of a tag: 'struct foo;' 1946 TUK_Definition, // Definition of a tag: 'struct foo { int X; } Y;' 1947 TUK_Friend // Friend declaration: 'friend struct foo;' 1948 }; 1949 1950 Decl *ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, 1951 SourceLocation KWLoc, CXXScopeSpec &SS, 1952 IdentifierInfo *Name, SourceLocation NameLoc, 1953 AttributeList *Attr, AccessSpecifier AS, 1954 SourceLocation ModulePrivateLoc, 1955 MultiTemplateParamsArg TemplateParameterLists, 1956 bool &OwnedDecl, bool &IsDependent, 1957 SourceLocation ScopedEnumKWLoc, 1958 bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, 1959 bool IsTypeSpecifier, SkipBodyInfo *SkipBody = nullptr); 1960 1961 Decl *ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, 1962 unsigned TagSpec, SourceLocation TagLoc, 1963 CXXScopeSpec &SS, 1964 IdentifierInfo *Name, SourceLocation NameLoc, 1965 AttributeList *Attr, 1966 MultiTemplateParamsArg TempParamLists); 1967 1968 TypeResult ActOnDependentTag(Scope *S, 1969 unsigned TagSpec, 1970 TagUseKind TUK, 1971 const CXXScopeSpec &SS, 1972 IdentifierInfo *Name, 1973 SourceLocation TagLoc, 1974 SourceLocation NameLoc); 1975 1976 void ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart, 1977 IdentifierInfo *ClassName, 1978 SmallVectorImpl<Decl *> &Decls); 1979 Decl *ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart, 1980 Declarator &D, Expr *BitfieldWidth); 1981 1982 FieldDecl *HandleField(Scope *S, RecordDecl *TagD, SourceLocation DeclStart, 1983 Declarator &D, Expr *BitfieldWidth, 1984 InClassInitStyle InitStyle, 1985 AccessSpecifier AS); 1986 MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD, 1987 SourceLocation DeclStart, 1988 Declarator &D, Expr *BitfieldWidth, 1989 InClassInitStyle InitStyle, 1990 AccessSpecifier AS, 1991 AttributeList *MSPropertyAttr); 1992 1993 FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T, 1994 TypeSourceInfo *TInfo, 1995 RecordDecl *Record, SourceLocation Loc, 1996 bool Mutable, Expr *BitfieldWidth, 1997 InClassInitStyle InitStyle, 1998 SourceLocation TSSL, 1999 AccessSpecifier AS, NamedDecl *PrevDecl, 2000 Declarator *D = nullptr); 2001 2002 bool CheckNontrivialField(FieldDecl *FD); 2003 void DiagnoseNontrivial(const CXXRecordDecl *Record, CXXSpecialMember CSM); 2004 bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, 2005 bool Diagnose = false); 2006 CXXSpecialMember getSpecialMember(const CXXMethodDecl *MD); 2007 void ActOnLastBitfield(SourceLocation DeclStart, 2008 SmallVectorImpl<Decl *> &AllIvarDecls); 2009 Decl *ActOnIvar(Scope *S, SourceLocation DeclStart, 2010 Declarator &D, Expr *BitfieldWidth, 2011 tok::ObjCKeywordKind visibility); 2012 2013 // This is used for both record definitions and ObjC interface declarations. 2014 void ActOnFields(Scope* S, SourceLocation RecLoc, Decl *TagDecl, 2015 ArrayRef<Decl *> Fields, 2016 SourceLocation LBrac, SourceLocation RBrac, 2017 AttributeList *AttrList); 2018 2019 /// ActOnTagStartDefinition - Invoked when we have entered the 2020 /// scope of a tag's definition (e.g., for an enumeration, class, 2021 /// struct, or union). 2022 void ActOnTagStartDefinition(Scope *S, Decl *TagDecl); 2023 2024 typedef void *SkippedDefinitionContext; 2025 2026 /// \brief Invoked when we enter a tag definition that we're skipping. 2027 SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD); 2028 2029 Decl *ActOnObjCContainerStartDefinition(Decl *IDecl); 2030 2031 /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a 2032 /// C++ record definition's base-specifiers clause and are starting its 2033 /// member declarations. 2034 void ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagDecl, 2035 SourceLocation FinalLoc, 2036 bool IsFinalSpelledSealed, 2037 SourceLocation LBraceLoc); 2038 2039 /// ActOnTagFinishDefinition - Invoked once we have finished parsing 2040 /// the definition of a tag (enumeration, class, struct, or union). 2041 void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl, 2042 SourceLocation RBraceLoc); 2043 2044 void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context); 2045 2046 void ActOnObjCContainerFinishDefinition(); 2047 2048 /// \brief Invoked when we must temporarily exit the objective-c container 2049 /// scope for parsing/looking-up C constructs. 2050 /// 2051 /// Must be followed by a call to \see ActOnObjCReenterContainerContext 2052 void ActOnObjCTemporaryExitContainerContext(DeclContext *DC); 2053 void ActOnObjCReenterContainerContext(DeclContext *DC); 2054 2055 /// ActOnTagDefinitionError - Invoked when there was an unrecoverable 2056 /// error parsing the definition of a tag. 2057 void ActOnTagDefinitionError(Scope *S, Decl *TagDecl); 2058 2059 EnumConstantDecl *CheckEnumConstant(EnumDecl *Enum, 2060 EnumConstantDecl *LastEnumConst, 2061 SourceLocation IdLoc, 2062 IdentifierInfo *Id, 2063 Expr *val); 2064 bool CheckEnumUnderlyingType(TypeSourceInfo *TI); 2065 bool CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped, 2066 QualType EnumUnderlyingTy, 2067 bool EnumUnderlyingIsImplicit, 2068 const EnumDecl *Prev); 2069 2070 /// Determine whether the body of an anonymous enumeration should be skipped. 2071 /// \param II The name of the first enumerator. 2072 SkipBodyInfo shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II, 2073 SourceLocation IILoc); 2074 2075 Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant, 2076 SourceLocation IdLoc, IdentifierInfo *Id, 2077 AttributeList *Attrs, 2078 SourceLocation EqualLoc, Expr *Val); 2079 void ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc, 2080 SourceLocation RBraceLoc, Decl *EnumDecl, 2081 ArrayRef<Decl *> Elements, 2082 Scope *S, AttributeList *Attr); 2083 2084 DeclContext *getContainingDC(DeclContext *DC); 2085 2086 /// Set the current declaration context until it gets popped. 2087 void PushDeclContext(Scope *S, DeclContext *DC); 2088 void PopDeclContext(); 2089 2090 /// EnterDeclaratorContext - Used when we must lookup names in the context 2091 /// of a declarator's nested name specifier. 2092 void EnterDeclaratorContext(Scope *S, DeclContext *DC); 2093 void ExitDeclaratorContext(Scope *S); 2094 2095 /// Push the parameters of D, which must be a function, into scope. 2096 void ActOnReenterFunctionContext(Scope* S, Decl* D); 2097 void ActOnExitFunctionContext(); 2098 2099 DeclContext *getFunctionLevelDeclContext(); 2100 2101 /// getCurFunctionDecl - If inside of a function body, this returns a pointer 2102 /// to the function decl for the function being parsed. If we're currently 2103 /// in a 'block', this returns the containing context. 2104 FunctionDecl *getCurFunctionDecl(); 2105 2106 /// getCurMethodDecl - If inside of a method body, this returns a pointer to 2107 /// the method decl for the method being parsed. If we're currently 2108 /// in a 'block', this returns the containing context. 2109 ObjCMethodDecl *getCurMethodDecl(); 2110 2111 /// getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method 2112 /// or C function we're in, otherwise return null. If we're currently 2113 /// in a 'block', this returns the containing context. 2114 NamedDecl *getCurFunctionOrMethodDecl(); 2115 2116 /// Add this decl to the scope shadowed decl chains. 2117 void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true); 2118 2119 /// \brief Make the given externally-produced declaration visible at the 2120 /// top level scope. 2121 /// 2122 /// \param D The externally-produced declaration to push. 2123 /// 2124 /// \param Name The name of the externally-produced declaration. 2125 void pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name); 2126 2127 /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true 2128 /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns 2129 /// true if 'D' belongs to the given declaration context. 2130 /// 2131 /// \param AllowInlineNamespace If \c true, allow the declaration to be in the 2132 /// enclosing namespace set of the context, rather than contained 2133 /// directly within it. 2134 bool isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S = nullptr, 2135 bool AllowInlineNamespace = false); 2136 2137 /// Finds the scope corresponding to the given decl context, if it 2138 /// happens to be an enclosing scope. Otherwise return NULL. 2139 static Scope *getScopeForDeclContext(Scope *S, DeclContext *DC); 2140 2141 /// Subroutines of ActOnDeclarator(). 2142 TypedefDecl *ParseTypedefDecl(Scope *S, Declarator &D, QualType T, 2143 TypeSourceInfo *TInfo); 2144 bool isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New); 2145 2146 /// \brief Describes the kind of merge to perform for availability 2147 /// attributes (including "deprecated", "unavailable", and "availability"). 2148 enum AvailabilityMergeKind { 2149 /// \brief Don't merge availability attributes at all. 2150 AMK_None, 2151 /// \brief Merge availability attributes for a redeclaration, which requires 2152 /// an exact match. 2153 AMK_Redeclaration, 2154 /// \brief Merge availability attributes for an override, which requires 2155 /// an exact match or a weakening of constraints. 2156 AMK_Override, 2157 /// \brief Merge availability attributes for an implementation of 2158 /// a protocol requirement. 2159 AMK_ProtocolImplementation, 2160 }; 2161 2162 /// Attribute merging methods. Return true if a new attribute was added. 2163 AvailabilityAttr *mergeAvailabilityAttr(NamedDecl *D, SourceRange Range, 2164 IdentifierInfo *Platform, 2165 bool Implicit, 2166 VersionTuple Introduced, 2167 VersionTuple Deprecated, 2168 VersionTuple Obsoleted, 2169 bool IsUnavailable, 2170 StringRef Message, 2171 bool IsStrict, StringRef Replacement, 2172 AvailabilityMergeKind AMK, 2173 unsigned AttrSpellingListIndex); 2174 TypeVisibilityAttr *mergeTypeVisibilityAttr(Decl *D, SourceRange Range, 2175 TypeVisibilityAttr::VisibilityType Vis, 2176 unsigned AttrSpellingListIndex); 2177 VisibilityAttr *mergeVisibilityAttr(Decl *D, SourceRange Range, 2178 VisibilityAttr::VisibilityType Vis, 2179 unsigned AttrSpellingListIndex); 2180 DLLImportAttr *mergeDLLImportAttr(Decl *D, SourceRange Range, 2181 unsigned AttrSpellingListIndex); 2182 DLLExportAttr *mergeDLLExportAttr(Decl *D, SourceRange Range, 2183 unsigned AttrSpellingListIndex); 2184 MSInheritanceAttr * 2185 mergeMSInheritanceAttr(Decl *D, SourceRange Range, bool BestCase, 2186 unsigned AttrSpellingListIndex, 2187 MSInheritanceAttr::Spelling SemanticSpelling); 2188 FormatAttr *mergeFormatAttr(Decl *D, SourceRange Range, 2189 IdentifierInfo *Format, int FormatIdx, 2190 int FirstArg, unsigned AttrSpellingListIndex); 2191 SectionAttr *mergeSectionAttr(Decl *D, SourceRange Range, StringRef Name, 2192 unsigned AttrSpellingListIndex); 2193 AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D, SourceRange Range, 2194 IdentifierInfo *Ident, 2195 unsigned AttrSpellingListIndex); 2196 MinSizeAttr *mergeMinSizeAttr(Decl *D, SourceRange Range, 2197 unsigned AttrSpellingListIndex); 2198 OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D, SourceRange Range, 2199 unsigned AttrSpellingListIndex); 2200 InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, SourceRange Range, 2201 IdentifierInfo *Ident, 2202 unsigned AttrSpellingListIndex); 2203 CommonAttr *mergeCommonAttr(Decl *D, SourceRange Range, IdentifierInfo *Ident, 2204 unsigned AttrSpellingListIndex); 2205 2206 void mergeDeclAttributes(NamedDecl *New, Decl *Old, 2207 AvailabilityMergeKind AMK = AMK_Redeclaration); 2208 void MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, 2209 LookupResult &OldDecls); 2210 bool MergeFunctionDecl(FunctionDecl *New, NamedDecl *&Old, Scope *S, 2211 bool MergeTypeWithOld); 2212 bool MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old, 2213 Scope *S, bool MergeTypeWithOld); 2214 void mergeObjCMethodDecls(ObjCMethodDecl *New, ObjCMethodDecl *Old); 2215 void MergeVarDecl(VarDecl *New, LookupResult &Previous); 2216 void MergeVarDeclTypes(VarDecl *New, VarDecl *Old, bool MergeTypeWithOld); 2217 void MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old); 2218 bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S); 2219 2220 // AssignmentAction - This is used by all the assignment diagnostic functions 2221 // to represent what is actually causing the operation 2222 enum AssignmentAction { 2223 AA_Assigning, 2224 AA_Passing, 2225 AA_Returning, 2226 AA_Converting, 2227 AA_Initializing, 2228 AA_Sending, 2229 AA_Casting, 2230 AA_Passing_CFAudited 2231 }; 2232 2233 /// C++ Overloading. 2234 enum OverloadKind { 2235 /// This is a legitimate overload: the existing declarations are 2236 /// functions or function templates with different signatures. 2237 Ovl_Overload, 2238 2239 /// This is not an overload because the signature exactly matches 2240 /// an existing declaration. 2241 Ovl_Match, 2242 2243 /// This is not an overload because the lookup results contain a 2244 /// non-function. 2245 Ovl_NonFunction 2246 }; 2247 OverloadKind CheckOverload(Scope *S, 2248 FunctionDecl *New, 2249 const LookupResult &OldDecls, 2250 NamedDecl *&OldDecl, 2251 bool IsForUsingDecl); 2252 bool IsOverload(FunctionDecl *New, FunctionDecl *Old, bool IsForUsingDecl, 2253 bool ConsiderCudaAttrs = true); 2254 2255 /// \brief Checks availability of the function depending on the current 2256 /// function context.Inside an unavailable function,unavailability is ignored. 2257 /// 2258 /// \returns true if \p FD is unavailable and current context is inside 2259 /// an available function, false otherwise. 2260 bool isFunctionConsideredUnavailable(FunctionDecl *FD); 2261 2262 ImplicitConversionSequence 2263 TryImplicitConversion(Expr *From, QualType ToType, 2264 bool SuppressUserConversions, 2265 bool AllowExplicit, 2266 bool InOverloadResolution, 2267 bool CStyle, 2268 bool AllowObjCWritebackConversion); 2269 2270 bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType); 2271 bool IsFloatingPointPromotion(QualType FromType, QualType ToType); 2272 bool IsComplexPromotion(QualType FromType, QualType ToType); 2273 bool IsPointerConversion(Expr *From, QualType FromType, QualType ToType, 2274 bool InOverloadResolution, 2275 QualType& ConvertedType, bool &IncompatibleObjC); 2276 bool isObjCPointerConversion(QualType FromType, QualType ToType, 2277 QualType& ConvertedType, bool &IncompatibleObjC); 2278 bool isObjCWritebackConversion(QualType FromType, QualType ToType, 2279 QualType &ConvertedType); 2280 bool IsBlockPointerConversion(QualType FromType, QualType ToType, 2281 QualType& ConvertedType); 2282 bool FunctionParamTypesAreEqual(const FunctionProtoType *OldType, 2283 const FunctionProtoType *NewType, 2284 unsigned *ArgPos = nullptr); 2285 void HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, 2286 QualType FromType, QualType ToType); 2287 2288 void maybeExtendBlockObject(ExprResult &E); 2289 CastKind PrepareCastToObjCObjectPointer(ExprResult &E); 2290 bool CheckPointerConversion(Expr *From, QualType ToType, 2291 CastKind &Kind, 2292 CXXCastPath& BasePath, 2293 bool IgnoreBaseAccess, 2294 bool Diagnose = true); 2295 bool IsMemberPointerConversion(Expr *From, QualType FromType, QualType ToType, 2296 bool InOverloadResolution, 2297 QualType &ConvertedType); 2298 bool CheckMemberPointerConversion(Expr *From, QualType ToType, 2299 CastKind &Kind, 2300 CXXCastPath &BasePath, 2301 bool IgnoreBaseAccess); 2302 bool IsQualificationConversion(QualType FromType, QualType ToType, 2303 bool CStyle, bool &ObjCLifetimeConversion); 2304 bool IsNoReturnConversion(QualType FromType, QualType ToType, 2305 QualType &ResultTy); 2306 bool DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType); 2307 bool isSameOrCompatibleFunctionType(CanQualType Param, CanQualType Arg); 2308 2309 ExprResult PerformMoveOrCopyInitialization(const InitializedEntity &Entity, 2310 const VarDecl *NRVOCandidate, 2311 QualType ResultType, 2312 Expr *Value, 2313 bool AllowNRVO = true); 2314 2315 bool CanPerformCopyInitialization(const InitializedEntity &Entity, 2316 ExprResult Init); 2317 ExprResult PerformCopyInitialization(const InitializedEntity &Entity, 2318 SourceLocation EqualLoc, 2319 ExprResult Init, 2320 bool TopLevelOfInitList = false, 2321 bool AllowExplicit = false); 2322 ExprResult PerformObjectArgumentInitialization(Expr *From, 2323 NestedNameSpecifier *Qualifier, 2324 NamedDecl *FoundDecl, 2325 CXXMethodDecl *Method); 2326 2327 ExprResult PerformContextuallyConvertToBool(Expr *From); 2328 ExprResult PerformContextuallyConvertToObjCPointer(Expr *From); 2329 2330 /// Contexts in which a converted constant expression is required. 2331 enum CCEKind { 2332 CCEK_CaseValue, ///< Expression in a case label. 2333 CCEK_Enumerator, ///< Enumerator value with fixed underlying type. 2334 CCEK_TemplateArg, ///< Value of a non-type template parameter. 2335 CCEK_NewExpr, ///< Constant expression in a noptr-new-declarator. 2336 CCEK_ConstexprIf ///< Condition in a constexpr if statement. 2337 }; 2338 ExprResult CheckConvertedConstantExpression(Expr *From, QualType T, 2339 llvm::APSInt &Value, CCEKind CCE); 2340 ExprResult CheckConvertedConstantExpression(Expr *From, QualType T, 2341 APValue &Value, CCEKind CCE); 2342 2343 /// \brief Abstract base class used to perform a contextual implicit 2344 /// conversion from an expression to any type passing a filter. 2345 class ContextualImplicitConverter { 2346 public: 2347 bool Suppress; 2348 bool SuppressConversion; 2349 2350 ContextualImplicitConverter(bool Suppress = false, 2351 bool SuppressConversion = false) Suppress(Suppress)2352 : Suppress(Suppress), SuppressConversion(SuppressConversion) {} 2353 2354 /// \brief Determine whether the specified type is a valid destination type 2355 /// for this conversion. 2356 virtual bool match(QualType T) = 0; 2357 2358 /// \brief Emits a diagnostic complaining that the expression does not have 2359 /// integral or enumeration type. 2360 virtual SemaDiagnosticBuilder 2361 diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) = 0; 2362 2363 /// \brief Emits a diagnostic when the expression has incomplete class type. 2364 virtual SemaDiagnosticBuilder 2365 diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0; 2366 2367 /// \brief Emits a diagnostic when the only matching conversion function 2368 /// is explicit. 2369 virtual SemaDiagnosticBuilder diagnoseExplicitConv( 2370 Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0; 2371 2372 /// \brief Emits a note for the explicit conversion function. 2373 virtual SemaDiagnosticBuilder 2374 noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0; 2375 2376 /// \brief Emits a diagnostic when there are multiple possible conversion 2377 /// functions. 2378 virtual SemaDiagnosticBuilder 2379 diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) = 0; 2380 2381 /// \brief Emits a note for one of the candidate conversions. 2382 virtual SemaDiagnosticBuilder 2383 noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0; 2384 2385 /// \brief Emits a diagnostic when we picked a conversion function 2386 /// (for cases when we are not allowed to pick a conversion function). 2387 virtual SemaDiagnosticBuilder diagnoseConversion( 2388 Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0; 2389 ~ContextualImplicitConverter()2390 virtual ~ContextualImplicitConverter() {} 2391 }; 2392 2393 class ICEConvertDiagnoser : public ContextualImplicitConverter { 2394 bool AllowScopedEnumerations; 2395 2396 public: ICEConvertDiagnoser(bool AllowScopedEnumerations,bool Suppress,bool SuppressConversion)2397 ICEConvertDiagnoser(bool AllowScopedEnumerations, 2398 bool Suppress, bool SuppressConversion) 2399 : ContextualImplicitConverter(Suppress, SuppressConversion), 2400 AllowScopedEnumerations(AllowScopedEnumerations) {} 2401 2402 /// Match an integral or (possibly scoped) enumeration type. 2403 bool match(QualType T) override; 2404 2405 SemaDiagnosticBuilder diagnoseNoMatch(Sema & S,SourceLocation Loc,QualType T)2406 diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) override { 2407 return diagnoseNotInt(S, Loc, T); 2408 } 2409 2410 /// \brief Emits a diagnostic complaining that the expression does not have 2411 /// integral or enumeration type. 2412 virtual SemaDiagnosticBuilder 2413 diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) = 0; 2414 }; 2415 2416 /// Perform a contextual implicit conversion. 2417 ExprResult PerformContextualImplicitConversion( 2418 SourceLocation Loc, Expr *FromE, ContextualImplicitConverter &Converter); 2419 2420 2421 enum ObjCSubscriptKind { 2422 OS_Array, 2423 OS_Dictionary, 2424 OS_Error 2425 }; 2426 ObjCSubscriptKind CheckSubscriptingKind(Expr *FromE); 2427 2428 // Note that LK_String is intentionally after the other literals, as 2429 // this is used for diagnostics logic. 2430 enum ObjCLiteralKind { 2431 LK_Array, 2432 LK_Dictionary, 2433 LK_Numeric, 2434 LK_Boxed, 2435 LK_String, 2436 LK_Block, 2437 LK_None 2438 }; 2439 ObjCLiteralKind CheckLiteralKind(Expr *FromE); 2440 2441 ExprResult PerformObjectMemberConversion(Expr *From, 2442 NestedNameSpecifier *Qualifier, 2443 NamedDecl *FoundDecl, 2444 NamedDecl *Member); 2445 2446 // Members have to be NamespaceDecl* or TranslationUnitDecl*. 2447 // TODO: make this is a typesafe union. 2448 typedef llvm::SmallSetVector<DeclContext *, 16> AssociatedNamespaceSet; 2449 typedef llvm::SmallSetVector<CXXRecordDecl *, 16> AssociatedClassSet; 2450 2451 void AddOverloadCandidate(FunctionDecl *Function, 2452 DeclAccessPair FoundDecl, 2453 ArrayRef<Expr *> Args, 2454 OverloadCandidateSet& CandidateSet, 2455 bool SuppressUserConversions = false, 2456 bool PartialOverloading = false, 2457 bool AllowExplicit = false); 2458 void AddFunctionCandidates(const UnresolvedSetImpl &Functions, 2459 ArrayRef<Expr *> Args, 2460 OverloadCandidateSet &CandidateSet, 2461 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr, 2462 bool SuppressUserConversions = false, 2463 bool PartialOverloading = false); 2464 void AddMethodCandidate(DeclAccessPair FoundDecl, 2465 QualType ObjectType, 2466 Expr::Classification ObjectClassification, 2467 ArrayRef<Expr *> Args, 2468 OverloadCandidateSet& CandidateSet, 2469 bool SuppressUserConversion = false); 2470 void AddMethodCandidate(CXXMethodDecl *Method, 2471 DeclAccessPair FoundDecl, 2472 CXXRecordDecl *ActingContext, QualType ObjectType, 2473 Expr::Classification ObjectClassification, 2474 ArrayRef<Expr *> Args, 2475 OverloadCandidateSet& CandidateSet, 2476 bool SuppressUserConversions = false, 2477 bool PartialOverloading = false); 2478 void AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl, 2479 DeclAccessPair FoundDecl, 2480 CXXRecordDecl *ActingContext, 2481 TemplateArgumentListInfo *ExplicitTemplateArgs, 2482 QualType ObjectType, 2483 Expr::Classification ObjectClassification, 2484 ArrayRef<Expr *> Args, 2485 OverloadCandidateSet& CandidateSet, 2486 bool SuppressUserConversions = false, 2487 bool PartialOverloading = false); 2488 void AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate, 2489 DeclAccessPair FoundDecl, 2490 TemplateArgumentListInfo *ExplicitTemplateArgs, 2491 ArrayRef<Expr *> Args, 2492 OverloadCandidateSet& CandidateSet, 2493 bool SuppressUserConversions = false, 2494 bool PartialOverloading = false); 2495 void AddConversionCandidate(CXXConversionDecl *Conversion, 2496 DeclAccessPair FoundDecl, 2497 CXXRecordDecl *ActingContext, 2498 Expr *From, QualType ToType, 2499 OverloadCandidateSet& CandidateSet, 2500 bool AllowObjCConversionOnExplicit); 2501 void AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate, 2502 DeclAccessPair FoundDecl, 2503 CXXRecordDecl *ActingContext, 2504 Expr *From, QualType ToType, 2505 OverloadCandidateSet &CandidateSet, 2506 bool AllowObjCConversionOnExplicit); 2507 void AddSurrogateCandidate(CXXConversionDecl *Conversion, 2508 DeclAccessPair FoundDecl, 2509 CXXRecordDecl *ActingContext, 2510 const FunctionProtoType *Proto, 2511 Expr *Object, ArrayRef<Expr *> Args, 2512 OverloadCandidateSet& CandidateSet); 2513 void AddMemberOperatorCandidates(OverloadedOperatorKind Op, 2514 SourceLocation OpLoc, ArrayRef<Expr *> Args, 2515 OverloadCandidateSet& CandidateSet, 2516 SourceRange OpRange = SourceRange()); 2517 void AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys, 2518 ArrayRef<Expr *> Args, 2519 OverloadCandidateSet& CandidateSet, 2520 bool IsAssignmentOperator = false, 2521 unsigned NumContextualBoolArguments = 0); 2522 void AddBuiltinOperatorCandidates(OverloadedOperatorKind Op, 2523 SourceLocation OpLoc, ArrayRef<Expr *> Args, 2524 OverloadCandidateSet& CandidateSet); 2525 void AddArgumentDependentLookupCandidates(DeclarationName Name, 2526 SourceLocation Loc, 2527 ArrayRef<Expr *> Args, 2528 TemplateArgumentListInfo *ExplicitTemplateArgs, 2529 OverloadCandidateSet& CandidateSet, 2530 bool PartialOverloading = false); 2531 2532 // Emit as a 'note' the specific overload candidate 2533 void NoteOverloadCandidate(NamedDecl *Found, FunctionDecl *Fn, 2534 QualType DestType = QualType(), 2535 bool TakingAddress = false); 2536 2537 // Emit as a series of 'note's all template and non-templates identified by 2538 // the expression Expr 2539 void NoteAllOverloadCandidates(Expr *E, QualType DestType = QualType(), 2540 bool TakingAddress = false); 2541 2542 /// Check the enable_if expressions on the given function. Returns the first 2543 /// failing attribute, or NULL if they were all successful. 2544 EnableIfAttr *CheckEnableIf(FunctionDecl *Function, ArrayRef<Expr *> Args, 2545 bool MissingImplicitThis = false); 2546 2547 /// Returns whether the given function's address can be taken or not, 2548 /// optionally emitting a diagnostic if the address can't be taken. 2549 /// 2550 /// Returns false if taking the address of the function is illegal. 2551 bool checkAddressOfFunctionIsAvailable(const FunctionDecl *Function, 2552 bool Complain = false, 2553 SourceLocation Loc = SourceLocation()); 2554 2555 // [PossiblyAFunctionType] --> [Return] 2556 // NonFunctionType --> NonFunctionType 2557 // R (A) --> R(A) 2558 // R (*)(A) --> R (A) 2559 // R (&)(A) --> R (A) 2560 // R (S::*)(A) --> R (A) 2561 QualType ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType); 2562 2563 FunctionDecl * 2564 ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, 2565 QualType TargetType, 2566 bool Complain, 2567 DeclAccessPair &Found, 2568 bool *pHadMultipleCandidates = nullptr); 2569 2570 FunctionDecl * 2571 resolveAddressOfOnlyViableOverloadCandidate(Expr *E, 2572 DeclAccessPair &FoundResult); 2573 2574 bool resolveAndFixAddressOfOnlyViableOverloadCandidate(ExprResult &SrcExpr); 2575 2576 FunctionDecl * 2577 ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl, 2578 bool Complain = false, 2579 DeclAccessPair *Found = nullptr); 2580 2581 bool ResolveAndFixSingleFunctionTemplateSpecialization( 2582 ExprResult &SrcExpr, 2583 bool DoFunctionPointerConverion = false, 2584 bool Complain = false, 2585 SourceRange OpRangeForComplaining = SourceRange(), 2586 QualType DestTypeForComplaining = QualType(), 2587 unsigned DiagIDForComplaining = 0); 2588 2589 2590 Expr *FixOverloadedFunctionReference(Expr *E, 2591 DeclAccessPair FoundDecl, 2592 FunctionDecl *Fn); 2593 ExprResult FixOverloadedFunctionReference(ExprResult, 2594 DeclAccessPair FoundDecl, 2595 FunctionDecl *Fn); 2596 2597 void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE, 2598 ArrayRef<Expr *> Args, 2599 OverloadCandidateSet &CandidateSet, 2600 bool PartialOverloading = false); 2601 2602 // An enum used to represent the different possible results of building a 2603 // range-based for loop. 2604 enum ForRangeStatus { 2605 FRS_Success, 2606 FRS_NoViableFunction, 2607 FRS_DiagnosticIssued 2608 }; 2609 2610 ForRangeStatus BuildForRangeBeginEndCall(SourceLocation Loc, 2611 SourceLocation RangeLoc, 2612 const DeclarationNameInfo &NameInfo, 2613 LookupResult &MemberLookup, 2614 OverloadCandidateSet *CandidateSet, 2615 Expr *Range, ExprResult *CallExpr); 2616 2617 ExprResult BuildOverloadedCallExpr(Scope *S, Expr *Fn, 2618 UnresolvedLookupExpr *ULE, 2619 SourceLocation LParenLoc, 2620 MultiExprArg Args, 2621 SourceLocation RParenLoc, 2622 Expr *ExecConfig, 2623 bool AllowTypoCorrection=true, 2624 bool CalleesAddressIsTaken=false); 2625 2626 bool buildOverloadedCallSet(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, 2627 MultiExprArg Args, SourceLocation RParenLoc, 2628 OverloadCandidateSet *CandidateSet, 2629 ExprResult *Result); 2630 2631 ExprResult CreateOverloadedUnaryOp(SourceLocation OpLoc, 2632 UnaryOperatorKind Opc, 2633 const UnresolvedSetImpl &Fns, 2634 Expr *input); 2635 2636 ExprResult CreateOverloadedBinOp(SourceLocation OpLoc, 2637 BinaryOperatorKind Opc, 2638 const UnresolvedSetImpl &Fns, 2639 Expr *LHS, Expr *RHS); 2640 2641 ExprResult CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, 2642 SourceLocation RLoc, 2643 Expr *Base,Expr *Idx); 2644 2645 ExprResult 2646 BuildCallToMemberFunction(Scope *S, Expr *MemExpr, 2647 SourceLocation LParenLoc, 2648 MultiExprArg Args, 2649 SourceLocation RParenLoc); 2650 ExprResult 2651 BuildCallToObjectOfClassType(Scope *S, Expr *Object, SourceLocation LParenLoc, 2652 MultiExprArg Args, 2653 SourceLocation RParenLoc); 2654 2655 ExprResult BuildOverloadedArrowExpr(Scope *S, Expr *Base, 2656 SourceLocation OpLoc, 2657 bool *NoArrowOperatorFound = nullptr); 2658 2659 /// CheckCallReturnType - Checks that a call expression's return type is 2660 /// complete. Returns true on failure. The location passed in is the location 2661 /// that best represents the call. 2662 bool CheckCallReturnType(QualType ReturnType, SourceLocation Loc, 2663 CallExpr *CE, FunctionDecl *FD); 2664 2665 /// Helpers for dealing with blocks and functions. 2666 bool CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, 2667 bool CheckParameterNames); 2668 void CheckCXXDefaultArguments(FunctionDecl *FD); 2669 void CheckExtraCXXDefaultArguments(Declarator &D); 2670 Scope *getNonFieldDeclScope(Scope *S); 2671 2672 /// \name Name lookup 2673 /// 2674 /// These routines provide name lookup that is used during semantic 2675 /// analysis to resolve the various kinds of names (identifiers, 2676 /// overloaded operator names, constructor names, etc.) into zero or 2677 /// more declarations within a particular scope. The major entry 2678 /// points are LookupName, which performs unqualified name lookup, 2679 /// and LookupQualifiedName, which performs qualified name lookup. 2680 /// 2681 /// All name lookup is performed based on some specific criteria, 2682 /// which specify what names will be visible to name lookup and how 2683 /// far name lookup should work. These criteria are important both 2684 /// for capturing language semantics (certain lookups will ignore 2685 /// certain names, for example) and for performance, since name 2686 /// lookup is often a bottleneck in the compilation of C++. Name 2687 /// lookup criteria is specified via the LookupCriteria enumeration. 2688 /// 2689 /// The results of name lookup can vary based on the kind of name 2690 /// lookup performed, the current language, and the translation 2691 /// unit. In C, for example, name lookup will either return nothing 2692 /// (no entity found) or a single declaration. In C++, name lookup 2693 /// can additionally refer to a set of overloaded functions or 2694 /// result in an ambiguity. All of the possible results of name 2695 /// lookup are captured by the LookupResult class, which provides 2696 /// the ability to distinguish among them. 2697 //@{ 2698 2699 /// @brief Describes the kind of name lookup to perform. 2700 enum LookupNameKind { 2701 /// Ordinary name lookup, which finds ordinary names (functions, 2702 /// variables, typedefs, etc.) in C and most kinds of names 2703 /// (functions, variables, members, types, etc.) in C++. 2704 LookupOrdinaryName = 0, 2705 /// Tag name lookup, which finds the names of enums, classes, 2706 /// structs, and unions. 2707 LookupTagName, 2708 /// Label name lookup. 2709 LookupLabel, 2710 /// Member name lookup, which finds the names of 2711 /// class/struct/union members. 2712 LookupMemberName, 2713 /// Look up of an operator name (e.g., operator+) for use with 2714 /// operator overloading. This lookup is similar to ordinary name 2715 /// lookup, but will ignore any declarations that are class members. 2716 LookupOperatorName, 2717 /// Look up of a name that precedes the '::' scope resolution 2718 /// operator in C++. This lookup completely ignores operator, object, 2719 /// function, and enumerator names (C++ [basic.lookup.qual]p1). 2720 LookupNestedNameSpecifierName, 2721 /// Look up a namespace name within a C++ using directive or 2722 /// namespace alias definition, ignoring non-namespace names (C++ 2723 /// [basic.lookup.udir]p1). 2724 LookupNamespaceName, 2725 /// Look up all declarations in a scope with the given name, 2726 /// including resolved using declarations. This is appropriate 2727 /// for checking redeclarations for a using declaration. 2728 LookupUsingDeclName, 2729 /// Look up an ordinary name that is going to be redeclared as a 2730 /// name with linkage. This lookup ignores any declarations that 2731 /// are outside of the current scope unless they have linkage. See 2732 /// C99 6.2.2p4-5 and C++ [basic.link]p6. 2733 LookupRedeclarationWithLinkage, 2734 /// Look up a friend of a local class. This lookup does not look 2735 /// outside the innermost non-class scope. See C++11 [class.friend]p11. 2736 LookupLocalFriendName, 2737 /// Look up the name of an Objective-C protocol. 2738 LookupObjCProtocolName, 2739 /// Look up implicit 'self' parameter of an objective-c method. 2740 LookupObjCImplicitSelfParam, 2741 /// \brief Look up the name of an OpenMP user-defined reduction operation. 2742 LookupOMPReductionName, 2743 /// \brief Look up any declaration with any name. 2744 LookupAnyName 2745 }; 2746 2747 /// \brief Specifies whether (or how) name lookup is being performed for a 2748 /// redeclaration (vs. a reference). 2749 enum RedeclarationKind { 2750 /// \brief The lookup is a reference to this name that is not for the 2751 /// purpose of redeclaring the name. 2752 NotForRedeclaration = 0, 2753 /// \brief The lookup results will be used for redeclaration of a name, 2754 /// if an entity by that name already exists. 2755 ForRedeclaration 2756 }; 2757 2758 /// \brief The possible outcomes of name lookup for a literal operator. 2759 enum LiteralOperatorLookupResult { 2760 /// \brief The lookup resulted in an error. 2761 LOLR_Error, 2762 /// \brief The lookup found a single 'cooked' literal operator, which 2763 /// expects a normal literal to be built and passed to it. 2764 LOLR_Cooked, 2765 /// \brief The lookup found a single 'raw' literal operator, which expects 2766 /// a string literal containing the spelling of the literal token. 2767 LOLR_Raw, 2768 /// \brief The lookup found an overload set of literal operator templates, 2769 /// which expect the characters of the spelling of the literal token to be 2770 /// passed as a non-type template argument pack. 2771 LOLR_Template, 2772 /// \brief The lookup found an overload set of literal operator templates, 2773 /// which expect the character type and characters of the spelling of the 2774 /// string literal token to be passed as template arguments. 2775 LOLR_StringTemplate 2776 }; 2777 2778 SpecialMemberOverloadResult *LookupSpecialMember(CXXRecordDecl *D, 2779 CXXSpecialMember SM, 2780 bool ConstArg, 2781 bool VolatileArg, 2782 bool RValueThis, 2783 bool ConstThis, 2784 bool VolatileThis); 2785 2786 typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator; 2787 typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)> 2788 TypoRecoveryCallback; 2789 2790 private: 2791 bool CppLookupName(LookupResult &R, Scope *S); 2792 2793 struct TypoExprState { 2794 std::unique_ptr<TypoCorrectionConsumer> Consumer; 2795 TypoDiagnosticGenerator DiagHandler; 2796 TypoRecoveryCallback RecoveryHandler; 2797 TypoExprState(); 2798 TypoExprState(TypoExprState&& other) LLVM_NOEXCEPT; 2799 TypoExprState& operator=(TypoExprState&& other) LLVM_NOEXCEPT; 2800 }; 2801 2802 /// \brief The set of unhandled TypoExprs and their associated state. 2803 llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos; 2804 2805 /// \brief Creates a new TypoExpr AST node. 2806 TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC, 2807 TypoDiagnosticGenerator TDG, 2808 TypoRecoveryCallback TRC); 2809 2810 // \brief The set of known/encountered (unique, canonicalized) NamespaceDecls. 2811 // 2812 // The boolean value will be true to indicate that the namespace was loaded 2813 // from an AST/PCH file, or false otherwise. 2814 llvm::MapVector<NamespaceDecl*, bool> KnownNamespaces; 2815 2816 /// \brief Whether we have already loaded known namespaces from an extenal 2817 /// source. 2818 bool LoadedExternalKnownNamespaces; 2819 2820 /// \brief Helper for CorrectTypo and CorrectTypoDelayed used to create and 2821 /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction 2822 /// should be skipped entirely. 2823 std::unique_ptr<TypoCorrectionConsumer> 2824 makeTypoCorrectionConsumer(const DeclarationNameInfo &Typo, 2825 Sema::LookupNameKind LookupKind, Scope *S, 2826 CXXScopeSpec *SS, 2827 std::unique_ptr<CorrectionCandidateCallback> CCC, 2828 DeclContext *MemberContext, bool EnteringContext, 2829 const ObjCObjectPointerType *OPT, 2830 bool ErrorRecovery); 2831 2832 public: 2833 const TypoExprState &getTypoExprState(TypoExpr *TE) const; 2834 2835 /// \brief Clears the state of the given TypoExpr. 2836 void clearDelayedTypo(TypoExpr *TE); 2837 2838 /// \brief Look up a name, looking for a single declaration. Return 2839 /// null if the results were absent, ambiguous, or overloaded. 2840 /// 2841 /// It is preferable to use the elaborated form and explicitly handle 2842 /// ambiguity and overloaded. 2843 NamedDecl *LookupSingleName(Scope *S, DeclarationName Name, 2844 SourceLocation Loc, 2845 LookupNameKind NameKind, 2846 RedeclarationKind Redecl 2847 = NotForRedeclaration); 2848 bool LookupName(LookupResult &R, Scope *S, 2849 bool AllowBuiltinCreation = false); 2850 bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, 2851 bool InUnqualifiedLookup = false); 2852 bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, 2853 CXXScopeSpec &SS); 2854 bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS, 2855 bool AllowBuiltinCreation = false, 2856 bool EnteringContext = false); 2857 ObjCProtocolDecl *LookupProtocol(IdentifierInfo *II, SourceLocation IdLoc, 2858 RedeclarationKind Redecl 2859 = NotForRedeclaration); 2860 bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class); 2861 2862 void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S, 2863 QualType T1, QualType T2, 2864 UnresolvedSetImpl &Functions); 2865 void addOverloadedOperatorToUnresolvedSet(UnresolvedSetImpl &Functions, 2866 DeclAccessPair Operator, 2867 QualType T1, QualType T2); 2868 2869 LabelDecl *LookupOrCreateLabel(IdentifierInfo *II, SourceLocation IdentLoc, 2870 SourceLocation GnuLabelLoc = SourceLocation()); 2871 2872 DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class); 2873 CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class); 2874 CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class, 2875 unsigned Quals); 2876 CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals, 2877 bool RValueThis, unsigned ThisQuals); 2878 CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class, 2879 unsigned Quals); 2880 CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, unsigned Quals, 2881 bool RValueThis, unsigned ThisQuals); 2882 CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class); 2883 2884 bool checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Id); 2885 LiteralOperatorLookupResult LookupLiteralOperator(Scope *S, LookupResult &R, 2886 ArrayRef<QualType> ArgTys, 2887 bool AllowRaw, 2888 bool AllowTemplate, 2889 bool AllowStringTemplate); 2890 bool isKnownName(StringRef name); 2891 2892 void ArgumentDependentLookup(DeclarationName Name, SourceLocation Loc, 2893 ArrayRef<Expr *> Args, ADLResult &Functions); 2894 2895 void LookupVisibleDecls(Scope *S, LookupNameKind Kind, 2896 VisibleDeclConsumer &Consumer, 2897 bool IncludeGlobalScope = true); 2898 void LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind, 2899 VisibleDeclConsumer &Consumer, 2900 bool IncludeGlobalScope = true); 2901 2902 enum CorrectTypoKind { 2903 CTK_NonError, // CorrectTypo used in a non error recovery situation. 2904 CTK_ErrorRecovery // CorrectTypo used in normal error recovery. 2905 }; 2906 2907 TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo, 2908 Sema::LookupNameKind LookupKind, 2909 Scope *S, CXXScopeSpec *SS, 2910 std::unique_ptr<CorrectionCandidateCallback> CCC, 2911 CorrectTypoKind Mode, 2912 DeclContext *MemberContext = nullptr, 2913 bool EnteringContext = false, 2914 const ObjCObjectPointerType *OPT = nullptr, 2915 bool RecordFailure = true); 2916 2917 TypoExpr *CorrectTypoDelayed(const DeclarationNameInfo &Typo, 2918 Sema::LookupNameKind LookupKind, Scope *S, 2919 CXXScopeSpec *SS, 2920 std::unique_ptr<CorrectionCandidateCallback> CCC, 2921 TypoDiagnosticGenerator TDG, 2922 TypoRecoveryCallback TRC, CorrectTypoKind Mode, 2923 DeclContext *MemberContext = nullptr, 2924 bool EnteringContext = false, 2925 const ObjCObjectPointerType *OPT = nullptr); 2926 2927 /// \brief Process any TypoExprs in the given Expr and its children, 2928 /// generating diagnostics as appropriate and returning a new Expr if there 2929 /// were typos that were all successfully corrected and ExprError if one or 2930 /// more typos could not be corrected. 2931 /// 2932 /// \param E The Expr to check for TypoExprs. 2933 /// 2934 /// \param InitDecl A VarDecl to avoid because the Expr being corrected is its 2935 /// initializer. 2936 /// 2937 /// \param Filter A function applied to a newly rebuilt Expr to determine if 2938 /// it is an acceptable/usable result from a single combination of typo 2939 /// corrections. As long as the filter returns ExprError, different 2940 /// combinations of corrections will be tried until all are exhausted. 2941 ExprResult 2942 CorrectDelayedTyposInExpr(Expr *E, VarDecl *InitDecl = nullptr, 2943 llvm::function_ref<ExprResult(Expr *)> Filter = 2944 [](Expr *E) -> ExprResult { return E; }); 2945 2946 ExprResult CorrectDelayedTyposInExpr(Expr * E,llvm::function_ref<ExprResult (Expr *)> Filter)2947 CorrectDelayedTyposInExpr(Expr *E, 2948 llvm::function_ref<ExprResult(Expr *)> Filter) { 2949 return CorrectDelayedTyposInExpr(E, nullptr, Filter); 2950 } 2951 2952 ExprResult 2953 CorrectDelayedTyposInExpr(ExprResult ER, VarDecl *InitDecl = nullptr, 2954 llvm::function_ref<ExprResult(Expr *)> Filter = 2955 [](Expr *E) -> ExprResult { return E; }) { 2956 return ER.isInvalid() ? ER : CorrectDelayedTyposInExpr(ER.get(), Filter); 2957 } 2958 2959 ExprResult CorrectDelayedTyposInExpr(ExprResult ER,llvm::function_ref<ExprResult (Expr *)> Filter)2960 CorrectDelayedTyposInExpr(ExprResult ER, 2961 llvm::function_ref<ExprResult(Expr *)> Filter) { 2962 return CorrectDelayedTyposInExpr(ER, nullptr, Filter); 2963 } 2964 2965 void diagnoseTypo(const TypoCorrection &Correction, 2966 const PartialDiagnostic &TypoDiag, 2967 bool ErrorRecovery = true); 2968 2969 void diagnoseTypo(const TypoCorrection &Correction, 2970 const PartialDiagnostic &TypoDiag, 2971 const PartialDiagnostic &PrevNote, 2972 bool ErrorRecovery = true); 2973 2974 void FindAssociatedClassesAndNamespaces(SourceLocation InstantiationLoc, 2975 ArrayRef<Expr *> Args, 2976 AssociatedNamespaceSet &AssociatedNamespaces, 2977 AssociatedClassSet &AssociatedClasses); 2978 2979 void FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S, 2980 bool ConsiderLinkage, bool AllowInlineNamespace); 2981 2982 void DiagnoseAmbiguousLookup(LookupResult &Result); 2983 //@} 2984 2985 ObjCInterfaceDecl *getObjCInterfaceDecl(IdentifierInfo *&Id, 2986 SourceLocation IdLoc, 2987 bool TypoCorrection = false); 2988 NamedDecl *LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, 2989 Scope *S, bool ForRedeclaration, 2990 SourceLocation Loc); 2991 NamedDecl *ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, 2992 Scope *S); 2993 void AddKnownFunctionAttributes(FunctionDecl *FD); 2994 2995 // More parsing and symbol table subroutines. 2996 2997 void ProcessPragmaWeak(Scope *S, Decl *D); 2998 // Decl attributes - this routine is the top level dispatcher. 2999 void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD); 3000 void ProcessDeclAttributeList(Scope *S, Decl *D, const AttributeList *AL, 3001 bool IncludeCXX11Attributes = true); 3002 bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl, 3003 const AttributeList *AttrList); 3004 3005 void checkUnusedDeclAttributes(Declarator &D); 3006 3007 /// Determine if type T is a valid subject for a nonnull and similar 3008 /// attributes. By default, we look through references (the behavior used by 3009 /// nonnull), but if the second parameter is true, then we treat a reference 3010 /// type as valid. 3011 bool isValidPointerAttrType(QualType T, bool RefOkay = false); 3012 3013 bool CheckRegparmAttr(const AttributeList &attr, unsigned &value); 3014 bool CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC, 3015 const FunctionDecl *FD = nullptr); 3016 bool CheckNoReturnAttr(const AttributeList &attr); 3017 bool checkStringLiteralArgumentAttr(const AttributeList &Attr, 3018 unsigned ArgNum, StringRef &Str, 3019 SourceLocation *ArgLocation = nullptr); 3020 bool checkSectionName(SourceLocation LiteralLoc, StringRef Str); 3021 void checkTargetAttr(SourceLocation LiteralLoc, StringRef Str); 3022 bool checkMSInheritanceAttrOnDefinition( 3023 CXXRecordDecl *RD, SourceRange Range, bool BestCase, 3024 MSInheritanceAttr::Spelling SemanticSpelling); 3025 3026 void CheckAlignasUnderalignment(Decl *D); 3027 3028 /// Adjust the calling convention of a method to be the ABI default if it 3029 /// wasn't specified explicitly. This handles method types formed from 3030 /// function type typedefs and typename template arguments. 3031 void adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor, 3032 SourceLocation Loc); 3033 3034 // Check if there is an explicit attribute, but only look through parens. 3035 // The intent is to look for an attribute on the current declarator, but not 3036 // one that came from a typedef. 3037 bool hasExplicitCallingConv(QualType &T); 3038 3039 /// Get the outermost AttributedType node that sets a calling convention. 3040 /// Valid types should not have multiple attributes with different CCs. 3041 const AttributedType *getCallingConvAttributedType(QualType T) const; 3042 3043 /// Check whether a nullability type specifier can be added to the given 3044 /// type. 3045 /// 3046 /// \param type The type to which the nullability specifier will be 3047 /// added. On success, this type will be updated appropriately. 3048 /// 3049 /// \param nullability The nullability specifier to add. 3050 /// 3051 /// \param nullabilityLoc The location of the nullability specifier. 3052 /// 3053 /// \param isContextSensitive Whether this nullability specifier was 3054 /// written as a context-sensitive keyword (in an Objective-C 3055 /// method) or an Objective-C property attribute, rather than as an 3056 /// underscored type specifier. 3057 /// 3058 /// \returns true if nullability cannot be applied, false otherwise. 3059 bool checkNullabilityTypeSpecifier(QualType &type, NullabilityKind nullability, 3060 SourceLocation nullabilityLoc, 3061 bool isContextSensitive); 3062 3063 /// \brief Stmt attributes - this routine is the top level dispatcher. 3064 StmtResult ProcessStmtAttributes(Stmt *Stmt, AttributeList *Attrs, 3065 SourceRange Range); 3066 3067 void WarnConflictingTypedMethods(ObjCMethodDecl *Method, 3068 ObjCMethodDecl *MethodDecl, 3069 bool IsProtocolMethodDecl); 3070 3071 void CheckConflictingOverridingMethod(ObjCMethodDecl *Method, 3072 ObjCMethodDecl *Overridden, 3073 bool IsProtocolMethodDecl); 3074 3075 /// WarnExactTypedMethods - This routine issues a warning if method 3076 /// implementation declaration matches exactly that of its declaration. 3077 void WarnExactTypedMethods(ObjCMethodDecl *Method, 3078 ObjCMethodDecl *MethodDecl, 3079 bool IsProtocolMethodDecl); 3080 3081 typedef llvm::SmallPtrSet<Selector, 8> SelectorSet; 3082 typedef llvm::DenseMap<Selector, ObjCMethodDecl*> ProtocolsMethodsMap; 3083 3084 /// CheckImplementationIvars - This routine checks if the instance variables 3085 /// listed in the implelementation match those listed in the interface. 3086 void CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, 3087 ObjCIvarDecl **Fields, unsigned nIvars, 3088 SourceLocation Loc); 3089 3090 /// ImplMethodsVsClassMethods - This is main routine to warn if any method 3091 /// remains unimplemented in the class or category \@implementation. 3092 void ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl, 3093 ObjCContainerDecl* IDecl, 3094 bool IncompleteImpl = false); 3095 3096 /// DiagnoseUnimplementedProperties - This routine warns on those properties 3097 /// which must be implemented by this implementation. 3098 void DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl, 3099 ObjCContainerDecl *CDecl, 3100 bool SynthesizeProperties); 3101 3102 /// Diagnose any null-resettable synthesized setters. 3103 void diagnoseNullResettableSynthesizedSetters(const ObjCImplDecl *impDecl); 3104 3105 /// DefaultSynthesizeProperties - This routine default synthesizes all 3106 /// properties which must be synthesized in the class's \@implementation. 3107 void DefaultSynthesizeProperties (Scope *S, ObjCImplDecl* IMPDecl, 3108 ObjCInterfaceDecl *IDecl); 3109 void DefaultSynthesizeProperties(Scope *S, Decl *D); 3110 3111 /// IvarBacksCurrentMethodAccessor - This routine returns 'true' if 'IV' is 3112 /// an ivar synthesized for 'Method' and 'Method' is a property accessor 3113 /// declared in class 'IFace'. 3114 bool IvarBacksCurrentMethodAccessor(ObjCInterfaceDecl *IFace, 3115 ObjCMethodDecl *Method, ObjCIvarDecl *IV); 3116 3117 /// DiagnoseUnusedBackingIvarInAccessor - Issue an 'unused' warning if ivar which 3118 /// backs the property is not used in the property's accessor. 3119 void DiagnoseUnusedBackingIvarInAccessor(Scope *S, 3120 const ObjCImplementationDecl *ImplD); 3121 3122 /// GetIvarBackingPropertyAccessor - If method is a property setter/getter and 3123 /// it property has a backing ivar, returns this ivar; otherwise, returns NULL. 3124 /// It also returns ivar's property on success. 3125 ObjCIvarDecl *GetIvarBackingPropertyAccessor(const ObjCMethodDecl *Method, 3126 const ObjCPropertyDecl *&PDecl) const; 3127 3128 /// Called by ActOnProperty to handle \@property declarations in 3129 /// class extensions. 3130 ObjCPropertyDecl *HandlePropertyInClassExtension(Scope *S, 3131 SourceLocation AtLoc, 3132 SourceLocation LParenLoc, 3133 FieldDeclarator &FD, 3134 Selector GetterSel, 3135 Selector SetterSel, 3136 const bool isReadWrite, 3137 unsigned &Attributes, 3138 const unsigned AttributesAsWritten, 3139 QualType T, 3140 TypeSourceInfo *TSI, 3141 tok::ObjCKeywordKind MethodImplKind); 3142 3143 /// Called by ActOnProperty and HandlePropertyInClassExtension to 3144 /// handle creating the ObjcPropertyDecl for a category or \@interface. 3145 ObjCPropertyDecl *CreatePropertyDecl(Scope *S, 3146 ObjCContainerDecl *CDecl, 3147 SourceLocation AtLoc, 3148 SourceLocation LParenLoc, 3149 FieldDeclarator &FD, 3150 Selector GetterSel, 3151 Selector SetterSel, 3152 const bool isReadWrite, 3153 const unsigned Attributes, 3154 const unsigned AttributesAsWritten, 3155 QualType T, 3156 TypeSourceInfo *TSI, 3157 tok::ObjCKeywordKind MethodImplKind, 3158 DeclContext *lexicalDC = nullptr); 3159 3160 /// AtomicPropertySetterGetterRules - This routine enforces the rule (via 3161 /// warning) when atomic property has one but not the other user-declared 3162 /// setter or getter. 3163 void AtomicPropertySetterGetterRules(ObjCImplDecl* IMPDecl, 3164 ObjCInterfaceDecl* IDecl); 3165 3166 void DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D); 3167 3168 void DiagnoseMissingDesignatedInitOverrides( 3169 const ObjCImplementationDecl *ImplD, 3170 const ObjCInterfaceDecl *IFD); 3171 3172 void DiagnoseDuplicateIvars(ObjCInterfaceDecl *ID, ObjCInterfaceDecl *SID); 3173 3174 enum MethodMatchStrategy { 3175 MMS_loose, 3176 MMS_strict 3177 }; 3178 3179 /// MatchTwoMethodDeclarations - Checks if two methods' type match and returns 3180 /// true, or false, accordingly. 3181 bool MatchTwoMethodDeclarations(const ObjCMethodDecl *Method, 3182 const ObjCMethodDecl *PrevMethod, 3183 MethodMatchStrategy strategy = MMS_strict); 3184 3185 /// MatchAllMethodDeclarations - Check methods declaraed in interface or 3186 /// or protocol against those declared in their implementations. 3187 void MatchAllMethodDeclarations(const SelectorSet &InsMap, 3188 const SelectorSet &ClsMap, 3189 SelectorSet &InsMapSeen, 3190 SelectorSet &ClsMapSeen, 3191 ObjCImplDecl* IMPDecl, 3192 ObjCContainerDecl* IDecl, 3193 bool &IncompleteImpl, 3194 bool ImmediateClass, 3195 bool WarnCategoryMethodImpl=false); 3196 3197 /// CheckCategoryVsClassMethodMatches - Checks that methods implemented in 3198 /// category matches with those implemented in its primary class and 3199 /// warns each time an exact match is found. 3200 void CheckCategoryVsClassMethodMatches(ObjCCategoryImplDecl *CatIMP); 3201 3202 /// \brief Add the given method to the list of globally-known methods. 3203 void addMethodToGlobalList(ObjCMethodList *List, ObjCMethodDecl *Method); 3204 3205 private: 3206 /// AddMethodToGlobalPool - Add an instance or factory method to the global 3207 /// pool. See descriptoin of AddInstanceMethodToGlobalPool. 3208 void AddMethodToGlobalPool(ObjCMethodDecl *Method, bool impl, bool instance); 3209 3210 /// LookupMethodInGlobalPool - Returns the instance or factory method and 3211 /// optionally warns if there are multiple signatures. 3212 ObjCMethodDecl *LookupMethodInGlobalPool(Selector Sel, SourceRange R, 3213 bool receiverIdOrClass, 3214 bool instance); 3215 3216 public: 3217 /// \brief - Returns instance or factory methods in global method pool for 3218 /// given selector. It checks the desired kind first, if none is found, and 3219 /// parameter checkTheOther is set, it then checks the other kind. If no such 3220 /// method or only one method is found, function returns false; otherwise, it 3221 /// returns true. 3222 bool 3223 CollectMultipleMethodsInGlobalPool(Selector Sel, 3224 SmallVectorImpl<ObjCMethodDecl*>& Methods, 3225 bool InstanceFirst, bool CheckTheOther, 3226 const ObjCObjectType *TypeBound = nullptr); 3227 3228 bool 3229 AreMultipleMethodsInGlobalPool(Selector Sel, ObjCMethodDecl *BestMethod, 3230 SourceRange R, bool receiverIdOrClass, 3231 SmallVectorImpl<ObjCMethodDecl*>& Methods); 3232 3233 void 3234 DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl*> &Methods, 3235 Selector Sel, SourceRange R, 3236 bool receiverIdOrClass); 3237 3238 private: 3239 /// \brief - Returns a selector which best matches given argument list or 3240 /// nullptr if none could be found 3241 ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args, 3242 bool IsInstance, 3243 SmallVectorImpl<ObjCMethodDecl*>& Methods); 3244 3245 3246 /// \brief Record the typo correction failure and return an empty correction. 3247 TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc, 3248 bool RecordFailure = true) { 3249 if (RecordFailure) 3250 TypoCorrectionFailures[Typo].insert(TypoLoc); 3251 return TypoCorrection(); 3252 } 3253 3254 public: 3255 /// AddInstanceMethodToGlobalPool - All instance methods in a translation 3256 /// unit are added to a global pool. This allows us to efficiently associate 3257 /// a selector with a method declaraation for purposes of typechecking 3258 /// messages sent to "id" (where the class of the object is unknown). 3259 void AddInstanceMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) { 3260 AddMethodToGlobalPool(Method, impl, /*instance*/true); 3261 } 3262 3263 /// AddFactoryMethodToGlobalPool - Same as above, but for factory methods. 3264 void AddFactoryMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) { 3265 AddMethodToGlobalPool(Method, impl, /*instance*/false); 3266 } 3267 3268 /// AddAnyMethodToGlobalPool - Add any method, instance or factory to global 3269 /// pool. 3270 void AddAnyMethodToGlobalPool(Decl *D); 3271 3272 /// LookupInstanceMethodInGlobalPool - Returns the method and warns if 3273 /// there are multiple signatures. 3274 ObjCMethodDecl *LookupInstanceMethodInGlobalPool(Selector Sel, SourceRange R, 3275 bool receiverIdOrClass=false) { 3276 return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass, 3277 /*instance*/true); 3278 } 3279 3280 /// LookupFactoryMethodInGlobalPool - Returns the method and warns if 3281 /// there are multiple signatures. 3282 ObjCMethodDecl *LookupFactoryMethodInGlobalPool(Selector Sel, SourceRange R, 3283 bool receiverIdOrClass=false) { 3284 return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass, 3285 /*instance*/false); 3286 } 3287 3288 const ObjCMethodDecl *SelectorsForTypoCorrection(Selector Sel, 3289 QualType ObjectType=QualType()); 3290 /// LookupImplementedMethodInGlobalPool - Returns the method which has an 3291 /// implementation. 3292 ObjCMethodDecl *LookupImplementedMethodInGlobalPool(Selector Sel); 3293 3294 /// CollectIvarsToConstructOrDestruct - Collect those ivars which require 3295 /// initialization. 3296 void CollectIvarsToConstructOrDestruct(ObjCInterfaceDecl *OI, 3297 SmallVectorImpl<ObjCIvarDecl*> &Ivars); 3298 3299 //===--------------------------------------------------------------------===// 3300 // Statement Parsing Callbacks: SemaStmt.cpp. 3301 public: 3302 class FullExprArg { 3303 public: FullExprArg()3304 FullExprArg() : E(nullptr) { } FullExprArg(Sema & actions)3305 FullExprArg(Sema &actions) : E(nullptr) { } 3306 release()3307 ExprResult release() { 3308 return E; 3309 } 3310 get()3311 Expr *get() const { return E; } 3312 3313 Expr *operator->() { 3314 return E; 3315 } 3316 3317 private: 3318 // FIXME: No need to make the entire Sema class a friend when it's just 3319 // Sema::MakeFullExpr that needs access to the constructor below. 3320 friend class Sema; 3321 FullExprArg(Expr * expr)3322 explicit FullExprArg(Expr *expr) : E(expr) {} 3323 3324 Expr *E; 3325 }; 3326 MakeFullExpr(Expr * Arg)3327 FullExprArg MakeFullExpr(Expr *Arg) { 3328 return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation()); 3329 } MakeFullExpr(Expr * Arg,SourceLocation CC)3330 FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) { 3331 return FullExprArg(ActOnFinishFullExpr(Arg, CC).get()); 3332 } MakeFullDiscardedValueExpr(Expr * Arg)3333 FullExprArg MakeFullDiscardedValueExpr(Expr *Arg) { 3334 ExprResult FE = 3335 ActOnFinishFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation(), 3336 /*DiscardedValue*/ true); 3337 return FullExprArg(FE.get()); 3338 } 3339 3340 StmtResult ActOnExprStmt(ExprResult Arg); 3341 StmtResult ActOnExprStmtError(); 3342 3343 StmtResult ActOnNullStmt(SourceLocation SemiLoc, 3344 bool HasLeadingEmptyMacro = false); 3345 3346 void ActOnStartOfCompoundStmt(); 3347 void ActOnFinishOfCompoundStmt(); 3348 StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R, 3349 ArrayRef<Stmt *> Elts, bool isStmtExpr); 3350 3351 /// \brief A RAII object to enter scope of a compound statement. 3352 class CompoundScopeRAII { 3353 public: CompoundScopeRAII(Sema & S)3354 CompoundScopeRAII(Sema &S): S(S) { 3355 S.ActOnStartOfCompoundStmt(); 3356 } 3357 ~CompoundScopeRAII()3358 ~CompoundScopeRAII() { 3359 S.ActOnFinishOfCompoundStmt(); 3360 } 3361 3362 private: 3363 Sema &S; 3364 }; 3365 3366 /// An RAII helper that pops function a function scope on exit. 3367 struct FunctionScopeRAII { 3368 Sema &S; 3369 bool Active; FunctionScopeRAIIFunctionScopeRAII3370 FunctionScopeRAII(Sema &S) : S(S), Active(true) {} ~FunctionScopeRAIIFunctionScopeRAII3371 ~FunctionScopeRAII() { 3372 if (Active) 3373 S.PopFunctionScopeInfo(); 3374 } disableFunctionScopeRAII3375 void disable() { Active = false; } 3376 }; 3377 3378 StmtResult ActOnDeclStmt(DeclGroupPtrTy Decl, 3379 SourceLocation StartLoc, 3380 SourceLocation EndLoc); 3381 void ActOnForEachDeclStmt(DeclGroupPtrTy Decl); 3382 StmtResult ActOnForEachLValueExpr(Expr *E); 3383 StmtResult ActOnCaseStmt(SourceLocation CaseLoc, Expr *LHSVal, 3384 SourceLocation DotDotDotLoc, Expr *RHSVal, 3385 SourceLocation ColonLoc); 3386 void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt); 3387 3388 StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc, 3389 SourceLocation ColonLoc, 3390 Stmt *SubStmt, Scope *CurScope); 3391 StmtResult ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, 3392 SourceLocation ColonLoc, Stmt *SubStmt); 3393 3394 StmtResult ActOnAttributedStmt(SourceLocation AttrLoc, 3395 ArrayRef<const Attr*> Attrs, 3396 Stmt *SubStmt); 3397 3398 class ConditionResult; 3399 StmtResult ActOnIfStmt(SourceLocation IfLoc, bool IsConstexpr, 3400 Stmt *InitStmt, 3401 ConditionResult Cond, Stmt *ThenVal, 3402 SourceLocation ElseLoc, Stmt *ElseVal); 3403 StmtResult BuildIfStmt(SourceLocation IfLoc, bool IsConstexpr, 3404 Stmt *InitStmt, 3405 ConditionResult Cond, Stmt *ThenVal, 3406 SourceLocation ElseLoc, Stmt *ElseVal); 3407 StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, 3408 Stmt *InitStmt, 3409 ConditionResult Cond); 3410 StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc, 3411 Stmt *Switch, Stmt *Body); 3412 StmtResult ActOnWhileStmt(SourceLocation WhileLoc, ConditionResult Cond, 3413 Stmt *Body); 3414 StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, 3415 SourceLocation WhileLoc, SourceLocation CondLParen, 3416 Expr *Cond, SourceLocation CondRParen); 3417 3418 StmtResult ActOnForStmt(SourceLocation ForLoc, 3419 SourceLocation LParenLoc, 3420 Stmt *First, 3421 ConditionResult Second, 3422 FullExprArg Third, 3423 SourceLocation RParenLoc, 3424 Stmt *Body); 3425 ExprResult CheckObjCForCollectionOperand(SourceLocation forLoc, 3426 Expr *collection); 3427 StmtResult ActOnObjCForCollectionStmt(SourceLocation ForColLoc, 3428 Stmt *First, Expr *collection, 3429 SourceLocation RParenLoc); 3430 StmtResult FinishObjCForCollectionStmt(Stmt *ForCollection, Stmt *Body); 3431 3432 enum BuildForRangeKind { 3433 /// Initial building of a for-range statement. 3434 BFRK_Build, 3435 /// Instantiation or recovery rebuild of a for-range statement. Don't 3436 /// attempt any typo-correction. 3437 BFRK_Rebuild, 3438 /// Determining whether a for-range statement could be built. Avoid any 3439 /// unnecessary or irreversible actions. 3440 BFRK_Check 3441 }; 3442 3443 StmtResult ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, 3444 SourceLocation CoawaitLoc, 3445 Stmt *LoopVar, 3446 SourceLocation ColonLoc, Expr *Collection, 3447 SourceLocation RParenLoc, 3448 BuildForRangeKind Kind); 3449 StmtResult BuildCXXForRangeStmt(SourceLocation ForLoc, 3450 SourceLocation CoawaitLoc, 3451 SourceLocation ColonLoc, 3452 Stmt *RangeDecl, Stmt *Begin, Stmt *End, 3453 Expr *Cond, Expr *Inc, 3454 Stmt *LoopVarDecl, 3455 SourceLocation RParenLoc, 3456 BuildForRangeKind Kind); 3457 StmtResult FinishCXXForRangeStmt(Stmt *ForRange, Stmt *Body); 3458 3459 StmtResult ActOnGotoStmt(SourceLocation GotoLoc, 3460 SourceLocation LabelLoc, 3461 LabelDecl *TheDecl); 3462 StmtResult ActOnIndirectGotoStmt(SourceLocation GotoLoc, 3463 SourceLocation StarLoc, 3464 Expr *DestExp); 3465 StmtResult ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope); 3466 StmtResult ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope); 3467 3468 void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope, 3469 CapturedRegionKind Kind, unsigned NumParams); 3470 typedef std::pair<StringRef, QualType> CapturedParamNameType; 3471 void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope, 3472 CapturedRegionKind Kind, 3473 ArrayRef<CapturedParamNameType> Params); 3474 StmtResult ActOnCapturedRegionEnd(Stmt *S); 3475 void ActOnCapturedRegionError(); 3476 RecordDecl *CreateCapturedStmtRecordDecl(CapturedDecl *&CD, 3477 SourceLocation Loc, 3478 unsigned NumParams); 3479 VarDecl *getCopyElisionCandidate(QualType ReturnType, Expr *E, 3480 bool AllowParamOrMoveConstructible); 3481 bool isCopyElisionCandidate(QualType ReturnType, const VarDecl *VD, 3482 bool AllowParamOrMoveConstructible); 3483 3484 StmtResult ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, 3485 Scope *CurScope); 3486 StmtResult BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp); 3487 StmtResult ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp); 3488 3489 StmtResult ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, 3490 bool IsVolatile, unsigned NumOutputs, 3491 unsigned NumInputs, IdentifierInfo **Names, 3492 MultiExprArg Constraints, MultiExprArg Exprs, 3493 Expr *AsmString, MultiExprArg Clobbers, 3494 SourceLocation RParenLoc); 3495 3496 ExprResult LookupInlineAsmIdentifier(CXXScopeSpec &SS, 3497 SourceLocation TemplateKWLoc, 3498 UnqualifiedId &Id, 3499 llvm::InlineAsmIdentifierInfo &Info, 3500 bool IsUnevaluatedContext); 3501 bool LookupInlineAsmField(StringRef Base, StringRef Member, 3502 unsigned &Offset, SourceLocation AsmLoc); 3503 ExprResult LookupInlineAsmVarDeclField(Expr *RefExpr, StringRef Member, 3504 llvm::InlineAsmIdentifierInfo &Info, 3505 SourceLocation AsmLoc); 3506 StmtResult ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, 3507 ArrayRef<Token> AsmToks, 3508 StringRef AsmString, 3509 unsigned NumOutputs, unsigned NumInputs, 3510 ArrayRef<StringRef> Constraints, 3511 ArrayRef<StringRef> Clobbers, 3512 ArrayRef<Expr*> Exprs, 3513 SourceLocation EndLoc); 3514 LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName, 3515 SourceLocation Location, 3516 bool AlwaysCreate); 3517 3518 VarDecl *BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType ExceptionType, 3519 SourceLocation StartLoc, 3520 SourceLocation IdLoc, IdentifierInfo *Id, 3521 bool Invalid = false); 3522 3523 Decl *ActOnObjCExceptionDecl(Scope *S, Declarator &D); 3524 3525 StmtResult ActOnObjCAtCatchStmt(SourceLocation AtLoc, SourceLocation RParen, 3526 Decl *Parm, Stmt *Body); 3527 3528 StmtResult ActOnObjCAtFinallyStmt(SourceLocation AtLoc, Stmt *Body); 3529 3530 StmtResult ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, 3531 MultiStmtArg Catch, Stmt *Finally); 3532 3533 StmtResult BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw); 3534 StmtResult ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, 3535 Scope *CurScope); 3536 ExprResult ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, 3537 Expr *operand); 3538 StmtResult ActOnObjCAtSynchronizedStmt(SourceLocation AtLoc, 3539 Expr *SynchExpr, 3540 Stmt *SynchBody); 3541 3542 StmtResult ActOnObjCAutoreleasePoolStmt(SourceLocation AtLoc, Stmt *Body); 3543 3544 VarDecl *BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, 3545 SourceLocation StartLoc, 3546 SourceLocation IdLoc, 3547 IdentifierInfo *Id); 3548 3549 Decl *ActOnExceptionDeclarator(Scope *S, Declarator &D); 3550 3551 StmtResult ActOnCXXCatchBlock(SourceLocation CatchLoc, 3552 Decl *ExDecl, Stmt *HandlerBlock); 3553 StmtResult ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, 3554 ArrayRef<Stmt *> Handlers); 3555 3556 StmtResult ActOnSEHTryBlock(bool IsCXXTry, // try (true) or __try (false) ? 3557 SourceLocation TryLoc, Stmt *TryBlock, 3558 Stmt *Handler); 3559 StmtResult ActOnSEHExceptBlock(SourceLocation Loc, 3560 Expr *FilterExpr, 3561 Stmt *Block); 3562 void ActOnStartSEHFinallyBlock(); 3563 void ActOnAbortSEHFinallyBlock(); 3564 StmtResult ActOnFinishSEHFinallyBlock(SourceLocation Loc, Stmt *Block); 3565 StmtResult ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope); 3566 3567 void DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock); 3568 3569 bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const; 3570 3571 /// \brief If it's a file scoped decl that must warn if not used, keep track 3572 /// of it. 3573 void MarkUnusedFileScopedDecl(const DeclaratorDecl *D); 3574 3575 /// DiagnoseUnusedExprResult - If the statement passed in is an expression 3576 /// whose result is unused, warn. 3577 void DiagnoseUnusedExprResult(const Stmt *S); 3578 void DiagnoseUnusedNestedTypedefs(const RecordDecl *D); 3579 void DiagnoseUnusedDecl(const NamedDecl *ND); 3580 3581 /// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null 3582 /// statement as a \p Body, and it is located on the same line. 3583 /// 3584 /// This helps prevent bugs due to typos, such as: 3585 /// if (condition); 3586 /// do_stuff(); 3587 void DiagnoseEmptyStmtBody(SourceLocation StmtLoc, 3588 const Stmt *Body, 3589 unsigned DiagID); 3590 3591 /// Warn if a for/while loop statement \p S, which is followed by 3592 /// \p PossibleBody, has a suspicious null statement as a body. 3593 void DiagnoseEmptyLoopBody(const Stmt *S, 3594 const Stmt *PossibleBody); 3595 3596 /// Warn if a value is moved to itself. 3597 void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, 3598 SourceLocation OpLoc); 3599 3600 /// \brief Warn if we're implicitly casting from a _Nullable pointer type to a 3601 /// _Nonnull one. 3602 void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType, 3603 SourceLocation Loc); 3604 PushParsingDeclaration(sema::DelayedDiagnosticPool & pool)3605 ParsingDeclState PushParsingDeclaration(sema::DelayedDiagnosticPool &pool) { 3606 return DelayedDiagnostics.push(pool); 3607 } 3608 void PopParsingDeclaration(ParsingDeclState state, Decl *decl); 3609 3610 typedef ProcessingContextState ParsingClassState; PushParsingClass()3611 ParsingClassState PushParsingClass() { 3612 return DelayedDiagnostics.pushUndelayed(); 3613 } PopParsingClass(ParsingClassState state)3614 void PopParsingClass(ParsingClassState state) { 3615 DelayedDiagnostics.popUndelayed(state); 3616 } 3617 3618 void redelayDiagnostics(sema::DelayedDiagnosticPool &pool); 3619 3620 enum AvailabilityDiagnostic { AD_Deprecation, AD_Unavailable, AD_Partial }; 3621 3622 void EmitAvailabilityWarning(AvailabilityDiagnostic AD, 3623 NamedDecl *D, StringRef Message, 3624 SourceLocation Loc, 3625 const ObjCInterfaceDecl *UnknownObjCClass, 3626 const ObjCPropertyDecl *ObjCProperty, 3627 bool ObjCPropertyAccess); 3628 3629 bool makeUnavailableInSystemHeader(SourceLocation loc, 3630 UnavailableAttr::ImplicitReason reason); 3631 3632 //===--------------------------------------------------------------------===// 3633 // Expression Parsing Callbacks: SemaExpr.cpp. 3634 3635 bool CanUseDecl(NamedDecl *D, bool TreatUnavailableAsInvalid); 3636 bool DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc, 3637 const ObjCInterfaceDecl *UnknownObjCClass=nullptr, 3638 bool ObjCPropertyAccess=false); 3639 void NoteDeletedFunction(FunctionDecl *FD); 3640 void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD); 3641 std::string getDeletedOrUnavailableSuffix(const FunctionDecl *FD); 3642 bool DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *PD, 3643 ObjCMethodDecl *Getter, 3644 SourceLocation Loc); 3645 void DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, 3646 ArrayRef<Expr *> Args); 3647 3648 void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext, 3649 Decl *LambdaContextDecl = nullptr, 3650 bool IsDecltype = false); 3651 enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl }; 3652 void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext, 3653 ReuseLambdaContextDecl_t, 3654 bool IsDecltype = false); 3655 void PopExpressionEvaluationContext(); 3656 3657 void DiscardCleanupsInEvaluationContext(); 3658 3659 ExprResult TransformToPotentiallyEvaluated(Expr *E); 3660 ExprResult HandleExprEvaluationContextForTypeof(Expr *E); 3661 3662 ExprResult ActOnConstantExpression(ExprResult Res); 3663 3664 // Functions for marking a declaration referenced. These functions also 3665 // contain the relevant logic for marking if a reference to a function or 3666 // variable is an odr-use (in the C++11 sense). There are separate variants 3667 // for expressions referring to a decl; these exist because odr-use marking 3668 // needs to be delayed for some constant variables when we build one of the 3669 // named expressions. 3670 // 3671 // MightBeOdrUse indicates whether the use could possibly be an odr-use, and 3672 // should usually be true. This only needs to be set to false if the lack of 3673 // odr-use cannot be determined from the current context (for instance, 3674 // because the name denotes a virtual function and was written without an 3675 // explicit nested-name-specifier). 3676 void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse); 3677 void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func, 3678 bool MightBeOdrUse = true); 3679 void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var); 3680 void MarkDeclRefReferenced(DeclRefExpr *E); 3681 void MarkMemberReferenced(MemberExpr *E); 3682 3683 void UpdateMarkingForLValueToRValue(Expr *E); 3684 void CleanupVarDeclMarking(); 3685 3686 enum TryCaptureKind { 3687 TryCapture_Implicit, TryCapture_ExplicitByVal, TryCapture_ExplicitByRef 3688 }; 3689 3690 /// \brief Try to capture the given variable. 3691 /// 3692 /// \param Var The variable to capture. 3693 /// 3694 /// \param Loc The location at which the capture occurs. 3695 /// 3696 /// \param Kind The kind of capture, which may be implicit (for either a 3697 /// block or a lambda), or explicit by-value or by-reference (for a lambda). 3698 /// 3699 /// \param EllipsisLoc The location of the ellipsis, if one is provided in 3700 /// an explicit lambda capture. 3701 /// 3702 /// \param BuildAndDiagnose Whether we are actually supposed to add the 3703 /// captures or diagnose errors. If false, this routine merely check whether 3704 /// the capture can occur without performing the capture itself or complaining 3705 /// if the variable cannot be captured. 3706 /// 3707 /// \param CaptureType Will be set to the type of the field used to capture 3708 /// this variable in the innermost block or lambda. Only valid when the 3709 /// variable can be captured. 3710 /// 3711 /// \param DeclRefType Will be set to the type of a reference to the capture 3712 /// from within the current scope. Only valid when the variable can be 3713 /// captured. 3714 /// 3715 /// \param FunctionScopeIndexToStopAt If non-null, it points to the index 3716 /// of the FunctionScopeInfo stack beyond which we do not attempt to capture. 3717 /// This is useful when enclosing lambdas must speculatively capture 3718 /// variables that may or may not be used in certain specializations of 3719 /// a nested generic lambda. 3720 /// 3721 /// \returns true if an error occurred (i.e., the variable cannot be 3722 /// captured) and false if the capture succeeded. 3723 bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc, TryCaptureKind Kind, 3724 SourceLocation EllipsisLoc, bool BuildAndDiagnose, 3725 QualType &CaptureType, 3726 QualType &DeclRefType, 3727 const unsigned *const FunctionScopeIndexToStopAt); 3728 3729 /// \brief Try to capture the given variable. 3730 bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc, 3731 TryCaptureKind Kind = TryCapture_Implicit, 3732 SourceLocation EllipsisLoc = SourceLocation()); 3733 3734 /// \brief Checks if the variable must be captured. 3735 bool NeedToCaptureVariable(VarDecl *Var, SourceLocation Loc); 3736 3737 /// \brief Given a variable, determine the type that a reference to that 3738 /// variable will have in the given scope. 3739 QualType getCapturedDeclRefType(VarDecl *Var, SourceLocation Loc); 3740 3741 void MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T); 3742 void MarkDeclarationsReferencedInExpr(Expr *E, 3743 bool SkipLocalVariables = false); 3744 3745 /// \brief Try to recover by turning the given expression into a 3746 /// call. Returns true if recovery was attempted or an error was 3747 /// emitted; this may also leave the ExprResult invalid. 3748 bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 3749 bool ForceComplain = false, 3750 bool (*IsPlausibleResult)(QualType) = nullptr); 3751 3752 /// \brief Figure out if an expression could be turned into a call. 3753 bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 3754 UnresolvedSetImpl &NonTemplateOverloads); 3755 3756 /// \brief Conditionally issue a diagnostic based on the current 3757 /// evaluation context. 3758 /// 3759 /// \param Statement If Statement is non-null, delay reporting the 3760 /// diagnostic until the function body is parsed, and then do a basic 3761 /// reachability analysis to determine if the statement is reachable. 3762 /// If it is unreachable, the diagnostic will not be emitted. 3763 bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement, 3764 const PartialDiagnostic &PD); 3765 3766 // Primary Expressions. 3767 SourceRange getExprRange(Expr *E) const; 3768 3769 ExprResult ActOnIdExpression( 3770 Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 3771 UnqualifiedId &Id, bool HasTrailingLParen, bool IsAddressOfOperand, 3772 std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr, 3773 bool IsInlineAsmIdentifier = false, Token *KeywordReplacement = nullptr); 3774 3775 void DecomposeUnqualifiedId(const UnqualifiedId &Id, 3776 TemplateArgumentListInfo &Buffer, 3777 DeclarationNameInfo &NameInfo, 3778 const TemplateArgumentListInfo *&TemplateArgs); 3779 3780 bool 3781 DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, 3782 std::unique_ptr<CorrectionCandidateCallback> CCC, 3783 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr, 3784 ArrayRef<Expr *> Args = None, TypoExpr **Out = nullptr); 3785 3786 ExprResult LookupInObjCMethod(LookupResult &LookUp, Scope *S, 3787 IdentifierInfo *II, 3788 bool AllowBuiltinCreation=false); 3789 3790 ExprResult ActOnDependentIdExpression(const CXXScopeSpec &SS, 3791 SourceLocation TemplateKWLoc, 3792 const DeclarationNameInfo &NameInfo, 3793 bool isAddressOfOperand, 3794 const TemplateArgumentListInfo *TemplateArgs); 3795 3796 ExprResult BuildDeclRefExpr(ValueDecl *D, QualType Ty, 3797 ExprValueKind VK, 3798 SourceLocation Loc, 3799 const CXXScopeSpec *SS = nullptr); 3800 ExprResult 3801 BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, 3802 const DeclarationNameInfo &NameInfo, 3803 const CXXScopeSpec *SS = nullptr, 3804 NamedDecl *FoundD = nullptr, 3805 const TemplateArgumentListInfo *TemplateArgs = nullptr); 3806 ExprResult 3807 BuildAnonymousStructUnionMemberReference( 3808 const CXXScopeSpec &SS, 3809 SourceLocation nameLoc, 3810 IndirectFieldDecl *indirectField, 3811 DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_none), 3812 Expr *baseObjectExpr = nullptr, 3813 SourceLocation opLoc = SourceLocation()); 3814 3815 ExprResult BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, 3816 SourceLocation TemplateKWLoc, 3817 LookupResult &R, 3818 const TemplateArgumentListInfo *TemplateArgs, 3819 const Scope *S); 3820 ExprResult BuildImplicitMemberExpr(const CXXScopeSpec &SS, 3821 SourceLocation TemplateKWLoc, 3822 LookupResult &R, 3823 const TemplateArgumentListInfo *TemplateArgs, 3824 bool IsDefiniteInstance, 3825 const Scope *S); 3826 bool UseArgumentDependentLookup(const CXXScopeSpec &SS, 3827 const LookupResult &R, 3828 bool HasTrailingLParen); 3829 3830 ExprResult 3831 BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, 3832 const DeclarationNameInfo &NameInfo, 3833 bool IsAddressOfOperand, const Scope *S, 3834 TypeSourceInfo **RecoveryTSI = nullptr); 3835 3836 ExprResult BuildDependentDeclRefExpr(const CXXScopeSpec &SS, 3837 SourceLocation TemplateKWLoc, 3838 const DeclarationNameInfo &NameInfo, 3839 const TemplateArgumentListInfo *TemplateArgs); 3840 3841 ExprResult BuildDeclarationNameExpr(const CXXScopeSpec &SS, 3842 LookupResult &R, 3843 bool NeedsADL, 3844 bool AcceptInvalidDecl = false); 3845 ExprResult BuildDeclarationNameExpr( 3846 const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, 3847 NamedDecl *FoundD = nullptr, 3848 const TemplateArgumentListInfo *TemplateArgs = nullptr, 3849 bool AcceptInvalidDecl = false); 3850 3851 ExprResult BuildLiteralOperatorCall(LookupResult &R, 3852 DeclarationNameInfo &SuffixInfo, 3853 ArrayRef<Expr *> Args, 3854 SourceLocation LitEndLoc, 3855 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr); 3856 3857 ExprResult BuildPredefinedExpr(SourceLocation Loc, 3858 PredefinedExpr::IdentType IT); 3859 ExprResult ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind); 3860 ExprResult ActOnIntegerConstant(SourceLocation Loc, uint64_t Val); 3861 3862 bool CheckLoopHintExpr(Expr *E, SourceLocation Loc); 3863 3864 ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr); 3865 ExprResult ActOnCharacterConstant(const Token &Tok, 3866 Scope *UDLScope = nullptr); 3867 ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E); 3868 ExprResult ActOnParenListExpr(SourceLocation L, 3869 SourceLocation R, 3870 MultiExprArg Val); 3871 3872 /// ActOnStringLiteral - The specified tokens were lexed as pasted string 3873 /// fragments (e.g. "foo" "bar" L"baz"). 3874 ExprResult ActOnStringLiteral(ArrayRef<Token> StringToks, 3875 Scope *UDLScope = nullptr); 3876 3877 ExprResult ActOnGenericSelectionExpr(SourceLocation KeyLoc, 3878 SourceLocation DefaultLoc, 3879 SourceLocation RParenLoc, 3880 Expr *ControllingExpr, 3881 ArrayRef<ParsedType> ArgTypes, 3882 ArrayRef<Expr *> ArgExprs); 3883 ExprResult CreateGenericSelectionExpr(SourceLocation KeyLoc, 3884 SourceLocation DefaultLoc, 3885 SourceLocation RParenLoc, 3886 Expr *ControllingExpr, 3887 ArrayRef<TypeSourceInfo *> Types, 3888 ArrayRef<Expr *> Exprs); 3889 3890 // Binary/Unary Operators. 'Tok' is the token for the operator. 3891 ExprResult CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, 3892 Expr *InputExpr); 3893 ExprResult BuildUnaryOp(Scope *S, SourceLocation OpLoc, 3894 UnaryOperatorKind Opc, Expr *Input); 3895 ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc, 3896 tok::TokenKind Op, Expr *Input); 3897 3898 QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc); 3899 3900 ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo, 3901 SourceLocation OpLoc, 3902 UnaryExprOrTypeTrait ExprKind, 3903 SourceRange R); 3904 ExprResult CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, 3905 UnaryExprOrTypeTrait ExprKind); 3906 ExprResult 3907 ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc, 3908 UnaryExprOrTypeTrait ExprKind, 3909 bool IsType, void *TyOrEx, 3910 SourceRange ArgRange); 3911 3912 ExprResult CheckPlaceholderExpr(Expr *E); 3913 bool CheckVecStepExpr(Expr *E); 3914 3915 bool CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind); 3916 bool CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, 3917 SourceRange ExprRange, 3918 UnaryExprOrTypeTrait ExprKind); 3919 ExprResult ActOnSizeofParameterPackExpr(Scope *S, 3920 SourceLocation OpLoc, 3921 IdentifierInfo &Name, 3922 SourceLocation NameLoc, 3923 SourceLocation RParenLoc); 3924 ExprResult ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc, 3925 tok::TokenKind Kind, Expr *Input); 3926 3927 ExprResult ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc, 3928 Expr *Idx, SourceLocation RLoc); 3929 ExprResult CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, 3930 Expr *Idx, SourceLocation RLoc); 3931 ExprResult ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, 3932 Expr *LowerBound, SourceLocation ColonLoc, 3933 Expr *Length, SourceLocation RBLoc); 3934 3935 // This struct is for use by ActOnMemberAccess to allow 3936 // BuildMemberReferenceExpr to be able to reinvoke ActOnMemberAccess after 3937 // changing the access operator from a '.' to a '->' (to see if that is the 3938 // change needed to fix an error about an unknown member, e.g. when the class 3939 // defines a custom operator->). 3940 struct ActOnMemberAccessExtraArgs { 3941 Scope *S; 3942 UnqualifiedId &Id; 3943 Decl *ObjCImpDecl; 3944 }; 3945 3946 ExprResult BuildMemberReferenceExpr( 3947 Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow, 3948 CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 3949 NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, 3950 const TemplateArgumentListInfo *TemplateArgs, 3951 const Scope *S, 3952 ActOnMemberAccessExtraArgs *ExtraArgs = nullptr); 3953 3954 ExprResult 3955 BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc, 3956 bool IsArrow, const CXXScopeSpec &SS, 3957 SourceLocation TemplateKWLoc, 3958 NamedDecl *FirstQualifierInScope, LookupResult &R, 3959 const TemplateArgumentListInfo *TemplateArgs, 3960 const Scope *S, 3961 bool SuppressQualifierCheck = false, 3962 ActOnMemberAccessExtraArgs *ExtraArgs = nullptr); 3963 3964 ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow); 3965 3966 bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType, 3967 const CXXScopeSpec &SS, 3968 const LookupResult &R); 3969 3970 ExprResult ActOnDependentMemberExpr(Expr *Base, QualType BaseType, 3971 bool IsArrow, SourceLocation OpLoc, 3972 const CXXScopeSpec &SS, 3973 SourceLocation TemplateKWLoc, 3974 NamedDecl *FirstQualifierInScope, 3975 const DeclarationNameInfo &NameInfo, 3976 const TemplateArgumentListInfo *TemplateArgs); 3977 3978 ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base, 3979 SourceLocation OpLoc, 3980 tok::TokenKind OpKind, 3981 CXXScopeSpec &SS, 3982 SourceLocation TemplateKWLoc, 3983 UnqualifiedId &Member, 3984 Decl *ObjCImpDecl); 3985 3986 void ActOnDefaultCtorInitializers(Decl *CDtorDecl); 3987 bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, 3988 FunctionDecl *FDecl, 3989 const FunctionProtoType *Proto, 3990 ArrayRef<Expr *> Args, 3991 SourceLocation RParenLoc, 3992 bool ExecConfig = false); 3993 void CheckStaticArrayArgument(SourceLocation CallLoc, 3994 ParmVarDecl *Param, 3995 const Expr *ArgExpr); 3996 3997 /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments. 3998 /// This provides the location of the left/right parens and a list of comma 3999 /// locations. 4000 ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc, 4001 MultiExprArg ArgExprs, SourceLocation RParenLoc, 4002 Expr *ExecConfig = nullptr, 4003 bool IsExecConfig = false); 4004 ExprResult BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, 4005 SourceLocation LParenLoc, 4006 ArrayRef<Expr *> Arg, 4007 SourceLocation RParenLoc, 4008 Expr *Config = nullptr, 4009 bool IsExecConfig = false); 4010 4011 ExprResult ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc, 4012 MultiExprArg ExecConfig, 4013 SourceLocation GGGLoc); 4014 4015 ExprResult ActOnCastExpr(Scope *S, SourceLocation LParenLoc, 4016 Declarator &D, ParsedType &Ty, 4017 SourceLocation RParenLoc, Expr *CastExpr); 4018 ExprResult BuildCStyleCastExpr(SourceLocation LParenLoc, 4019 TypeSourceInfo *Ty, 4020 SourceLocation RParenLoc, 4021 Expr *Op); 4022 CastKind PrepareScalarCast(ExprResult &src, QualType destType); 4023 4024 /// \brief Build an altivec or OpenCL literal. 4025 ExprResult BuildVectorLiteral(SourceLocation LParenLoc, 4026 SourceLocation RParenLoc, Expr *E, 4027 TypeSourceInfo *TInfo); 4028 4029 ExprResult MaybeConvertParenListExprToParenExpr(Scope *S, Expr *ME); 4030 4031 ExprResult ActOnCompoundLiteral(SourceLocation LParenLoc, 4032 ParsedType Ty, 4033 SourceLocation RParenLoc, 4034 Expr *InitExpr); 4035 4036 ExprResult BuildCompoundLiteralExpr(SourceLocation LParenLoc, 4037 TypeSourceInfo *TInfo, 4038 SourceLocation RParenLoc, 4039 Expr *LiteralExpr); 4040 4041 ExprResult ActOnInitList(SourceLocation LBraceLoc, 4042 MultiExprArg InitArgList, 4043 SourceLocation RBraceLoc); 4044 4045 ExprResult ActOnDesignatedInitializer(Designation &Desig, 4046 SourceLocation Loc, 4047 bool GNUSyntax, 4048 ExprResult Init); 4049 4050 private: 4051 static BinaryOperatorKind ConvertTokenKindToBinaryOpcode(tok::TokenKind Kind); 4052 4053 public: 4054 ExprResult ActOnBinOp(Scope *S, SourceLocation TokLoc, 4055 tok::TokenKind Kind, Expr *LHSExpr, Expr *RHSExpr); 4056 ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc, 4057 BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr); 4058 ExprResult CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, 4059 Expr *LHSExpr, Expr *RHSExpr); 4060 4061 void DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc); 4062 4063 /// ActOnConditionalOp - Parse a ?: operation. Note that 'LHS' may be null 4064 /// in the case of a the GNU conditional expr extension. 4065 ExprResult ActOnConditionalOp(SourceLocation QuestionLoc, 4066 SourceLocation ColonLoc, 4067 Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr); 4068 4069 /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo". 4070 ExprResult ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc, 4071 LabelDecl *TheDecl); 4072 4073 void ActOnStartStmtExpr(); 4074 ExprResult ActOnStmtExpr(SourceLocation LPLoc, Stmt *SubStmt, 4075 SourceLocation RPLoc); // "({..})" 4076 void ActOnStmtExprError(); 4077 4078 // __builtin_offsetof(type, identifier(.identifier|[expr])*) 4079 struct OffsetOfComponent { 4080 SourceLocation LocStart, LocEnd; 4081 bool isBrackets; // true if [expr], false if .ident 4082 union { 4083 IdentifierInfo *IdentInfo; 4084 Expr *E; 4085 } U; 4086 }; 4087 4088 /// __builtin_offsetof(type, a.b[123][456].c) 4089 ExprResult BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, 4090 TypeSourceInfo *TInfo, 4091 ArrayRef<OffsetOfComponent> Components, 4092 SourceLocation RParenLoc); 4093 ExprResult ActOnBuiltinOffsetOf(Scope *S, 4094 SourceLocation BuiltinLoc, 4095 SourceLocation TypeLoc, 4096 ParsedType ParsedArgTy, 4097 ArrayRef<OffsetOfComponent> Components, 4098 SourceLocation RParenLoc); 4099 4100 // __builtin_choose_expr(constExpr, expr1, expr2) 4101 ExprResult ActOnChooseExpr(SourceLocation BuiltinLoc, 4102 Expr *CondExpr, Expr *LHSExpr, 4103 Expr *RHSExpr, SourceLocation RPLoc); 4104 4105 // __builtin_va_arg(expr, type) 4106 ExprResult ActOnVAArg(SourceLocation BuiltinLoc, Expr *E, ParsedType Ty, 4107 SourceLocation RPLoc); 4108 ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, 4109 TypeSourceInfo *TInfo, SourceLocation RPLoc); 4110 4111 // __null 4112 ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc); 4113 4114 bool CheckCaseExpression(Expr *E); 4115 4116 /// \brief Describes the result of an "if-exists" condition check. 4117 enum IfExistsResult { 4118 /// \brief The symbol exists. 4119 IER_Exists, 4120 4121 /// \brief The symbol does not exist. 4122 IER_DoesNotExist, 4123 4124 /// \brief The name is a dependent name, so the results will differ 4125 /// from one instantiation to the next. 4126 IER_Dependent, 4127 4128 /// \brief An error occurred. 4129 IER_Error 4130 }; 4131 4132 IfExistsResult 4133 CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS, 4134 const DeclarationNameInfo &TargetNameInfo); 4135 4136 IfExistsResult 4137 CheckMicrosoftIfExistsSymbol(Scope *S, SourceLocation KeywordLoc, 4138 bool IsIfExists, CXXScopeSpec &SS, 4139 UnqualifiedId &Name); 4140 4141 StmtResult BuildMSDependentExistsStmt(SourceLocation KeywordLoc, 4142 bool IsIfExists, 4143 NestedNameSpecifierLoc QualifierLoc, 4144 DeclarationNameInfo NameInfo, 4145 Stmt *Nested); 4146 StmtResult ActOnMSDependentExistsStmt(SourceLocation KeywordLoc, 4147 bool IsIfExists, 4148 CXXScopeSpec &SS, UnqualifiedId &Name, 4149 Stmt *Nested); 4150 4151 //===------------------------- "Block" Extension ------------------------===// 4152 4153 /// ActOnBlockStart - This callback is invoked when a block literal is 4154 /// started. 4155 void ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope); 4156 4157 /// ActOnBlockArguments - This callback allows processing of block arguments. 4158 /// If there are no arguments, this is still invoked. 4159 void ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo, 4160 Scope *CurScope); 4161 4162 /// ActOnBlockError - If there is an error parsing a block, this callback 4163 /// is invoked to pop the information about the block from the action impl. 4164 void ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope); 4165 4166 /// ActOnBlockStmtExpr - This is called when the body of a block statement 4167 /// literal was successfully completed. ^(int x){...} 4168 ExprResult ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body, 4169 Scope *CurScope); 4170 4171 //===---------------------------- Clang Extensions ----------------------===// 4172 4173 /// __builtin_convertvector(...) 4174 ExprResult ActOnConvertVectorExpr(Expr *E, ParsedType ParsedDestTy, 4175 SourceLocation BuiltinLoc, 4176 SourceLocation RParenLoc); 4177 4178 //===---------------------------- OpenCL Features -----------------------===// 4179 4180 /// __builtin_astype(...) 4181 ExprResult ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy, 4182 SourceLocation BuiltinLoc, 4183 SourceLocation RParenLoc); 4184 4185 //===---------------------------- C++ Features --------------------------===// 4186 4187 // Act on C++ namespaces 4188 Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc, 4189 SourceLocation NamespaceLoc, 4190 SourceLocation IdentLoc, 4191 IdentifierInfo *Ident, 4192 SourceLocation LBrace, 4193 AttributeList *AttrList, 4194 UsingDirectiveDecl * &UsingDecl); 4195 void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace); 4196 4197 NamespaceDecl *getStdNamespace() const; 4198 NamespaceDecl *getOrCreateStdNamespace(); 4199 4200 CXXRecordDecl *getStdBadAlloc() const; 4201 4202 /// \brief Tests whether Ty is an instance of std::initializer_list and, if 4203 /// it is and Element is not NULL, assigns the element type to Element. 4204 bool isStdInitializerList(QualType Ty, QualType *Element); 4205 4206 /// \brief Looks for the std::initializer_list template and instantiates it 4207 /// with Element, or emits an error if it's not found. 4208 /// 4209 /// \returns The instantiated template, or null on error. 4210 QualType BuildStdInitializerList(QualType Element, SourceLocation Loc); 4211 4212 /// \brief Determine whether Ctor is an initializer-list constructor, as 4213 /// defined in [dcl.init.list]p2. 4214 bool isInitListConstructor(const CXXConstructorDecl *Ctor); 4215 4216 Decl *ActOnUsingDirective(Scope *CurScope, 4217 SourceLocation UsingLoc, 4218 SourceLocation NamespcLoc, 4219 CXXScopeSpec &SS, 4220 SourceLocation IdentLoc, 4221 IdentifierInfo *NamespcName, 4222 AttributeList *AttrList); 4223 4224 void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir); 4225 4226 Decl *ActOnNamespaceAliasDef(Scope *CurScope, 4227 SourceLocation NamespaceLoc, 4228 SourceLocation AliasLoc, 4229 IdentifierInfo *Alias, 4230 CXXScopeSpec &SS, 4231 SourceLocation IdentLoc, 4232 IdentifierInfo *Ident); 4233 4234 void HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow); 4235 bool CheckUsingShadowDecl(UsingDecl *UD, NamedDecl *Target, 4236 const LookupResult &PreviousDecls, 4237 UsingShadowDecl *&PrevShadow); 4238 UsingShadowDecl *BuildUsingShadowDecl(Scope *S, UsingDecl *UD, 4239 NamedDecl *Target, 4240 UsingShadowDecl *PrevDecl); 4241 4242 bool CheckUsingDeclRedeclaration(SourceLocation UsingLoc, 4243 bool HasTypenameKeyword, 4244 const CXXScopeSpec &SS, 4245 SourceLocation NameLoc, 4246 const LookupResult &Previous); 4247 bool CheckUsingDeclQualifier(SourceLocation UsingLoc, 4248 const CXXScopeSpec &SS, 4249 const DeclarationNameInfo &NameInfo, 4250 SourceLocation NameLoc); 4251 4252 NamedDecl *BuildUsingDeclaration(Scope *S, AccessSpecifier AS, 4253 SourceLocation UsingLoc, 4254 CXXScopeSpec &SS, 4255 DeclarationNameInfo NameInfo, 4256 AttributeList *AttrList, 4257 bool IsInstantiation, 4258 bool HasTypenameKeyword, 4259 SourceLocation TypenameLoc); 4260 4261 bool CheckInheritingConstructorUsingDecl(UsingDecl *UD); 4262 4263 /// Given a derived-class using shadow declaration for a constructor and the 4264 /// correspnding base class constructor, find or create the implicit 4265 /// synthesized derived class constructor to use for this initialization. 4266 CXXConstructorDecl * 4267 findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor, 4268 ConstructorUsingShadowDecl *DerivedShadow); 4269 4270 Decl *ActOnUsingDeclaration(Scope *CurScope, 4271 AccessSpecifier AS, 4272 bool HasUsingKeyword, 4273 SourceLocation UsingLoc, 4274 CXXScopeSpec &SS, 4275 UnqualifiedId &Name, 4276 AttributeList *AttrList, 4277 bool HasTypenameKeyword, 4278 SourceLocation TypenameLoc); 4279 Decl *ActOnAliasDeclaration(Scope *CurScope, 4280 AccessSpecifier AS, 4281 MultiTemplateParamsArg TemplateParams, 4282 SourceLocation UsingLoc, 4283 UnqualifiedId &Name, 4284 AttributeList *AttrList, 4285 TypeResult Type, 4286 Decl *DeclFromDeclSpec); 4287 4288 /// BuildCXXConstructExpr - Creates a complete call to a constructor, 4289 /// including handling of its default argument expressions. 4290 /// 4291 /// \param ConstructKind - a CXXConstructExpr::ConstructionKind 4292 ExprResult 4293 BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, 4294 NamedDecl *FoundDecl, 4295 CXXConstructorDecl *Constructor, MultiExprArg Exprs, 4296 bool HadMultipleCandidates, bool IsListInitialization, 4297 bool IsStdInitListInitialization, 4298 bool RequiresZeroInit, unsigned ConstructKind, 4299 SourceRange ParenRange); 4300 4301 /// Build a CXXConstructExpr whose constructor has already been resolved if 4302 /// it denotes an inherited constructor. 4303 ExprResult 4304 BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, 4305 CXXConstructorDecl *Constructor, bool Elidable, 4306 MultiExprArg Exprs, 4307 bool HadMultipleCandidates, bool IsListInitialization, 4308 bool IsStdInitListInitialization, 4309 bool RequiresZeroInit, unsigned ConstructKind, 4310 SourceRange ParenRange); 4311 4312 // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if 4313 // the constructor can be elidable? 4314 ExprResult 4315 BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, 4316 NamedDecl *FoundDecl, 4317 CXXConstructorDecl *Constructor, bool Elidable, 4318 MultiExprArg Exprs, bool HadMultipleCandidates, 4319 bool IsListInitialization, 4320 bool IsStdInitListInitialization, bool RequiresZeroInit, 4321 unsigned ConstructKind, SourceRange ParenRange); 4322 4323 ExprResult BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field); 4324 4325 /// BuildCXXDefaultArgExpr - Creates a CXXDefaultArgExpr, instantiating 4326 /// the default expr if needed. 4327 ExprResult BuildCXXDefaultArgExpr(SourceLocation CallLoc, 4328 FunctionDecl *FD, 4329 ParmVarDecl *Param); 4330 4331 /// FinalizeVarWithDestructor - Prepare for calling destructor on the 4332 /// constructed variable. 4333 void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType); 4334 4335 /// \brief Helper class that collects exception specifications for 4336 /// implicitly-declared special member functions. 4337 class ImplicitExceptionSpecification { 4338 // Pointer to allow copying 4339 Sema *Self; 4340 // We order exception specifications thus: 4341 // noexcept is the most restrictive, but is only used in C++11. 4342 // throw() comes next. 4343 // Then a throw(collected exceptions) 4344 // Finally no specification, which is expressed as noexcept(false). 4345 // throw(...) is used instead if any called function uses it. 4346 ExceptionSpecificationType ComputedEST; 4347 llvm::SmallPtrSet<CanQualType, 4> ExceptionsSeen; 4348 SmallVector<QualType, 4> Exceptions; 4349 ClearExceptions()4350 void ClearExceptions() { 4351 ExceptionsSeen.clear(); 4352 Exceptions.clear(); 4353 } 4354 4355 public: ImplicitExceptionSpecification(Sema & Self)4356 explicit ImplicitExceptionSpecification(Sema &Self) 4357 : Self(&Self), ComputedEST(EST_BasicNoexcept) { 4358 if (!Self.getLangOpts().CPlusPlus11) 4359 ComputedEST = EST_DynamicNone; 4360 } 4361 4362 /// \brief Get the computed exception specification type. getExceptionSpecType()4363 ExceptionSpecificationType getExceptionSpecType() const { 4364 assert(ComputedEST != EST_ComputedNoexcept && 4365 "noexcept(expr) should not be a possible result"); 4366 return ComputedEST; 4367 } 4368 4369 /// \brief The number of exceptions in the exception specification. size()4370 unsigned size() const { return Exceptions.size(); } 4371 4372 /// \brief The set of exceptions in the exception specification. data()4373 const QualType *data() const { return Exceptions.data(); } 4374 4375 /// \brief Integrate another called method into the collected data. 4376 void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method); 4377 4378 /// \brief Integrate an invoked expression into the collected data. 4379 void CalledExpr(Expr *E); 4380 4381 /// \brief Overwrite an EPI's exception specification with this 4382 /// computed exception specification. getExceptionSpec()4383 FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const { 4384 FunctionProtoType::ExceptionSpecInfo ESI; 4385 ESI.Type = getExceptionSpecType(); 4386 if (ESI.Type == EST_Dynamic) { 4387 ESI.Exceptions = Exceptions; 4388 } else if (ESI.Type == EST_None) { 4389 /// C++11 [except.spec]p14: 4390 /// The exception-specification is noexcept(false) if the set of 4391 /// potential exceptions of the special member function contains "any" 4392 ESI.Type = EST_ComputedNoexcept; 4393 ESI.NoexceptExpr = Self->ActOnCXXBoolLiteral(SourceLocation(), 4394 tok::kw_false).get(); 4395 } 4396 return ESI; 4397 } 4398 }; 4399 4400 /// \brief Determine what sort of exception specification a defaulted 4401 /// copy constructor of a class will have. 4402 ImplicitExceptionSpecification 4403 ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc, 4404 CXXMethodDecl *MD); 4405 4406 /// \brief Determine what sort of exception specification a defaulted 4407 /// default constructor of a class will have, and whether the parameter 4408 /// will be const. 4409 ImplicitExceptionSpecification 4410 ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD); 4411 4412 /// \brief Determine what sort of exception specification a defautled 4413 /// copy assignment operator of a class will have, and whether the 4414 /// parameter will be const. 4415 ImplicitExceptionSpecification 4416 ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD); 4417 4418 /// \brief Determine what sort of exception specification a defaulted move 4419 /// constructor of a class will have. 4420 ImplicitExceptionSpecification 4421 ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD); 4422 4423 /// \brief Determine what sort of exception specification a defaulted move 4424 /// assignment operator of a class will have. 4425 ImplicitExceptionSpecification 4426 ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD); 4427 4428 /// \brief Determine what sort of exception specification a defaulted 4429 /// destructor of a class will have. 4430 ImplicitExceptionSpecification 4431 ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD); 4432 4433 /// \brief Determine what sort of exception specification an inheriting 4434 /// constructor of a class will have. 4435 ImplicitExceptionSpecification 4436 ComputeInheritingCtorExceptionSpec(SourceLocation Loc, 4437 CXXConstructorDecl *CD); 4438 4439 /// \brief Evaluate the implicit exception specification for a defaulted 4440 /// special member function. 4441 void EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD); 4442 4443 /// \brief Check the given exception-specification and update the 4444 /// exception specification information with the results. 4445 void checkExceptionSpecification(bool IsTopLevel, 4446 ExceptionSpecificationType EST, 4447 ArrayRef<ParsedType> DynamicExceptions, 4448 ArrayRef<SourceRange> DynamicExceptionRanges, 4449 Expr *NoexceptExpr, 4450 SmallVectorImpl<QualType> &Exceptions, 4451 FunctionProtoType::ExceptionSpecInfo &ESI); 4452 4453 /// \brief Determine if we're in a case where we need to (incorrectly) eagerly 4454 /// parse an exception specification to work around a libstdc++ bug. 4455 bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D); 4456 4457 /// \brief Add an exception-specification to the given member function 4458 /// (or member function template). The exception-specification was parsed 4459 /// after the method itself was declared. 4460 void actOnDelayedExceptionSpecification(Decl *Method, 4461 ExceptionSpecificationType EST, 4462 SourceRange SpecificationRange, 4463 ArrayRef<ParsedType> DynamicExceptions, 4464 ArrayRef<SourceRange> DynamicExceptionRanges, 4465 Expr *NoexceptExpr); 4466 4467 class InheritedConstructorInfo; 4468 4469 /// \brief Determine if a special member function should have a deleted 4470 /// definition when it is defaulted. 4471 bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, 4472 InheritedConstructorInfo *ICI = nullptr, 4473 bool Diagnose = false); 4474 4475 /// \brief Declare the implicit default constructor for the given class. 4476 /// 4477 /// \param ClassDecl The class declaration into which the implicit 4478 /// default constructor will be added. 4479 /// 4480 /// \returns The implicitly-declared default constructor. 4481 CXXConstructorDecl *DeclareImplicitDefaultConstructor( 4482 CXXRecordDecl *ClassDecl); 4483 4484 /// DefineImplicitDefaultConstructor - Checks for feasibility of 4485 /// defining this constructor as the default constructor. 4486 void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation, 4487 CXXConstructorDecl *Constructor); 4488 4489 /// \brief Declare the implicit destructor for the given class. 4490 /// 4491 /// \param ClassDecl The class declaration into which the implicit 4492 /// destructor will be added. 4493 /// 4494 /// \returns The implicitly-declared destructor. 4495 CXXDestructorDecl *DeclareImplicitDestructor(CXXRecordDecl *ClassDecl); 4496 4497 /// DefineImplicitDestructor - Checks for feasibility of 4498 /// defining this destructor as the default destructor. 4499 void DefineImplicitDestructor(SourceLocation CurrentLocation, 4500 CXXDestructorDecl *Destructor); 4501 4502 /// \brief Build an exception spec for destructors that don't have one. 4503 /// 4504 /// C++11 says that user-defined destructors with no exception spec get one 4505 /// that looks as if the destructor was implicitly declared. 4506 void AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl, 4507 CXXDestructorDecl *Destructor); 4508 4509 /// \brief Define the specified inheriting constructor. 4510 void DefineInheritingConstructor(SourceLocation UseLoc, 4511 CXXConstructorDecl *Constructor); 4512 4513 /// \brief Declare the implicit copy constructor for the given class. 4514 /// 4515 /// \param ClassDecl The class declaration into which the implicit 4516 /// copy constructor will be added. 4517 /// 4518 /// \returns The implicitly-declared copy constructor. 4519 CXXConstructorDecl *DeclareImplicitCopyConstructor(CXXRecordDecl *ClassDecl); 4520 4521 /// DefineImplicitCopyConstructor - Checks for feasibility of 4522 /// defining this constructor as the copy constructor. 4523 void DefineImplicitCopyConstructor(SourceLocation CurrentLocation, 4524 CXXConstructorDecl *Constructor); 4525 4526 /// \brief Declare the implicit move constructor for the given class. 4527 /// 4528 /// \param ClassDecl The Class declaration into which the implicit 4529 /// move constructor will be added. 4530 /// 4531 /// \returns The implicitly-declared move constructor, or NULL if it wasn't 4532 /// declared. 4533 CXXConstructorDecl *DeclareImplicitMoveConstructor(CXXRecordDecl *ClassDecl); 4534 4535 /// DefineImplicitMoveConstructor - Checks for feasibility of 4536 /// defining this constructor as the move constructor. 4537 void DefineImplicitMoveConstructor(SourceLocation CurrentLocation, 4538 CXXConstructorDecl *Constructor); 4539 4540 /// \brief Declare the implicit copy assignment operator for the given class. 4541 /// 4542 /// \param ClassDecl The class declaration into which the implicit 4543 /// copy assignment operator will be added. 4544 /// 4545 /// \returns The implicitly-declared copy assignment operator. 4546 CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl); 4547 4548 /// \brief Defines an implicitly-declared copy assignment operator. 4549 void DefineImplicitCopyAssignment(SourceLocation CurrentLocation, 4550 CXXMethodDecl *MethodDecl); 4551 4552 /// \brief Declare the implicit move assignment operator for the given class. 4553 /// 4554 /// \param ClassDecl The Class declaration into which the implicit 4555 /// move assignment operator will be added. 4556 /// 4557 /// \returns The implicitly-declared move assignment operator, or NULL if it 4558 /// wasn't declared. 4559 CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl); 4560 4561 /// \brief Defines an implicitly-declared move assignment operator. 4562 void DefineImplicitMoveAssignment(SourceLocation CurrentLocation, 4563 CXXMethodDecl *MethodDecl); 4564 4565 /// \brief Force the declaration of any implicitly-declared members of this 4566 /// class. 4567 void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class); 4568 4569 /// \brief Check a completed declaration of an implicit special member. 4570 void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD); 4571 4572 /// \brief Determine whether the given function is an implicitly-deleted 4573 /// special member function. 4574 bool isImplicitlyDeleted(FunctionDecl *FD); 4575 4576 /// \brief Check whether 'this' shows up in the type of a static member 4577 /// function after the (naturally empty) cv-qualifier-seq would be. 4578 /// 4579 /// \returns true if an error occurred. 4580 bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method); 4581 4582 /// \brief Whether this' shows up in the exception specification of a static 4583 /// member function. 4584 bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method); 4585 4586 /// \brief Check whether 'this' shows up in the attributes of the given 4587 /// static member function. 4588 /// 4589 /// \returns true if an error occurred. 4590 bool checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method); 4591 4592 /// MaybeBindToTemporary - If the passed in expression has a record type with 4593 /// a non-trivial destructor, this will return CXXBindTemporaryExpr. Otherwise 4594 /// it simply returns the passed in expression. 4595 ExprResult MaybeBindToTemporary(Expr *E); 4596 4597 bool CompleteConstructorCall(CXXConstructorDecl *Constructor, 4598 MultiExprArg ArgsPtr, 4599 SourceLocation Loc, 4600 SmallVectorImpl<Expr*> &ConvertedArgs, 4601 bool AllowExplicit = false, 4602 bool IsListInitialization = false); 4603 4604 ParsedType getInheritingConstructorName(CXXScopeSpec &SS, 4605 SourceLocation NameLoc, 4606 IdentifierInfo &Name); 4607 4608 ParsedType getDestructorName(SourceLocation TildeLoc, 4609 IdentifierInfo &II, SourceLocation NameLoc, 4610 Scope *S, CXXScopeSpec &SS, 4611 ParsedType ObjectType, 4612 bool EnteringContext); 4613 4614 ParsedType getDestructorType(const DeclSpec& DS, ParsedType ObjectType); 4615 4616 // Checks that reinterpret casts don't have undefined behavior. 4617 void CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType, 4618 bool IsDereference, SourceRange Range); 4619 4620 /// ActOnCXXNamedCast - Parse {dynamic,static,reinterpret,const}_cast's. 4621 ExprResult ActOnCXXNamedCast(SourceLocation OpLoc, 4622 tok::TokenKind Kind, 4623 SourceLocation LAngleBracketLoc, 4624 Declarator &D, 4625 SourceLocation RAngleBracketLoc, 4626 SourceLocation LParenLoc, 4627 Expr *E, 4628 SourceLocation RParenLoc); 4629 4630 ExprResult BuildCXXNamedCast(SourceLocation OpLoc, 4631 tok::TokenKind Kind, 4632 TypeSourceInfo *Ty, 4633 Expr *E, 4634 SourceRange AngleBrackets, 4635 SourceRange Parens); 4636 4637 ExprResult BuildCXXTypeId(QualType TypeInfoType, 4638 SourceLocation TypeidLoc, 4639 TypeSourceInfo *Operand, 4640 SourceLocation RParenLoc); 4641 ExprResult BuildCXXTypeId(QualType TypeInfoType, 4642 SourceLocation TypeidLoc, 4643 Expr *Operand, 4644 SourceLocation RParenLoc); 4645 4646 /// ActOnCXXTypeid - Parse typeid( something ). 4647 ExprResult ActOnCXXTypeid(SourceLocation OpLoc, 4648 SourceLocation LParenLoc, bool isType, 4649 void *TyOrExpr, 4650 SourceLocation RParenLoc); 4651 4652 ExprResult BuildCXXUuidof(QualType TypeInfoType, 4653 SourceLocation TypeidLoc, 4654 TypeSourceInfo *Operand, 4655 SourceLocation RParenLoc); 4656 ExprResult BuildCXXUuidof(QualType TypeInfoType, 4657 SourceLocation TypeidLoc, 4658 Expr *Operand, 4659 SourceLocation RParenLoc); 4660 4661 /// ActOnCXXUuidof - Parse __uuidof( something ). 4662 ExprResult ActOnCXXUuidof(SourceLocation OpLoc, 4663 SourceLocation LParenLoc, bool isType, 4664 void *TyOrExpr, 4665 SourceLocation RParenLoc); 4666 4667 /// \brief Handle a C++1z fold-expression: ( expr op ... op expr ). 4668 ExprResult ActOnCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS, 4669 tok::TokenKind Operator, 4670 SourceLocation EllipsisLoc, Expr *RHS, 4671 SourceLocation RParenLoc); 4672 ExprResult BuildCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS, 4673 BinaryOperatorKind Operator, 4674 SourceLocation EllipsisLoc, Expr *RHS, 4675 SourceLocation RParenLoc); 4676 ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc, 4677 BinaryOperatorKind Operator); 4678 4679 //// ActOnCXXThis - Parse 'this' pointer. 4680 ExprResult ActOnCXXThis(SourceLocation loc); 4681 4682 /// \brief Try to retrieve the type of the 'this' pointer. 4683 /// 4684 /// \returns The type of 'this', if possible. Otherwise, returns a NULL type. 4685 QualType getCurrentThisType(); 4686 4687 /// \brief When non-NULL, the C++ 'this' expression is allowed despite the 4688 /// current context not being a non-static member function. In such cases, 4689 /// this provides the type used for 'this'. 4690 QualType CXXThisTypeOverride; 4691 4692 /// \brief RAII object used to temporarily allow the C++ 'this' expression 4693 /// to be used, with the given qualifiers on the current class type. 4694 class CXXThisScopeRAII { 4695 Sema &S; 4696 QualType OldCXXThisTypeOverride; 4697 bool Enabled; 4698 4699 public: 4700 /// \brief Introduce a new scope where 'this' may be allowed (when enabled), 4701 /// using the given declaration (which is either a class template or a 4702 /// class) along with the given qualifiers. 4703 /// along with the qualifiers placed on '*this'. 4704 CXXThisScopeRAII(Sema &S, Decl *ContextDecl, unsigned CXXThisTypeQuals, 4705 bool Enabled = true); 4706 4707 ~CXXThisScopeRAII(); 4708 }; 4709 4710 /// \brief Make sure the value of 'this' is actually available in the current 4711 /// context, if it is a potentially evaluated context. 4712 /// 4713 /// \param Loc The location at which the capture of 'this' occurs. 4714 /// 4715 /// \param Explicit Whether 'this' is explicitly captured in a lambda 4716 /// capture list. 4717 /// 4718 /// \param FunctionScopeIndexToStopAt If non-null, it points to the index 4719 /// of the FunctionScopeInfo stack beyond which we do not attempt to capture. 4720 /// This is useful when enclosing lambdas must speculatively capture 4721 /// 'this' that may or may not be used in certain specializations of 4722 /// a nested generic lambda (depending on whether the name resolves to 4723 /// a non-static member function or a static function). 4724 /// \return returns 'true' if failed, 'false' if success. 4725 bool CheckCXXThisCapture(SourceLocation Loc, bool Explicit = false, 4726 bool BuildAndDiagnose = true, 4727 const unsigned *const FunctionScopeIndexToStopAt = nullptr, 4728 bool ByCopy = false); 4729 4730 /// \brief Determine whether the given type is the type of *this that is used 4731 /// outside of the body of a member function for a type that is currently 4732 /// being defined. 4733 bool isThisOutsideMemberFunctionBody(QualType BaseType); 4734 4735 /// ActOnCXXBoolLiteral - Parse {true,false} literals. 4736 ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind); 4737 4738 4739 /// ActOnObjCBoolLiteral - Parse {__objc_yes,__objc_no} literals. 4740 ExprResult ActOnObjCBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind); 4741 4742 /// ActOnCXXNullPtrLiteral - Parse 'nullptr'. 4743 ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc); 4744 4745 //// ActOnCXXThrow - Parse throw expressions. 4746 ExprResult ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *expr); 4747 ExprResult BuildCXXThrow(SourceLocation OpLoc, Expr *Ex, 4748 bool IsThrownVarInScope); 4749 bool CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ThrowTy, Expr *E); 4750 4751 /// ActOnCXXTypeConstructExpr - Parse construction of a specified type. 4752 /// Can be interpreted either as function-style casting ("int(x)") 4753 /// or class type construction ("ClassType(x,y,z)") 4754 /// or creation of a value-initialized type ("int()"). 4755 ExprResult ActOnCXXTypeConstructExpr(ParsedType TypeRep, 4756 SourceLocation LParenLoc, 4757 MultiExprArg Exprs, 4758 SourceLocation RParenLoc); 4759 4760 ExprResult BuildCXXTypeConstructExpr(TypeSourceInfo *Type, 4761 SourceLocation LParenLoc, 4762 MultiExprArg Exprs, 4763 SourceLocation RParenLoc); 4764 4765 /// ActOnCXXNew - Parsed a C++ 'new' expression. 4766 ExprResult ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, 4767 SourceLocation PlacementLParen, 4768 MultiExprArg PlacementArgs, 4769 SourceLocation PlacementRParen, 4770 SourceRange TypeIdParens, Declarator &D, 4771 Expr *Initializer); 4772 ExprResult BuildCXXNew(SourceRange Range, bool UseGlobal, 4773 SourceLocation PlacementLParen, 4774 MultiExprArg PlacementArgs, 4775 SourceLocation PlacementRParen, 4776 SourceRange TypeIdParens, 4777 QualType AllocType, 4778 TypeSourceInfo *AllocTypeInfo, 4779 Expr *ArraySize, 4780 SourceRange DirectInitRange, 4781 Expr *Initializer, 4782 bool TypeMayContainAuto = true); 4783 4784 bool CheckAllocatedType(QualType AllocType, SourceLocation Loc, 4785 SourceRange R); 4786 bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, 4787 bool UseGlobal, QualType AllocType, bool IsArray, 4788 MultiExprArg PlaceArgs, 4789 FunctionDecl *&OperatorNew, 4790 FunctionDecl *&OperatorDelete); 4791 bool FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, 4792 DeclarationName Name, MultiExprArg Args, 4793 DeclContext *Ctx, 4794 bool AllowMissing, FunctionDecl *&Operator, 4795 bool Diagnose = true); 4796 void DeclareGlobalNewDelete(); 4797 void DeclareGlobalAllocationFunction(DeclarationName Name, QualType Return, 4798 QualType Param1, 4799 QualType Param2 = QualType()); 4800 4801 bool FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, 4802 DeclarationName Name, FunctionDecl* &Operator, 4803 bool Diagnose = true); 4804 FunctionDecl *FindUsualDeallocationFunction(SourceLocation StartLoc, 4805 bool CanProvideSize, 4806 DeclarationName Name); 4807 4808 /// ActOnCXXDelete - Parsed a C++ 'delete' expression 4809 ExprResult ActOnCXXDelete(SourceLocation StartLoc, 4810 bool UseGlobal, bool ArrayForm, 4811 Expr *Operand); 4812 void CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, 4813 bool IsDelete, bool CallCanBeVirtual, 4814 bool WarnOnNonAbstractTypes, 4815 SourceLocation DtorLoc); 4816 4817 ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen, 4818 Expr *Operand, SourceLocation RParen); 4819 ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, 4820 SourceLocation RParen); 4821 4822 /// \brief Parsed one of the type trait support pseudo-functions. 4823 ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc, 4824 ArrayRef<ParsedType> Args, 4825 SourceLocation RParenLoc); 4826 ExprResult BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc, 4827 ArrayRef<TypeSourceInfo *> Args, 4828 SourceLocation RParenLoc); 4829 4830 /// ActOnArrayTypeTrait - Parsed one of the bianry type trait support 4831 /// pseudo-functions. 4832 ExprResult ActOnArrayTypeTrait(ArrayTypeTrait ATT, 4833 SourceLocation KWLoc, 4834 ParsedType LhsTy, 4835 Expr *DimExpr, 4836 SourceLocation RParen); 4837 4838 ExprResult BuildArrayTypeTrait(ArrayTypeTrait ATT, 4839 SourceLocation KWLoc, 4840 TypeSourceInfo *TSInfo, 4841 Expr *DimExpr, 4842 SourceLocation RParen); 4843 4844 /// ActOnExpressionTrait - Parsed one of the unary type trait support 4845 /// pseudo-functions. 4846 ExprResult ActOnExpressionTrait(ExpressionTrait OET, 4847 SourceLocation KWLoc, 4848 Expr *Queried, 4849 SourceLocation RParen); 4850 4851 ExprResult BuildExpressionTrait(ExpressionTrait OET, 4852 SourceLocation KWLoc, 4853 Expr *Queried, 4854 SourceLocation RParen); 4855 4856 ExprResult ActOnStartCXXMemberReference(Scope *S, 4857 Expr *Base, 4858 SourceLocation OpLoc, 4859 tok::TokenKind OpKind, 4860 ParsedType &ObjectType, 4861 bool &MayBePseudoDestructor); 4862 4863 ExprResult BuildPseudoDestructorExpr(Expr *Base, 4864 SourceLocation OpLoc, 4865 tok::TokenKind OpKind, 4866 const CXXScopeSpec &SS, 4867 TypeSourceInfo *ScopeType, 4868 SourceLocation CCLoc, 4869 SourceLocation TildeLoc, 4870 PseudoDestructorTypeStorage DestroyedType); 4871 4872 ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base, 4873 SourceLocation OpLoc, 4874 tok::TokenKind OpKind, 4875 CXXScopeSpec &SS, 4876 UnqualifiedId &FirstTypeName, 4877 SourceLocation CCLoc, 4878 SourceLocation TildeLoc, 4879 UnqualifiedId &SecondTypeName); 4880 4881 ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base, 4882 SourceLocation OpLoc, 4883 tok::TokenKind OpKind, 4884 SourceLocation TildeLoc, 4885 const DeclSpec& DS); 4886 4887 /// MaybeCreateExprWithCleanups - If the current full-expression 4888 /// requires any cleanups, surround it with a ExprWithCleanups node. 4889 /// Otherwise, just returns the passed-in expression. 4890 Expr *MaybeCreateExprWithCleanups(Expr *SubExpr); 4891 Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt); 4892 ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr); 4893 4894 MaterializeTemporaryExpr * 4895 CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary, 4896 bool BoundToLvalueReference); 4897 ActOnFinishFullExpr(Expr * Expr)4898 ExprResult ActOnFinishFullExpr(Expr *Expr) { 4899 return ActOnFinishFullExpr(Expr, Expr ? Expr->getExprLoc() 4900 : SourceLocation()); 4901 } 4902 ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC, 4903 bool DiscardedValue = false, 4904 bool IsConstexpr = false, 4905 bool IsLambdaInitCaptureInitializer = false); 4906 StmtResult ActOnFinishFullStmt(Stmt *Stmt); 4907 4908 // Marks SS invalid if it represents an incomplete type. 4909 bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC); 4910 4911 DeclContext *computeDeclContext(QualType T); 4912 DeclContext *computeDeclContext(const CXXScopeSpec &SS, 4913 bool EnteringContext = false); 4914 bool isDependentScopeSpecifier(const CXXScopeSpec &SS); 4915 CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS); 4916 4917 /// \brief The parser has parsed a global nested-name-specifier '::'. 4918 /// 4919 /// \param CCLoc The location of the '::'. 4920 /// 4921 /// \param SS The nested-name-specifier, which will be updated in-place 4922 /// to reflect the parsed nested-name-specifier. 4923 /// 4924 /// \returns true if an error occurred, false otherwise. 4925 bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS); 4926 4927 /// \brief The parser has parsed a '__super' nested-name-specifier. 4928 /// 4929 /// \param SuperLoc The location of the '__super' keyword. 4930 /// 4931 /// \param ColonColonLoc The location of the '::'. 4932 /// 4933 /// \param SS The nested-name-specifier, which will be updated in-place 4934 /// to reflect the parsed nested-name-specifier. 4935 /// 4936 /// \returns true if an error occurred, false otherwise. 4937 bool ActOnSuperScopeSpecifier(SourceLocation SuperLoc, 4938 SourceLocation ColonColonLoc, CXXScopeSpec &SS); 4939 4940 bool isAcceptableNestedNameSpecifier(const NamedDecl *SD, 4941 bool *CanCorrect = nullptr); 4942 NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS); 4943 4944 bool isNonTypeNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, 4945 SourceLocation IdLoc, 4946 IdentifierInfo &II, 4947 ParsedType ObjectType); 4948 4949 bool BuildCXXNestedNameSpecifier(Scope *S, 4950 IdentifierInfo &Identifier, 4951 SourceLocation IdentifierLoc, 4952 SourceLocation CCLoc, 4953 QualType ObjectType, 4954 bool EnteringContext, 4955 CXXScopeSpec &SS, 4956 NamedDecl *ScopeLookupResult, 4957 bool ErrorRecoveryLookup, 4958 bool *IsCorrectedToColon = nullptr); 4959 4960 /// \brief The parser has parsed a nested-name-specifier 'identifier::'. 4961 /// 4962 /// \param S The scope in which this nested-name-specifier occurs. 4963 /// 4964 /// \param Identifier The identifier preceding the '::'. 4965 /// 4966 /// \param IdentifierLoc The location of the identifier. 4967 /// 4968 /// \param CCLoc The location of the '::'. 4969 /// 4970 /// \param ObjectType The type of the object, if we're parsing 4971 /// nested-name-specifier in a member access expression. 4972 /// 4973 /// \param EnteringContext Whether we're entering the context nominated by 4974 /// this nested-name-specifier. 4975 /// 4976 /// \param SS The nested-name-specifier, which is both an input 4977 /// parameter (the nested-name-specifier before this type) and an 4978 /// output parameter (containing the full nested-name-specifier, 4979 /// including this new type). 4980 /// 4981 /// \param ErrorRecoveryLookup If true, then this method is called to improve 4982 /// error recovery. In this case do not emit error message. 4983 /// 4984 /// \param IsCorrectedToColon If not null, suggestions to replace '::' -> ':' 4985 /// are allowed. The bool value pointed by this parameter is set to 'true' 4986 /// if the identifier is treated as if it was followed by ':', not '::'. 4987 /// 4988 /// \returns true if an error occurred, false otherwise. 4989 bool ActOnCXXNestedNameSpecifier(Scope *S, 4990 IdentifierInfo &Identifier, 4991 SourceLocation IdentifierLoc, 4992 SourceLocation CCLoc, 4993 ParsedType ObjectType, 4994 bool EnteringContext, 4995 CXXScopeSpec &SS, 4996 bool ErrorRecoveryLookup = false, 4997 bool *IsCorrectedToColon = nullptr); 4998 4999 ExprResult ActOnDecltypeExpression(Expr *E); 5000 5001 bool ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS, 5002 const DeclSpec &DS, 5003 SourceLocation ColonColonLoc); 5004 5005 bool IsInvalidUnlessNestedName(Scope *S, CXXScopeSpec &SS, 5006 IdentifierInfo &Identifier, 5007 SourceLocation IdentifierLoc, 5008 SourceLocation ColonLoc, 5009 ParsedType ObjectType, 5010 bool EnteringContext); 5011 5012 /// \brief The parser has parsed a nested-name-specifier 5013 /// 'template[opt] template-name < template-args >::'. 5014 /// 5015 /// \param S The scope in which this nested-name-specifier occurs. 5016 /// 5017 /// \param SS The nested-name-specifier, which is both an input 5018 /// parameter (the nested-name-specifier before this type) and an 5019 /// output parameter (containing the full nested-name-specifier, 5020 /// including this new type). 5021 /// 5022 /// \param TemplateKWLoc the location of the 'template' keyword, if any. 5023 /// \param TemplateName the template name. 5024 /// \param TemplateNameLoc The location of the template name. 5025 /// \param LAngleLoc The location of the opening angle bracket ('<'). 5026 /// \param TemplateArgs The template arguments. 5027 /// \param RAngleLoc The location of the closing angle bracket ('>'). 5028 /// \param CCLoc The location of the '::'. 5029 /// 5030 /// \param EnteringContext Whether we're entering the context of the 5031 /// nested-name-specifier. 5032 /// 5033 /// 5034 /// \returns true if an error occurred, false otherwise. 5035 bool ActOnCXXNestedNameSpecifier(Scope *S, 5036 CXXScopeSpec &SS, 5037 SourceLocation TemplateKWLoc, 5038 TemplateTy TemplateName, 5039 SourceLocation TemplateNameLoc, 5040 SourceLocation LAngleLoc, 5041 ASTTemplateArgsPtr TemplateArgs, 5042 SourceLocation RAngleLoc, 5043 SourceLocation CCLoc, 5044 bool EnteringContext); 5045 5046 /// \brief Given a C++ nested-name-specifier, produce an annotation value 5047 /// that the parser can use later to reconstruct the given 5048 /// nested-name-specifier. 5049 /// 5050 /// \param SS A nested-name-specifier. 5051 /// 5052 /// \returns A pointer containing all of the information in the 5053 /// nested-name-specifier \p SS. 5054 void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS); 5055 5056 /// \brief Given an annotation pointer for a nested-name-specifier, restore 5057 /// the nested-name-specifier structure. 5058 /// 5059 /// \param Annotation The annotation pointer, produced by 5060 /// \c SaveNestedNameSpecifierAnnotation(). 5061 /// 5062 /// \param AnnotationRange The source range corresponding to the annotation. 5063 /// 5064 /// \param SS The nested-name-specifier that will be updated with the contents 5065 /// of the annotation pointer. 5066 void RestoreNestedNameSpecifierAnnotation(void *Annotation, 5067 SourceRange AnnotationRange, 5068 CXXScopeSpec &SS); 5069 5070 bool ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS); 5071 5072 /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global 5073 /// scope or nested-name-specifier) is parsed, part of a declarator-id. 5074 /// After this method is called, according to [C++ 3.4.3p3], names should be 5075 /// looked up in the declarator-id's scope, until the declarator is parsed and 5076 /// ActOnCXXExitDeclaratorScope is called. 5077 /// The 'SS' should be a non-empty valid CXXScopeSpec. 5078 bool ActOnCXXEnterDeclaratorScope(Scope *S, CXXScopeSpec &SS); 5079 5080 /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously 5081 /// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same 5082 /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well. 5083 /// Used to indicate that names should revert to being looked up in the 5084 /// defining scope. 5085 void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS); 5086 5087 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an 5088 /// initializer for the declaration 'Dcl'. 5089 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a 5090 /// static data member of class X, names should be looked up in the scope of 5091 /// class X. 5092 void ActOnCXXEnterDeclInitializer(Scope *S, Decl *Dcl); 5093 5094 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an 5095 /// initializer for the declaration 'Dcl'. 5096 void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl); 5097 5098 /// \brief Create a new lambda closure type. 5099 CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange, 5100 TypeSourceInfo *Info, 5101 bool KnownDependent, 5102 LambdaCaptureDefault CaptureDefault); 5103 5104 /// \brief Start the definition of a lambda expression. 5105 CXXMethodDecl *startLambdaDefinition(CXXRecordDecl *Class, 5106 SourceRange IntroducerRange, 5107 TypeSourceInfo *MethodType, 5108 SourceLocation EndLoc, 5109 ArrayRef<ParmVarDecl *> Params, 5110 bool IsConstexprSpecified); 5111 5112 /// \brief Endow the lambda scope info with the relevant properties. 5113 void buildLambdaScope(sema::LambdaScopeInfo *LSI, 5114 CXXMethodDecl *CallOperator, 5115 SourceRange IntroducerRange, 5116 LambdaCaptureDefault CaptureDefault, 5117 SourceLocation CaptureDefaultLoc, 5118 bool ExplicitParams, 5119 bool ExplicitResultType, 5120 bool Mutable); 5121 5122 /// \brief Perform initialization analysis of the init-capture and perform 5123 /// any implicit conversions such as an lvalue-to-rvalue conversion if 5124 /// not being used to initialize a reference. actOnLambdaInitCaptureInitialization(SourceLocation Loc,bool ByRef,IdentifierInfo * Id,LambdaCaptureInitKind InitKind,Expr * & Init)5125 ParsedType actOnLambdaInitCaptureInitialization( 5126 SourceLocation Loc, bool ByRef, IdentifierInfo *Id, 5127 LambdaCaptureInitKind InitKind, Expr *&Init) { 5128 return ParsedType::make(buildLambdaInitCaptureInitialization( 5129 Loc, ByRef, Id, InitKind != LambdaCaptureInitKind::CopyInit, Init)); 5130 } 5131 QualType buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef, 5132 IdentifierInfo *Id, 5133 bool DirectInit, Expr *&Init); 5134 5135 /// \brief Create a dummy variable within the declcontext of the lambda's 5136 /// call operator, for name lookup purposes for a lambda init capture. 5137 /// 5138 /// CodeGen handles emission of lambda captures, ignoring these dummy 5139 /// variables appropriately. 5140 VarDecl *createLambdaInitCaptureVarDecl(SourceLocation Loc, 5141 QualType InitCaptureType, 5142 IdentifierInfo *Id, 5143 unsigned InitStyle, Expr *Init); 5144 5145 /// \brief Build the implicit field for an init-capture. 5146 FieldDecl *buildInitCaptureField(sema::LambdaScopeInfo *LSI, VarDecl *Var); 5147 5148 /// \brief Note that we have finished the explicit captures for the 5149 /// given lambda. 5150 void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI); 5151 5152 /// \brief Introduce the lambda parameters into scope. 5153 void addLambdaParameters(CXXMethodDecl *CallOperator, Scope *CurScope); 5154 5155 /// \brief Deduce a block or lambda's return type based on the return 5156 /// statements present in the body. 5157 void deduceClosureReturnType(sema::CapturingScopeInfo &CSI); 5158 5159 /// ActOnStartOfLambdaDefinition - This is called just before we start 5160 /// parsing the body of a lambda; it analyzes the explicit captures and 5161 /// arguments, and sets up various data-structures for the body of the 5162 /// lambda. 5163 void ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, 5164 Declarator &ParamInfo, Scope *CurScope); 5165 5166 /// ActOnLambdaError - If there is an error parsing a lambda, this callback 5167 /// is invoked to pop the information about the lambda. 5168 void ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope, 5169 bool IsInstantiation = false); 5170 5171 /// ActOnLambdaExpr - This is called when the body of a lambda expression 5172 /// was successfully completed. 5173 ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body, 5174 Scope *CurScope); 5175 5176 /// \brief Complete a lambda-expression having processed and attached the 5177 /// lambda body. 5178 ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, 5179 sema::LambdaScopeInfo *LSI); 5180 5181 /// \brief Define the "body" of the conversion from a lambda object to a 5182 /// function pointer. 5183 /// 5184 /// This routine doesn't actually define a sensible body; rather, it fills 5185 /// in the initialization expression needed to copy the lambda object into 5186 /// the block, and IR generation actually generates the real body of the 5187 /// block pointer conversion. 5188 void DefineImplicitLambdaToFunctionPointerConversion( 5189 SourceLocation CurrentLoc, CXXConversionDecl *Conv); 5190 5191 /// \brief Define the "body" of the conversion from a lambda object to a 5192 /// block pointer. 5193 /// 5194 /// This routine doesn't actually define a sensible body; rather, it fills 5195 /// in the initialization expression needed to copy the lambda object into 5196 /// the block, and IR generation actually generates the real body of the 5197 /// block pointer conversion. 5198 void DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLoc, 5199 CXXConversionDecl *Conv); 5200 5201 ExprResult BuildBlockForLambdaConversion(SourceLocation CurrentLocation, 5202 SourceLocation ConvLocation, 5203 CXXConversionDecl *Conv, 5204 Expr *Src); 5205 5206 // ParseObjCStringLiteral - Parse Objective-C string literals. 5207 ExprResult ParseObjCStringLiteral(SourceLocation *AtLocs, 5208 ArrayRef<Expr *> Strings); 5209 5210 ExprResult BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S); 5211 5212 /// BuildObjCNumericLiteral - builds an ObjCBoxedExpr AST node for the 5213 /// numeric literal expression. Type of the expression will be "NSNumber *" 5214 /// or "id" if NSNumber is unavailable. 5215 ExprResult BuildObjCNumericLiteral(SourceLocation AtLoc, Expr *Number); 5216 ExprResult ActOnObjCBoolLiteral(SourceLocation AtLoc, SourceLocation ValueLoc, 5217 bool Value); 5218 ExprResult BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements); 5219 5220 /// BuildObjCBoxedExpr - builds an ObjCBoxedExpr AST node for the 5221 /// '@' prefixed parenthesized expression. The type of the expression will 5222 /// either be "NSNumber *", "NSString *" or "NSValue *" depending on the type 5223 /// of ValueType, which is allowed to be a built-in numeric type, "char *", 5224 /// "const char *" or C structure with attribute 'objc_boxable'. 5225 ExprResult BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr); 5226 5227 ExprResult BuildObjCSubscriptExpression(SourceLocation RB, Expr *BaseExpr, 5228 Expr *IndexExpr, 5229 ObjCMethodDecl *getterMethod, 5230 ObjCMethodDecl *setterMethod); 5231 5232 ExprResult BuildObjCDictionaryLiteral(SourceRange SR, 5233 MutableArrayRef<ObjCDictionaryElement> Elements); 5234 5235 ExprResult BuildObjCEncodeExpression(SourceLocation AtLoc, 5236 TypeSourceInfo *EncodedTypeInfo, 5237 SourceLocation RParenLoc); 5238 ExprResult BuildCXXMemberCallExpr(Expr *Exp, NamedDecl *FoundDecl, 5239 CXXConversionDecl *Method, 5240 bool HadMultipleCandidates); 5241 5242 ExprResult ParseObjCEncodeExpression(SourceLocation AtLoc, 5243 SourceLocation EncodeLoc, 5244 SourceLocation LParenLoc, 5245 ParsedType Ty, 5246 SourceLocation RParenLoc); 5247 5248 /// ParseObjCSelectorExpression - Build selector expression for \@selector 5249 ExprResult ParseObjCSelectorExpression(Selector Sel, 5250 SourceLocation AtLoc, 5251 SourceLocation SelLoc, 5252 SourceLocation LParenLoc, 5253 SourceLocation RParenLoc, 5254 bool WarnMultipleSelectors); 5255 5256 /// ParseObjCProtocolExpression - Build protocol expression for \@protocol 5257 ExprResult ParseObjCProtocolExpression(IdentifierInfo * ProtocolName, 5258 SourceLocation AtLoc, 5259 SourceLocation ProtoLoc, 5260 SourceLocation LParenLoc, 5261 SourceLocation ProtoIdLoc, 5262 SourceLocation RParenLoc); 5263 5264 //===--------------------------------------------------------------------===// 5265 // C++ Declarations 5266 // 5267 Decl *ActOnStartLinkageSpecification(Scope *S, 5268 SourceLocation ExternLoc, 5269 Expr *LangStr, 5270 SourceLocation LBraceLoc); 5271 Decl *ActOnFinishLinkageSpecification(Scope *S, 5272 Decl *LinkageSpec, 5273 SourceLocation RBraceLoc); 5274 5275 5276 //===--------------------------------------------------------------------===// 5277 // C++ Classes 5278 // 5279 bool isCurrentClassName(const IdentifierInfo &II, Scope *S, 5280 const CXXScopeSpec *SS = nullptr); 5281 bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS); 5282 5283 bool ActOnAccessSpecifier(AccessSpecifier Access, 5284 SourceLocation ASLoc, 5285 SourceLocation ColonLoc, 5286 AttributeList *Attrs = nullptr); 5287 5288 NamedDecl *ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, 5289 Declarator &D, 5290 MultiTemplateParamsArg TemplateParameterLists, 5291 Expr *BitfieldWidth, const VirtSpecifiers &VS, 5292 InClassInitStyle InitStyle); 5293 5294 void ActOnStartCXXInClassMemberInitializer(); 5295 void ActOnFinishCXXInClassMemberInitializer(Decl *VarDecl, 5296 SourceLocation EqualLoc, 5297 Expr *Init); 5298 5299 MemInitResult ActOnMemInitializer(Decl *ConstructorD, 5300 Scope *S, 5301 CXXScopeSpec &SS, 5302 IdentifierInfo *MemberOrBase, 5303 ParsedType TemplateTypeTy, 5304 const DeclSpec &DS, 5305 SourceLocation IdLoc, 5306 SourceLocation LParenLoc, 5307 ArrayRef<Expr *> Args, 5308 SourceLocation RParenLoc, 5309 SourceLocation EllipsisLoc); 5310 5311 MemInitResult ActOnMemInitializer(Decl *ConstructorD, 5312 Scope *S, 5313 CXXScopeSpec &SS, 5314 IdentifierInfo *MemberOrBase, 5315 ParsedType TemplateTypeTy, 5316 const DeclSpec &DS, 5317 SourceLocation IdLoc, 5318 Expr *InitList, 5319 SourceLocation EllipsisLoc); 5320 5321 MemInitResult BuildMemInitializer(Decl *ConstructorD, 5322 Scope *S, 5323 CXXScopeSpec &SS, 5324 IdentifierInfo *MemberOrBase, 5325 ParsedType TemplateTypeTy, 5326 const DeclSpec &DS, 5327 SourceLocation IdLoc, 5328 Expr *Init, 5329 SourceLocation EllipsisLoc); 5330 5331 MemInitResult BuildMemberInitializer(ValueDecl *Member, 5332 Expr *Init, 5333 SourceLocation IdLoc); 5334 5335 MemInitResult BuildBaseInitializer(QualType BaseType, 5336 TypeSourceInfo *BaseTInfo, 5337 Expr *Init, 5338 CXXRecordDecl *ClassDecl, 5339 SourceLocation EllipsisLoc); 5340 5341 MemInitResult BuildDelegatingInitializer(TypeSourceInfo *TInfo, 5342 Expr *Init, 5343 CXXRecordDecl *ClassDecl); 5344 5345 bool SetDelegatingInitializer(CXXConstructorDecl *Constructor, 5346 CXXCtorInitializer *Initializer); 5347 5348 bool SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors, 5349 ArrayRef<CXXCtorInitializer *> Initializers = None); 5350 5351 void SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation); 5352 5353 5354 /// MarkBaseAndMemberDestructorsReferenced - Given a record decl, 5355 /// mark all the non-trivial destructors of its members and bases as 5356 /// referenced. 5357 void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc, 5358 CXXRecordDecl *Record); 5359 5360 /// \brief The list of classes whose vtables have been used within 5361 /// this translation unit, and the source locations at which the 5362 /// first use occurred. 5363 typedef std::pair<CXXRecordDecl*, SourceLocation> VTableUse; 5364 5365 /// \brief The list of vtables that are required but have not yet been 5366 /// materialized. 5367 SmallVector<VTableUse, 16> VTableUses; 5368 5369 /// \brief The set of classes whose vtables have been used within 5370 /// this translation unit, and a bit that will be true if the vtable is 5371 /// required to be emitted (otherwise, it should be emitted only if needed 5372 /// by code generation). 5373 llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed; 5374 5375 /// \brief Load any externally-stored vtable uses. 5376 void LoadExternalVTableUses(); 5377 5378 /// \brief Note that the vtable for the given class was used at the 5379 /// given location. 5380 void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class, 5381 bool DefinitionRequired = false); 5382 5383 /// \brief Mark the exception specifications of all virtual member functions 5384 /// in the given class as needed. 5385 void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc, 5386 const CXXRecordDecl *RD); 5387 5388 /// MarkVirtualMembersReferenced - Will mark all members of the given 5389 /// CXXRecordDecl referenced. 5390 void MarkVirtualMembersReferenced(SourceLocation Loc, 5391 const CXXRecordDecl *RD); 5392 5393 /// \brief Define all of the vtables that have been used in this 5394 /// translation unit and reference any virtual members used by those 5395 /// vtables. 5396 /// 5397 /// \returns true if any work was done, false otherwise. 5398 bool DefineUsedVTables(); 5399 5400 void AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl); 5401 5402 void ActOnMemInitializers(Decl *ConstructorDecl, 5403 SourceLocation ColonLoc, 5404 ArrayRef<CXXCtorInitializer*> MemInits, 5405 bool AnyErrors); 5406 5407 /// \brief Check class-level dllimport/dllexport attribute. The caller must 5408 /// ensure that referenceDLLExportedClassMethods is called some point later 5409 /// when all outer classes of Class are complete. 5410 void checkClassLevelDLLAttribute(CXXRecordDecl *Class); 5411 5412 void referenceDLLExportedClassMethods(); 5413 5414 void propagateDLLAttrToBaseClassTemplate( 5415 CXXRecordDecl *Class, Attr *ClassAttr, 5416 ClassTemplateSpecializationDecl *BaseTemplateSpec, 5417 SourceLocation BaseLoc); 5418 5419 void CheckCompletedCXXClass(CXXRecordDecl *Record); 5420 void ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc, 5421 Decl *TagDecl, 5422 SourceLocation LBrac, 5423 SourceLocation RBrac, 5424 AttributeList *AttrList); 5425 void ActOnFinishCXXMemberDecls(); 5426 void ActOnFinishCXXNonNestedClass(Decl *D); 5427 5428 void ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param); 5429 unsigned ActOnReenterTemplateScope(Scope *S, Decl *Template); 5430 void ActOnStartDelayedMemberDeclarations(Scope *S, Decl *Record); 5431 void ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *Method); 5432 void ActOnDelayedCXXMethodParameter(Scope *S, Decl *Param); 5433 void ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *Record); 5434 void ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *Method); 5435 void ActOnFinishDelayedMemberInitializers(Decl *Record); 5436 void MarkAsLateParsedTemplate(FunctionDecl *FD, Decl *FnD, 5437 CachedTokens &Toks); 5438 void UnmarkAsLateParsedTemplate(FunctionDecl *FD); 5439 bool IsInsideALocalClassWithinATemplateFunction(); 5440 5441 Decl *ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc, 5442 Expr *AssertExpr, 5443 Expr *AssertMessageExpr, 5444 SourceLocation RParenLoc); 5445 Decl *BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, 5446 Expr *AssertExpr, 5447 StringLiteral *AssertMessageExpr, 5448 SourceLocation RParenLoc, 5449 bool Failed); 5450 5451 FriendDecl *CheckFriendTypeDecl(SourceLocation LocStart, 5452 SourceLocation FriendLoc, 5453 TypeSourceInfo *TSInfo); 5454 Decl *ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, 5455 MultiTemplateParamsArg TemplateParams); 5456 NamedDecl *ActOnFriendFunctionDecl(Scope *S, Declarator &D, 5457 MultiTemplateParamsArg TemplateParams); 5458 5459 QualType CheckConstructorDeclarator(Declarator &D, QualType R, 5460 StorageClass& SC); 5461 void CheckConstructor(CXXConstructorDecl *Constructor); 5462 QualType CheckDestructorDeclarator(Declarator &D, QualType R, 5463 StorageClass& SC); 5464 bool CheckDestructor(CXXDestructorDecl *Destructor); 5465 void CheckConversionDeclarator(Declarator &D, QualType &R, 5466 StorageClass& SC); 5467 Decl *ActOnConversionDeclarator(CXXConversionDecl *Conversion); 5468 5469 void CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD); 5470 void CheckExplicitlyDefaultedMemberExceptionSpec(CXXMethodDecl *MD, 5471 const FunctionProtoType *T); 5472 void CheckDelayedMemberExceptionSpecs(); 5473 5474 //===--------------------------------------------------------------------===// 5475 // C++ Derived Classes 5476 // 5477 5478 /// ActOnBaseSpecifier - Parsed a base specifier 5479 CXXBaseSpecifier *CheckBaseSpecifier(CXXRecordDecl *Class, 5480 SourceRange SpecifierRange, 5481 bool Virtual, AccessSpecifier Access, 5482 TypeSourceInfo *TInfo, 5483 SourceLocation EllipsisLoc); 5484 5485 BaseResult ActOnBaseSpecifier(Decl *classdecl, 5486 SourceRange SpecifierRange, 5487 ParsedAttributes &Attrs, 5488 bool Virtual, AccessSpecifier Access, 5489 ParsedType basetype, 5490 SourceLocation BaseLoc, 5491 SourceLocation EllipsisLoc); 5492 5493 bool AttachBaseSpecifiers(CXXRecordDecl *Class, 5494 MutableArrayRef<CXXBaseSpecifier *> Bases); 5495 void ActOnBaseSpecifiers(Decl *ClassDecl, 5496 MutableArrayRef<CXXBaseSpecifier *> Bases); 5497 5498 bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base); 5499 bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base, 5500 CXXBasePaths &Paths); 5501 5502 // FIXME: I don't like this name. 5503 void BuildBasePathArray(const CXXBasePaths &Paths, CXXCastPath &BasePath); 5504 5505 bool CheckDerivedToBaseConversion(QualType Derived, QualType Base, 5506 SourceLocation Loc, SourceRange Range, 5507 CXXCastPath *BasePath = nullptr, 5508 bool IgnoreAccess = false); 5509 bool CheckDerivedToBaseConversion(QualType Derived, QualType Base, 5510 unsigned InaccessibleBaseID, 5511 unsigned AmbigiousBaseConvID, 5512 SourceLocation Loc, SourceRange Range, 5513 DeclarationName Name, 5514 CXXCastPath *BasePath, 5515 bool IgnoreAccess = false); 5516 5517 std::string getAmbiguousPathsDisplayString(CXXBasePaths &Paths); 5518 5519 bool CheckOverridingFunctionAttributes(const CXXMethodDecl *New, 5520 const CXXMethodDecl *Old); 5521 5522 /// CheckOverridingFunctionReturnType - Checks whether the return types are 5523 /// covariant, according to C++ [class.virtual]p5. 5524 bool CheckOverridingFunctionReturnType(const CXXMethodDecl *New, 5525 const CXXMethodDecl *Old); 5526 5527 /// CheckOverridingFunctionExceptionSpec - Checks whether the exception 5528 /// spec is a subset of base spec. 5529 bool CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, 5530 const CXXMethodDecl *Old); 5531 5532 bool CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange); 5533 5534 /// CheckOverrideControl - Check C++11 override control semantics. 5535 void CheckOverrideControl(NamedDecl *D); 5536 5537 /// DiagnoseAbsenceOfOverrideControl - Diagnose if 'override' keyword was 5538 /// not used in the declaration of an overriding method. 5539 void DiagnoseAbsenceOfOverrideControl(NamedDecl *D); 5540 5541 /// CheckForFunctionMarkedFinal - Checks whether a virtual member function 5542 /// overrides a virtual member function marked 'final', according to 5543 /// C++11 [class.virtual]p4. 5544 bool CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New, 5545 const CXXMethodDecl *Old); 5546 5547 5548 //===--------------------------------------------------------------------===// 5549 // C++ Access Control 5550 // 5551 5552 enum AccessResult { 5553 AR_accessible, 5554 AR_inaccessible, 5555 AR_dependent, 5556 AR_delayed 5557 }; 5558 5559 bool SetMemberAccessSpecifier(NamedDecl *MemberDecl, 5560 NamedDecl *PrevMemberDecl, 5561 AccessSpecifier LexicalAS); 5562 5563 AccessResult CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E, 5564 DeclAccessPair FoundDecl); 5565 AccessResult CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E, 5566 DeclAccessPair FoundDecl); 5567 AccessResult CheckAllocationAccess(SourceLocation OperatorLoc, 5568 SourceRange PlacementRange, 5569 CXXRecordDecl *NamingClass, 5570 DeclAccessPair FoundDecl, 5571 bool Diagnose = true); 5572 AccessResult CheckConstructorAccess(SourceLocation Loc, 5573 CXXConstructorDecl *D, 5574 DeclAccessPair FoundDecl, 5575 const InitializedEntity &Entity, 5576 bool IsCopyBindingRefToTemp = false); 5577 AccessResult CheckConstructorAccess(SourceLocation Loc, 5578 CXXConstructorDecl *D, 5579 DeclAccessPair FoundDecl, 5580 const InitializedEntity &Entity, 5581 const PartialDiagnostic &PDiag); 5582 AccessResult CheckDestructorAccess(SourceLocation Loc, 5583 CXXDestructorDecl *Dtor, 5584 const PartialDiagnostic &PDiag, 5585 QualType objectType = QualType()); 5586 AccessResult CheckFriendAccess(NamedDecl *D); 5587 AccessResult CheckMemberAccess(SourceLocation UseLoc, 5588 CXXRecordDecl *NamingClass, 5589 DeclAccessPair Found); 5590 AccessResult CheckMemberOperatorAccess(SourceLocation Loc, 5591 Expr *ObjectExpr, 5592 Expr *ArgExpr, 5593 DeclAccessPair FoundDecl); 5594 AccessResult CheckAddressOfMemberAccess(Expr *OvlExpr, 5595 DeclAccessPair FoundDecl); 5596 AccessResult CheckBaseClassAccess(SourceLocation AccessLoc, 5597 QualType Base, QualType Derived, 5598 const CXXBasePath &Path, 5599 unsigned DiagID, 5600 bool ForceCheck = false, 5601 bool ForceUnprivileged = false); 5602 void CheckLookupAccess(const LookupResult &R); 5603 bool IsSimplyAccessible(NamedDecl *decl, DeclContext *Ctx); 5604 bool isSpecialMemberAccessibleForDeletion(CXXMethodDecl *decl, 5605 AccessSpecifier access, 5606 QualType objectType); 5607 5608 void HandleDependentAccessCheck(const DependentDiagnostic &DD, 5609 const MultiLevelTemplateArgumentList &TemplateArgs); 5610 void PerformDependentDiagnostics(const DeclContext *Pattern, 5611 const MultiLevelTemplateArgumentList &TemplateArgs); 5612 5613 void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx); 5614 5615 /// \brief When true, access checking violations are treated as SFINAE 5616 /// failures rather than hard errors. 5617 bool AccessCheckingSFINAE; 5618 5619 enum AbstractDiagSelID { 5620 AbstractNone = -1, 5621 AbstractReturnType, 5622 AbstractParamType, 5623 AbstractVariableType, 5624 AbstractFieldType, 5625 AbstractIvarType, 5626 AbstractSynthesizedIvarType, 5627 AbstractArrayType 5628 }; 5629 5630 bool isAbstractType(SourceLocation Loc, QualType T); 5631 bool RequireNonAbstractType(SourceLocation Loc, QualType T, 5632 TypeDiagnoser &Diagnoser); 5633 template <typename... Ts> RequireNonAbstractType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)5634 bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned DiagID, 5635 const Ts &...Args) { 5636 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 5637 return RequireNonAbstractType(Loc, T, Diagnoser); 5638 } 5639 5640 void DiagnoseAbstractType(const CXXRecordDecl *RD); 5641 5642 //===--------------------------------------------------------------------===// 5643 // C++ Overloaded Operators [C++ 13.5] 5644 // 5645 5646 bool CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl); 5647 5648 bool CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl); 5649 5650 //===--------------------------------------------------------------------===// 5651 // C++ Templates [C++ 14] 5652 // 5653 void FilterAcceptableTemplateNames(LookupResult &R, 5654 bool AllowFunctionTemplates = true); 5655 bool hasAnyAcceptableTemplateNames(LookupResult &R, 5656 bool AllowFunctionTemplates = true); 5657 5658 void LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS, 5659 QualType ObjectType, bool EnteringContext, 5660 bool &MemberOfUnknownSpecialization); 5661 5662 TemplateNameKind isTemplateName(Scope *S, 5663 CXXScopeSpec &SS, 5664 bool hasTemplateKeyword, 5665 UnqualifiedId &Name, 5666 ParsedType ObjectType, 5667 bool EnteringContext, 5668 TemplateTy &Template, 5669 bool &MemberOfUnknownSpecialization); 5670 5671 bool DiagnoseUnknownTemplateName(const IdentifierInfo &II, 5672 SourceLocation IILoc, 5673 Scope *S, 5674 const CXXScopeSpec *SS, 5675 TemplateTy &SuggestedTemplate, 5676 TemplateNameKind &SuggestedKind); 5677 5678 void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl); 5679 TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl); 5680 5681 Decl *ActOnTypeParameter(Scope *S, bool Typename, 5682 SourceLocation EllipsisLoc, 5683 SourceLocation KeyLoc, 5684 IdentifierInfo *ParamName, 5685 SourceLocation ParamNameLoc, 5686 unsigned Depth, unsigned Position, 5687 SourceLocation EqualLoc, 5688 ParsedType DefaultArg); 5689 5690 QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc); 5691 Decl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, 5692 unsigned Depth, 5693 unsigned Position, 5694 SourceLocation EqualLoc, 5695 Expr *DefaultArg); 5696 Decl *ActOnTemplateTemplateParameter(Scope *S, 5697 SourceLocation TmpLoc, 5698 TemplateParameterList *Params, 5699 SourceLocation EllipsisLoc, 5700 IdentifierInfo *ParamName, 5701 SourceLocation ParamNameLoc, 5702 unsigned Depth, 5703 unsigned Position, 5704 SourceLocation EqualLoc, 5705 ParsedTemplateArgument DefaultArg); 5706 5707 TemplateParameterList * 5708 ActOnTemplateParameterList(unsigned Depth, 5709 SourceLocation ExportLoc, 5710 SourceLocation TemplateLoc, 5711 SourceLocation LAngleLoc, 5712 ArrayRef<Decl *> Params, 5713 SourceLocation RAngleLoc, 5714 Expr *RequiresClause); 5715 5716 /// \brief The context in which we are checking a template parameter list. 5717 enum TemplateParamListContext { 5718 TPC_ClassTemplate, 5719 TPC_VarTemplate, 5720 TPC_FunctionTemplate, 5721 TPC_ClassTemplateMember, 5722 TPC_FriendClassTemplate, 5723 TPC_FriendFunctionTemplate, 5724 TPC_FriendFunctionTemplateDefinition, 5725 TPC_TypeAliasTemplate 5726 }; 5727 5728 bool CheckTemplateParameterList(TemplateParameterList *NewParams, 5729 TemplateParameterList *OldParams, 5730 TemplateParamListContext TPC); 5731 TemplateParameterList *MatchTemplateParametersToScopeSpecifier( 5732 SourceLocation DeclStartLoc, SourceLocation DeclLoc, 5733 const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, 5734 ArrayRef<TemplateParameterList *> ParamLists, 5735 bool IsFriend, bool &IsExplicitSpecialization, bool &Invalid); 5736 5737 DeclResult CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, 5738 SourceLocation KWLoc, CXXScopeSpec &SS, 5739 IdentifierInfo *Name, SourceLocation NameLoc, 5740 AttributeList *Attr, 5741 TemplateParameterList *TemplateParams, 5742 AccessSpecifier AS, 5743 SourceLocation ModulePrivateLoc, 5744 SourceLocation FriendLoc, 5745 unsigned NumOuterTemplateParamLists, 5746 TemplateParameterList **OuterTemplateParamLists, 5747 SkipBodyInfo *SkipBody = nullptr); 5748 5749 void translateTemplateArguments(const ASTTemplateArgsPtr &In, 5750 TemplateArgumentListInfo &Out); 5751 5752 void NoteAllFoundTemplates(TemplateName Name); 5753 5754 QualType CheckTemplateIdType(TemplateName Template, 5755 SourceLocation TemplateLoc, 5756 TemplateArgumentListInfo &TemplateArgs); 5757 5758 TypeResult 5759 ActOnTemplateIdType(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 5760 TemplateTy Template, SourceLocation TemplateLoc, 5761 SourceLocation LAngleLoc, 5762 ASTTemplateArgsPtr TemplateArgs, 5763 SourceLocation RAngleLoc, 5764 bool IsCtorOrDtorName = false); 5765 5766 /// \brief Parsed an elaborated-type-specifier that refers to a template-id, 5767 /// such as \c class T::template apply<U>. 5768 TypeResult ActOnTagTemplateIdType(TagUseKind TUK, 5769 TypeSpecifierType TagSpec, 5770 SourceLocation TagLoc, 5771 CXXScopeSpec &SS, 5772 SourceLocation TemplateKWLoc, 5773 TemplateTy TemplateD, 5774 SourceLocation TemplateLoc, 5775 SourceLocation LAngleLoc, 5776 ASTTemplateArgsPtr TemplateArgsIn, 5777 SourceLocation RAngleLoc); 5778 5779 DeclResult ActOnVarTemplateSpecialization( 5780 Scope *S, Declarator &D, TypeSourceInfo *DI, 5781 SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, 5782 StorageClass SC, bool IsPartialSpecialization); 5783 5784 DeclResult CheckVarTemplateId(VarTemplateDecl *Template, 5785 SourceLocation TemplateLoc, 5786 SourceLocation TemplateNameLoc, 5787 const TemplateArgumentListInfo &TemplateArgs); 5788 5789 ExprResult CheckVarTemplateId(const CXXScopeSpec &SS, 5790 const DeclarationNameInfo &NameInfo, 5791 VarTemplateDecl *Template, 5792 SourceLocation TemplateLoc, 5793 const TemplateArgumentListInfo *TemplateArgs); 5794 5795 ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS, 5796 SourceLocation TemplateKWLoc, 5797 LookupResult &R, 5798 bool RequiresADL, 5799 const TemplateArgumentListInfo *TemplateArgs); 5800 5801 ExprResult BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, 5802 SourceLocation TemplateKWLoc, 5803 const DeclarationNameInfo &NameInfo, 5804 const TemplateArgumentListInfo *TemplateArgs); 5805 5806 TemplateNameKind ActOnDependentTemplateName(Scope *S, 5807 CXXScopeSpec &SS, 5808 SourceLocation TemplateKWLoc, 5809 UnqualifiedId &Name, 5810 ParsedType ObjectType, 5811 bool EnteringContext, 5812 TemplateTy &Template); 5813 5814 DeclResult 5815 ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, 5816 SourceLocation KWLoc, 5817 SourceLocation ModulePrivateLoc, 5818 TemplateIdAnnotation &TemplateId, 5819 AttributeList *Attr, 5820 MultiTemplateParamsArg TemplateParameterLists, 5821 SkipBodyInfo *SkipBody = nullptr); 5822 5823 Decl *ActOnTemplateDeclarator(Scope *S, 5824 MultiTemplateParamsArg TemplateParameterLists, 5825 Declarator &D); 5826 5827 bool 5828 CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, 5829 TemplateSpecializationKind NewTSK, 5830 NamedDecl *PrevDecl, 5831 TemplateSpecializationKind PrevTSK, 5832 SourceLocation PrevPtOfInstantiation, 5833 bool &SuppressNew); 5834 5835 bool CheckDependentFunctionTemplateSpecialization(FunctionDecl *FD, 5836 const TemplateArgumentListInfo &ExplicitTemplateArgs, 5837 LookupResult &Previous); 5838 5839 bool CheckFunctionTemplateSpecialization(FunctionDecl *FD, 5840 TemplateArgumentListInfo *ExplicitTemplateArgs, 5841 LookupResult &Previous); 5842 bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous); 5843 5844 DeclResult 5845 ActOnExplicitInstantiation(Scope *S, 5846 SourceLocation ExternLoc, 5847 SourceLocation TemplateLoc, 5848 unsigned TagSpec, 5849 SourceLocation KWLoc, 5850 const CXXScopeSpec &SS, 5851 TemplateTy Template, 5852 SourceLocation TemplateNameLoc, 5853 SourceLocation LAngleLoc, 5854 ASTTemplateArgsPtr TemplateArgs, 5855 SourceLocation RAngleLoc, 5856 AttributeList *Attr); 5857 5858 DeclResult 5859 ActOnExplicitInstantiation(Scope *S, 5860 SourceLocation ExternLoc, 5861 SourceLocation TemplateLoc, 5862 unsigned TagSpec, 5863 SourceLocation KWLoc, 5864 CXXScopeSpec &SS, 5865 IdentifierInfo *Name, 5866 SourceLocation NameLoc, 5867 AttributeList *Attr); 5868 5869 DeclResult ActOnExplicitInstantiation(Scope *S, 5870 SourceLocation ExternLoc, 5871 SourceLocation TemplateLoc, 5872 Declarator &D); 5873 5874 TemplateArgumentLoc 5875 SubstDefaultTemplateArgumentIfAvailable(TemplateDecl *Template, 5876 SourceLocation TemplateLoc, 5877 SourceLocation RAngleLoc, 5878 Decl *Param, 5879 SmallVectorImpl<TemplateArgument> 5880 &Converted, 5881 bool &HasDefaultArg); 5882 5883 /// \brief Specifies the context in which a particular template 5884 /// argument is being checked. 5885 enum CheckTemplateArgumentKind { 5886 /// \brief The template argument was specified in the code or was 5887 /// instantiated with some deduced template arguments. 5888 CTAK_Specified, 5889 5890 /// \brief The template argument was deduced via template argument 5891 /// deduction. 5892 CTAK_Deduced, 5893 5894 /// \brief The template argument was deduced from an array bound 5895 /// via template argument deduction. 5896 CTAK_DeducedFromArrayBound 5897 }; 5898 5899 bool CheckTemplateArgument(NamedDecl *Param, 5900 TemplateArgumentLoc &Arg, 5901 NamedDecl *Template, 5902 SourceLocation TemplateLoc, 5903 SourceLocation RAngleLoc, 5904 unsigned ArgumentPackIndex, 5905 SmallVectorImpl<TemplateArgument> &Converted, 5906 CheckTemplateArgumentKind CTAK = CTAK_Specified); 5907 5908 /// \brief Check that the given template arguments can be be provided to 5909 /// the given template, converting the arguments along the way. 5910 /// 5911 /// \param Template The template to which the template arguments are being 5912 /// provided. 5913 /// 5914 /// \param TemplateLoc The location of the template name in the source. 5915 /// 5916 /// \param TemplateArgs The list of template arguments. If the template is 5917 /// a template template parameter, this function may extend the set of 5918 /// template arguments to also include substituted, defaulted template 5919 /// arguments. 5920 /// 5921 /// \param PartialTemplateArgs True if the list of template arguments is 5922 /// intentionally partial, e.g., because we're checking just the initial 5923 /// set of template arguments. 5924 /// 5925 /// \param Converted Will receive the converted, canonicalized template 5926 /// arguments. 5927 /// 5928 /// \returns true if an error occurred, false otherwise. 5929 bool CheckTemplateArgumentList(TemplateDecl *Template, 5930 SourceLocation TemplateLoc, 5931 TemplateArgumentListInfo &TemplateArgs, 5932 bool PartialTemplateArgs, 5933 SmallVectorImpl<TemplateArgument> &Converted); 5934 5935 bool CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, 5936 TemplateArgumentLoc &Arg, 5937 SmallVectorImpl<TemplateArgument> &Converted); 5938 5939 bool CheckTemplateArgument(TemplateTypeParmDecl *Param, 5940 TypeSourceInfo *Arg); 5941 ExprResult CheckTemplateArgument(NonTypeTemplateParmDecl *Param, 5942 QualType InstantiatedParamType, Expr *Arg, 5943 TemplateArgument &Converted, 5944 CheckTemplateArgumentKind CTAK = CTAK_Specified); 5945 bool CheckTemplateArgument(TemplateTemplateParmDecl *Param, 5946 TemplateArgumentLoc &Arg, 5947 unsigned ArgumentPackIndex); 5948 5949 ExprResult 5950 BuildExpressionFromDeclTemplateArgument(const TemplateArgument &Arg, 5951 QualType ParamType, 5952 SourceLocation Loc); 5953 ExprResult 5954 BuildExpressionFromIntegralTemplateArgument(const TemplateArgument &Arg, 5955 SourceLocation Loc); 5956 5957 /// \brief Enumeration describing how template parameter lists are compared 5958 /// for equality. 5959 enum TemplateParameterListEqualKind { 5960 /// \brief We are matching the template parameter lists of two templates 5961 /// that might be redeclarations. 5962 /// 5963 /// \code 5964 /// template<typename T> struct X; 5965 /// template<typename T> struct X; 5966 /// \endcode 5967 TPL_TemplateMatch, 5968 5969 /// \brief We are matching the template parameter lists of two template 5970 /// template parameters as part of matching the template parameter lists 5971 /// of two templates that might be redeclarations. 5972 /// 5973 /// \code 5974 /// template<template<int I> class TT> struct X; 5975 /// template<template<int Value> class Other> struct X; 5976 /// \endcode 5977 TPL_TemplateTemplateParmMatch, 5978 5979 /// \brief We are matching the template parameter lists of a template 5980 /// template argument against the template parameter lists of a template 5981 /// template parameter. 5982 /// 5983 /// \code 5984 /// template<template<int Value> class Metafun> struct X; 5985 /// template<int Value> struct integer_c; 5986 /// X<integer_c> xic; 5987 /// \endcode 5988 TPL_TemplateTemplateArgumentMatch 5989 }; 5990 5991 bool TemplateParameterListsAreEqual(TemplateParameterList *New, 5992 TemplateParameterList *Old, 5993 bool Complain, 5994 TemplateParameterListEqualKind Kind, 5995 SourceLocation TemplateArgLoc 5996 = SourceLocation()); 5997 5998 bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams); 5999 6000 /// \brief Called when the parser has parsed a C++ typename 6001 /// specifier, e.g., "typename T::type". 6002 /// 6003 /// \param S The scope in which this typename type occurs. 6004 /// \param TypenameLoc the location of the 'typename' keyword 6005 /// \param SS the nested-name-specifier following the typename (e.g., 'T::'). 6006 /// \param II the identifier we're retrieving (e.g., 'type' in the example). 6007 /// \param IdLoc the location of the identifier. 6008 TypeResult 6009 ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, 6010 const CXXScopeSpec &SS, const IdentifierInfo &II, 6011 SourceLocation IdLoc); 6012 6013 /// \brief Called when the parser has parsed a C++ typename 6014 /// specifier that ends in a template-id, e.g., 6015 /// "typename MetaFun::template apply<T1, T2>". 6016 /// 6017 /// \param S The scope in which this typename type occurs. 6018 /// \param TypenameLoc the location of the 'typename' keyword 6019 /// \param SS the nested-name-specifier following the typename (e.g., 'T::'). 6020 /// \param TemplateLoc the location of the 'template' keyword, if any. 6021 /// \param TemplateName The template name. 6022 /// \param TemplateNameLoc The location of the template name. 6023 /// \param LAngleLoc The location of the opening angle bracket ('<'). 6024 /// \param TemplateArgs The template arguments. 6025 /// \param RAngleLoc The location of the closing angle bracket ('>'). 6026 TypeResult 6027 ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, 6028 const CXXScopeSpec &SS, 6029 SourceLocation TemplateLoc, 6030 TemplateTy TemplateName, 6031 SourceLocation TemplateNameLoc, 6032 SourceLocation LAngleLoc, 6033 ASTTemplateArgsPtr TemplateArgs, 6034 SourceLocation RAngleLoc); 6035 6036 QualType CheckTypenameType(ElaboratedTypeKeyword Keyword, 6037 SourceLocation KeywordLoc, 6038 NestedNameSpecifierLoc QualifierLoc, 6039 const IdentifierInfo &II, 6040 SourceLocation IILoc); 6041 6042 TypeSourceInfo *RebuildTypeInCurrentInstantiation(TypeSourceInfo *T, 6043 SourceLocation Loc, 6044 DeclarationName Name); 6045 bool RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS); 6046 6047 ExprResult RebuildExprInCurrentInstantiation(Expr *E); 6048 bool RebuildTemplateParamsInCurrentInstantiation( 6049 TemplateParameterList *Params); 6050 6051 std::string 6052 getTemplateArgumentBindingsText(const TemplateParameterList *Params, 6053 const TemplateArgumentList &Args); 6054 6055 std::string 6056 getTemplateArgumentBindingsText(const TemplateParameterList *Params, 6057 const TemplateArgument *Args, 6058 unsigned NumArgs); 6059 6060 //===--------------------------------------------------------------------===// 6061 // C++ Variadic Templates (C++0x [temp.variadic]) 6062 //===--------------------------------------------------------------------===// 6063 6064 /// Determine whether an unexpanded parameter pack might be permitted in this 6065 /// location. Useful for error recovery. 6066 bool isUnexpandedParameterPackPermitted(); 6067 6068 /// \brief The context in which an unexpanded parameter pack is 6069 /// being diagnosed. 6070 /// 6071 /// Note that the values of this enumeration line up with the first 6072 /// argument to the \c err_unexpanded_parameter_pack diagnostic. 6073 enum UnexpandedParameterPackContext { 6074 /// \brief An arbitrary expression. 6075 UPPC_Expression = 0, 6076 6077 /// \brief The base type of a class type. 6078 UPPC_BaseType, 6079 6080 /// \brief The type of an arbitrary declaration. 6081 UPPC_DeclarationType, 6082 6083 /// \brief The type of a data member. 6084 UPPC_DataMemberType, 6085 6086 /// \brief The size of a bit-field. 6087 UPPC_BitFieldWidth, 6088 6089 /// \brief The expression in a static assertion. 6090 UPPC_StaticAssertExpression, 6091 6092 /// \brief The fixed underlying type of an enumeration. 6093 UPPC_FixedUnderlyingType, 6094 6095 /// \brief The enumerator value. 6096 UPPC_EnumeratorValue, 6097 6098 /// \brief A using declaration. 6099 UPPC_UsingDeclaration, 6100 6101 /// \brief A friend declaration. 6102 UPPC_FriendDeclaration, 6103 6104 /// \brief A declaration qualifier. 6105 UPPC_DeclarationQualifier, 6106 6107 /// \brief An initializer. 6108 UPPC_Initializer, 6109 6110 /// \brief A default argument. 6111 UPPC_DefaultArgument, 6112 6113 /// \brief The type of a non-type template parameter. 6114 UPPC_NonTypeTemplateParameterType, 6115 6116 /// \brief The type of an exception. 6117 UPPC_ExceptionType, 6118 6119 /// \brief Partial specialization. 6120 UPPC_PartialSpecialization, 6121 6122 /// \brief Microsoft __if_exists. 6123 UPPC_IfExists, 6124 6125 /// \brief Microsoft __if_not_exists. 6126 UPPC_IfNotExists, 6127 6128 /// \brief Lambda expression. 6129 UPPC_Lambda, 6130 6131 /// \brief Block expression, 6132 UPPC_Block 6133 }; 6134 6135 /// \brief Diagnose unexpanded parameter packs. 6136 /// 6137 /// \param Loc The location at which we should emit the diagnostic. 6138 /// 6139 /// \param UPPC The context in which we are diagnosing unexpanded 6140 /// parameter packs. 6141 /// 6142 /// \param Unexpanded the set of unexpanded parameter packs. 6143 /// 6144 /// \returns true if an error occurred, false otherwise. 6145 bool DiagnoseUnexpandedParameterPacks(SourceLocation Loc, 6146 UnexpandedParameterPackContext UPPC, 6147 ArrayRef<UnexpandedParameterPack> Unexpanded); 6148 6149 /// \brief If the given type contains an unexpanded parameter pack, 6150 /// diagnose the error. 6151 /// 6152 /// \param Loc The source location where a diagnostc should be emitted. 6153 /// 6154 /// \param T The type that is being checked for unexpanded parameter 6155 /// packs. 6156 /// 6157 /// \returns true if an error occurred, false otherwise. 6158 bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T, 6159 UnexpandedParameterPackContext UPPC); 6160 6161 /// \brief If the given expression contains an unexpanded parameter 6162 /// pack, diagnose the error. 6163 /// 6164 /// \param E The expression that is being checked for unexpanded 6165 /// parameter packs. 6166 /// 6167 /// \returns true if an error occurred, false otherwise. 6168 bool DiagnoseUnexpandedParameterPack(Expr *E, 6169 UnexpandedParameterPackContext UPPC = UPPC_Expression); 6170 6171 /// \brief If the given nested-name-specifier contains an unexpanded 6172 /// parameter pack, diagnose the error. 6173 /// 6174 /// \param SS The nested-name-specifier that is being checked for 6175 /// unexpanded parameter packs. 6176 /// 6177 /// \returns true if an error occurred, false otherwise. 6178 bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS, 6179 UnexpandedParameterPackContext UPPC); 6180 6181 /// \brief If the given name contains an unexpanded parameter pack, 6182 /// diagnose the error. 6183 /// 6184 /// \param NameInfo The name (with source location information) that 6185 /// is being checked for unexpanded parameter packs. 6186 /// 6187 /// \returns true if an error occurred, false otherwise. 6188 bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo, 6189 UnexpandedParameterPackContext UPPC); 6190 6191 /// \brief If the given template name contains an unexpanded parameter pack, 6192 /// diagnose the error. 6193 /// 6194 /// \param Loc The location of the template name. 6195 /// 6196 /// \param Template The template name that is being checked for unexpanded 6197 /// parameter packs. 6198 /// 6199 /// \returns true if an error occurred, false otherwise. 6200 bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, 6201 TemplateName Template, 6202 UnexpandedParameterPackContext UPPC); 6203 6204 /// \brief If the given template argument contains an unexpanded parameter 6205 /// pack, diagnose the error. 6206 /// 6207 /// \param Arg The template argument that is being checked for unexpanded 6208 /// parameter packs. 6209 /// 6210 /// \returns true if an error occurred, false otherwise. 6211 bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg, 6212 UnexpandedParameterPackContext UPPC); 6213 6214 /// \brief Collect the set of unexpanded parameter packs within the given 6215 /// template argument. 6216 /// 6217 /// \param Arg The template argument that will be traversed to find 6218 /// unexpanded parameter packs. 6219 void collectUnexpandedParameterPacks(TemplateArgument Arg, 6220 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 6221 6222 /// \brief Collect the set of unexpanded parameter packs within the given 6223 /// template argument. 6224 /// 6225 /// \param Arg The template argument that will be traversed to find 6226 /// unexpanded parameter packs. 6227 void collectUnexpandedParameterPacks(TemplateArgumentLoc Arg, 6228 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 6229 6230 /// \brief Collect the set of unexpanded parameter packs within the given 6231 /// type. 6232 /// 6233 /// \param T The type that will be traversed to find 6234 /// unexpanded parameter packs. 6235 void collectUnexpandedParameterPacks(QualType T, 6236 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 6237 6238 /// \brief Collect the set of unexpanded parameter packs within the given 6239 /// type. 6240 /// 6241 /// \param TL The type that will be traversed to find 6242 /// unexpanded parameter packs. 6243 void collectUnexpandedParameterPacks(TypeLoc TL, 6244 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 6245 6246 /// \brief Collect the set of unexpanded parameter packs within the given 6247 /// nested-name-specifier. 6248 /// 6249 /// \param SS The nested-name-specifier that will be traversed to find 6250 /// unexpanded parameter packs. 6251 void collectUnexpandedParameterPacks(CXXScopeSpec &SS, 6252 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 6253 6254 /// \brief Collect the set of unexpanded parameter packs within the given 6255 /// name. 6256 /// 6257 /// \param NameInfo The name that will be traversed to find 6258 /// unexpanded parameter packs. 6259 void collectUnexpandedParameterPacks(const DeclarationNameInfo &NameInfo, 6260 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 6261 6262 /// \brief Invoked when parsing a template argument followed by an 6263 /// ellipsis, which creates a pack expansion. 6264 /// 6265 /// \param Arg The template argument preceding the ellipsis, which 6266 /// may already be invalid. 6267 /// 6268 /// \param EllipsisLoc The location of the ellipsis. 6269 ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg, 6270 SourceLocation EllipsisLoc); 6271 6272 /// \brief Invoked when parsing a type followed by an ellipsis, which 6273 /// creates a pack expansion. 6274 /// 6275 /// \param Type The type preceding the ellipsis, which will become 6276 /// the pattern of the pack expansion. 6277 /// 6278 /// \param EllipsisLoc The location of the ellipsis. 6279 TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc); 6280 6281 /// \brief Construct a pack expansion type from the pattern of the pack 6282 /// expansion. 6283 TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern, 6284 SourceLocation EllipsisLoc, 6285 Optional<unsigned> NumExpansions); 6286 6287 /// \brief Construct a pack expansion type from the pattern of the pack 6288 /// expansion. 6289 QualType CheckPackExpansion(QualType Pattern, 6290 SourceRange PatternRange, 6291 SourceLocation EllipsisLoc, 6292 Optional<unsigned> NumExpansions); 6293 6294 /// \brief Invoked when parsing an expression followed by an ellipsis, which 6295 /// creates a pack expansion. 6296 /// 6297 /// \param Pattern The expression preceding the ellipsis, which will become 6298 /// the pattern of the pack expansion. 6299 /// 6300 /// \param EllipsisLoc The location of the ellipsis. 6301 ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc); 6302 6303 /// \brief Invoked when parsing an expression followed by an ellipsis, which 6304 /// creates a pack expansion. 6305 /// 6306 /// \param Pattern The expression preceding the ellipsis, which will become 6307 /// the pattern of the pack expansion. 6308 /// 6309 /// \param EllipsisLoc The location of the ellipsis. 6310 ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc, 6311 Optional<unsigned> NumExpansions); 6312 6313 /// \brief Determine whether we could expand a pack expansion with the 6314 /// given set of parameter packs into separate arguments by repeatedly 6315 /// transforming the pattern. 6316 /// 6317 /// \param EllipsisLoc The location of the ellipsis that identifies the 6318 /// pack expansion. 6319 /// 6320 /// \param PatternRange The source range that covers the entire pattern of 6321 /// the pack expansion. 6322 /// 6323 /// \param Unexpanded The set of unexpanded parameter packs within the 6324 /// pattern. 6325 /// 6326 /// \param ShouldExpand Will be set to \c true if the transformer should 6327 /// expand the corresponding pack expansions into separate arguments. When 6328 /// set, \c NumExpansions must also be set. 6329 /// 6330 /// \param RetainExpansion Whether the caller should add an unexpanded 6331 /// pack expansion after all of the expanded arguments. This is used 6332 /// when extending explicitly-specified template argument packs per 6333 /// C++0x [temp.arg.explicit]p9. 6334 /// 6335 /// \param NumExpansions The number of separate arguments that will be in 6336 /// the expanded form of the corresponding pack expansion. This is both an 6337 /// input and an output parameter, which can be set by the caller if the 6338 /// number of expansions is known a priori (e.g., due to a prior substitution) 6339 /// and will be set by the callee when the number of expansions is known. 6340 /// The callee must set this value when \c ShouldExpand is \c true; it may 6341 /// set this value in other cases. 6342 /// 6343 /// \returns true if an error occurred (e.g., because the parameter packs 6344 /// are to be instantiated with arguments of different lengths), false 6345 /// otherwise. If false, \c ShouldExpand (and possibly \c NumExpansions) 6346 /// must be set. 6347 bool CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, 6348 SourceRange PatternRange, 6349 ArrayRef<UnexpandedParameterPack> Unexpanded, 6350 const MultiLevelTemplateArgumentList &TemplateArgs, 6351 bool &ShouldExpand, 6352 bool &RetainExpansion, 6353 Optional<unsigned> &NumExpansions); 6354 6355 /// \brief Determine the number of arguments in the given pack expansion 6356 /// type. 6357 /// 6358 /// This routine assumes that the number of arguments in the expansion is 6359 /// consistent across all of the unexpanded parameter packs in its pattern. 6360 /// 6361 /// Returns an empty Optional if the type can't be expanded. 6362 Optional<unsigned> getNumArgumentsInExpansion(QualType T, 6363 const MultiLevelTemplateArgumentList &TemplateArgs); 6364 6365 /// \brief Determine whether the given declarator contains any unexpanded 6366 /// parameter packs. 6367 /// 6368 /// This routine is used by the parser to disambiguate function declarators 6369 /// with an ellipsis prior to the ')', e.g., 6370 /// 6371 /// \code 6372 /// void f(T...); 6373 /// \endcode 6374 /// 6375 /// To determine whether we have an (unnamed) function parameter pack or 6376 /// a variadic function. 6377 /// 6378 /// \returns true if the declarator contains any unexpanded parameter packs, 6379 /// false otherwise. 6380 bool containsUnexpandedParameterPacks(Declarator &D); 6381 6382 /// \brief Returns the pattern of the pack expansion for a template argument. 6383 /// 6384 /// \param OrigLoc The template argument to expand. 6385 /// 6386 /// \param Ellipsis Will be set to the location of the ellipsis. 6387 /// 6388 /// \param NumExpansions Will be set to the number of expansions that will 6389 /// be generated from this pack expansion, if known a priori. 6390 TemplateArgumentLoc getTemplateArgumentPackExpansionPattern( 6391 TemplateArgumentLoc OrigLoc, 6392 SourceLocation &Ellipsis, 6393 Optional<unsigned> &NumExpansions) const; 6394 6395 //===--------------------------------------------------------------------===// 6396 // C++ Template Argument Deduction (C++ [temp.deduct]) 6397 //===--------------------------------------------------------------------===// 6398 6399 QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType); 6400 6401 /// \brief Describes the result of template argument deduction. 6402 /// 6403 /// The TemplateDeductionResult enumeration describes the result of 6404 /// template argument deduction, as returned from 6405 /// DeduceTemplateArguments(). The separate TemplateDeductionInfo 6406 /// structure provides additional information about the results of 6407 /// template argument deduction, e.g., the deduced template argument 6408 /// list (if successful) or the specific template parameters or 6409 /// deduced arguments that were involved in the failure. 6410 enum TemplateDeductionResult { 6411 /// \brief Template argument deduction was successful. 6412 TDK_Success = 0, 6413 /// \brief The declaration was invalid; do nothing. 6414 TDK_Invalid, 6415 /// \brief Template argument deduction exceeded the maximum template 6416 /// instantiation depth (which has already been diagnosed). 6417 TDK_InstantiationDepth, 6418 /// \brief Template argument deduction did not deduce a value 6419 /// for every template parameter. 6420 TDK_Incomplete, 6421 /// \brief Template argument deduction produced inconsistent 6422 /// deduced values for the given template parameter. 6423 TDK_Inconsistent, 6424 /// \brief Template argument deduction failed due to inconsistent 6425 /// cv-qualifiers on a template parameter type that would 6426 /// otherwise be deduced, e.g., we tried to deduce T in "const T" 6427 /// but were given a non-const "X". 6428 TDK_Underqualified, 6429 /// \brief Substitution of the deduced template argument values 6430 /// resulted in an error. 6431 TDK_SubstitutionFailure, 6432 /// \brief After substituting deduced template arguments, a dependent 6433 /// parameter type did not match the corresponding argument. 6434 TDK_DeducedMismatch, 6435 /// \brief A non-depnedent component of the parameter did not match the 6436 /// corresponding component of the argument. 6437 TDK_NonDeducedMismatch, 6438 /// \brief When performing template argument deduction for a function 6439 /// template, there were too many call arguments. 6440 TDK_TooManyArguments, 6441 /// \brief When performing template argument deduction for a function 6442 /// template, there were too few call arguments. 6443 TDK_TooFewArguments, 6444 /// \brief The explicitly-specified template arguments were not valid 6445 /// template arguments for the given template. 6446 TDK_InvalidExplicitArguments, 6447 /// \brief The arguments included an overloaded function name that could 6448 /// not be resolved to a suitable function. 6449 TDK_FailedOverloadResolution, 6450 /// \brief Deduction failed; that's all we know. 6451 TDK_MiscellaneousDeductionFailure 6452 }; 6453 6454 TemplateDeductionResult 6455 DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial, 6456 const TemplateArgumentList &TemplateArgs, 6457 sema::TemplateDeductionInfo &Info); 6458 6459 TemplateDeductionResult 6460 DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial, 6461 const TemplateArgumentList &TemplateArgs, 6462 sema::TemplateDeductionInfo &Info); 6463 6464 TemplateDeductionResult SubstituteExplicitTemplateArguments( 6465 FunctionTemplateDecl *FunctionTemplate, 6466 TemplateArgumentListInfo &ExplicitTemplateArgs, 6467 SmallVectorImpl<DeducedTemplateArgument> &Deduced, 6468 SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType, 6469 sema::TemplateDeductionInfo &Info); 6470 6471 /// brief A function argument from which we performed template argument 6472 // deduction for a call. 6473 struct OriginalCallArg { OriginalCallArgOriginalCallArg6474 OriginalCallArg(QualType OriginalParamType, 6475 unsigned ArgIdx, 6476 QualType OriginalArgType) 6477 : OriginalParamType(OriginalParamType), ArgIdx(ArgIdx), 6478 OriginalArgType(OriginalArgType) { } 6479 6480 QualType OriginalParamType; 6481 unsigned ArgIdx; 6482 QualType OriginalArgType; 6483 }; 6484 6485 TemplateDeductionResult 6486 FinishTemplateArgumentDeduction(FunctionTemplateDecl *FunctionTemplate, 6487 SmallVectorImpl<DeducedTemplateArgument> &Deduced, 6488 unsigned NumExplicitlySpecified, 6489 FunctionDecl *&Specialization, 6490 sema::TemplateDeductionInfo &Info, 6491 SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs = nullptr, 6492 bool PartialOverloading = false); 6493 6494 TemplateDeductionResult 6495 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate, 6496 TemplateArgumentListInfo *ExplicitTemplateArgs, 6497 ArrayRef<Expr *> Args, 6498 FunctionDecl *&Specialization, 6499 sema::TemplateDeductionInfo &Info, 6500 bool PartialOverloading = false); 6501 6502 TemplateDeductionResult 6503 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate, 6504 TemplateArgumentListInfo *ExplicitTemplateArgs, 6505 QualType ArgFunctionType, 6506 FunctionDecl *&Specialization, 6507 sema::TemplateDeductionInfo &Info, 6508 bool InOverloadResolution = false); 6509 6510 TemplateDeductionResult 6511 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate, 6512 QualType ToType, 6513 CXXConversionDecl *&Specialization, 6514 sema::TemplateDeductionInfo &Info); 6515 6516 TemplateDeductionResult 6517 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate, 6518 TemplateArgumentListInfo *ExplicitTemplateArgs, 6519 FunctionDecl *&Specialization, 6520 sema::TemplateDeductionInfo &Info, 6521 bool InOverloadResolution = false); 6522 6523 /// \brief Substitute Replacement for \p auto in \p TypeWithAuto 6524 QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement); 6525 /// \brief Substitute Replacement for auto in TypeWithAuto 6526 TypeSourceInfo* SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto, 6527 QualType Replacement); 6528 6529 /// \brief Result type of DeduceAutoType. 6530 enum DeduceAutoResult { 6531 DAR_Succeeded, 6532 DAR_Failed, 6533 DAR_FailedAlreadyDiagnosed 6534 }; 6535 6536 DeduceAutoResult DeduceAutoType(TypeSourceInfo *AutoType, Expr *&Initializer, 6537 QualType &Result); 6538 DeduceAutoResult DeduceAutoType(TypeLoc AutoTypeLoc, Expr *&Initializer, 6539 QualType &Result); 6540 void DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init); 6541 bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, 6542 bool Diagnose = true); 6543 6544 QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, 6545 QualType Type, TypeSourceInfo *TSI, 6546 SourceRange Range, bool DirectInit, 6547 Expr *Init); 6548 6549 TypeLoc getReturnTypeLoc(FunctionDecl *FD) const; 6550 6551 bool DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, 6552 SourceLocation ReturnLoc, 6553 Expr *&RetExpr, AutoType *AT); 6554 6555 FunctionTemplateDecl *getMoreSpecializedTemplate(FunctionTemplateDecl *FT1, 6556 FunctionTemplateDecl *FT2, 6557 SourceLocation Loc, 6558 TemplatePartialOrderingContext TPOC, 6559 unsigned NumCallArguments1, 6560 unsigned NumCallArguments2); 6561 UnresolvedSetIterator 6562 getMostSpecialized(UnresolvedSetIterator SBegin, UnresolvedSetIterator SEnd, 6563 TemplateSpecCandidateSet &FailedCandidates, 6564 SourceLocation Loc, 6565 const PartialDiagnostic &NoneDiag, 6566 const PartialDiagnostic &AmbigDiag, 6567 const PartialDiagnostic &CandidateDiag, 6568 bool Complain = true, QualType TargetType = QualType()); 6569 6570 ClassTemplatePartialSpecializationDecl * 6571 getMoreSpecializedPartialSpecialization( 6572 ClassTemplatePartialSpecializationDecl *PS1, 6573 ClassTemplatePartialSpecializationDecl *PS2, 6574 SourceLocation Loc); 6575 6576 VarTemplatePartialSpecializationDecl *getMoreSpecializedPartialSpecialization( 6577 VarTemplatePartialSpecializationDecl *PS1, 6578 VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc); 6579 6580 void MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs, 6581 bool OnlyDeduced, 6582 unsigned Depth, 6583 llvm::SmallBitVector &Used); MarkDeducedTemplateParameters(const FunctionTemplateDecl * FunctionTemplate,llvm::SmallBitVector & Deduced)6584 void MarkDeducedTemplateParameters( 6585 const FunctionTemplateDecl *FunctionTemplate, 6586 llvm::SmallBitVector &Deduced) { 6587 return MarkDeducedTemplateParameters(Context, FunctionTemplate, Deduced); 6588 } 6589 static void MarkDeducedTemplateParameters(ASTContext &Ctx, 6590 const FunctionTemplateDecl *FunctionTemplate, 6591 llvm::SmallBitVector &Deduced); 6592 6593 //===--------------------------------------------------------------------===// 6594 // C++ Template Instantiation 6595 // 6596 6597 MultiLevelTemplateArgumentList 6598 getTemplateInstantiationArgs(NamedDecl *D, 6599 const TemplateArgumentList *Innermost = nullptr, 6600 bool RelativeToPrimary = false, 6601 const FunctionDecl *Pattern = nullptr); 6602 6603 /// \brief A template instantiation that is currently in progress. 6604 struct ActiveTemplateInstantiation { 6605 /// \brief The kind of template instantiation we are performing 6606 enum InstantiationKind { 6607 /// We are instantiating a template declaration. The entity is 6608 /// the declaration we're instantiating (e.g., a CXXRecordDecl). 6609 TemplateInstantiation, 6610 6611 /// We are instantiating a default argument for a template 6612 /// parameter. The Entity is the template, and 6613 /// TemplateArgs/NumTemplateArguments provides the template 6614 /// arguments as specified. 6615 /// FIXME: Use a TemplateArgumentList 6616 DefaultTemplateArgumentInstantiation, 6617 6618 /// We are instantiating a default argument for a function. 6619 /// The Entity is the ParmVarDecl, and TemplateArgs/NumTemplateArgs 6620 /// provides the template arguments as specified. 6621 DefaultFunctionArgumentInstantiation, 6622 6623 /// We are substituting explicit template arguments provided for 6624 /// a function template. The entity is a FunctionTemplateDecl. 6625 ExplicitTemplateArgumentSubstitution, 6626 6627 /// We are substituting template argument determined as part of 6628 /// template argument deduction for either a class template 6629 /// partial specialization or a function template. The 6630 /// Entity is either a ClassTemplatePartialSpecializationDecl or 6631 /// a FunctionTemplateDecl. 6632 DeducedTemplateArgumentSubstitution, 6633 6634 /// We are substituting prior template arguments into a new 6635 /// template parameter. The template parameter itself is either a 6636 /// NonTypeTemplateParmDecl or a TemplateTemplateParmDecl. 6637 PriorTemplateArgumentSubstitution, 6638 6639 /// We are checking the validity of a default template argument that 6640 /// has been used when naming a template-id. 6641 DefaultTemplateArgumentChecking, 6642 6643 /// We are instantiating the exception specification for a function 6644 /// template which was deferred until it was needed. 6645 ExceptionSpecInstantiation 6646 } Kind; 6647 6648 /// \brief The point of instantiation within the source code. 6649 SourceLocation PointOfInstantiation; 6650 6651 /// \brief The template (or partial specialization) in which we are 6652 /// performing the instantiation, for substitutions of prior template 6653 /// arguments. 6654 NamedDecl *Template; 6655 6656 /// \brief The entity that is being instantiated. 6657 Decl *Entity; 6658 6659 /// \brief The list of template arguments we are substituting, if they 6660 /// are not part of the entity. 6661 const TemplateArgument *TemplateArgs; 6662 6663 /// \brief The number of template arguments in TemplateArgs. 6664 unsigned NumTemplateArgs; 6665 template_argumentsActiveTemplateInstantiation6666 ArrayRef<TemplateArgument> template_arguments() const { 6667 return {TemplateArgs, NumTemplateArgs}; 6668 } 6669 6670 /// \brief The template deduction info object associated with the 6671 /// substitution or checking of explicit or deduced template arguments. 6672 sema::TemplateDeductionInfo *DeductionInfo; 6673 6674 /// \brief The source range that covers the construct that cause 6675 /// the instantiation, e.g., the template-id that causes a class 6676 /// template instantiation. 6677 SourceRange InstantiationRange; 6678 ActiveTemplateInstantiationActiveTemplateInstantiation6679 ActiveTemplateInstantiation() 6680 : Kind(TemplateInstantiation), Template(nullptr), Entity(nullptr), 6681 TemplateArgs(nullptr), NumTemplateArgs(0), DeductionInfo(nullptr) {} 6682 6683 /// \brief Determines whether this template is an actual instantiation 6684 /// that should be counted toward the maximum instantiation depth. 6685 bool isInstantiationRecord() const; 6686 6687 friend bool operator==(const ActiveTemplateInstantiation &X, 6688 const ActiveTemplateInstantiation &Y) { 6689 if (X.Kind != Y.Kind) 6690 return false; 6691 6692 if (X.Entity != Y.Entity) 6693 return false; 6694 6695 switch (X.Kind) { 6696 case TemplateInstantiation: 6697 case ExceptionSpecInstantiation: 6698 return true; 6699 6700 case PriorTemplateArgumentSubstitution: 6701 case DefaultTemplateArgumentChecking: 6702 return X.Template == Y.Template && X.TemplateArgs == Y.TemplateArgs; 6703 6704 case DefaultTemplateArgumentInstantiation: 6705 case ExplicitTemplateArgumentSubstitution: 6706 case DeducedTemplateArgumentSubstitution: 6707 case DefaultFunctionArgumentInstantiation: 6708 return X.TemplateArgs == Y.TemplateArgs; 6709 6710 } 6711 6712 llvm_unreachable("Invalid InstantiationKind!"); 6713 } 6714 6715 friend bool operator!=(const ActiveTemplateInstantiation &X, 6716 const ActiveTemplateInstantiation &Y) { 6717 return !(X == Y); 6718 } 6719 }; 6720 6721 /// \brief List of active template instantiations. 6722 /// 6723 /// This vector is treated as a stack. As one template instantiation 6724 /// requires another template instantiation, additional 6725 /// instantiations are pushed onto the stack up to a 6726 /// user-configurable limit LangOptions::InstantiationDepth. 6727 SmallVector<ActiveTemplateInstantiation, 16> 6728 ActiveTemplateInstantiations; 6729 6730 /// \brief Extra modules inspected when performing a lookup during a template 6731 /// instantiation. Computed lazily. 6732 SmallVector<Module*, 16> ActiveTemplateInstantiationLookupModules; 6733 6734 /// \brief Cache of additional modules that should be used for name lookup 6735 /// within the current template instantiation. Computed lazily; use 6736 /// getLookupModules() to get a complete set. 6737 llvm::DenseSet<Module*> LookupModulesCache; 6738 6739 /// \brief Get the set of additional modules that should be checked during 6740 /// name lookup. A module and its imports become visible when instanting a 6741 /// template defined within it. 6742 llvm::DenseSet<Module*> &getLookupModules(); 6743 6744 /// \brief Map from the most recent declaration of a namespace to the most 6745 /// recent visible declaration of that namespace. 6746 llvm::DenseMap<NamedDecl*, NamedDecl*> VisibleNamespaceCache; 6747 6748 /// \brief Whether we are in a SFINAE context that is not associated with 6749 /// template instantiation. 6750 /// 6751 /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside 6752 /// of a template instantiation or template argument deduction. 6753 bool InNonInstantiationSFINAEContext; 6754 6755 /// \brief The number of ActiveTemplateInstantiation entries in 6756 /// \c ActiveTemplateInstantiations that are not actual instantiations and, 6757 /// therefore, should not be counted as part of the instantiation depth. 6758 unsigned NonInstantiationEntries; 6759 6760 /// \brief The last template from which a template instantiation 6761 /// error or warning was produced. 6762 /// 6763 /// This value is used to suppress printing of redundant template 6764 /// instantiation backtraces when there are multiple errors in the 6765 /// same instantiation. FIXME: Does this belong in Sema? It's tough 6766 /// to implement it anywhere else. 6767 ActiveTemplateInstantiation LastTemplateInstantiationErrorContext; 6768 6769 /// \brief The current index into pack expansion arguments that will be 6770 /// used for substitution of parameter packs. 6771 /// 6772 /// The pack expansion index will be -1 to indicate that parameter packs 6773 /// should be instantiated as themselves. Otherwise, the index specifies 6774 /// which argument within the parameter pack will be used for substitution. 6775 int ArgumentPackSubstitutionIndex; 6776 6777 /// \brief RAII object used to change the argument pack substitution index 6778 /// within a \c Sema object. 6779 /// 6780 /// See \c ArgumentPackSubstitutionIndex for more information. 6781 class ArgumentPackSubstitutionIndexRAII { 6782 Sema &Self; 6783 int OldSubstitutionIndex; 6784 6785 public: ArgumentPackSubstitutionIndexRAII(Sema & Self,int NewSubstitutionIndex)6786 ArgumentPackSubstitutionIndexRAII(Sema &Self, int NewSubstitutionIndex) 6787 : Self(Self), OldSubstitutionIndex(Self.ArgumentPackSubstitutionIndex) { 6788 Self.ArgumentPackSubstitutionIndex = NewSubstitutionIndex; 6789 } 6790 ~ArgumentPackSubstitutionIndexRAII()6791 ~ArgumentPackSubstitutionIndexRAII() { 6792 Self.ArgumentPackSubstitutionIndex = OldSubstitutionIndex; 6793 } 6794 }; 6795 6796 friend class ArgumentPackSubstitutionRAII; 6797 6798 /// \brief For each declaration that involved template argument deduction, the 6799 /// set of diagnostics that were suppressed during that template argument 6800 /// deduction. 6801 /// 6802 /// FIXME: Serialize this structure to the AST file. 6803 typedef llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1> > 6804 SuppressedDiagnosticsMap; 6805 SuppressedDiagnosticsMap SuppressedDiagnostics; 6806 6807 /// \brief A stack object to be created when performing template 6808 /// instantiation. 6809 /// 6810 /// Construction of an object of type \c InstantiatingTemplate 6811 /// pushes the current instantiation onto the stack of active 6812 /// instantiations. If the size of this stack exceeds the maximum 6813 /// number of recursive template instantiations, construction 6814 /// produces an error and evaluates true. 6815 /// 6816 /// Destruction of this object will pop the named instantiation off 6817 /// the stack. 6818 struct InstantiatingTemplate { 6819 /// \brief Note that we are instantiating a class template, 6820 /// function template, variable template, alias template, 6821 /// or a member thereof. 6822 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6823 Decl *Entity, 6824 SourceRange InstantiationRange = SourceRange()); 6825 6826 struct ExceptionSpecification {}; 6827 /// \brief Note that we are instantiating an exception specification 6828 /// of a function template. 6829 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6830 FunctionDecl *Entity, ExceptionSpecification, 6831 SourceRange InstantiationRange = SourceRange()); 6832 6833 /// \brief Note that we are instantiating a default argument in a 6834 /// template-id. 6835 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6836 TemplateDecl *Template, 6837 ArrayRef<TemplateArgument> TemplateArgs, 6838 SourceRange InstantiationRange = SourceRange()); 6839 6840 /// \brief Note that we are instantiating a default argument in a 6841 /// template-id. 6842 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6843 FunctionTemplateDecl *FunctionTemplate, 6844 ArrayRef<TemplateArgument> TemplateArgs, 6845 ActiveTemplateInstantiation::InstantiationKind Kind, 6846 sema::TemplateDeductionInfo &DeductionInfo, 6847 SourceRange InstantiationRange = SourceRange()); 6848 6849 /// \brief Note that we are instantiating as part of template 6850 /// argument deduction for a class template partial 6851 /// specialization. 6852 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6853 ClassTemplatePartialSpecializationDecl *PartialSpec, 6854 ArrayRef<TemplateArgument> TemplateArgs, 6855 sema::TemplateDeductionInfo &DeductionInfo, 6856 SourceRange InstantiationRange = SourceRange()); 6857 6858 /// \brief Note that we are instantiating as part of template 6859 /// argument deduction for a variable template partial 6860 /// specialization. 6861 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6862 VarTemplatePartialSpecializationDecl *PartialSpec, 6863 ArrayRef<TemplateArgument> TemplateArgs, 6864 sema::TemplateDeductionInfo &DeductionInfo, 6865 SourceRange InstantiationRange = SourceRange()); 6866 6867 /// \brief Note that we are instantiating a default argument for a function 6868 /// parameter. 6869 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6870 ParmVarDecl *Param, 6871 ArrayRef<TemplateArgument> TemplateArgs, 6872 SourceRange InstantiationRange = SourceRange()); 6873 6874 /// \brief Note that we are substituting prior template arguments into a 6875 /// non-type parameter. 6876 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6877 NamedDecl *Template, 6878 NonTypeTemplateParmDecl *Param, 6879 ArrayRef<TemplateArgument> TemplateArgs, 6880 SourceRange InstantiationRange); 6881 6882 /// \brief Note that we are substituting prior template arguments into a 6883 /// template template parameter. 6884 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6885 NamedDecl *Template, 6886 TemplateTemplateParmDecl *Param, 6887 ArrayRef<TemplateArgument> TemplateArgs, 6888 SourceRange InstantiationRange); 6889 6890 /// \brief Note that we are checking the default template argument 6891 /// against the template parameter for a given template-id. 6892 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 6893 TemplateDecl *Template, 6894 NamedDecl *Param, 6895 ArrayRef<TemplateArgument> TemplateArgs, 6896 SourceRange InstantiationRange); 6897 6898 6899 /// \brief Note that we have finished instantiating this template. 6900 void Clear(); 6901 ~InstantiatingTemplateInstantiatingTemplate6902 ~InstantiatingTemplate() { Clear(); } 6903 6904 /// \brief Determines whether we have exceeded the maximum 6905 /// recursive template instantiations. isInvalidInstantiatingTemplate6906 bool isInvalid() const { return Invalid; } 6907 6908 private: 6909 Sema &SemaRef; 6910 bool Invalid; 6911 bool SavedInNonInstantiationSFINAEContext; 6912 bool CheckInstantiationDepth(SourceLocation PointOfInstantiation, 6913 SourceRange InstantiationRange); 6914 6915 InstantiatingTemplate( 6916 Sema &SemaRef, ActiveTemplateInstantiation::InstantiationKind Kind, 6917 SourceLocation PointOfInstantiation, SourceRange InstantiationRange, 6918 Decl *Entity, NamedDecl *Template = nullptr, 6919 ArrayRef<TemplateArgument> TemplateArgs = None, 6920 sema::TemplateDeductionInfo *DeductionInfo = nullptr); 6921 6922 InstantiatingTemplate(const InstantiatingTemplate&) = delete; 6923 6924 InstantiatingTemplate& 6925 operator=(const InstantiatingTemplate&) = delete; 6926 }; 6927 6928 void PrintInstantiationStack(); 6929 6930 /// \brief Determines whether we are currently in a context where 6931 /// template argument substitution failures are not considered 6932 /// errors. 6933 /// 6934 /// \returns An empty \c Optional if we're not in a SFINAE context. 6935 /// Otherwise, contains a pointer that, if non-NULL, contains the nearest 6936 /// template-deduction context object, which can be used to capture 6937 /// diagnostics that will be suppressed. 6938 Optional<sema::TemplateDeductionInfo *> isSFINAEContext() const; 6939 6940 /// \brief Determines whether we are currently in a context that 6941 /// is not evaluated as per C++ [expr] p5. isUnevaluatedContext()6942 bool isUnevaluatedContext() const { 6943 assert(!ExprEvalContexts.empty() && 6944 "Must be in an expression evaluation context"); 6945 return ExprEvalContexts.back().isUnevaluated(); 6946 } 6947 6948 /// \brief RAII class used to determine whether SFINAE has 6949 /// trapped any errors that occur during template argument 6950 /// deduction. 6951 class SFINAETrap { 6952 Sema &SemaRef; 6953 unsigned PrevSFINAEErrors; 6954 bool PrevInNonInstantiationSFINAEContext; 6955 bool PrevAccessCheckingSFINAE; 6956 6957 public: 6958 explicit SFINAETrap(Sema &SemaRef, bool AccessCheckingSFINAE = false) SemaRef(SemaRef)6959 : SemaRef(SemaRef), PrevSFINAEErrors(SemaRef.NumSFINAEErrors), 6960 PrevInNonInstantiationSFINAEContext( 6961 SemaRef.InNonInstantiationSFINAEContext), 6962 PrevAccessCheckingSFINAE(SemaRef.AccessCheckingSFINAE) 6963 { 6964 if (!SemaRef.isSFINAEContext()) 6965 SemaRef.InNonInstantiationSFINAEContext = true; 6966 SemaRef.AccessCheckingSFINAE = AccessCheckingSFINAE; 6967 } 6968 ~SFINAETrap()6969 ~SFINAETrap() { 6970 SemaRef.NumSFINAEErrors = PrevSFINAEErrors; 6971 SemaRef.InNonInstantiationSFINAEContext 6972 = PrevInNonInstantiationSFINAEContext; 6973 SemaRef.AccessCheckingSFINAE = PrevAccessCheckingSFINAE; 6974 } 6975 6976 /// \brief Determine whether any SFINAE errors have been trapped. hasErrorOccurred()6977 bool hasErrorOccurred() const { 6978 return SemaRef.NumSFINAEErrors > PrevSFINAEErrors; 6979 } 6980 }; 6981 6982 /// \brief RAII class used to indicate that we are performing provisional 6983 /// semantic analysis to determine the validity of a construct, so 6984 /// typo-correction and diagnostics in the immediate context (not within 6985 /// implicitly-instantiated templates) should be suppressed. 6986 class TentativeAnalysisScope { 6987 Sema &SemaRef; 6988 // FIXME: Using a SFINAETrap for this is a hack. 6989 SFINAETrap Trap; 6990 bool PrevDisableTypoCorrection; 6991 public: TentativeAnalysisScope(Sema & SemaRef)6992 explicit TentativeAnalysisScope(Sema &SemaRef) 6993 : SemaRef(SemaRef), Trap(SemaRef, true), 6994 PrevDisableTypoCorrection(SemaRef.DisableTypoCorrection) { 6995 SemaRef.DisableTypoCorrection = true; 6996 } ~TentativeAnalysisScope()6997 ~TentativeAnalysisScope() { 6998 SemaRef.DisableTypoCorrection = PrevDisableTypoCorrection; 6999 } 7000 }; 7001 7002 /// \brief The current instantiation scope used to store local 7003 /// variables. 7004 LocalInstantiationScope *CurrentInstantiationScope; 7005 7006 /// \brief Tracks whether we are in a context where typo correction is 7007 /// disabled. 7008 bool DisableTypoCorrection; 7009 7010 /// \brief The number of typos corrected by CorrectTypo. 7011 unsigned TyposCorrected; 7012 7013 typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet; 7014 typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations; 7015 7016 /// \brief A cache containing identifiers for which typo correction failed and 7017 /// their locations, so that repeated attempts to correct an identifier in a 7018 /// given location are ignored if typo correction already failed for it. 7019 IdentifierSourceLocations TypoCorrectionFailures; 7020 7021 /// \brief Worker object for performing CFG-based warnings. 7022 sema::AnalysisBasedWarnings AnalysisWarnings; 7023 threadSafety::BeforeSet *ThreadSafetyDeclCache; 7024 7025 /// \brief An entity for which implicit template instantiation is required. 7026 /// 7027 /// The source location associated with the declaration is the first place in 7028 /// the source code where the declaration was "used". It is not necessarily 7029 /// the point of instantiation (which will be either before or after the 7030 /// namespace-scope declaration that triggered this implicit instantiation), 7031 /// However, it is the location that diagnostics should generally refer to, 7032 /// because users will need to know what code triggered the instantiation. 7033 typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation; 7034 7035 /// \brief The queue of implicit template instantiations that are required 7036 /// but have not yet been performed. 7037 std::deque<PendingImplicitInstantiation> PendingInstantiations; 7038 7039 class SavePendingInstantiationsAndVTableUsesRAII { 7040 public: SavePendingInstantiationsAndVTableUsesRAII(Sema & S,bool Enabled)7041 SavePendingInstantiationsAndVTableUsesRAII(Sema &S, bool Enabled) 7042 : S(S), Enabled(Enabled) { 7043 if (!Enabled) return; 7044 7045 SavedPendingInstantiations.swap(S.PendingInstantiations); 7046 SavedVTableUses.swap(S.VTableUses); 7047 } 7048 ~SavePendingInstantiationsAndVTableUsesRAII()7049 ~SavePendingInstantiationsAndVTableUsesRAII() { 7050 if (!Enabled) return; 7051 7052 // Restore the set of pending vtables. 7053 assert(S.VTableUses.empty() && 7054 "VTableUses should be empty before it is discarded."); 7055 S.VTableUses.swap(SavedVTableUses); 7056 7057 // Restore the set of pending implicit instantiations. 7058 assert(S.PendingInstantiations.empty() && 7059 "PendingInstantiations should be empty before it is discarded."); 7060 S.PendingInstantiations.swap(SavedPendingInstantiations); 7061 } 7062 7063 private: 7064 Sema &S; 7065 SmallVector<VTableUse, 16> SavedVTableUses; 7066 std::deque<PendingImplicitInstantiation> SavedPendingInstantiations; 7067 bool Enabled; 7068 }; 7069 7070 /// \brief The queue of implicit template instantiations that are required 7071 /// and must be performed within the current local scope. 7072 /// 7073 /// This queue is only used for member functions of local classes in 7074 /// templates, which must be instantiated in the same scope as their 7075 /// enclosing function, so that they can reference function-local 7076 /// types, static variables, enumerators, etc. 7077 std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations; 7078 7079 class SavePendingLocalImplicitInstantiationsRAII { 7080 public: SavePendingLocalImplicitInstantiationsRAII(Sema & S)7081 SavePendingLocalImplicitInstantiationsRAII(Sema &S): S(S) { 7082 SavedPendingLocalImplicitInstantiations.swap( 7083 S.PendingLocalImplicitInstantiations); 7084 } 7085 ~SavePendingLocalImplicitInstantiationsRAII()7086 ~SavePendingLocalImplicitInstantiationsRAII() { 7087 assert(S.PendingLocalImplicitInstantiations.empty() && 7088 "there shouldn't be any pending local implicit instantiations"); 7089 SavedPendingLocalImplicitInstantiations.swap( 7090 S.PendingLocalImplicitInstantiations); 7091 } 7092 7093 private: 7094 Sema &S; 7095 std::deque<PendingImplicitInstantiation> 7096 SavedPendingLocalImplicitInstantiations; 7097 }; 7098 7099 /// A helper class for building up ExtParameterInfos. 7100 class ExtParameterInfoBuilder { 7101 SmallVector<FunctionProtoType::ExtParameterInfo, 16> Infos; 7102 bool HasInteresting = false; 7103 7104 public: 7105 /// Set the ExtParameterInfo for the parameter at the given index, 7106 /// set(unsigned index,FunctionProtoType::ExtParameterInfo info)7107 void set(unsigned index, FunctionProtoType::ExtParameterInfo info) { 7108 assert(Infos.size() <= index); 7109 Infos.resize(index); 7110 Infos.push_back(info); 7111 7112 if (!HasInteresting) 7113 HasInteresting = (info != FunctionProtoType::ExtParameterInfo()); 7114 } 7115 7116 /// Return a pointer (suitable for setting in an ExtProtoInfo) to the 7117 /// ExtParameterInfo array we've built up. 7118 const FunctionProtoType::ExtParameterInfo * getPointerOrNull(unsigned numParams)7119 getPointerOrNull(unsigned numParams) { 7120 if (!HasInteresting) return nullptr; 7121 Infos.resize(numParams); 7122 return Infos.data(); 7123 } 7124 }; 7125 7126 void PerformPendingInstantiations(bool LocalOnly = false); 7127 7128 TypeSourceInfo *SubstType(TypeSourceInfo *T, 7129 const MultiLevelTemplateArgumentList &TemplateArgs, 7130 SourceLocation Loc, DeclarationName Entity); 7131 7132 QualType SubstType(QualType T, 7133 const MultiLevelTemplateArgumentList &TemplateArgs, 7134 SourceLocation Loc, DeclarationName Entity); 7135 7136 TypeSourceInfo *SubstType(TypeLoc TL, 7137 const MultiLevelTemplateArgumentList &TemplateArgs, 7138 SourceLocation Loc, DeclarationName Entity); 7139 7140 TypeSourceInfo *SubstFunctionDeclType(TypeSourceInfo *T, 7141 const MultiLevelTemplateArgumentList &TemplateArgs, 7142 SourceLocation Loc, 7143 DeclarationName Entity, 7144 CXXRecordDecl *ThisContext, 7145 unsigned ThisTypeQuals); 7146 void SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto, 7147 const MultiLevelTemplateArgumentList &Args); 7148 ParmVarDecl *SubstParmVarDecl(ParmVarDecl *D, 7149 const MultiLevelTemplateArgumentList &TemplateArgs, 7150 int indexAdjustment, 7151 Optional<unsigned> NumExpansions, 7152 bool ExpectParameterPack); 7153 bool SubstParmTypes(SourceLocation Loc, ArrayRef<ParmVarDecl *> Params, 7154 const FunctionProtoType::ExtParameterInfo *ExtParamInfos, 7155 const MultiLevelTemplateArgumentList &TemplateArgs, 7156 SmallVectorImpl<QualType> &ParamTypes, 7157 SmallVectorImpl<ParmVarDecl *> *OutParams, 7158 ExtParameterInfoBuilder &ParamInfos); 7159 ExprResult SubstExpr(Expr *E, 7160 const MultiLevelTemplateArgumentList &TemplateArgs); 7161 7162 /// \brief Substitute the given template arguments into a list of 7163 /// expressions, expanding pack expansions if required. 7164 /// 7165 /// \param Exprs The list of expressions to substitute into. 7166 /// 7167 /// \param IsCall Whether this is some form of call, in which case 7168 /// default arguments will be dropped. 7169 /// 7170 /// \param TemplateArgs The set of template arguments to substitute. 7171 /// 7172 /// \param Outputs Will receive all of the substituted arguments. 7173 /// 7174 /// \returns true if an error occurred, false otherwise. 7175 bool SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall, 7176 const MultiLevelTemplateArgumentList &TemplateArgs, 7177 SmallVectorImpl<Expr *> &Outputs); 7178 7179 StmtResult SubstStmt(Stmt *S, 7180 const MultiLevelTemplateArgumentList &TemplateArgs); 7181 7182 Decl *SubstDecl(Decl *D, DeclContext *Owner, 7183 const MultiLevelTemplateArgumentList &TemplateArgs); 7184 7185 ExprResult SubstInitializer(Expr *E, 7186 const MultiLevelTemplateArgumentList &TemplateArgs, 7187 bool CXXDirectInit); 7188 7189 bool 7190 SubstBaseSpecifiers(CXXRecordDecl *Instantiation, 7191 CXXRecordDecl *Pattern, 7192 const MultiLevelTemplateArgumentList &TemplateArgs); 7193 7194 bool 7195 InstantiateClass(SourceLocation PointOfInstantiation, 7196 CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern, 7197 const MultiLevelTemplateArgumentList &TemplateArgs, 7198 TemplateSpecializationKind TSK, 7199 bool Complain = true); 7200 7201 bool InstantiateEnum(SourceLocation PointOfInstantiation, 7202 EnumDecl *Instantiation, EnumDecl *Pattern, 7203 const MultiLevelTemplateArgumentList &TemplateArgs, 7204 TemplateSpecializationKind TSK); 7205 7206 bool InstantiateInClassInitializer( 7207 SourceLocation PointOfInstantiation, FieldDecl *Instantiation, 7208 FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs); 7209 7210 struct LateInstantiatedAttribute { 7211 const Attr *TmplAttr; 7212 LocalInstantiationScope *Scope; 7213 Decl *NewDecl; 7214 LateInstantiatedAttributeLateInstantiatedAttribute7215 LateInstantiatedAttribute(const Attr *A, LocalInstantiationScope *S, 7216 Decl *D) 7217 : TmplAttr(A), Scope(S), NewDecl(D) 7218 { } 7219 }; 7220 typedef SmallVector<LateInstantiatedAttribute, 16> LateInstantiatedAttrVec; 7221 7222 void InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs, 7223 const Decl *Pattern, Decl *Inst, 7224 LateInstantiatedAttrVec *LateAttrs = nullptr, 7225 LocalInstantiationScope *OuterMostScope = nullptr); 7226 7227 bool 7228 InstantiateClassTemplateSpecialization(SourceLocation PointOfInstantiation, 7229 ClassTemplateSpecializationDecl *ClassTemplateSpec, 7230 TemplateSpecializationKind TSK, 7231 bool Complain = true); 7232 7233 void InstantiateClassMembers(SourceLocation PointOfInstantiation, 7234 CXXRecordDecl *Instantiation, 7235 const MultiLevelTemplateArgumentList &TemplateArgs, 7236 TemplateSpecializationKind TSK); 7237 7238 void InstantiateClassTemplateSpecializationMembers( 7239 SourceLocation PointOfInstantiation, 7240 ClassTemplateSpecializationDecl *ClassTemplateSpec, 7241 TemplateSpecializationKind TSK); 7242 7243 NestedNameSpecifierLoc 7244 SubstNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS, 7245 const MultiLevelTemplateArgumentList &TemplateArgs); 7246 7247 DeclarationNameInfo 7248 SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo, 7249 const MultiLevelTemplateArgumentList &TemplateArgs); 7250 TemplateName 7251 SubstTemplateName(NestedNameSpecifierLoc QualifierLoc, TemplateName Name, 7252 SourceLocation Loc, 7253 const MultiLevelTemplateArgumentList &TemplateArgs); 7254 bool Subst(const TemplateArgumentLoc *Args, unsigned NumArgs, 7255 TemplateArgumentListInfo &Result, 7256 const MultiLevelTemplateArgumentList &TemplateArgs); 7257 7258 void InstantiateExceptionSpec(SourceLocation PointOfInstantiation, 7259 FunctionDecl *Function); 7260 void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, 7261 FunctionDecl *Function, 7262 bool Recursive = false, 7263 bool DefinitionRequired = false, 7264 bool AtEndOfTU = false); 7265 VarTemplateSpecializationDecl *BuildVarTemplateInstantiation( 7266 VarTemplateDecl *VarTemplate, VarDecl *FromVar, 7267 const TemplateArgumentList &TemplateArgList, 7268 const TemplateArgumentListInfo &TemplateArgsInfo, 7269 SmallVectorImpl<TemplateArgument> &Converted, 7270 SourceLocation PointOfInstantiation, void *InsertPos, 7271 LateInstantiatedAttrVec *LateAttrs = nullptr, 7272 LocalInstantiationScope *StartingScope = nullptr); 7273 VarTemplateSpecializationDecl *CompleteVarTemplateSpecializationDecl( 7274 VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl, 7275 const MultiLevelTemplateArgumentList &TemplateArgs); 7276 void 7277 BuildVariableInstantiation(VarDecl *NewVar, VarDecl *OldVar, 7278 const MultiLevelTemplateArgumentList &TemplateArgs, 7279 LateInstantiatedAttrVec *LateAttrs, 7280 DeclContext *Owner, 7281 LocalInstantiationScope *StartingScope, 7282 bool InstantiatingVarTemplate = false); 7283 void InstantiateVariableInitializer( 7284 VarDecl *Var, VarDecl *OldVar, 7285 const MultiLevelTemplateArgumentList &TemplateArgs); 7286 void InstantiateVariableDefinition(SourceLocation PointOfInstantiation, 7287 VarDecl *Var, bool Recursive = false, 7288 bool DefinitionRequired = false, 7289 bool AtEndOfTU = false); 7290 void InstantiateStaticDataMemberDefinition( 7291 SourceLocation PointOfInstantiation, 7292 VarDecl *Var, 7293 bool Recursive = false, 7294 bool DefinitionRequired = false); 7295 7296 void InstantiateMemInitializers(CXXConstructorDecl *New, 7297 const CXXConstructorDecl *Tmpl, 7298 const MultiLevelTemplateArgumentList &TemplateArgs); 7299 7300 NamedDecl *FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, 7301 const MultiLevelTemplateArgumentList &TemplateArgs); 7302 DeclContext *FindInstantiatedContext(SourceLocation Loc, DeclContext *DC, 7303 const MultiLevelTemplateArgumentList &TemplateArgs); 7304 7305 // Objective-C declarations. 7306 enum ObjCContainerKind { 7307 OCK_None = -1, 7308 OCK_Interface = 0, 7309 OCK_Protocol, 7310 OCK_Category, 7311 OCK_ClassExtension, 7312 OCK_Implementation, 7313 OCK_CategoryImplementation 7314 }; 7315 ObjCContainerKind getObjCContainerKind() const; 7316 7317 DeclResult actOnObjCTypeParam(Scope *S, 7318 ObjCTypeParamVariance variance, 7319 SourceLocation varianceLoc, 7320 unsigned index, 7321 IdentifierInfo *paramName, 7322 SourceLocation paramLoc, 7323 SourceLocation colonLoc, 7324 ParsedType typeBound); 7325 7326 ObjCTypeParamList *actOnObjCTypeParamList(Scope *S, SourceLocation lAngleLoc, 7327 ArrayRef<Decl *> typeParams, 7328 SourceLocation rAngleLoc); 7329 void popObjCTypeParamList(Scope *S, ObjCTypeParamList *typeParamList); 7330 7331 Decl *ActOnStartClassInterface(Scope *S, 7332 SourceLocation AtInterfaceLoc, 7333 IdentifierInfo *ClassName, 7334 SourceLocation ClassLoc, 7335 ObjCTypeParamList *typeParamList, 7336 IdentifierInfo *SuperName, 7337 SourceLocation SuperLoc, 7338 ArrayRef<ParsedType> SuperTypeArgs, 7339 SourceRange SuperTypeArgsRange, 7340 Decl * const *ProtoRefs, 7341 unsigned NumProtoRefs, 7342 const SourceLocation *ProtoLocs, 7343 SourceLocation EndProtoLoc, 7344 AttributeList *AttrList); 7345 7346 void ActOnSuperClassOfClassInterface(Scope *S, 7347 SourceLocation AtInterfaceLoc, 7348 ObjCInterfaceDecl *IDecl, 7349 IdentifierInfo *ClassName, 7350 SourceLocation ClassLoc, 7351 IdentifierInfo *SuperName, 7352 SourceLocation SuperLoc, 7353 ArrayRef<ParsedType> SuperTypeArgs, 7354 SourceRange SuperTypeArgsRange); 7355 7356 void ActOnTypedefedProtocols(SmallVectorImpl<Decl *> &ProtocolRefs, 7357 IdentifierInfo *SuperName, 7358 SourceLocation SuperLoc); 7359 7360 Decl *ActOnCompatibilityAlias( 7361 SourceLocation AtCompatibilityAliasLoc, 7362 IdentifierInfo *AliasName, SourceLocation AliasLocation, 7363 IdentifierInfo *ClassName, SourceLocation ClassLocation); 7364 7365 bool CheckForwardProtocolDeclarationForCircularDependency( 7366 IdentifierInfo *PName, 7367 SourceLocation &PLoc, SourceLocation PrevLoc, 7368 const ObjCList<ObjCProtocolDecl> &PList); 7369 7370 Decl *ActOnStartProtocolInterface( 7371 SourceLocation AtProtoInterfaceLoc, 7372 IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc, 7373 Decl * const *ProtoRefNames, unsigned NumProtoRefs, 7374 const SourceLocation *ProtoLocs, 7375 SourceLocation EndProtoLoc, 7376 AttributeList *AttrList); 7377 7378 Decl *ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, 7379 IdentifierInfo *ClassName, 7380 SourceLocation ClassLoc, 7381 ObjCTypeParamList *typeParamList, 7382 IdentifierInfo *CategoryName, 7383 SourceLocation CategoryLoc, 7384 Decl * const *ProtoRefs, 7385 unsigned NumProtoRefs, 7386 const SourceLocation *ProtoLocs, 7387 SourceLocation EndProtoLoc); 7388 7389 Decl *ActOnStartClassImplementation( 7390 SourceLocation AtClassImplLoc, 7391 IdentifierInfo *ClassName, SourceLocation ClassLoc, 7392 IdentifierInfo *SuperClassname, 7393 SourceLocation SuperClassLoc); 7394 7395 Decl *ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc, 7396 IdentifierInfo *ClassName, 7397 SourceLocation ClassLoc, 7398 IdentifierInfo *CatName, 7399 SourceLocation CatLoc); 7400 7401 DeclGroupPtrTy ActOnFinishObjCImplementation(Decl *ObjCImpDecl, 7402 ArrayRef<Decl *> Decls); 7403 7404 DeclGroupPtrTy ActOnForwardClassDeclaration(SourceLocation Loc, 7405 IdentifierInfo **IdentList, 7406 SourceLocation *IdentLocs, 7407 ArrayRef<ObjCTypeParamList *> TypeParamLists, 7408 unsigned NumElts); 7409 7410 DeclGroupPtrTy ActOnForwardProtocolDeclaration(SourceLocation AtProtoclLoc, 7411 ArrayRef<IdentifierLocPair> IdentList, 7412 AttributeList *attrList); 7413 7414 void FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, 7415 ArrayRef<IdentifierLocPair> ProtocolId, 7416 SmallVectorImpl<Decl *> &Protocols); 7417 7418 void DiagnoseTypeArgsAndProtocols(IdentifierInfo *ProtocolId, 7419 SourceLocation ProtocolLoc, 7420 IdentifierInfo *TypeArgId, 7421 SourceLocation TypeArgLoc, 7422 bool SelectProtocolFirst = false); 7423 7424 /// Given a list of identifiers (and their locations), resolve the 7425 /// names to either Objective-C protocol qualifiers or type 7426 /// arguments, as appropriate. 7427 void actOnObjCTypeArgsOrProtocolQualifiers( 7428 Scope *S, 7429 ParsedType baseType, 7430 SourceLocation lAngleLoc, 7431 ArrayRef<IdentifierInfo *> identifiers, 7432 ArrayRef<SourceLocation> identifierLocs, 7433 SourceLocation rAngleLoc, 7434 SourceLocation &typeArgsLAngleLoc, 7435 SmallVectorImpl<ParsedType> &typeArgs, 7436 SourceLocation &typeArgsRAngleLoc, 7437 SourceLocation &protocolLAngleLoc, 7438 SmallVectorImpl<Decl *> &protocols, 7439 SourceLocation &protocolRAngleLoc, 7440 bool warnOnIncompleteProtocols); 7441 7442 /// Build a an Objective-C protocol-qualified 'id' type where no 7443 /// base type was specified. 7444 TypeResult actOnObjCProtocolQualifierType( 7445 SourceLocation lAngleLoc, 7446 ArrayRef<Decl *> protocols, 7447 ArrayRef<SourceLocation> protocolLocs, 7448 SourceLocation rAngleLoc); 7449 7450 /// Build a specialized and/or protocol-qualified Objective-C type. 7451 TypeResult actOnObjCTypeArgsAndProtocolQualifiers( 7452 Scope *S, 7453 SourceLocation Loc, 7454 ParsedType BaseType, 7455 SourceLocation TypeArgsLAngleLoc, 7456 ArrayRef<ParsedType> TypeArgs, 7457 SourceLocation TypeArgsRAngleLoc, 7458 SourceLocation ProtocolLAngleLoc, 7459 ArrayRef<Decl *> Protocols, 7460 ArrayRef<SourceLocation> ProtocolLocs, 7461 SourceLocation ProtocolRAngleLoc); 7462 7463 /// Build an Objective-C object pointer type. 7464 QualType BuildObjCObjectType(QualType BaseType, 7465 SourceLocation Loc, 7466 SourceLocation TypeArgsLAngleLoc, 7467 ArrayRef<TypeSourceInfo *> TypeArgs, 7468 SourceLocation TypeArgsRAngleLoc, 7469 SourceLocation ProtocolLAngleLoc, 7470 ArrayRef<ObjCProtocolDecl *> Protocols, 7471 ArrayRef<SourceLocation> ProtocolLocs, 7472 SourceLocation ProtocolRAngleLoc, 7473 bool FailOnError = false); 7474 7475 /// Check the application of the Objective-C '__kindof' qualifier to 7476 /// the given type. 7477 bool checkObjCKindOfType(QualType &type, SourceLocation loc); 7478 7479 /// Ensure attributes are consistent with type. 7480 /// \param [in, out] Attributes The attributes to check; they will 7481 /// be modified to be consistent with \p PropertyTy. 7482 void CheckObjCPropertyAttributes(Decl *PropertyPtrTy, 7483 SourceLocation Loc, 7484 unsigned &Attributes, 7485 bool propertyInPrimaryClass); 7486 7487 /// Process the specified property declaration and create decls for the 7488 /// setters and getters as needed. 7489 /// \param property The property declaration being processed 7490 void ProcessPropertyDecl(ObjCPropertyDecl *property); 7491 7492 7493 void DiagnosePropertyMismatch(ObjCPropertyDecl *Property, 7494 ObjCPropertyDecl *SuperProperty, 7495 const IdentifierInfo *Name, 7496 bool OverridingProtocolProperty); 7497 7498 void DiagnoseClassExtensionDupMethods(ObjCCategoryDecl *CAT, 7499 ObjCInterfaceDecl *ID); 7500 7501 Decl *ActOnAtEnd(Scope *S, SourceRange AtEnd, 7502 ArrayRef<Decl *> allMethods = None, 7503 ArrayRef<DeclGroupPtrTy> allTUVars = None); 7504 7505 Decl *ActOnProperty(Scope *S, SourceLocation AtLoc, 7506 SourceLocation LParenLoc, 7507 FieldDeclarator &FD, ObjCDeclSpec &ODS, 7508 Selector GetterSel, Selector SetterSel, 7509 tok::ObjCKeywordKind MethodImplKind, 7510 DeclContext *lexicalDC = nullptr); 7511 7512 Decl *ActOnPropertyImplDecl(Scope *S, 7513 SourceLocation AtLoc, 7514 SourceLocation PropertyLoc, 7515 bool ImplKind, 7516 IdentifierInfo *PropertyId, 7517 IdentifierInfo *PropertyIvar, 7518 SourceLocation PropertyIvarLoc, 7519 ObjCPropertyQueryKind QueryKind); 7520 7521 enum ObjCSpecialMethodKind { 7522 OSMK_None, 7523 OSMK_Alloc, 7524 OSMK_New, 7525 OSMK_Copy, 7526 OSMK_RetainingInit, 7527 OSMK_NonRetainingInit 7528 }; 7529 7530 struct ObjCArgInfo { 7531 IdentifierInfo *Name; 7532 SourceLocation NameLoc; 7533 // The Type is null if no type was specified, and the DeclSpec is invalid 7534 // in this case. 7535 ParsedType Type; 7536 ObjCDeclSpec DeclSpec; 7537 7538 /// ArgAttrs - Attribute list for this argument. 7539 AttributeList *ArgAttrs; 7540 }; 7541 7542 Decl *ActOnMethodDeclaration( 7543 Scope *S, 7544 SourceLocation BeginLoc, // location of the + or -. 7545 SourceLocation EndLoc, // location of the ; or {. 7546 tok::TokenKind MethodType, 7547 ObjCDeclSpec &ReturnQT, ParsedType ReturnType, 7548 ArrayRef<SourceLocation> SelectorLocs, Selector Sel, 7549 // optional arguments. The number of types/arguments is obtained 7550 // from the Sel.getNumArgs(). 7551 ObjCArgInfo *ArgInfo, 7552 DeclaratorChunk::ParamInfo *CParamInfo, unsigned CNumArgs, // c-style args 7553 AttributeList *AttrList, tok::ObjCKeywordKind MethodImplKind, 7554 bool isVariadic, bool MethodDefinition); 7555 7556 ObjCMethodDecl *LookupMethodInQualifiedType(Selector Sel, 7557 const ObjCObjectPointerType *OPT, 7558 bool IsInstance); 7559 ObjCMethodDecl *LookupMethodInObjectType(Selector Sel, QualType Ty, 7560 bool IsInstance); 7561 7562 bool CheckARCMethodDecl(ObjCMethodDecl *method); 7563 bool inferObjCARCLifetime(ValueDecl *decl); 7564 7565 ExprResult 7566 HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, 7567 Expr *BaseExpr, 7568 SourceLocation OpLoc, 7569 DeclarationName MemberName, 7570 SourceLocation MemberLoc, 7571 SourceLocation SuperLoc, QualType SuperType, 7572 bool Super); 7573 7574 ExprResult 7575 ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, 7576 IdentifierInfo &propertyName, 7577 SourceLocation receiverNameLoc, 7578 SourceLocation propertyNameLoc); 7579 7580 ObjCMethodDecl *tryCaptureObjCSelf(SourceLocation Loc); 7581 7582 /// \brief Describes the kind of message expression indicated by a message 7583 /// send that starts with an identifier. 7584 enum ObjCMessageKind { 7585 /// \brief The message is sent to 'super'. 7586 ObjCSuperMessage, 7587 /// \brief The message is an instance message. 7588 ObjCInstanceMessage, 7589 /// \brief The message is a class message, and the identifier is a type 7590 /// name. 7591 ObjCClassMessage 7592 }; 7593 7594 ObjCMessageKind getObjCMessageKind(Scope *S, 7595 IdentifierInfo *Name, 7596 SourceLocation NameLoc, 7597 bool IsSuper, 7598 bool HasTrailingDot, 7599 ParsedType &ReceiverType); 7600 7601 ExprResult ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, 7602 Selector Sel, 7603 SourceLocation LBracLoc, 7604 ArrayRef<SourceLocation> SelectorLocs, 7605 SourceLocation RBracLoc, 7606 MultiExprArg Args); 7607 7608 ExprResult BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, 7609 QualType ReceiverType, 7610 SourceLocation SuperLoc, 7611 Selector Sel, 7612 ObjCMethodDecl *Method, 7613 SourceLocation LBracLoc, 7614 ArrayRef<SourceLocation> SelectorLocs, 7615 SourceLocation RBracLoc, 7616 MultiExprArg Args, 7617 bool isImplicit = false); 7618 7619 ExprResult BuildClassMessageImplicit(QualType ReceiverType, 7620 bool isSuperReceiver, 7621 SourceLocation Loc, 7622 Selector Sel, 7623 ObjCMethodDecl *Method, 7624 MultiExprArg Args); 7625 7626 ExprResult ActOnClassMessage(Scope *S, 7627 ParsedType Receiver, 7628 Selector Sel, 7629 SourceLocation LBracLoc, 7630 ArrayRef<SourceLocation> SelectorLocs, 7631 SourceLocation RBracLoc, 7632 MultiExprArg Args); 7633 7634 ExprResult BuildInstanceMessage(Expr *Receiver, 7635 QualType ReceiverType, 7636 SourceLocation SuperLoc, 7637 Selector Sel, 7638 ObjCMethodDecl *Method, 7639 SourceLocation LBracLoc, 7640 ArrayRef<SourceLocation> SelectorLocs, 7641 SourceLocation RBracLoc, 7642 MultiExprArg Args, 7643 bool isImplicit = false); 7644 7645 ExprResult BuildInstanceMessageImplicit(Expr *Receiver, 7646 QualType ReceiverType, 7647 SourceLocation Loc, 7648 Selector Sel, 7649 ObjCMethodDecl *Method, 7650 MultiExprArg Args); 7651 7652 ExprResult ActOnInstanceMessage(Scope *S, 7653 Expr *Receiver, 7654 Selector Sel, 7655 SourceLocation LBracLoc, 7656 ArrayRef<SourceLocation> SelectorLocs, 7657 SourceLocation RBracLoc, 7658 MultiExprArg Args); 7659 7660 ExprResult BuildObjCBridgedCast(SourceLocation LParenLoc, 7661 ObjCBridgeCastKind Kind, 7662 SourceLocation BridgeKeywordLoc, 7663 TypeSourceInfo *TSInfo, 7664 Expr *SubExpr); 7665 7666 ExprResult ActOnObjCBridgedCast(Scope *S, 7667 SourceLocation LParenLoc, 7668 ObjCBridgeCastKind Kind, 7669 SourceLocation BridgeKeywordLoc, 7670 ParsedType Type, 7671 SourceLocation RParenLoc, 7672 Expr *SubExpr); 7673 7674 void CheckTollFreeBridgeCast(QualType castType, Expr *castExpr); 7675 7676 void CheckObjCBridgeRelatedCast(QualType castType, Expr *castExpr); 7677 7678 bool CheckTollFreeBridgeStaticCast(QualType castType, Expr *castExpr, 7679 CastKind &Kind); 7680 7681 bool checkObjCBridgeRelatedComponents(SourceLocation Loc, 7682 QualType DestType, QualType SrcType, 7683 ObjCInterfaceDecl *&RelatedClass, 7684 ObjCMethodDecl *&ClassMethod, 7685 ObjCMethodDecl *&InstanceMethod, 7686 TypedefNameDecl *&TDNDecl, 7687 bool CfToNs, bool Diagnose = true); 7688 7689 bool CheckObjCBridgeRelatedConversions(SourceLocation Loc, 7690 QualType DestType, QualType SrcType, 7691 Expr *&SrcExpr, bool Diagnose = true); 7692 7693 bool ConversionToObjCStringLiteralCheck(QualType DstType, Expr *&SrcExpr, 7694 bool Diagnose = true); 7695 7696 bool checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall); 7697 7698 /// \brief Check whether the given new method is a valid override of the 7699 /// given overridden method, and set any properties that should be inherited. 7700 void CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, 7701 const ObjCMethodDecl *Overridden); 7702 7703 /// \brief Describes the compatibility of a result type with its method. 7704 enum ResultTypeCompatibilityKind { 7705 RTC_Compatible, 7706 RTC_Incompatible, 7707 RTC_Unknown 7708 }; 7709 7710 void CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod, 7711 ObjCInterfaceDecl *CurrentClass, 7712 ResultTypeCompatibilityKind RTC); 7713 7714 enum PragmaOptionsAlignKind { 7715 POAK_Native, // #pragma options align=native 7716 POAK_Natural, // #pragma options align=natural 7717 POAK_Packed, // #pragma options align=packed 7718 POAK_Power, // #pragma options align=power 7719 POAK_Mac68k, // #pragma options align=mac68k 7720 POAK_Reset // #pragma options align=reset 7721 }; 7722 7723 /// ActOnPragmaOptionsAlign - Called on well formed \#pragma options align. 7724 void ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, 7725 SourceLocation PragmaLoc); 7726 7727 /// ActOnPragmaPack - Called on well formed \#pragma pack(...). 7728 void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, 7729 StringRef SlotLabel, Expr *Alignment); 7730 7731 /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off]. 7732 void ActOnPragmaMSStruct(PragmaMSStructKind Kind); 7733 7734 /// ActOnPragmaMSComment - Called on well formed 7735 /// \#pragma comment(kind, "arg"). 7736 void ActOnPragmaMSComment(SourceLocation CommentLoc, PragmaMSCommentKind Kind, 7737 StringRef Arg); 7738 7739 /// ActOnPragmaMSPointersToMembers - called on well formed \#pragma 7740 /// pointers_to_members(representation method[, general purpose 7741 /// representation]). 7742 void ActOnPragmaMSPointersToMembers( 7743 LangOptions::PragmaMSPointersToMembersKind Kind, 7744 SourceLocation PragmaLoc); 7745 7746 /// \brief Called on well formed \#pragma vtordisp(). 7747 void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action, 7748 SourceLocation PragmaLoc, 7749 MSVtorDispAttr::Mode Value); 7750 7751 enum PragmaSectionKind { 7752 PSK_DataSeg, 7753 PSK_BSSSeg, 7754 PSK_ConstSeg, 7755 PSK_CodeSeg, 7756 }; 7757 7758 bool UnifySection(StringRef SectionName, 7759 int SectionFlags, 7760 DeclaratorDecl *TheDecl); 7761 bool UnifySection(StringRef SectionName, 7762 int SectionFlags, 7763 SourceLocation PragmaSectionLocation); 7764 7765 /// \brief Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg. 7766 void ActOnPragmaMSSeg(SourceLocation PragmaLocation, 7767 PragmaMsStackAction Action, 7768 llvm::StringRef StackSlotLabel, 7769 StringLiteral *SegmentName, 7770 llvm::StringRef PragmaName); 7771 7772 /// \brief Called on well formed \#pragma section(). 7773 void ActOnPragmaMSSection(SourceLocation PragmaLocation, 7774 int SectionFlags, StringLiteral *SegmentName); 7775 7776 /// \brief Called on well-formed \#pragma init_seg(). 7777 void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation, 7778 StringLiteral *SegmentName); 7779 7780 /// \brief Called on #pragma clang __debug dump II 7781 void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II); 7782 7783 /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch 7784 void ActOnPragmaDetectMismatch(SourceLocation Loc, StringRef Name, 7785 StringRef Value); 7786 7787 /// ActOnPragmaUnused - Called on well-formed '\#pragma unused'. 7788 void ActOnPragmaUnused(const Token &Identifier, 7789 Scope *curScope, 7790 SourceLocation PragmaLoc); 7791 7792 /// ActOnPragmaVisibility - Called on well formed \#pragma GCC visibility... . 7793 void ActOnPragmaVisibility(const IdentifierInfo* VisType, 7794 SourceLocation PragmaLoc); 7795 7796 NamedDecl *DeclClonePragmaWeak(NamedDecl *ND, IdentifierInfo *II, 7797 SourceLocation Loc); 7798 void DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, WeakInfo &W); 7799 7800 /// ActOnPragmaWeakID - Called on well formed \#pragma weak ident. 7801 void ActOnPragmaWeakID(IdentifierInfo* WeakName, 7802 SourceLocation PragmaLoc, 7803 SourceLocation WeakNameLoc); 7804 7805 /// ActOnPragmaRedefineExtname - Called on well formed 7806 /// \#pragma redefine_extname oldname newname. 7807 void ActOnPragmaRedefineExtname(IdentifierInfo* WeakName, 7808 IdentifierInfo* AliasName, 7809 SourceLocation PragmaLoc, 7810 SourceLocation WeakNameLoc, 7811 SourceLocation AliasNameLoc); 7812 7813 /// ActOnPragmaWeakAlias - Called on well formed \#pragma weak ident = ident. 7814 void ActOnPragmaWeakAlias(IdentifierInfo* WeakName, 7815 IdentifierInfo* AliasName, 7816 SourceLocation PragmaLoc, 7817 SourceLocation WeakNameLoc, 7818 SourceLocation AliasNameLoc); 7819 7820 /// ActOnPragmaFPContract - Called on well formed 7821 /// \#pragma {STDC,OPENCL} FP_CONTRACT 7822 void ActOnPragmaFPContract(tok::OnOffSwitch OOS); 7823 7824 /// AddAlignmentAttributesForRecord - Adds any needed alignment attributes to 7825 /// a the record decl, to handle '\#pragma pack' and '\#pragma options align'. 7826 void AddAlignmentAttributesForRecord(RecordDecl *RD); 7827 7828 /// AddMsStructLayoutForRecord - Adds ms_struct layout attribute to record. 7829 void AddMsStructLayoutForRecord(RecordDecl *RD); 7830 7831 /// FreePackedContext - Deallocate and null out PackContext. 7832 void FreePackedContext(); 7833 7834 /// PushNamespaceVisibilityAttr - Note that we've entered a 7835 /// namespace with a visibility attribute. 7836 void PushNamespaceVisibilityAttr(const VisibilityAttr *Attr, 7837 SourceLocation Loc); 7838 7839 /// AddPushedVisibilityAttribute - If '\#pragma GCC visibility' was used, 7840 /// add an appropriate visibility attribute. 7841 void AddPushedVisibilityAttribute(Decl *RD); 7842 7843 /// PopPragmaVisibility - Pop the top element of the visibility stack; used 7844 /// for '\#pragma GCC visibility' and visibility attributes on namespaces. 7845 void PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc); 7846 7847 /// FreeVisContext - Deallocate and null out VisContext. 7848 void FreeVisContext(); 7849 7850 /// AddCFAuditedAttribute - Check whether we're currently within 7851 /// '\#pragma clang arc_cf_code_audited' and, if so, consider adding 7852 /// the appropriate attribute. 7853 void AddCFAuditedAttribute(Decl *D); 7854 7855 /// \brief Called on well formed \#pragma clang optimize. 7856 void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc); 7857 7858 /// \brief Get the location for the currently active "\#pragma clang optimize 7859 /// off". If this location is invalid, then the state of the pragma is "on". getOptimizeOffPragmaLocation()7860 SourceLocation getOptimizeOffPragmaLocation() const { 7861 return OptimizeOffPragmaLocation; 7862 } 7863 7864 /// \brief Only called on function definitions; if there is a pragma in scope 7865 /// with the effect of a range-based optnone, consider marking the function 7866 /// with attribute optnone. 7867 void AddRangeBasedOptnone(FunctionDecl *FD); 7868 7869 /// \brief Adds the 'optnone' attribute to the function declaration if there 7870 /// are no conflicts; Loc represents the location causing the 'optnone' 7871 /// attribute to be added (usually because of a pragma). 7872 void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc); 7873 7874 /// AddAlignedAttr - Adds an aligned attribute to a particular declaration. 7875 void AddAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E, 7876 unsigned SpellingListIndex, bool IsPackExpansion); 7877 void AddAlignedAttr(SourceRange AttrRange, Decl *D, TypeSourceInfo *T, 7878 unsigned SpellingListIndex, bool IsPackExpansion); 7879 7880 /// AddAssumeAlignedAttr - Adds an assume_aligned attribute to a particular 7881 /// declaration. 7882 void AddAssumeAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E, Expr *OE, 7883 unsigned SpellingListIndex); 7884 7885 /// AddAlignValueAttr - Adds an align_value attribute to a particular 7886 /// declaration. 7887 void AddAlignValueAttr(SourceRange AttrRange, Decl *D, Expr *E, 7888 unsigned SpellingListIndex); 7889 7890 /// AddLaunchBoundsAttr - Adds a launch_bounds attribute to a particular 7891 /// declaration. 7892 void AddLaunchBoundsAttr(SourceRange AttrRange, Decl *D, Expr *MaxThreads, 7893 Expr *MinBlocks, unsigned SpellingListIndex); 7894 7895 /// AddModeAttr - Adds a mode attribute to a particular declaration. 7896 void AddModeAttr(SourceRange AttrRange, Decl *D, IdentifierInfo *Name, 7897 unsigned SpellingListIndex, bool InInstantiation = false); 7898 7899 void AddParameterABIAttr(SourceRange AttrRange, Decl *D, 7900 ParameterABI ABI, unsigned SpellingListIndex); 7901 7902 void AddNSConsumedAttr(SourceRange AttrRange, Decl *D, 7903 unsigned SpellingListIndex, bool isNSConsumed, 7904 bool isTemplateInstantiation); 7905 7906 //===--------------------------------------------------------------------===// 7907 // C++ Coroutines TS 7908 // 7909 ExprResult ActOnCoawaitExpr(Scope *S, SourceLocation KwLoc, Expr *E); 7910 ExprResult ActOnCoyieldExpr(Scope *S, SourceLocation KwLoc, Expr *E); 7911 StmtResult ActOnCoreturnStmt(SourceLocation KwLoc, Expr *E); 7912 7913 ExprResult BuildCoawaitExpr(SourceLocation KwLoc, Expr *E); 7914 ExprResult BuildCoyieldExpr(SourceLocation KwLoc, Expr *E); 7915 StmtResult BuildCoreturnStmt(SourceLocation KwLoc, Expr *E); 7916 7917 void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body); 7918 7919 //===--------------------------------------------------------------------===// 7920 // OpenMP directives and clauses. 7921 // 7922 private: 7923 void *VarDataSharingAttributesStack; 7924 /// Set to true inside '#pragma omp declare target' region. 7925 bool IsInOpenMPDeclareTargetContext = false; 7926 /// \brief Initialization of data-sharing attributes stack. 7927 void InitDataSharingAttributesStack(); 7928 void DestroyDataSharingAttributesStack(); 7929 ExprResult 7930 VerifyPositiveIntegerConstantInClause(Expr *Op, OpenMPClauseKind CKind, 7931 bool StrictlyPositive = true); 7932 /// Returns OpenMP nesting level for current directive. 7933 unsigned getOpenMPNestingLevel() const; 7934 7935 public: 7936 /// \brief Return true if the provided declaration \a VD should be captured by 7937 /// reference. 7938 /// \param Level Relative level of nested OpenMP construct for that the check 7939 /// is performed. 7940 bool IsOpenMPCapturedByRef(ValueDecl *D, unsigned Level); 7941 7942 /// \brief Check if the specified variable is used in one of the private 7943 /// clauses (private, firstprivate, lastprivate, reduction etc.) in OpenMP 7944 /// constructs. 7945 VarDecl *IsOpenMPCapturedDecl(ValueDecl *D); 7946 ExprResult getOpenMPCapturedExpr(VarDecl *Capture, ExprValueKind VK, 7947 ExprObjectKind OK, SourceLocation Loc); 7948 7949 /// \brief Check if the specified variable is used in 'private' clause. 7950 /// \param Level Relative level of nested OpenMP construct for that the check 7951 /// is performed. 7952 bool isOpenMPPrivateDecl(ValueDecl *D, unsigned Level); 7953 7954 /// \brief Check if the specified variable is captured by 'target' directive. 7955 /// \param Level Relative level of nested OpenMP construct for that the check 7956 /// is performed. 7957 bool isOpenMPTargetCapturedDecl(ValueDecl *D, unsigned Level); 7958 7959 ExprResult PerformOpenMPImplicitIntegerConversion(SourceLocation OpLoc, 7960 Expr *Op); 7961 /// \brief Called on start of new data sharing attribute block. 7962 void StartOpenMPDSABlock(OpenMPDirectiveKind K, 7963 const DeclarationNameInfo &DirName, Scope *CurScope, 7964 SourceLocation Loc); 7965 /// \brief Start analysis of clauses. 7966 void StartOpenMPClause(OpenMPClauseKind K); 7967 /// \brief End analysis of clauses. 7968 void EndOpenMPClause(); 7969 /// \brief Called on end of data sharing attribute block. 7970 void EndOpenMPDSABlock(Stmt *CurDirective); 7971 7972 /// \brief Check if the current region is an OpenMP loop region and if it is, 7973 /// mark loop control variable, used in \p Init for loop initialization, as 7974 /// private by default. 7975 /// \param Init First part of the for loop. 7976 void ActOnOpenMPLoopInitialization(SourceLocation ForLoc, Stmt *Init); 7977 7978 // OpenMP directives and clauses. 7979 /// \brief Called on correct id-expression from the '#pragma omp 7980 /// threadprivate'. 7981 ExprResult ActOnOpenMPIdExpression(Scope *CurScope, 7982 CXXScopeSpec &ScopeSpec, 7983 const DeclarationNameInfo &Id); 7984 /// \brief Called on well-formed '#pragma omp threadprivate'. 7985 DeclGroupPtrTy ActOnOpenMPThreadprivateDirective( 7986 SourceLocation Loc, 7987 ArrayRef<Expr *> VarList); 7988 /// \brief Builds a new OpenMPThreadPrivateDecl and checks its correctness. 7989 OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl( 7990 SourceLocation Loc, 7991 ArrayRef<Expr *> VarList); 7992 /// \brief Check if the specified type is allowed to be used in 'omp declare 7993 /// reduction' construct. 7994 QualType ActOnOpenMPDeclareReductionType(SourceLocation TyLoc, 7995 TypeResult ParsedType); 7996 /// \brief Called on start of '#pragma omp declare reduction'. 7997 DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveStart( 7998 Scope *S, DeclContext *DC, DeclarationName Name, 7999 ArrayRef<std::pair<QualType, SourceLocation>> ReductionTypes, 8000 AccessSpecifier AS, Decl *PrevDeclInScope = nullptr); 8001 /// \brief Initialize declare reduction construct initializer. 8002 void ActOnOpenMPDeclareReductionCombinerStart(Scope *S, Decl *D); 8003 /// \brief Finish current declare reduction construct initializer. 8004 void ActOnOpenMPDeclareReductionCombinerEnd(Decl *D, Expr *Combiner); 8005 /// \brief Initialize declare reduction construct initializer. 8006 void ActOnOpenMPDeclareReductionInitializerStart(Scope *S, Decl *D); 8007 /// \brief Finish current declare reduction construct initializer. 8008 void ActOnOpenMPDeclareReductionInitializerEnd(Decl *D, Expr *Initializer); 8009 /// \brief Called at the end of '#pragma omp declare reduction'. 8010 DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveEnd( 8011 Scope *S, DeclGroupPtrTy DeclReductions, bool IsValid); 8012 8013 /// Called on the start of target region i.e. '#pragma omp declare target'. 8014 bool ActOnStartOpenMPDeclareTargetDirective(SourceLocation Loc); 8015 /// Called at the end of target region i.e. '#pragme omp end declare target'. 8016 void ActOnFinishOpenMPDeclareTargetDirective(); 8017 /// Called on correct id-expression from the '#pragma omp declare target'. 8018 void ActOnOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec, 8019 const DeclarationNameInfo &Id, 8020 OMPDeclareTargetDeclAttr::MapTypeTy MT, 8021 NamedDeclSetType &SameDirectiveDecls); 8022 /// Check declaration inside target region. 8023 void checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D); 8024 /// Return true inside OpenMP target region. isInOpenMPDeclareTargetContext()8025 bool isInOpenMPDeclareTargetContext() const { 8026 return IsInOpenMPDeclareTargetContext; 8027 } 8028 8029 /// \brief Initialization of captured region for OpenMP region. 8030 void ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, Scope *CurScope); 8031 /// \brief End of OpenMP region. 8032 /// 8033 /// \param S Statement associated with the current OpenMP region. 8034 /// \param Clauses List of clauses for the current OpenMP region. 8035 /// 8036 /// \returns Statement for finished OpenMP region. 8037 StmtResult ActOnOpenMPRegionEnd(StmtResult S, ArrayRef<OMPClause *> Clauses); 8038 StmtResult ActOnOpenMPExecutableDirective( 8039 OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, 8040 OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, 8041 Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc); 8042 /// \brief Called on well-formed '\#pragma omp parallel' after parsing 8043 /// of the associated statement. 8044 StmtResult ActOnOpenMPParallelDirective(ArrayRef<OMPClause *> Clauses, 8045 Stmt *AStmt, 8046 SourceLocation StartLoc, 8047 SourceLocation EndLoc); 8048 /// \brief Called on well-formed '\#pragma omp simd' after parsing 8049 /// of the associated statement. 8050 StmtResult ActOnOpenMPSimdDirective( 8051 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8052 SourceLocation EndLoc, 8053 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8054 /// \brief Called on well-formed '\#pragma omp for' after parsing 8055 /// of the associated statement. 8056 StmtResult ActOnOpenMPForDirective( 8057 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8058 SourceLocation EndLoc, 8059 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8060 /// \brief Called on well-formed '\#pragma omp for simd' after parsing 8061 /// of the associated statement. 8062 StmtResult ActOnOpenMPForSimdDirective( 8063 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8064 SourceLocation EndLoc, 8065 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8066 /// \brief Called on well-formed '\#pragma omp sections' after parsing 8067 /// of the associated statement. 8068 StmtResult ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses, 8069 Stmt *AStmt, SourceLocation StartLoc, 8070 SourceLocation EndLoc); 8071 /// \brief Called on well-formed '\#pragma omp section' after parsing of the 8072 /// associated statement. 8073 StmtResult ActOnOpenMPSectionDirective(Stmt *AStmt, SourceLocation StartLoc, 8074 SourceLocation EndLoc); 8075 /// \brief Called on well-formed '\#pragma omp single' after parsing of the 8076 /// associated statement. 8077 StmtResult ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses, 8078 Stmt *AStmt, SourceLocation StartLoc, 8079 SourceLocation EndLoc); 8080 /// \brief Called on well-formed '\#pragma omp master' after parsing of the 8081 /// associated statement. 8082 StmtResult ActOnOpenMPMasterDirective(Stmt *AStmt, SourceLocation StartLoc, 8083 SourceLocation EndLoc); 8084 /// \brief Called on well-formed '\#pragma omp critical' after parsing of the 8085 /// associated statement. 8086 StmtResult ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, 8087 ArrayRef<OMPClause *> Clauses, 8088 Stmt *AStmt, SourceLocation StartLoc, 8089 SourceLocation EndLoc); 8090 /// \brief Called on well-formed '\#pragma omp parallel for' after parsing 8091 /// of the associated statement. 8092 StmtResult ActOnOpenMPParallelForDirective( 8093 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8094 SourceLocation EndLoc, 8095 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8096 /// \brief Called on well-formed '\#pragma omp parallel for simd' after 8097 /// parsing of the associated statement. 8098 StmtResult ActOnOpenMPParallelForSimdDirective( 8099 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8100 SourceLocation EndLoc, 8101 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8102 /// \brief Called on well-formed '\#pragma omp parallel sections' after 8103 /// parsing of the associated statement. 8104 StmtResult ActOnOpenMPParallelSectionsDirective(ArrayRef<OMPClause *> Clauses, 8105 Stmt *AStmt, 8106 SourceLocation StartLoc, 8107 SourceLocation EndLoc); 8108 /// \brief Called on well-formed '\#pragma omp task' after parsing of the 8109 /// associated statement. 8110 StmtResult ActOnOpenMPTaskDirective(ArrayRef<OMPClause *> Clauses, 8111 Stmt *AStmt, SourceLocation StartLoc, 8112 SourceLocation EndLoc); 8113 /// \brief Called on well-formed '\#pragma omp taskyield'. 8114 StmtResult ActOnOpenMPTaskyieldDirective(SourceLocation StartLoc, 8115 SourceLocation EndLoc); 8116 /// \brief Called on well-formed '\#pragma omp barrier'. 8117 StmtResult ActOnOpenMPBarrierDirective(SourceLocation StartLoc, 8118 SourceLocation EndLoc); 8119 /// \brief Called on well-formed '\#pragma omp taskwait'. 8120 StmtResult ActOnOpenMPTaskwaitDirective(SourceLocation StartLoc, 8121 SourceLocation EndLoc); 8122 /// \brief Called on well-formed '\#pragma omp taskgroup'. 8123 StmtResult ActOnOpenMPTaskgroupDirective(Stmt *AStmt, SourceLocation StartLoc, 8124 SourceLocation EndLoc); 8125 /// \brief Called on well-formed '\#pragma omp flush'. 8126 StmtResult ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, 8127 SourceLocation StartLoc, 8128 SourceLocation EndLoc); 8129 /// \brief Called on well-formed '\#pragma omp ordered' after parsing of the 8130 /// associated statement. 8131 StmtResult ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, 8132 Stmt *AStmt, SourceLocation StartLoc, 8133 SourceLocation EndLoc); 8134 /// \brief Called on well-formed '\#pragma omp atomic' after parsing of the 8135 /// associated statement. 8136 StmtResult ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, 8137 Stmt *AStmt, SourceLocation StartLoc, 8138 SourceLocation EndLoc); 8139 /// \brief Called on well-formed '\#pragma omp target' after parsing of the 8140 /// associated statement. 8141 StmtResult ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, 8142 Stmt *AStmt, SourceLocation StartLoc, 8143 SourceLocation EndLoc); 8144 /// \brief Called on well-formed '\#pragma omp target data' after parsing of 8145 /// the associated statement. 8146 StmtResult ActOnOpenMPTargetDataDirective(ArrayRef<OMPClause *> Clauses, 8147 Stmt *AStmt, SourceLocation StartLoc, 8148 SourceLocation EndLoc); 8149 /// \brief Called on well-formed '\#pragma omp target enter data' after 8150 /// parsing of the associated statement. 8151 StmtResult ActOnOpenMPTargetEnterDataDirective(ArrayRef<OMPClause *> Clauses, 8152 SourceLocation StartLoc, 8153 SourceLocation EndLoc); 8154 /// \brief Called on well-formed '\#pragma omp target exit data' after 8155 /// parsing of the associated statement. 8156 StmtResult ActOnOpenMPTargetExitDataDirective(ArrayRef<OMPClause *> Clauses, 8157 SourceLocation StartLoc, 8158 SourceLocation EndLoc); 8159 /// \brief Called on well-formed '\#pragma omp target parallel' after 8160 /// parsing of the associated statement. 8161 StmtResult ActOnOpenMPTargetParallelDirective(ArrayRef<OMPClause *> Clauses, 8162 Stmt *AStmt, 8163 SourceLocation StartLoc, 8164 SourceLocation EndLoc); 8165 /// \brief Called on well-formed '\#pragma omp target parallel for' after 8166 /// parsing of the associated statement. 8167 StmtResult ActOnOpenMPTargetParallelForDirective( 8168 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8169 SourceLocation EndLoc, 8170 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8171 /// \brief Called on well-formed '\#pragma omp teams' after parsing of the 8172 /// associated statement. 8173 StmtResult ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses, 8174 Stmt *AStmt, SourceLocation StartLoc, 8175 SourceLocation EndLoc); 8176 /// \brief Called on well-formed '\#pragma omp cancellation point'. 8177 StmtResult 8178 ActOnOpenMPCancellationPointDirective(SourceLocation StartLoc, 8179 SourceLocation EndLoc, 8180 OpenMPDirectiveKind CancelRegion); 8181 /// \brief Called on well-formed '\#pragma omp cancel'. 8182 StmtResult ActOnOpenMPCancelDirective(ArrayRef<OMPClause *> Clauses, 8183 SourceLocation StartLoc, 8184 SourceLocation EndLoc, 8185 OpenMPDirectiveKind CancelRegion); 8186 /// \brief Called on well-formed '\#pragma omp taskloop' after parsing of the 8187 /// associated statement. 8188 StmtResult ActOnOpenMPTaskLoopDirective( 8189 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8190 SourceLocation EndLoc, 8191 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8192 /// \brief Called on well-formed '\#pragma omp taskloop simd' after parsing of 8193 /// the associated statement. 8194 StmtResult ActOnOpenMPTaskLoopSimdDirective( 8195 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8196 SourceLocation EndLoc, 8197 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8198 /// \brief Called on well-formed '\#pragma omp distribute' after parsing 8199 /// of the associated statement. 8200 StmtResult ActOnOpenMPDistributeDirective( 8201 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8202 SourceLocation EndLoc, 8203 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8204 /// \brief Called on well-formed '\#pragma omp target update'. 8205 StmtResult ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses, 8206 SourceLocation StartLoc, 8207 SourceLocation EndLoc); 8208 /// \brief Called on well-formed '\#pragma omp distribute parallel for' after 8209 /// parsing of the associated statement. 8210 StmtResult ActOnOpenMPDistributeParallelForDirective( 8211 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8212 SourceLocation EndLoc, 8213 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8214 /// \brief Called on well-formed '\#pragma omp distribute parallel for simd' 8215 /// after parsing of the associated statement. 8216 StmtResult ActOnOpenMPDistributeParallelForSimdDirective( 8217 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8218 SourceLocation EndLoc, 8219 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8220 /// \brief Called on well-formed '\#pragma omp distribute simd' after 8221 /// parsing of the associated statement. 8222 StmtResult ActOnOpenMPDistributeSimdDirective( 8223 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8224 SourceLocation EndLoc, 8225 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8226 /// \brief Called on well-formed '\#pragma omp target parallel for simd' after 8227 /// parsing of the associated statement. 8228 StmtResult ActOnOpenMPTargetParallelForSimdDirective( 8229 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, 8230 SourceLocation EndLoc, 8231 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); 8232 8233 /// Checks correctness of linear modifiers. 8234 bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind, 8235 SourceLocation LinLoc); 8236 /// Checks that the specified declaration matches requirements for the linear 8237 /// decls. 8238 bool CheckOpenMPLinearDecl(ValueDecl *D, SourceLocation ELoc, 8239 OpenMPLinearClauseKind LinKind, QualType Type); 8240 8241 /// \brief Called on well-formed '\#pragma omp declare simd' after parsing of 8242 /// the associated method/function. 8243 DeclGroupPtrTy ActOnOpenMPDeclareSimdDirective( 8244 DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, 8245 Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, 8246 ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, 8247 ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR); 8248 8249 OMPClause *ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind, 8250 Expr *Expr, 8251 SourceLocation StartLoc, 8252 SourceLocation LParenLoc, 8253 SourceLocation EndLoc); 8254 /// \brief Called on well-formed 'if' clause. 8255 OMPClause *ActOnOpenMPIfClause(OpenMPDirectiveKind NameModifier, 8256 Expr *Condition, SourceLocation StartLoc, 8257 SourceLocation LParenLoc, 8258 SourceLocation NameModifierLoc, 8259 SourceLocation ColonLoc, 8260 SourceLocation EndLoc); 8261 /// \brief Called on well-formed 'final' clause. 8262 OMPClause *ActOnOpenMPFinalClause(Expr *Condition, SourceLocation StartLoc, 8263 SourceLocation LParenLoc, 8264 SourceLocation EndLoc); 8265 /// \brief Called on well-formed 'num_threads' clause. 8266 OMPClause *ActOnOpenMPNumThreadsClause(Expr *NumThreads, 8267 SourceLocation StartLoc, 8268 SourceLocation LParenLoc, 8269 SourceLocation EndLoc); 8270 /// \brief Called on well-formed 'safelen' clause. 8271 OMPClause *ActOnOpenMPSafelenClause(Expr *Length, 8272 SourceLocation StartLoc, 8273 SourceLocation LParenLoc, 8274 SourceLocation EndLoc); 8275 /// \brief Called on well-formed 'simdlen' clause. 8276 OMPClause *ActOnOpenMPSimdlenClause(Expr *Length, SourceLocation StartLoc, 8277 SourceLocation LParenLoc, 8278 SourceLocation EndLoc); 8279 /// \brief Called on well-formed 'collapse' clause. 8280 OMPClause *ActOnOpenMPCollapseClause(Expr *NumForLoops, 8281 SourceLocation StartLoc, 8282 SourceLocation LParenLoc, 8283 SourceLocation EndLoc); 8284 /// \brief Called on well-formed 'ordered' clause. 8285 OMPClause * 8286 ActOnOpenMPOrderedClause(SourceLocation StartLoc, SourceLocation EndLoc, 8287 SourceLocation LParenLoc = SourceLocation(), 8288 Expr *NumForLoops = nullptr); 8289 /// \brief Called on well-formed 'grainsize' clause. 8290 OMPClause *ActOnOpenMPGrainsizeClause(Expr *Size, SourceLocation StartLoc, 8291 SourceLocation LParenLoc, 8292 SourceLocation EndLoc); 8293 /// \brief Called on well-formed 'num_tasks' clause. 8294 OMPClause *ActOnOpenMPNumTasksClause(Expr *NumTasks, SourceLocation StartLoc, 8295 SourceLocation LParenLoc, 8296 SourceLocation EndLoc); 8297 /// \brief Called on well-formed 'hint' clause. 8298 OMPClause *ActOnOpenMPHintClause(Expr *Hint, SourceLocation StartLoc, 8299 SourceLocation LParenLoc, 8300 SourceLocation EndLoc); 8301 8302 OMPClause *ActOnOpenMPSimpleClause(OpenMPClauseKind Kind, 8303 unsigned Argument, 8304 SourceLocation ArgumentLoc, 8305 SourceLocation StartLoc, 8306 SourceLocation LParenLoc, 8307 SourceLocation EndLoc); 8308 /// \brief Called on well-formed 'default' clause. 8309 OMPClause *ActOnOpenMPDefaultClause(OpenMPDefaultClauseKind Kind, 8310 SourceLocation KindLoc, 8311 SourceLocation StartLoc, 8312 SourceLocation LParenLoc, 8313 SourceLocation EndLoc); 8314 /// \brief Called on well-formed 'proc_bind' clause. 8315 OMPClause *ActOnOpenMPProcBindClause(OpenMPProcBindClauseKind Kind, 8316 SourceLocation KindLoc, 8317 SourceLocation StartLoc, 8318 SourceLocation LParenLoc, 8319 SourceLocation EndLoc); 8320 8321 OMPClause *ActOnOpenMPSingleExprWithArgClause( 8322 OpenMPClauseKind Kind, ArrayRef<unsigned> Arguments, Expr *Expr, 8323 SourceLocation StartLoc, SourceLocation LParenLoc, 8324 ArrayRef<SourceLocation> ArgumentsLoc, SourceLocation DelimLoc, 8325 SourceLocation EndLoc); 8326 /// \brief Called on well-formed 'schedule' clause. 8327 OMPClause *ActOnOpenMPScheduleClause( 8328 OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2, 8329 OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc, 8330 SourceLocation LParenLoc, SourceLocation M1Loc, SourceLocation M2Loc, 8331 SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc); 8332 8333 OMPClause *ActOnOpenMPClause(OpenMPClauseKind Kind, SourceLocation StartLoc, 8334 SourceLocation EndLoc); 8335 /// \brief Called on well-formed 'nowait' clause. 8336 OMPClause *ActOnOpenMPNowaitClause(SourceLocation StartLoc, 8337 SourceLocation EndLoc); 8338 /// \brief Called on well-formed 'untied' clause. 8339 OMPClause *ActOnOpenMPUntiedClause(SourceLocation StartLoc, 8340 SourceLocation EndLoc); 8341 /// \brief Called on well-formed 'mergeable' clause. 8342 OMPClause *ActOnOpenMPMergeableClause(SourceLocation StartLoc, 8343 SourceLocation EndLoc); 8344 /// \brief Called on well-formed 'read' clause. 8345 OMPClause *ActOnOpenMPReadClause(SourceLocation StartLoc, 8346 SourceLocation EndLoc); 8347 /// \brief Called on well-formed 'write' clause. 8348 OMPClause *ActOnOpenMPWriteClause(SourceLocation StartLoc, 8349 SourceLocation EndLoc); 8350 /// \brief Called on well-formed 'update' clause. 8351 OMPClause *ActOnOpenMPUpdateClause(SourceLocation StartLoc, 8352 SourceLocation EndLoc); 8353 /// \brief Called on well-formed 'capture' clause. 8354 OMPClause *ActOnOpenMPCaptureClause(SourceLocation StartLoc, 8355 SourceLocation EndLoc); 8356 /// \brief Called on well-formed 'seq_cst' clause. 8357 OMPClause *ActOnOpenMPSeqCstClause(SourceLocation StartLoc, 8358 SourceLocation EndLoc); 8359 /// \brief Called on well-formed 'threads' clause. 8360 OMPClause *ActOnOpenMPThreadsClause(SourceLocation StartLoc, 8361 SourceLocation EndLoc); 8362 /// \brief Called on well-formed 'simd' clause. 8363 OMPClause *ActOnOpenMPSIMDClause(SourceLocation StartLoc, 8364 SourceLocation EndLoc); 8365 /// \brief Called on well-formed 'nogroup' clause. 8366 OMPClause *ActOnOpenMPNogroupClause(SourceLocation StartLoc, 8367 SourceLocation EndLoc); 8368 8369 OMPClause *ActOnOpenMPVarListClause( 8370 OpenMPClauseKind Kind, ArrayRef<Expr *> Vars, Expr *TailExpr, 8371 SourceLocation StartLoc, SourceLocation LParenLoc, 8372 SourceLocation ColonLoc, SourceLocation EndLoc, 8373 CXXScopeSpec &ReductionIdScopeSpec, 8374 const DeclarationNameInfo &ReductionId, OpenMPDependClauseKind DepKind, 8375 OpenMPLinearClauseKind LinKind, OpenMPMapClauseKind MapTypeModifier, 8376 OpenMPMapClauseKind MapType, bool IsMapTypeImplicit, 8377 SourceLocation DepLinMapLoc); 8378 /// \brief Called on well-formed 'private' clause. 8379 OMPClause *ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, 8380 SourceLocation StartLoc, 8381 SourceLocation LParenLoc, 8382 SourceLocation EndLoc); 8383 /// \brief Called on well-formed 'firstprivate' clause. 8384 OMPClause *ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, 8385 SourceLocation StartLoc, 8386 SourceLocation LParenLoc, 8387 SourceLocation EndLoc); 8388 /// \brief Called on well-formed 'lastprivate' clause. 8389 OMPClause *ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, 8390 SourceLocation StartLoc, 8391 SourceLocation LParenLoc, 8392 SourceLocation EndLoc); 8393 /// \brief Called on well-formed 'shared' clause. 8394 OMPClause *ActOnOpenMPSharedClause(ArrayRef<Expr *> VarList, 8395 SourceLocation StartLoc, 8396 SourceLocation LParenLoc, 8397 SourceLocation EndLoc); 8398 /// \brief Called on well-formed 'reduction' clause. 8399 OMPClause *ActOnOpenMPReductionClause( 8400 ArrayRef<Expr *> VarList, SourceLocation StartLoc, 8401 SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, 8402 CXXScopeSpec &ReductionIdScopeSpec, 8403 const DeclarationNameInfo &ReductionId, 8404 ArrayRef<Expr *> UnresolvedReductions = llvm::None); 8405 /// \brief Called on well-formed 'linear' clause. 8406 OMPClause * 8407 ActOnOpenMPLinearClause(ArrayRef<Expr *> VarList, Expr *Step, 8408 SourceLocation StartLoc, SourceLocation LParenLoc, 8409 OpenMPLinearClauseKind LinKind, SourceLocation LinLoc, 8410 SourceLocation ColonLoc, SourceLocation EndLoc); 8411 /// \brief Called on well-formed 'aligned' clause. 8412 OMPClause *ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, 8413 Expr *Alignment, 8414 SourceLocation StartLoc, 8415 SourceLocation LParenLoc, 8416 SourceLocation ColonLoc, 8417 SourceLocation EndLoc); 8418 /// \brief Called on well-formed 'copyin' clause. 8419 OMPClause *ActOnOpenMPCopyinClause(ArrayRef<Expr *> VarList, 8420 SourceLocation StartLoc, 8421 SourceLocation LParenLoc, 8422 SourceLocation EndLoc); 8423 /// \brief Called on well-formed 'copyprivate' clause. 8424 OMPClause *ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, 8425 SourceLocation StartLoc, 8426 SourceLocation LParenLoc, 8427 SourceLocation EndLoc); 8428 /// \brief Called on well-formed 'flush' pseudo clause. 8429 OMPClause *ActOnOpenMPFlushClause(ArrayRef<Expr *> VarList, 8430 SourceLocation StartLoc, 8431 SourceLocation LParenLoc, 8432 SourceLocation EndLoc); 8433 /// \brief Called on well-formed 'depend' clause. 8434 OMPClause * 8435 ActOnOpenMPDependClause(OpenMPDependClauseKind DepKind, SourceLocation DepLoc, 8436 SourceLocation ColonLoc, ArrayRef<Expr *> VarList, 8437 SourceLocation StartLoc, SourceLocation LParenLoc, 8438 SourceLocation EndLoc); 8439 /// \brief Called on well-formed 'device' clause. 8440 OMPClause *ActOnOpenMPDeviceClause(Expr *Device, SourceLocation StartLoc, 8441 SourceLocation LParenLoc, 8442 SourceLocation EndLoc); 8443 /// \brief Called on well-formed 'map' clause. 8444 OMPClause * 8445 ActOnOpenMPMapClause(OpenMPMapClauseKind MapTypeModifier, 8446 OpenMPMapClauseKind MapType, bool IsMapTypeImplicit, 8447 SourceLocation MapLoc, SourceLocation ColonLoc, 8448 ArrayRef<Expr *> VarList, SourceLocation StartLoc, 8449 SourceLocation LParenLoc, SourceLocation EndLoc); 8450 /// \brief Called on well-formed 'num_teams' clause. 8451 OMPClause *ActOnOpenMPNumTeamsClause(Expr *NumTeams, SourceLocation StartLoc, 8452 SourceLocation LParenLoc, 8453 SourceLocation EndLoc); 8454 /// \brief Called on well-formed 'thread_limit' clause. 8455 OMPClause *ActOnOpenMPThreadLimitClause(Expr *ThreadLimit, 8456 SourceLocation StartLoc, 8457 SourceLocation LParenLoc, 8458 SourceLocation EndLoc); 8459 /// \brief Called on well-formed 'priority' clause. 8460 OMPClause *ActOnOpenMPPriorityClause(Expr *Priority, SourceLocation StartLoc, 8461 SourceLocation LParenLoc, 8462 SourceLocation EndLoc); 8463 /// \brief Called on well-formed 'dist_schedule' clause. 8464 OMPClause *ActOnOpenMPDistScheduleClause( 8465 OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize, 8466 SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KindLoc, 8467 SourceLocation CommaLoc, SourceLocation EndLoc); 8468 /// \brief Called on well-formed 'defaultmap' clause. 8469 OMPClause *ActOnOpenMPDefaultmapClause( 8470 OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, 8471 SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, 8472 SourceLocation KindLoc, SourceLocation EndLoc); 8473 /// \brief Called on well-formed 'to' clause. 8474 OMPClause *ActOnOpenMPToClause(ArrayRef<Expr *> VarList, 8475 SourceLocation StartLoc, 8476 SourceLocation LParenLoc, 8477 SourceLocation EndLoc); 8478 /// \brief Called on well-formed 'from' clause. 8479 OMPClause *ActOnOpenMPFromClause(ArrayRef<Expr *> VarList, 8480 SourceLocation StartLoc, 8481 SourceLocation LParenLoc, 8482 SourceLocation EndLoc); 8483 /// Called on well-formed 'use_device_ptr' clause. 8484 OMPClause *ActOnOpenMPUseDevicePtrClause(ArrayRef<Expr *> VarList, 8485 SourceLocation StartLoc, 8486 SourceLocation LParenLoc, 8487 SourceLocation EndLoc); 8488 /// Called on well-formed 'is_device_ptr' clause. 8489 OMPClause *ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, 8490 SourceLocation StartLoc, 8491 SourceLocation LParenLoc, 8492 SourceLocation EndLoc); 8493 8494 /// \brief The kind of conversion being performed. 8495 enum CheckedConversionKind { 8496 /// \brief An implicit conversion. 8497 CCK_ImplicitConversion, 8498 /// \brief A C-style cast. 8499 CCK_CStyleCast, 8500 /// \brief A functional-style cast. 8501 CCK_FunctionalCast, 8502 /// \brief A cast other than a C-style cast. 8503 CCK_OtherCast 8504 }; 8505 8506 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit 8507 /// cast. If there is already an implicit cast, merge into the existing one. 8508 /// If isLvalue, the result of the cast is an lvalue. 8509 ExprResult ImpCastExprToType(Expr *E, QualType Type, CastKind CK, 8510 ExprValueKind VK = VK_RValue, 8511 const CXXCastPath *BasePath = nullptr, 8512 CheckedConversionKind CCK 8513 = CCK_ImplicitConversion); 8514 8515 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding 8516 /// to the conversion from scalar type ScalarTy to the Boolean type. 8517 static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy); 8518 8519 /// IgnoredValueConversions - Given that an expression's result is 8520 /// syntactically ignored, perform any conversions that are 8521 /// required. 8522 ExprResult IgnoredValueConversions(Expr *E); 8523 8524 // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts 8525 // functions and arrays to their respective pointers (C99 6.3.2.1). 8526 ExprResult UsualUnaryConversions(Expr *E); 8527 8528 /// CallExprUnaryConversions - a special case of an unary conversion 8529 /// performed on a function designator of a call expression. 8530 ExprResult CallExprUnaryConversions(Expr *E); 8531 8532 // DefaultFunctionArrayConversion - converts functions and arrays 8533 // to their respective pointers (C99 6.3.2.1). 8534 ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose = true); 8535 8536 // DefaultFunctionArrayLvalueConversion - converts functions and 8537 // arrays to their respective pointers and performs the 8538 // lvalue-to-rvalue conversion. 8539 ExprResult DefaultFunctionArrayLvalueConversion(Expr *E, 8540 bool Diagnose = true); 8541 8542 // DefaultLvalueConversion - performs lvalue-to-rvalue conversion on 8543 // the operand. This is DefaultFunctionArrayLvalueConversion, 8544 // except that it assumes the operand isn't of function or array 8545 // type. 8546 ExprResult DefaultLvalueConversion(Expr *E); 8547 8548 // DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that 8549 // do not have a prototype. Integer promotions are performed on each 8550 // argument, and arguments that have type float are promoted to double. 8551 ExprResult DefaultArgumentPromotion(Expr *E); 8552 8553 // Used for emitting the right warning by DefaultVariadicArgumentPromotion 8554 enum VariadicCallType { 8555 VariadicFunction, 8556 VariadicBlock, 8557 VariadicMethod, 8558 VariadicConstructor, 8559 VariadicDoesNotApply 8560 }; 8561 8562 VariadicCallType getVariadicCallType(FunctionDecl *FDecl, 8563 const FunctionProtoType *Proto, 8564 Expr *Fn); 8565 8566 // Used for determining in which context a type is allowed to be passed to a 8567 // vararg function. 8568 enum VarArgKind { 8569 VAK_Valid, 8570 VAK_ValidInCXX11, 8571 VAK_Undefined, 8572 VAK_MSVCUndefined, 8573 VAK_Invalid 8574 }; 8575 8576 // Determines which VarArgKind fits an expression. 8577 VarArgKind isValidVarArgType(const QualType &Ty); 8578 8579 /// Check to see if the given expression is a valid argument to a variadic 8580 /// function, issuing a diagnostic if not. 8581 void checkVariadicArgument(const Expr *E, VariadicCallType CT); 8582 8583 /// Check to see if a given expression could have '.c_str()' called on it. 8584 bool hasCStrMethod(const Expr *E); 8585 8586 /// GatherArgumentsForCall - Collector argument expressions for various 8587 /// form of call prototypes. 8588 bool GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl, 8589 const FunctionProtoType *Proto, 8590 unsigned FirstParam, ArrayRef<Expr *> Args, 8591 SmallVectorImpl<Expr *> &AllArgs, 8592 VariadicCallType CallType = VariadicDoesNotApply, 8593 bool AllowExplicit = false, 8594 bool IsListInitialization = false); 8595 8596 // DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but 8597 // will create a runtime trap if the resulting type is not a POD type. 8598 ExprResult DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, 8599 FunctionDecl *FDecl); 8600 8601 // UsualArithmeticConversions - performs the UsualUnaryConversions on it's 8602 // operands and then handles various conversions that are common to binary 8603 // operators (C99 6.3.1.8). If both operands aren't arithmetic, this 8604 // routine returns the first non-arithmetic type found. The client is 8605 // responsible for emitting appropriate error diagnostics. 8606 QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS, 8607 bool IsCompAssign = false); 8608 8609 /// AssignConvertType - All of the 'assignment' semantic checks return this 8610 /// enum to indicate whether the assignment was allowed. These checks are 8611 /// done for simple assignments, as well as initialization, return from 8612 /// function, argument passing, etc. The query is phrased in terms of a 8613 /// source and destination type. 8614 enum AssignConvertType { 8615 /// Compatible - the types are compatible according to the standard. 8616 Compatible, 8617 8618 /// PointerToInt - The assignment converts a pointer to an int, which we 8619 /// accept as an extension. 8620 PointerToInt, 8621 8622 /// IntToPointer - The assignment converts an int to a pointer, which we 8623 /// accept as an extension. 8624 IntToPointer, 8625 8626 /// FunctionVoidPointer - The assignment is between a function pointer and 8627 /// void*, which the standard doesn't allow, but we accept as an extension. 8628 FunctionVoidPointer, 8629 8630 /// IncompatiblePointer - The assignment is between two pointers types that 8631 /// are not compatible, but we accept them as an extension. 8632 IncompatiblePointer, 8633 8634 /// IncompatiblePointer - The assignment is between two pointers types which 8635 /// point to integers which have a different sign, but are otherwise 8636 /// identical. This is a subset of the above, but broken out because it's by 8637 /// far the most common case of incompatible pointers. 8638 IncompatiblePointerSign, 8639 8640 /// CompatiblePointerDiscardsQualifiers - The assignment discards 8641 /// c/v/r qualifiers, which we accept as an extension. 8642 CompatiblePointerDiscardsQualifiers, 8643 8644 /// IncompatiblePointerDiscardsQualifiers - The assignment 8645 /// discards qualifiers that we don't permit to be discarded, 8646 /// like address spaces. 8647 IncompatiblePointerDiscardsQualifiers, 8648 8649 /// IncompatibleNestedPointerQualifiers - The assignment is between two 8650 /// nested pointer types, and the qualifiers other than the first two 8651 /// levels differ e.g. char ** -> const char **, but we accept them as an 8652 /// extension. 8653 IncompatibleNestedPointerQualifiers, 8654 8655 /// IncompatibleVectors - The assignment is between two vector types that 8656 /// have the same size, which we accept as an extension. 8657 IncompatibleVectors, 8658 8659 /// IntToBlockPointer - The assignment converts an int to a block 8660 /// pointer. We disallow this. 8661 IntToBlockPointer, 8662 8663 /// IncompatibleBlockPointer - The assignment is between two block 8664 /// pointers types that are not compatible. 8665 IncompatibleBlockPointer, 8666 8667 /// IncompatibleObjCQualifiedId - The assignment is between a qualified 8668 /// id type and something else (that is incompatible with it). For example, 8669 /// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol. 8670 IncompatibleObjCQualifiedId, 8671 8672 /// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an 8673 /// object with __weak qualifier. 8674 IncompatibleObjCWeakRef, 8675 8676 /// Incompatible - We reject this conversion outright, it is invalid to 8677 /// represent it in the AST. 8678 Incompatible 8679 }; 8680 8681 /// DiagnoseAssignmentResult - Emit a diagnostic, if required, for the 8682 /// assignment conversion type specified by ConvTy. This returns true if the 8683 /// conversion was invalid or false if the conversion was accepted. 8684 bool DiagnoseAssignmentResult(AssignConvertType ConvTy, 8685 SourceLocation Loc, 8686 QualType DstType, QualType SrcType, 8687 Expr *SrcExpr, AssignmentAction Action, 8688 bool *Complained = nullptr); 8689 8690 /// IsValueInFlagEnum - Determine if a value is allowed as part of a flag 8691 /// enum. If AllowMask is true, then we also allow the complement of a valid 8692 /// value, to be used as a mask. 8693 bool IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val, 8694 bool AllowMask) const; 8695 8696 /// DiagnoseAssignmentEnum - Warn if assignment to enum is a constant 8697 /// integer not in the range of enum values. 8698 void DiagnoseAssignmentEnum(QualType DstType, QualType SrcType, 8699 Expr *SrcExpr); 8700 8701 /// CheckAssignmentConstraints - Perform type checking for assignment, 8702 /// argument passing, variable initialization, and function return values. 8703 /// C99 6.5.16. 8704 AssignConvertType CheckAssignmentConstraints(SourceLocation Loc, 8705 QualType LHSType, 8706 QualType RHSType); 8707 8708 /// Check assignment constraints and optionally prepare for a conversion of 8709 /// the RHS to the LHS type. The conversion is prepared for if ConvertRHS 8710 /// is true. 8711 AssignConvertType CheckAssignmentConstraints(QualType LHSType, 8712 ExprResult &RHS, 8713 CastKind &Kind, 8714 bool ConvertRHS = true); 8715 8716 // CheckSingleAssignmentConstraints - Currently used by 8717 // CheckAssignmentOperands, and ActOnReturnStmt. Prior to type checking, 8718 // this routine performs the default function/array converions, if ConvertRHS 8719 // is true. 8720 AssignConvertType CheckSingleAssignmentConstraints(QualType LHSType, 8721 ExprResult &RHS, 8722 bool Diagnose = true, 8723 bool DiagnoseCFAudited = false, 8724 bool ConvertRHS = true); 8725 8726 // \brief If the lhs type is a transparent union, check whether we 8727 // can initialize the transparent union with the given expression. 8728 AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType, 8729 ExprResult &RHS); 8730 8731 bool IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType); 8732 8733 bool CheckExceptionSpecCompatibility(Expr *From, QualType ToType); 8734 8735 ExprResult PerformImplicitConversion(Expr *From, QualType ToType, 8736 AssignmentAction Action, 8737 bool AllowExplicit = false); 8738 ExprResult PerformImplicitConversion(Expr *From, QualType ToType, 8739 AssignmentAction Action, 8740 bool AllowExplicit, 8741 ImplicitConversionSequence& ICS); 8742 ExprResult PerformImplicitConversion(Expr *From, QualType ToType, 8743 const ImplicitConversionSequence& ICS, 8744 AssignmentAction Action, 8745 CheckedConversionKind CCK 8746 = CCK_ImplicitConversion); 8747 ExprResult PerformImplicitConversion(Expr *From, QualType ToType, 8748 const StandardConversionSequence& SCS, 8749 AssignmentAction Action, 8750 CheckedConversionKind CCK); 8751 8752 /// the following "Check" methods will return a valid/converted QualType 8753 /// or a null QualType (indicating an error diagnostic was issued). 8754 8755 /// type checking binary operators (subroutines of CreateBuiltinBinOp). 8756 QualType InvalidOperands(SourceLocation Loc, ExprResult &LHS, 8757 ExprResult &RHS); 8758 QualType CheckPointerToMemberOperands( // C++ 5.5 8759 ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, 8760 SourceLocation OpLoc, bool isIndirect); 8761 QualType CheckMultiplyDivideOperands( // C99 6.5.5 8762 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, 8763 bool IsDivide); 8764 QualType CheckRemainderOperands( // C99 6.5.5 8765 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 8766 bool IsCompAssign = false); 8767 QualType CheckAdditionOperands( // C99 6.5.6 8768 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 8769 BinaryOperatorKind Opc, QualType* CompLHSTy = nullptr); 8770 QualType CheckSubtractionOperands( // C99 6.5.6 8771 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 8772 QualType* CompLHSTy = nullptr); 8773 QualType CheckShiftOperands( // C99 6.5.7 8774 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 8775 BinaryOperatorKind Opc, bool IsCompAssign = false); 8776 QualType CheckCompareOperands( // C99 6.5.8/9 8777 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 8778 BinaryOperatorKind Opc, bool isRelational); 8779 QualType CheckBitwiseOperands( // C99 6.5.[10...12] 8780 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 8781 bool IsCompAssign = false); 8782 QualType CheckLogicalOperands( // C99 6.5.[13,14] 8783 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 8784 BinaryOperatorKind Opc); 8785 // CheckAssignmentOperands is used for both simple and compound assignment. 8786 // For simple assignment, pass both expressions and a null converted type. 8787 // For compound assignment, pass both expressions and the converted type. 8788 QualType CheckAssignmentOperands( // C99 6.5.16.[1,2] 8789 Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType); 8790 8791 ExprResult checkPseudoObjectIncDec(Scope *S, SourceLocation OpLoc, 8792 UnaryOperatorKind Opcode, Expr *Op); 8793 ExprResult checkPseudoObjectAssignment(Scope *S, SourceLocation OpLoc, 8794 BinaryOperatorKind Opcode, 8795 Expr *LHS, Expr *RHS); 8796 ExprResult checkPseudoObjectRValue(Expr *E); 8797 Expr *recreateSyntacticForm(PseudoObjectExpr *E); 8798 8799 QualType CheckConditionalOperands( // C99 6.5.15 8800 ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, 8801 ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc); 8802 QualType CXXCheckConditionalOperands( // C++ 5.16 8803 ExprResult &cond, ExprResult &lhs, ExprResult &rhs, 8804 ExprValueKind &VK, ExprObjectKind &OK, SourceLocation questionLoc); 8805 QualType FindCompositePointerType(SourceLocation Loc, Expr *&E1, Expr *&E2, 8806 bool *NonStandardCompositeType = nullptr); 8807 QualType FindCompositePointerType(SourceLocation Loc, 8808 ExprResult &E1, ExprResult &E2, 8809 bool *NonStandardCompositeType = nullptr) { 8810 Expr *E1Tmp = E1.get(), *E2Tmp = E2.get(); 8811 QualType Composite = FindCompositePointerType(Loc, E1Tmp, E2Tmp, 8812 NonStandardCompositeType); 8813 E1 = E1Tmp; 8814 E2 = E2Tmp; 8815 return Composite; 8816 } 8817 8818 QualType FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, 8819 SourceLocation QuestionLoc); 8820 8821 bool DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, 8822 SourceLocation QuestionLoc); 8823 8824 void DiagnoseAlwaysNonNullPointer(Expr *E, 8825 Expr::NullPointerConstantKind NullType, 8826 bool IsEqual, SourceRange Range); 8827 8828 /// type checking for vector binary operators. 8829 QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, 8830 SourceLocation Loc, bool IsCompAssign, 8831 bool AllowBothBool, bool AllowBoolConversion); 8832 QualType GetSignedVectorType(QualType V); 8833 QualType CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, 8834 SourceLocation Loc, bool isRelational); 8835 QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS, 8836 SourceLocation Loc); 8837 8838 bool areLaxCompatibleVectorTypes(QualType srcType, QualType destType); 8839 bool isLaxVectorConversion(QualType srcType, QualType destType); 8840 8841 /// type checking declaration initializers (C99 6.7.8) 8842 bool CheckForConstantInitializer(Expr *e, QualType t); 8843 8844 // type checking C++ declaration initializers (C++ [dcl.init]). 8845 8846 /// ReferenceCompareResult - Expresses the result of comparing two 8847 /// types (cv1 T1 and cv2 T2) to determine their compatibility for the 8848 /// purposes of initialization by reference (C++ [dcl.init.ref]p4). 8849 enum ReferenceCompareResult { 8850 /// Ref_Incompatible - The two types are incompatible, so direct 8851 /// reference binding is not possible. 8852 Ref_Incompatible = 0, 8853 /// Ref_Related - The two types are reference-related, which means 8854 /// that their unqualified forms (T1 and T2) are either the same 8855 /// or T1 is a base class of T2. 8856 Ref_Related, 8857 /// Ref_Compatible_With_Added_Qualification - The two types are 8858 /// reference-compatible with added qualification, meaning that 8859 /// they are reference-compatible and the qualifiers on T1 (cv1) 8860 /// are greater than the qualifiers on T2 (cv2). 8861 Ref_Compatible_With_Added_Qualification, 8862 /// Ref_Compatible - The two types are reference-compatible and 8863 /// have equivalent qualifiers (cv1 == cv2). 8864 Ref_Compatible 8865 }; 8866 8867 ReferenceCompareResult CompareReferenceRelationship(SourceLocation Loc, 8868 QualType T1, QualType T2, 8869 bool &DerivedToBase, 8870 bool &ObjCConversion, 8871 bool &ObjCLifetimeConversion); 8872 8873 ExprResult checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, 8874 Expr *CastExpr, CastKind &CastKind, 8875 ExprValueKind &VK, CXXCastPath &Path); 8876 8877 /// \brief Force an expression with unknown-type to an expression of the 8878 /// given type. 8879 ExprResult forceUnknownAnyToType(Expr *E, QualType ToType); 8880 8881 /// \brief Type-check an expression that's being passed to an 8882 /// __unknown_anytype parameter. 8883 ExprResult checkUnknownAnyArg(SourceLocation callLoc, 8884 Expr *result, QualType ¶mType); 8885 8886 // CheckVectorCast - check type constraints for vectors. 8887 // Since vectors are an extension, there are no C standard reference for this. 8888 // We allow casting between vectors and integer datatypes of the same size. 8889 // returns true if the cast is invalid 8890 bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, 8891 CastKind &Kind); 8892 8893 /// \brief Prepare `SplattedExpr` for a vector splat operation, adding 8894 /// implicit casts if necessary. 8895 ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr); 8896 8897 // CheckExtVectorCast - check type constraints for extended vectors. 8898 // Since vectors are an extension, there are no C standard reference for this. 8899 // We allow casting between vectors and integer datatypes of the same size, 8900 // or vectors and the element type of that vector. 8901 // returns the cast expr 8902 ExprResult CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr, 8903 CastKind &Kind); 8904 8905 ExprResult BuildCXXFunctionalCastExpr(TypeSourceInfo *TInfo, 8906 SourceLocation LParenLoc, 8907 Expr *CastExpr, 8908 SourceLocation RParenLoc); 8909 8910 enum ARCConversionResult { ACR_okay, ACR_unbridged, ACR_error }; 8911 8912 /// \brief Checks for invalid conversions and casts between 8913 /// retainable pointers and other pointer kinds. 8914 ARCConversionResult CheckObjCARCConversion(SourceRange castRange, 8915 QualType castType, Expr *&op, 8916 CheckedConversionKind CCK, 8917 bool Diagnose = true, 8918 bool DiagnoseCFAudited = false, 8919 BinaryOperatorKind Opc = BO_PtrMemD 8920 ); 8921 8922 Expr *stripARCUnbridgedCast(Expr *e); 8923 void diagnoseARCUnbridgedCast(Expr *e); 8924 8925 bool CheckObjCARCUnavailableWeakConversion(QualType castType, 8926 QualType ExprType); 8927 8928 /// checkRetainCycles - Check whether an Objective-C message send 8929 /// might create an obvious retain cycle. 8930 void checkRetainCycles(ObjCMessageExpr *msg); 8931 void checkRetainCycles(Expr *receiver, Expr *argument); 8932 void checkRetainCycles(VarDecl *Var, Expr *Init); 8933 8934 /// checkUnsafeAssigns - Check whether +1 expr is being assigned 8935 /// to weak/__unsafe_unretained type. 8936 bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS); 8937 8938 /// checkUnsafeExprAssigns - Check whether +1 expr is being assigned 8939 /// to weak/__unsafe_unretained expression. 8940 void checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS); 8941 8942 /// CheckMessageArgumentTypes - Check types in an Obj-C message send. 8943 /// \param Method - May be null. 8944 /// \param [out] ReturnType - The return type of the send. 8945 /// \return true iff there were any incompatible types. 8946 bool CheckMessageArgumentTypes(QualType ReceiverType, 8947 MultiExprArg Args, Selector Sel, 8948 ArrayRef<SourceLocation> SelectorLocs, 8949 ObjCMethodDecl *Method, bool isClassMessage, 8950 bool isSuperMessage, 8951 SourceLocation lbrac, SourceLocation rbrac, 8952 SourceRange RecRange, 8953 QualType &ReturnType, ExprValueKind &VK); 8954 8955 /// \brief Determine the result of a message send expression based on 8956 /// the type of the receiver, the method expected to receive the message, 8957 /// and the form of the message send. 8958 QualType getMessageSendResultType(QualType ReceiverType, 8959 ObjCMethodDecl *Method, 8960 bool isClassMessage, bool isSuperMessage); 8961 8962 /// \brief If the given expression involves a message send to a method 8963 /// with a related result type, emit a note describing what happened. 8964 void EmitRelatedResultTypeNote(const Expr *E); 8965 8966 /// \brief Given that we had incompatible pointer types in a return 8967 /// statement, check whether we're in a method with a related result 8968 /// type, and if so, emit a note describing what happened. 8969 void EmitRelatedResultTypeNoteForReturn(QualType destType); 8970 8971 class ConditionResult { 8972 Decl *ConditionVar; 8973 FullExprArg Condition; 8974 bool Invalid; 8975 bool HasKnownValue; 8976 bool KnownValue; 8977 8978 friend class Sema; ConditionResult(Sema & S,Decl * ConditionVar,FullExprArg Condition,bool IsConstexpr)8979 ConditionResult(Sema &S, Decl *ConditionVar, FullExprArg Condition, 8980 bool IsConstexpr) 8981 : ConditionVar(ConditionVar), Condition(Condition), Invalid(false), 8982 HasKnownValue(IsConstexpr && Condition.get() && 8983 !Condition.get()->isValueDependent()), 8984 KnownValue(HasKnownValue && 8985 !!Condition.get()->EvaluateKnownConstInt(S.Context)) {} ConditionResult(bool Invalid)8986 explicit ConditionResult(bool Invalid) 8987 : ConditionVar(nullptr), Condition(nullptr), Invalid(Invalid), 8988 HasKnownValue(false), KnownValue(false) {} 8989 8990 public: ConditionResult()8991 ConditionResult() : ConditionResult(false) {} isInvalid()8992 bool isInvalid() const { return Invalid; } get()8993 std::pair<VarDecl *, Expr *> get() const { 8994 return std::make_pair(cast_or_null<VarDecl>(ConditionVar), 8995 Condition.get()); 8996 } getKnownValue()8997 llvm::Optional<bool> getKnownValue() const { 8998 if (!HasKnownValue) 8999 return None; 9000 return KnownValue; 9001 } 9002 }; ConditionError()9003 static ConditionResult ConditionError() { return ConditionResult(true); } 9004 9005 enum class ConditionKind { 9006 Boolean, ///< A boolean condition, from 'if', 'while', 'for', or 'do'. 9007 ConstexprIf, ///< A constant boolean condition from 'if constexpr'. 9008 Switch ///< An integral condition for a 'switch' statement. 9009 }; 9010 9011 ConditionResult ActOnCondition(Scope *S, SourceLocation Loc, 9012 Expr *SubExpr, ConditionKind CK); 9013 9014 ConditionResult ActOnConditionVariable(Decl *ConditionVar, 9015 SourceLocation StmtLoc, 9016 ConditionKind CK); 9017 9018 DeclResult ActOnCXXConditionDeclaration(Scope *S, Declarator &D); 9019 9020 ExprResult CheckConditionVariable(VarDecl *ConditionVar, 9021 SourceLocation StmtLoc, 9022 ConditionKind CK); 9023 ExprResult CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond); 9024 9025 /// CheckBooleanCondition - Diagnose problems involving the use of 9026 /// the given expression as a boolean condition (e.g. in an if 9027 /// statement). Also performs the standard function and array 9028 /// decays, possibly changing the input variable. 9029 /// 9030 /// \param Loc - A location associated with the condition, e.g. the 9031 /// 'if' keyword. 9032 /// \return true iff there were any errors 9033 ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E, 9034 bool IsConstexpr = false); 9035 9036 /// DiagnoseAssignmentAsCondition - Given that an expression is 9037 /// being used as a boolean condition, warn if it's an assignment. 9038 void DiagnoseAssignmentAsCondition(Expr *E); 9039 9040 /// \brief Redundant parentheses over an equality comparison can indicate 9041 /// that the user intended an assignment used as condition. 9042 void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE); 9043 9044 /// CheckCXXBooleanCondition - Returns true if conversion to bool is invalid. 9045 ExprResult CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr = false); 9046 9047 /// ConvertIntegerToTypeWarnOnOverflow - Convert the specified APInt to have 9048 /// the specified width and sign. If an overflow occurs, detect it and emit 9049 /// the specified diagnostic. 9050 void ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &OldVal, 9051 unsigned NewWidth, bool NewSign, 9052 SourceLocation Loc, unsigned DiagID); 9053 9054 /// Checks that the Objective-C declaration is declared in the global scope. 9055 /// Emits an error and marks the declaration as invalid if it's not declared 9056 /// in the global scope. 9057 bool CheckObjCDeclScope(Decl *D); 9058 9059 /// \brief Abstract base class used for diagnosing integer constant 9060 /// expression violations. 9061 class VerifyICEDiagnoser { 9062 public: 9063 bool Suppress; 9064 Suppress(Suppress)9065 VerifyICEDiagnoser(bool Suppress = false) : Suppress(Suppress) { } 9066 9067 virtual void diagnoseNotICE(Sema &S, SourceLocation Loc, SourceRange SR) =0; 9068 virtual void diagnoseFold(Sema &S, SourceLocation Loc, SourceRange SR); ~VerifyICEDiagnoser()9069 virtual ~VerifyICEDiagnoser() { } 9070 }; 9071 9072 /// VerifyIntegerConstantExpression - Verifies that an expression is an ICE, 9073 /// and reports the appropriate diagnostics. Returns false on success. 9074 /// Can optionally return the value of the expression. 9075 ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, 9076 VerifyICEDiagnoser &Diagnoser, 9077 bool AllowFold = true); 9078 ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, 9079 unsigned DiagID, 9080 bool AllowFold = true); 9081 ExprResult VerifyIntegerConstantExpression(Expr *E, 9082 llvm::APSInt *Result = nullptr); 9083 9084 /// VerifyBitField - verifies that a bit field expression is an ICE and has 9085 /// the correct width, and that the field type is valid. 9086 /// Returns false on success. 9087 /// Can optionally return whether the bit-field is of width 0 9088 ExprResult VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, 9089 QualType FieldTy, bool IsMsStruct, 9090 Expr *BitWidth, bool *ZeroWidth = nullptr); 9091 9092 enum CUDAFunctionTarget { 9093 CFT_Device, 9094 CFT_Global, 9095 CFT_Host, 9096 CFT_HostDevice, 9097 CFT_InvalidTarget 9098 }; 9099 9100 CUDAFunctionTarget IdentifyCUDATarget(const FunctionDecl *D); 9101 9102 // CUDA function call preference. Must be ordered numerically from 9103 // worst to best. 9104 enum CUDAFunctionPreference { 9105 CFP_Never, // Invalid caller/callee combination. 9106 CFP_WrongSide, // Calls from host-device to host or device 9107 // function that do not match current compilation 9108 // mode. Only in effect if 9109 // LangOpts.CUDADisableTargetCallChecks is true. 9110 CFP_HostDevice, // Any calls to host/device functions. 9111 CFP_SameSide, // Calls from host-device to host or device 9112 // function matching current compilation mode. 9113 CFP_Native, // host-to-host or device-to-device calls. 9114 }; 9115 9116 /// Identifies relative preference of a given Caller/Callee 9117 /// combination, based on their host/device attributes. 9118 /// \param Caller function which needs address of \p Callee. 9119 /// nullptr in case of global context. 9120 /// \param Callee target function 9121 /// 9122 /// \returns preference value for particular Caller/Callee combination. 9123 CUDAFunctionPreference IdentifyCUDAPreference(const FunctionDecl *Caller, 9124 const FunctionDecl *Callee); 9125 9126 /// Determines whether Caller may invoke Callee, based on their CUDA 9127 /// host/device attributes. Returns true if the call is not allowed. CheckCUDATarget(const FunctionDecl * Caller,const FunctionDecl * Callee)9128 bool CheckCUDATarget(const FunctionDecl *Caller, const FunctionDecl *Callee) { 9129 return IdentifyCUDAPreference(Caller, Callee) == CFP_Never; 9130 } 9131 9132 /// May add implicit CUDAHostAttr and CUDADeviceAttr attributes to FD, 9133 /// depending on FD and the current compilation settings. 9134 void maybeAddCUDAHostDeviceAttrs(Scope *S, FunctionDecl *FD, 9135 const LookupResult &Previous); 9136 9137 /// Finds a function in \p Matches with highest calling priority 9138 /// from \p Caller context and erases all functions with lower 9139 /// calling priority. 9140 void EraseUnwantedCUDAMatches(const FunctionDecl *Caller, 9141 SmallVectorImpl<FunctionDecl *> &Matches); 9142 void EraseUnwantedCUDAMatches(const FunctionDecl *Caller, 9143 SmallVectorImpl<DeclAccessPair> &Matches); 9144 void EraseUnwantedCUDAMatches( 9145 const FunctionDecl *Caller, 9146 SmallVectorImpl<std::pair<DeclAccessPair, FunctionDecl *>> &Matches); 9147 9148 /// Given a implicit special member, infer its CUDA target from the 9149 /// calls it needs to make to underlying base/field special members. 9150 /// \param ClassDecl the class for which the member is being created. 9151 /// \param CSM the kind of special member. 9152 /// \param MemberDecl the special member itself. 9153 /// \param ConstRHS true if this is a copy operation with a const object on 9154 /// its RHS. 9155 /// \param Diagnose true if this call should emit diagnostics. 9156 /// \return true if there was an error inferring. 9157 /// The result of this call is implicit CUDA target attribute(s) attached to 9158 /// the member declaration. 9159 bool inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl, 9160 CXXSpecialMember CSM, 9161 CXXMethodDecl *MemberDecl, 9162 bool ConstRHS, 9163 bool Diagnose); 9164 9165 /// \return true if \p CD can be considered empty according to CUDA 9166 /// (E.2.3.1 in CUDA 7.5 Programming guide). 9167 bool isEmptyCudaConstructor(SourceLocation Loc, CXXConstructorDecl *CD); 9168 bool isEmptyCudaDestructor(SourceLocation Loc, CXXDestructorDecl *CD); 9169 9170 /// \name Code completion 9171 //@{ 9172 /// \brief Describes the context in which code completion occurs. 9173 enum ParserCompletionContext { 9174 /// \brief Code completion occurs at top-level or namespace context. 9175 PCC_Namespace, 9176 /// \brief Code completion occurs within a class, struct, or union. 9177 PCC_Class, 9178 /// \brief Code completion occurs within an Objective-C interface, protocol, 9179 /// or category. 9180 PCC_ObjCInterface, 9181 /// \brief Code completion occurs within an Objective-C implementation or 9182 /// category implementation 9183 PCC_ObjCImplementation, 9184 /// \brief Code completion occurs within the list of instance variables 9185 /// in an Objective-C interface, protocol, category, or implementation. 9186 PCC_ObjCInstanceVariableList, 9187 /// \brief Code completion occurs following one or more template 9188 /// headers. 9189 PCC_Template, 9190 /// \brief Code completion occurs following one or more template 9191 /// headers within a class. 9192 PCC_MemberTemplate, 9193 /// \brief Code completion occurs within an expression. 9194 PCC_Expression, 9195 /// \brief Code completion occurs within a statement, which may 9196 /// also be an expression or a declaration. 9197 PCC_Statement, 9198 /// \brief Code completion occurs at the beginning of the 9199 /// initialization statement (or expression) in a for loop. 9200 PCC_ForInit, 9201 /// \brief Code completion occurs within the condition of an if, 9202 /// while, switch, or for statement. 9203 PCC_Condition, 9204 /// \brief Code completion occurs within the body of a function on a 9205 /// recovery path, where we do not have a specific handle on our position 9206 /// in the grammar. 9207 PCC_RecoveryInFunction, 9208 /// \brief Code completion occurs where only a type is permitted. 9209 PCC_Type, 9210 /// \brief Code completion occurs in a parenthesized expression, which 9211 /// might also be a type cast. 9212 PCC_ParenthesizedExpression, 9213 /// \brief Code completion occurs within a sequence of declaration 9214 /// specifiers within a function, method, or block. 9215 PCC_LocalDeclarationSpecifiers 9216 }; 9217 9218 void CodeCompleteModuleImport(SourceLocation ImportLoc, ModuleIdPath Path); 9219 void CodeCompleteOrdinaryName(Scope *S, 9220 ParserCompletionContext CompletionContext); 9221 void CodeCompleteDeclSpec(Scope *S, DeclSpec &DS, 9222 bool AllowNonIdentifiers, 9223 bool AllowNestedNameSpecifiers); 9224 9225 struct CodeCompleteExpressionData; 9226 void CodeCompleteExpression(Scope *S, 9227 const CodeCompleteExpressionData &Data); 9228 void CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base, 9229 SourceLocation OpLoc, 9230 bool IsArrow); 9231 void CodeCompletePostfixExpression(Scope *S, ExprResult LHS); 9232 void CodeCompleteTag(Scope *S, unsigned TagSpec); 9233 void CodeCompleteTypeQualifiers(DeclSpec &DS); 9234 void CodeCompleteBracketDeclarator(Scope *S); 9235 void CodeCompleteCase(Scope *S); 9236 void CodeCompleteCall(Scope *S, Expr *Fn, ArrayRef<Expr *> Args); 9237 void CodeCompleteConstructor(Scope *S, QualType Type, SourceLocation Loc, 9238 ArrayRef<Expr *> Args); 9239 void CodeCompleteInitializer(Scope *S, Decl *D); 9240 void CodeCompleteReturn(Scope *S); 9241 void CodeCompleteAfterIf(Scope *S); 9242 void CodeCompleteAssignmentRHS(Scope *S, Expr *LHS); 9243 9244 void CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS, 9245 bool EnteringContext); 9246 void CodeCompleteUsing(Scope *S); 9247 void CodeCompleteUsingDirective(Scope *S); 9248 void CodeCompleteNamespaceDecl(Scope *S); 9249 void CodeCompleteNamespaceAliasDecl(Scope *S); 9250 void CodeCompleteOperatorName(Scope *S); 9251 void CodeCompleteConstructorInitializer( 9252 Decl *Constructor, 9253 ArrayRef<CXXCtorInitializer *> Initializers); 9254 9255 void CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro, 9256 bool AfterAmpersand); 9257 9258 void CodeCompleteObjCAtDirective(Scope *S); 9259 void CodeCompleteObjCAtVisibility(Scope *S); 9260 void CodeCompleteObjCAtStatement(Scope *S); 9261 void CodeCompleteObjCAtExpression(Scope *S); 9262 void CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS); 9263 void CodeCompleteObjCPropertyGetter(Scope *S); 9264 void CodeCompleteObjCPropertySetter(Scope *S); 9265 void CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS, 9266 bool IsParameter); 9267 void CodeCompleteObjCMessageReceiver(Scope *S); 9268 void CodeCompleteObjCSuperMessage(Scope *S, SourceLocation SuperLoc, 9269 ArrayRef<IdentifierInfo *> SelIdents, 9270 bool AtArgumentExpression); 9271 void CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver, 9272 ArrayRef<IdentifierInfo *> SelIdents, 9273 bool AtArgumentExpression, 9274 bool IsSuper = false); 9275 void CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver, 9276 ArrayRef<IdentifierInfo *> SelIdents, 9277 bool AtArgumentExpression, 9278 ObjCInterfaceDecl *Super = nullptr); 9279 void CodeCompleteObjCForCollection(Scope *S, 9280 DeclGroupPtrTy IterationVar); 9281 void CodeCompleteObjCSelector(Scope *S, 9282 ArrayRef<IdentifierInfo *> SelIdents); 9283 void CodeCompleteObjCProtocolReferences( 9284 ArrayRef<IdentifierLocPair> Protocols); 9285 void CodeCompleteObjCProtocolDecl(Scope *S); 9286 void CodeCompleteObjCInterfaceDecl(Scope *S); 9287 void CodeCompleteObjCSuperclass(Scope *S, 9288 IdentifierInfo *ClassName, 9289 SourceLocation ClassNameLoc); 9290 void CodeCompleteObjCImplementationDecl(Scope *S); 9291 void CodeCompleteObjCInterfaceCategory(Scope *S, 9292 IdentifierInfo *ClassName, 9293 SourceLocation ClassNameLoc); 9294 void CodeCompleteObjCImplementationCategory(Scope *S, 9295 IdentifierInfo *ClassName, 9296 SourceLocation ClassNameLoc); 9297 void CodeCompleteObjCPropertyDefinition(Scope *S); 9298 void CodeCompleteObjCPropertySynthesizeIvar(Scope *S, 9299 IdentifierInfo *PropertyName); 9300 void CodeCompleteObjCMethodDecl(Scope *S, 9301 bool IsInstanceMethod, 9302 ParsedType ReturnType); 9303 void CodeCompleteObjCMethodDeclSelector(Scope *S, 9304 bool IsInstanceMethod, 9305 bool AtParameterName, 9306 ParsedType ReturnType, 9307 ArrayRef<IdentifierInfo *> SelIdents); 9308 void CodeCompletePreprocessorDirective(bool InConditional); 9309 void CodeCompleteInPreprocessorConditionalExclusion(Scope *S); 9310 void CodeCompletePreprocessorMacroName(bool IsDefinition); 9311 void CodeCompletePreprocessorExpression(); 9312 void CodeCompletePreprocessorMacroArgument(Scope *S, 9313 IdentifierInfo *Macro, 9314 MacroInfo *MacroInfo, 9315 unsigned Argument); 9316 void CodeCompleteNaturalLanguage(); 9317 void GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator, 9318 CodeCompletionTUInfo &CCTUInfo, 9319 SmallVectorImpl<CodeCompletionResult> &Results); 9320 //@} 9321 9322 //===--------------------------------------------------------------------===// 9323 // Extra semantic analysis beyond the C type system 9324 9325 public: 9326 SourceLocation getLocationOfStringLiteralByte(const StringLiteral *SL, 9327 unsigned ByteNo) const; 9328 9329 private: 9330 void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, 9331 const ArraySubscriptExpr *ASE=nullptr, 9332 bool AllowOnePastEnd=true, bool IndexNegated=false); 9333 void CheckArrayAccess(const Expr *E); 9334 // Used to grab the relevant information from a FormatAttr and a 9335 // FunctionDeclaration. 9336 struct FormatStringInfo { 9337 unsigned FormatIdx; 9338 unsigned FirstDataArg; 9339 bool HasVAListArg; 9340 }; 9341 9342 static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember, 9343 FormatStringInfo *FSI); 9344 bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall, 9345 const FunctionProtoType *Proto); 9346 bool CheckObjCMethodCall(ObjCMethodDecl *Method, SourceLocation loc, 9347 ArrayRef<const Expr *> Args); 9348 bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall, 9349 const FunctionProtoType *Proto); 9350 bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto); 9351 void CheckConstructorCall(FunctionDecl *FDecl, 9352 ArrayRef<const Expr *> Args, 9353 const FunctionProtoType *Proto, 9354 SourceLocation Loc); 9355 9356 void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, 9357 ArrayRef<const Expr *> Args, bool IsMemberFunction, 9358 SourceLocation Loc, SourceRange Range, 9359 VariadicCallType CallType); 9360 9361 bool CheckObjCString(Expr *Arg); 9362 9363 ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl, 9364 unsigned BuiltinID, CallExpr *TheCall); 9365 9366 bool CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, 9367 unsigned MaxWidth); 9368 bool CheckNeonBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); 9369 bool CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); 9370 9371 bool CheckAArch64BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); 9372 bool CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); 9373 bool CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); 9374 bool CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); 9375 bool CheckPPCBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); 9376 9377 bool SemaBuiltinVAStartImpl(CallExpr *TheCall); 9378 bool SemaBuiltinVAStart(CallExpr *TheCall); 9379 bool SemaBuiltinMSVAStart(CallExpr *TheCall); 9380 bool SemaBuiltinVAStartARM(CallExpr *Call); 9381 bool SemaBuiltinUnorderedCompare(CallExpr *TheCall); 9382 bool SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs); 9383 9384 public: 9385 // Used by C++ template instantiation. 9386 ExprResult SemaBuiltinShuffleVector(CallExpr *TheCall); 9387 ExprResult SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, 9388 SourceLocation BuiltinLoc, 9389 SourceLocation RParenLoc); 9390 9391 private: 9392 bool SemaBuiltinPrefetch(CallExpr *TheCall); 9393 bool SemaBuiltinAssume(CallExpr *TheCall); 9394 bool SemaBuiltinAssumeAligned(CallExpr *TheCall); 9395 bool SemaBuiltinLongjmp(CallExpr *TheCall); 9396 bool SemaBuiltinSetjmp(CallExpr *TheCall); 9397 ExprResult SemaBuiltinAtomicOverloaded(ExprResult TheCallResult); 9398 ExprResult SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult); 9399 ExprResult SemaAtomicOpsOverloaded(ExprResult TheCallResult, 9400 AtomicExpr::AtomicOp Op); 9401 bool SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, 9402 llvm::APSInt &Result); 9403 bool SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, 9404 int Low, int High); 9405 bool SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, 9406 int ArgNum, unsigned ExpectedFieldNum, 9407 bool AllowName); 9408 public: 9409 enum FormatStringType { 9410 FST_Scanf, 9411 FST_Printf, 9412 FST_NSString, 9413 FST_Strftime, 9414 FST_Strfmon, 9415 FST_Kprintf, 9416 FST_FreeBSDKPrintf, 9417 FST_OSTrace, 9418 FST_Unknown 9419 }; 9420 static FormatStringType GetFormatStringType(const FormatAttr *Format); 9421 9422 bool FormatStringHasSArg(const StringLiteral *FExpr); 9423 9424 static bool GetFormatNSStringIdx(const FormatAttr *Format, unsigned &Idx); 9425 9426 private: 9427 bool CheckFormatArguments(const FormatAttr *Format, 9428 ArrayRef<const Expr *> Args, 9429 bool IsCXXMember, 9430 VariadicCallType CallType, 9431 SourceLocation Loc, SourceRange Range, 9432 llvm::SmallBitVector &CheckedVarArgs); 9433 bool CheckFormatArguments(ArrayRef<const Expr *> Args, 9434 bool HasVAListArg, unsigned format_idx, 9435 unsigned firstDataArg, FormatStringType Type, 9436 VariadicCallType CallType, 9437 SourceLocation Loc, SourceRange range, 9438 llvm::SmallBitVector &CheckedVarArgs); 9439 9440 void CheckAbsoluteValueFunction(const CallExpr *Call, 9441 const FunctionDecl *FDecl, 9442 IdentifierInfo *FnInfo); 9443 9444 void CheckMemaccessArguments(const CallExpr *Call, 9445 unsigned BId, 9446 IdentifierInfo *FnName); 9447 9448 void CheckStrlcpycatArguments(const CallExpr *Call, 9449 IdentifierInfo *FnName); 9450 9451 void CheckStrncatArguments(const CallExpr *Call, 9452 IdentifierInfo *FnName); 9453 9454 void CheckReturnValExpr(Expr *RetValExp, QualType lhsType, 9455 SourceLocation ReturnLoc, 9456 bool isObjCMethod = false, 9457 const AttrVec *Attrs = nullptr, 9458 const FunctionDecl *FD = nullptr); 9459 9460 void CheckFloatComparison(SourceLocation Loc, Expr* LHS, Expr* RHS); 9461 void CheckImplicitConversions(Expr *E, SourceLocation CC = SourceLocation()); 9462 void CheckBoolLikeConversion(Expr *E, SourceLocation CC); 9463 void CheckForIntOverflow(Expr *E); 9464 void CheckUnsequencedOperations(Expr *E); 9465 9466 /// \brief Perform semantic checks on a completed expression. This will either 9467 /// be a full-expression or a default argument expression. 9468 void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(), 9469 bool IsConstexpr = false); 9470 9471 void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field, 9472 Expr *Init); 9473 9474 /// \brief Check if the given expression contains 'break' or 'continue' 9475 /// statement that produces control flow different from GCC. 9476 void CheckBreakContinueBinding(Expr *E); 9477 9478 /// \brief Check whether receiver is mutable ObjC container which 9479 /// attempts to add itself into the container 9480 void CheckObjCCircularContainer(ObjCMessageExpr *Message); 9481 9482 void AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE); 9483 void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc, 9484 bool DeleteWasArrayForm); 9485 public: 9486 /// \brief Register a magic integral constant to be used as a type tag. 9487 void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind, 9488 uint64_t MagicValue, QualType Type, 9489 bool LayoutCompatible, bool MustBeNull); 9490 9491 struct TypeTagData { TypeTagDataTypeTagData9492 TypeTagData() {} 9493 TypeTagDataTypeTagData9494 TypeTagData(QualType Type, bool LayoutCompatible, bool MustBeNull) : 9495 Type(Type), LayoutCompatible(LayoutCompatible), 9496 MustBeNull(MustBeNull) 9497 {} 9498 9499 QualType Type; 9500 9501 /// If true, \c Type should be compared with other expression's types for 9502 /// layout-compatibility. 9503 unsigned LayoutCompatible : 1; 9504 unsigned MustBeNull : 1; 9505 }; 9506 9507 /// A pair of ArgumentKind identifier and magic value. This uniquely 9508 /// identifies the magic value. 9509 typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue; 9510 9511 private: 9512 /// \brief A map from magic value to type information. 9513 std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>> 9514 TypeTagForDatatypeMagicValues; 9515 9516 /// \brief Peform checks on a call of a function with argument_with_type_tag 9517 /// or pointer_with_type_tag attributes. 9518 void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, 9519 const Expr * const *ExprArgs); 9520 9521 /// \brief The parser's current scope. 9522 /// 9523 /// The parser maintains this state here. 9524 Scope *CurScope; 9525 9526 mutable IdentifierInfo *Ident_super; 9527 mutable IdentifierInfo *Ident___float128; 9528 9529 /// Nullability type specifiers. 9530 IdentifierInfo *Ident__Nonnull = nullptr; 9531 IdentifierInfo *Ident__Nullable = nullptr; 9532 IdentifierInfo *Ident__Null_unspecified = nullptr; 9533 9534 IdentifierInfo *Ident_NSError = nullptr; 9535 9536 protected: 9537 friend class Parser; 9538 friend class InitializationSequence; 9539 friend class ASTReader; 9540 friend class ASTDeclReader; 9541 friend class ASTWriter; 9542 9543 public: 9544 /// Retrieve the keyword associated 9545 IdentifierInfo *getNullabilityKeyword(NullabilityKind nullability); 9546 9547 /// The struct behind the CFErrorRef pointer. 9548 RecordDecl *CFError = nullptr; 9549 9550 /// Retrieve the identifier "NSError". 9551 IdentifierInfo *getNSErrorIdent(); 9552 9553 /// \brief Retrieve the parser's current scope. 9554 /// 9555 /// This routine must only be used when it is certain that semantic analysis 9556 /// and the parser are in precisely the same context, which is not the case 9557 /// when, e.g., we are performing any kind of template instantiation. 9558 /// Therefore, the only safe places to use this scope are in the parser 9559 /// itself and in routines directly invoked from the parser and *never* from 9560 /// template substitution or instantiation. getCurScope()9561 Scope *getCurScope() const { return CurScope; } 9562 incrementMSManglingNumber()9563 void incrementMSManglingNumber() const { 9564 return CurScope->incrementMSManglingNumber(); 9565 } 9566 9567 IdentifierInfo *getSuperIdentifier() const; 9568 IdentifierInfo *getFloat128Identifier() const; 9569 9570 Decl *getObjCDeclContext() const; 9571 getCurLexicalContext()9572 DeclContext *getCurLexicalContext() const { 9573 return OriginalLexicalContext ? OriginalLexicalContext : CurContext; 9574 } 9575 9576 AvailabilityResult getCurContextAvailability() const; 9577 getCurObjCLexicalContext()9578 const DeclContext *getCurObjCLexicalContext() const { 9579 const DeclContext *DC = getCurLexicalContext(); 9580 // A category implicitly has the attribute of the interface. 9581 if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(DC)) 9582 DC = CatD->getClassInterface(); 9583 return DC; 9584 } 9585 9586 /// \brief To be used for checking whether the arguments being passed to 9587 /// function exceeds the number of parameters expected for it. 9588 static bool TooManyArguments(size_t NumParams, size_t NumArgs, 9589 bool PartialOverloading = false) { 9590 // We check whether we're just after a comma in code-completion. 9591 if (NumArgs > 0 && PartialOverloading) 9592 return NumArgs + 1 > NumParams; // If so, we view as an extra argument. 9593 return NumArgs > NumParams; 9594 } 9595 9596 // Emitting members of dllexported classes is delayed until the class 9597 // (including field initializers) is fully parsed. 9598 SmallVector<CXXRecordDecl*, 4> DelayedDllExportClasses; 9599 }; 9600 9601 /// \brief RAII object that enters a new expression evaluation context. 9602 class EnterExpressionEvaluationContext { 9603 Sema &Actions; 9604 bool Entered = true; 9605 9606 public: 9607 EnterExpressionEvaluationContext(Sema &Actions, 9608 Sema::ExpressionEvaluationContext NewContext, 9609 Decl *LambdaContextDecl = nullptr, 9610 bool IsDecltype = false, 9611 bool ShouldEnter = true) Actions(Actions)9612 : Actions(Actions), Entered(ShouldEnter) { 9613 if (Entered) 9614 Actions.PushExpressionEvaluationContext(NewContext, LambdaContextDecl, 9615 IsDecltype); 9616 } 9617 EnterExpressionEvaluationContext(Sema &Actions, 9618 Sema::ExpressionEvaluationContext NewContext, 9619 Sema::ReuseLambdaContextDecl_t, 9620 bool IsDecltype = false) Actions(Actions)9621 : Actions(Actions) { 9622 Actions.PushExpressionEvaluationContext(NewContext, 9623 Sema::ReuseLambdaContextDecl, 9624 IsDecltype); 9625 } 9626 ~EnterExpressionEvaluationContext()9627 ~EnterExpressionEvaluationContext() { 9628 if (Entered) 9629 Actions.PopExpressionEvaluationContext(); 9630 } 9631 }; 9632 9633 DeductionFailureInfo 9634 MakeDeductionFailureInfo(ASTContext &Context, Sema::TemplateDeductionResult TDK, 9635 sema::TemplateDeductionInfo &Info); 9636 9637 /// \brief Contains a late templated function. 9638 /// Will be parsed at the end of the translation unit, used by Sema & Parser. 9639 struct LateParsedTemplate { 9640 CachedTokens Toks; 9641 /// \brief The template function declaration to be late parsed. 9642 Decl *D; 9643 }; 9644 9645 } // end namespace clang 9646 9647 #endif 9648