1 //===--- Sema.h - Semantic Analysis & AST Building --------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file defines the Sema class, which performs semantic analysis and 10 // builds ASTs. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CLANG_SEMA_SEMA_H 15 #define LLVM_CLANG_SEMA_SEMA_H 16 17 #include "clang/APINotes/APINotesManager.h" 18 #include "clang/AST/ASTConcept.h" 19 #include "clang/AST/ASTFwd.h" 20 #include "clang/AST/Attr.h" 21 #include "clang/AST/Availability.h" 22 #include "clang/AST/ComparisonCategories.h" 23 #include "clang/AST/DeclTemplate.h" 24 #include "clang/AST/DeclarationName.h" 25 #include "clang/AST/Expr.h" 26 #include "clang/AST/ExprCXX.h" 27 #include "clang/AST/ExprConcepts.h" 28 #include "clang/AST/ExprObjC.h" 29 #include "clang/AST/ExternalASTSource.h" 30 #include "clang/AST/LocInfoType.h" 31 #include "clang/AST/MangleNumberingContext.h" 32 #include "clang/AST/NSAPI.h" 33 #include "clang/AST/PrettyPrinter.h" 34 #include "clang/AST/StmtCXX.h" 35 #include "clang/AST/TypeLoc.h" 36 #include "clang/AST/TypeOrdering.h" 37 #include "clang/Basic/BitmaskEnum.h" 38 #include "clang/Basic/Builtins.h" 39 #include "clang/Basic/Cuda.h" 40 #include "clang/Basic/DarwinSDKInfo.h" 41 #include "clang/Basic/ExpressionTraits.h" 42 #include "clang/Basic/IdentifierTable.h" 43 #include "clang/Basic/Module.h" 44 #include "clang/Basic/OpenCLOptions.h" 45 #include "clang/Basic/PragmaKinds.h" 46 #include "clang/Basic/Specifiers.h" 47 #include "clang/Basic/TemplateKinds.h" 48 #include "clang/Basic/TypeTraits.h" 49 #include "clang/Sema/AnalysisBasedWarnings.h" 50 #include "clang/Sema/Attr.h" 51 #include "clang/Sema/CleanupInfo.h" 52 #include "clang/Sema/DeclSpec.h" 53 #include "clang/Sema/ExternalSemaSource.h" 54 #include "clang/Sema/IdentifierResolver.h" 55 #include "clang/Sema/ObjCMethodList.h" 56 #include "clang/Sema/Ownership.h" 57 #include "clang/Sema/Redeclaration.h" 58 #include "clang/Sema/Scope.h" 59 #include "clang/Sema/SemaBase.h" 60 #include "clang/Sema/SemaConcept.h" 61 #include "clang/Sema/SemaDiagnostic.h" 62 #include "clang/Sema/TypoCorrection.h" 63 #include "clang/Sema/Weak.h" 64 #include "llvm/ADT/ArrayRef.h" 65 #include "llvm/ADT/STLForwardCompat.h" 66 #include "llvm/ADT/SetVector.h" 67 #include "llvm/ADT/SmallBitVector.h" 68 #include "llvm/ADT/SmallPtrSet.h" 69 #include "llvm/ADT/SmallSet.h" 70 #include "llvm/ADT/SmallVector.h" 71 #include "llvm/ADT/StringExtras.h" 72 #include "llvm/ADT/TinyPtrVector.h" 73 #include <deque> 74 #include <memory> 75 #include <optional> 76 #include <string> 77 #include <tuple> 78 #include <vector> 79 80 namespace llvm { 81 class APSInt; 82 template <typename ValueT, typename ValueInfoT> class DenseSet; 83 class SmallBitVector; 84 struct InlineAsmIdentifierInfo; 85 } // namespace llvm 86 87 namespace clang { 88 class ADLResult; 89 class ASTConsumer; 90 class ASTContext; 91 class ASTMutationListener; 92 class ASTReader; 93 class ASTWriter; 94 class ArrayType; 95 class ParsedAttr; 96 class BindingDecl; 97 class BlockDecl; 98 class CapturedDecl; 99 class CXXBasePath; 100 class CXXBasePaths; 101 class CXXBindTemporaryExpr; 102 typedef SmallVector<CXXBaseSpecifier *, 4> CXXCastPath; 103 class CXXConstructorDecl; 104 class CXXConversionDecl; 105 class CXXDeleteExpr; 106 class CXXDestructorDecl; 107 class CXXFieldCollector; 108 class CXXMemberCallExpr; 109 class CXXMethodDecl; 110 class CXXScopeSpec; 111 class CXXTemporary; 112 class CXXTryStmt; 113 class CallExpr; 114 class ClassTemplateDecl; 115 class ClassTemplatePartialSpecializationDecl; 116 class ClassTemplateSpecializationDecl; 117 class VarTemplatePartialSpecializationDecl; 118 class CodeCompleteConsumer; 119 class CodeCompletionAllocator; 120 class CodeCompletionTUInfo; 121 class CodeCompletionResult; 122 class CoroutineBodyStmt; 123 class Decl; 124 class DeclAccessPair; 125 class DeclContext; 126 class DeclRefExpr; 127 class DeclaratorDecl; 128 class DeducedTemplateArgument; 129 class DependentDiagnostic; 130 class DesignatedInitExpr; 131 class Designation; 132 class EnableIfAttr; 133 class EnumConstantDecl; 134 class Expr; 135 class ExtVectorType; 136 class FormatAttr; 137 class FriendDecl; 138 class FunctionDecl; 139 class FunctionProtoType; 140 class FunctionTemplateDecl; 141 class ImplicitConversionSequence; 142 typedef MutableArrayRef<ImplicitConversionSequence> ConversionSequenceList; 143 class InitListExpr; 144 class InitializationKind; 145 class InitializationSequence; 146 class InitializedEntity; 147 class IntegerLiteral; 148 class LabelStmt; 149 class LambdaExpr; 150 class LangOptions; 151 class LocalInstantiationScope; 152 class LookupResult; 153 class MacroInfo; 154 typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath; 155 class ModuleLoader; 156 class MultiLevelTemplateArgumentList; 157 class NamedDecl; 158 class ObjCImplementationDecl; 159 class ObjCInterfaceDecl; 160 class ObjCMethodDecl; 161 class ObjCProtocolDecl; 162 struct OverloadCandidate; 163 enum class OverloadCandidateParamOrder : char; 164 enum OverloadCandidateRewriteKind : unsigned; 165 class OverloadCandidateSet; 166 class OverloadExpr; 167 class ParenListExpr; 168 class ParmVarDecl; 169 class Preprocessor; 170 class PseudoDestructorTypeStorage; 171 class PseudoObjectExpr; 172 class QualType; 173 class SemaAMDGPU; 174 class SemaARM; 175 class SemaAVR; 176 class SemaBPF; 177 class SemaCodeCompletion; 178 class SemaCUDA; 179 class SemaHLSL; 180 class SemaHexagon; 181 class SemaLoongArch; 182 class SemaM68k; 183 class SemaMIPS; 184 class SemaMSP430; 185 class SemaNVPTX; 186 class SemaObjC; 187 class SemaOpenACC; 188 class SemaOpenCL; 189 class SemaOpenMP; 190 class SemaPPC; 191 class SemaPseudoObject; 192 class SemaRISCV; 193 class SemaSYCL; 194 class SemaSwift; 195 class SemaSystemZ; 196 class SemaWasm; 197 class SemaX86; 198 class StandardConversionSequence; 199 class Stmt; 200 class StringLiteral; 201 class SwitchStmt; 202 class TemplateArgument; 203 class TemplateArgumentList; 204 class TemplateArgumentLoc; 205 class TemplateDecl; 206 class TemplateInstantiationCallback; 207 class TemplateParameterList; 208 class TemplatePartialOrderingContext; 209 class TemplateTemplateParmDecl; 210 class Token; 211 class TypeAliasDecl; 212 class TypedefDecl; 213 class TypedefNameDecl; 214 class TypeLoc; 215 class TypoCorrectionConsumer; 216 class UnqualifiedId; 217 class UnresolvedLookupExpr; 218 class UnresolvedMemberExpr; 219 class UnresolvedSetImpl; 220 class UnresolvedSetIterator; 221 class UsingDecl; 222 class UsingShadowDecl; 223 class ValueDecl; 224 class VarDecl; 225 class VarTemplateSpecializationDecl; 226 class VisibilityAttr; 227 class VisibleDeclConsumer; 228 class IndirectFieldDecl; 229 struct DeductionFailureInfo; 230 class TemplateSpecCandidateSet; 231 232 namespace sema { 233 class AccessedEntity; 234 class BlockScopeInfo; 235 class Capture; 236 class CapturedRegionScopeInfo; 237 class CapturingScopeInfo; 238 class CompoundScopeInfo; 239 class DelayedDiagnostic; 240 class DelayedDiagnosticPool; 241 class FunctionScopeInfo; 242 class LambdaScopeInfo; 243 class PossiblyUnreachableDiag; 244 class RISCVIntrinsicManager; 245 class SemaPPCallbacks; 246 class TemplateDeductionInfo; 247 } // namespace sema 248 249 namespace threadSafety { 250 class BeforeSet; 251 void threadSafetyCleanup(BeforeSet *Cache); 252 } // namespace threadSafety 253 254 // FIXME: No way to easily map from TemplateTypeParmTypes to 255 // TemplateTypeParmDecls, so we have this horrible PointerUnion. 256 typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType *, NamedDecl *>, 257 SourceLocation> 258 UnexpandedParameterPack; 259 260 /// Describes whether we've seen any nullability information for the given 261 /// file. 262 struct FileNullability { 263 /// The first pointer declarator (of any pointer kind) in the file that does 264 /// not have a corresponding nullability annotation. 265 SourceLocation PointerLoc; 266 267 /// The end location for the first pointer declarator in the file. Used for 268 /// placing fix-its. 269 SourceLocation PointerEndLoc; 270 271 /// Which kind of pointer declarator we saw. 272 uint8_t PointerKind; 273 274 /// Whether we saw any type nullability annotations in the given file. 275 bool SawTypeNullability = false; 276 }; 277 278 /// A mapping from file IDs to a record of whether we've seen nullability 279 /// information in that file. 280 class FileNullabilityMap { 281 /// A mapping from file IDs to the nullability information for each file ID. 282 llvm::DenseMap<FileID, FileNullability> Map; 283 284 /// A single-element cache based on the file ID. 285 struct { 286 FileID File; 287 FileNullability Nullability; 288 } Cache; 289 290 public: 291 FileNullability &operator[](FileID file) { 292 // Check the single-element cache. 293 if (file == Cache.File) 294 return Cache.Nullability; 295 296 // It's not in the single-element cache; flush the cache if we have one. 297 if (!Cache.File.isInvalid()) { 298 Map[Cache.File] = Cache.Nullability; 299 } 300 301 // Pull this entry into the cache. 302 Cache.File = file; 303 Cache.Nullability = Map[file]; 304 return Cache.Nullability; 305 } 306 }; 307 308 /// Tracks expected type during expression parsing, for use in code completion. 309 /// The type is tied to a particular token, all functions that update or consume 310 /// the type take a start location of the token they are looking at as a 311 /// parameter. This avoids updating the type on hot paths in the parser. 312 class PreferredTypeBuilder { 313 public: PreferredTypeBuilder(bool Enabled)314 PreferredTypeBuilder(bool Enabled) : Enabled(Enabled) {} 315 316 void enterCondition(Sema &S, SourceLocation Tok); 317 void enterReturn(Sema &S, SourceLocation Tok); 318 void enterVariableInit(SourceLocation Tok, Decl *D); 319 /// Handles e.g. BaseType{ .D = Tok... 320 void enterDesignatedInitializer(SourceLocation Tok, QualType BaseType, 321 const Designation &D); 322 /// Computing a type for the function argument may require running 323 /// overloading, so we postpone its computation until it is actually needed. 324 /// 325 /// Clients should be very careful when using this function, as it stores a 326 /// function_ref, clients should make sure all calls to get() with the same 327 /// location happen while function_ref is alive. 328 /// 329 /// The callback should also emit signature help as a side-effect, but only 330 /// if the completion point has been reached. 331 void enterFunctionArgument(SourceLocation Tok, 332 llvm::function_ref<QualType()> ComputeType); 333 334 void enterParenExpr(SourceLocation Tok, SourceLocation LParLoc); 335 void enterUnary(Sema &S, SourceLocation Tok, tok::TokenKind OpKind, 336 SourceLocation OpLoc); 337 void enterBinary(Sema &S, SourceLocation Tok, Expr *LHS, tok::TokenKind Op); 338 void enterMemAccess(Sema &S, SourceLocation Tok, Expr *Base); 339 void enterSubscript(Sema &S, SourceLocation Tok, Expr *LHS); 340 /// Handles all type casts, including C-style cast, C++ casts, etc. 341 void enterTypeCast(SourceLocation Tok, QualType CastType); 342 343 /// Get the expected type associated with this location, if any. 344 /// 345 /// If the location is a function argument, determining the expected type 346 /// involves considering all function overloads and the arguments so far. 347 /// In this case, signature help for these function overloads will be reported 348 /// as a side-effect (only if the completion point has been reached). get(SourceLocation Tok)349 QualType get(SourceLocation Tok) const { 350 if (!Enabled || Tok != ExpectedLoc) 351 return QualType(); 352 if (!Type.isNull()) 353 return Type; 354 if (ComputeType) 355 return ComputeType(); 356 return QualType(); 357 } 358 359 private: 360 bool Enabled; 361 /// Start position of a token for which we store expected type. 362 SourceLocation ExpectedLoc; 363 /// Expected type for a token starting at ExpectedLoc. 364 QualType Type; 365 /// A function to compute expected type at ExpectedLoc. It is only considered 366 /// if Type is null. 367 llvm::function_ref<QualType()> ComputeType; 368 }; 369 370 struct SkipBodyInfo { 371 SkipBodyInfo() = default; 372 bool ShouldSkip = false; 373 bool CheckSameAsPrevious = false; 374 NamedDecl *Previous = nullptr; 375 NamedDecl *New = nullptr; 376 }; 377 378 /// Describes the result of template argument deduction. 379 /// 380 /// The TemplateDeductionResult enumeration describes the result of 381 /// template argument deduction, as returned from 382 /// DeduceTemplateArguments(). The separate TemplateDeductionInfo 383 /// structure provides additional information about the results of 384 /// template argument deduction, e.g., the deduced template argument 385 /// list (if successful) or the specific template parameters or 386 /// deduced arguments that were involved in the failure. 387 enum class TemplateDeductionResult { 388 /// Template argument deduction was successful. 389 Success = 0, 390 /// The declaration was invalid; do nothing. 391 Invalid, 392 /// Template argument deduction exceeded the maximum template 393 /// instantiation depth (which has already been diagnosed). 394 InstantiationDepth, 395 /// Template argument deduction did not deduce a value 396 /// for every template parameter. 397 Incomplete, 398 /// Template argument deduction did not deduce a value for every 399 /// expansion of an expanded template parameter pack. 400 IncompletePack, 401 /// Template argument deduction produced inconsistent 402 /// deduced values for the given template parameter. 403 Inconsistent, 404 /// Template argument deduction failed due to inconsistent 405 /// cv-qualifiers on a template parameter type that would 406 /// otherwise be deduced, e.g., we tried to deduce T in "const T" 407 /// but were given a non-const "X". 408 Underqualified, 409 /// Substitution of the deduced template argument values 410 /// resulted in an error. 411 SubstitutionFailure, 412 /// After substituting deduced template arguments, a dependent 413 /// parameter type did not match the corresponding argument. 414 DeducedMismatch, 415 /// After substituting deduced template arguments, an element of 416 /// a dependent parameter type did not match the corresponding element 417 /// of the corresponding argument (when deducing from an initializer list). 418 DeducedMismatchNested, 419 /// A non-depnedent component of the parameter did not match the 420 /// corresponding component of the argument. 421 NonDeducedMismatch, 422 /// When performing template argument deduction for a function 423 /// template, there were too many call arguments. 424 TooManyArguments, 425 /// When performing template argument deduction for a function 426 /// template, there were too few call arguments. 427 TooFewArguments, 428 /// The explicitly-specified template arguments were not valid 429 /// template arguments for the given template. 430 InvalidExplicitArguments, 431 /// Checking non-dependent argument conversions failed. 432 NonDependentConversionFailure, 433 /// The deduced arguments did not satisfy the constraints associated 434 /// with the template. 435 ConstraintsNotSatisfied, 436 /// Deduction failed; that's all we know. 437 MiscellaneousDeductionFailure, 438 /// CUDA Target attributes do not match. 439 CUDATargetMismatch, 440 /// Some error which was already diagnosed. 441 AlreadyDiagnosed 442 }; 443 444 /// Kinds of C++ special members. 445 enum class CXXSpecialMemberKind { 446 DefaultConstructor, 447 CopyConstructor, 448 MoveConstructor, 449 CopyAssignment, 450 MoveAssignment, 451 Destructor, 452 Invalid 453 }; 454 455 /// The kind of conversion being performed. 456 enum class CheckedConversionKind { 457 /// An implicit conversion. 458 Implicit, 459 /// A C-style cast. 460 CStyleCast, 461 /// A functional-style cast. 462 FunctionalCast, 463 /// A cast other than a C-style cast. 464 OtherCast, 465 /// A conversion for an operand of a builtin overloaded operator. 466 ForBuiltinOverloadedOp 467 }; 468 469 enum class TagUseKind { 470 Reference, // Reference to a tag: 'struct foo *X;' 471 Declaration, // Fwd decl of a tag: 'struct foo;' 472 Definition, // Definition of a tag: 'struct foo { int X; } Y;' 473 Friend // Friend declaration: 'friend struct foo;' 474 }; 475 476 /// Used with attributes/effects with a boolean condition, e.g. `nonblocking`. 477 enum class FunctionEffectMode : uint8_t { 478 None, // effect is not present. 479 False, // effect(false). 480 True, // effect(true). 481 Dependent // effect(expr) where expr is dependent. 482 }; 483 484 struct FunctionEffectDiff { 485 enum class Kind { Added, Removed, ConditionMismatch }; 486 487 FunctionEffect::Kind EffectKind; 488 Kind DiffKind; 489 FunctionEffectWithCondition Old; // invalid when Added. 490 FunctionEffectWithCondition New; // invalid when Removed. 491 effectNameFunctionEffectDiff492 StringRef effectName() const { 493 if (Old.Effect.kind() != FunctionEffect::Kind::None) 494 return Old.Effect.name(); 495 return New.Effect.name(); 496 } 497 498 /// Describes the result of effects differing between a base class's virtual 499 /// method and an overriding method in a subclass. 500 enum class OverrideResult { 501 NoAction, 502 Warn, 503 Merge // Merge missing effect from base to derived. 504 }; 505 506 /// Return true if adding or removing the effect as part of a type conversion 507 /// should generate a diagnostic. 508 bool shouldDiagnoseConversion(QualType SrcType, 509 const FunctionEffectsRef &SrcFX, 510 QualType DstType, 511 const FunctionEffectsRef &DstFX) const; 512 513 /// Return true if adding or removing the effect in a redeclaration should 514 /// generate a diagnostic. 515 bool shouldDiagnoseRedeclaration(const FunctionDecl &OldFunction, 516 const FunctionEffectsRef &OldFX, 517 const FunctionDecl &NewFunction, 518 const FunctionEffectsRef &NewFX) const; 519 520 /// Return true if adding or removing the effect in a C++ virtual method 521 /// override should generate a diagnostic. 522 OverrideResult shouldDiagnoseMethodOverride( 523 const CXXMethodDecl &OldMethod, const FunctionEffectsRef &OldFX, 524 const CXXMethodDecl &NewMethod, const FunctionEffectsRef &NewFX) const; 525 }; 526 527 struct FunctionEffectDifferences : public SmallVector<FunctionEffectDiff> { 528 /// Caller should short-circuit by checking for equality first. 529 FunctionEffectDifferences(const FunctionEffectsRef &Old, 530 const FunctionEffectsRef &New); 531 }; 532 533 /// Sema - This implements semantic analysis and AST building for C. 534 /// \nosubgrouping 535 class Sema final : public SemaBase { 536 // Table of Contents 537 // ----------------- 538 // 1. Semantic Analysis (Sema.cpp) 539 // 2. C++ Access Control (SemaAccess.cpp) 540 // 3. Attributes (SemaAttr.cpp) 541 // 4. Availability Attribute Handling (SemaAvailability.cpp) 542 // 5. Casts (SemaCast.cpp) 543 // 6. Extra Semantic Checking (SemaChecking.cpp) 544 // 7. C++ Coroutines (SemaCoroutine.cpp) 545 // 8. C++ Scope Specifiers (SemaCXXScopeSpec.cpp) 546 // 9. Declarations (SemaDecl.cpp) 547 // 10. Declaration Attribute Handling (SemaDeclAttr.cpp) 548 // 11. C++ Declarations (SemaDeclCXX.cpp) 549 // 12. C++ Exception Specifications (SemaExceptionSpec.cpp) 550 // 13. Expressions (SemaExpr.cpp) 551 // 14. C++ Expressions (SemaExprCXX.cpp) 552 // 15. Member Access Expressions (SemaExprMember.cpp) 553 // 16. Initializers (SemaInit.cpp) 554 // 17. C++ Lambda Expressions (SemaLambda.cpp) 555 // 18. Name Lookup (SemaLookup.cpp) 556 // 19. Modules (SemaModule.cpp) 557 // 20. C++ Overloading (SemaOverload.cpp) 558 // 21. Statements (SemaStmt.cpp) 559 // 22. `inline asm` Statement (SemaStmtAsm.cpp) 560 // 23. Statement Attribute Handling (SemaStmtAttr.cpp) 561 // 24. C++ Templates (SemaTemplate.cpp) 562 // 25. C++ Template Argument Deduction (SemaTemplateDeduction.cpp) 563 // 26. C++ Template Deduction Guide (SemaTemplateDeductionGuide.cpp) 564 // 27. C++ Template Instantiation (SemaTemplateInstantiate.cpp) 565 // 28. C++ Template Declaration Instantiation 566 // (SemaTemplateInstantiateDecl.cpp) 567 // 29. C++ Variadic Templates (SemaTemplateVariadic.cpp) 568 // 30. Constraints and Concepts (SemaConcept.cpp) 569 // 31. Types (SemaType.cpp) 570 // 32. FixIt Helpers (SemaFixItUtils.cpp) 571 572 /// \name Semantic Analysis 573 /// Implementations are in Sema.cpp 574 ///@{ 575 576 public: 577 Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, 578 TranslationUnitKind TUKind = TU_Complete, 579 CodeCompleteConsumer *CompletionConsumer = nullptr); 580 ~Sema(); 581 582 /// Perform initialization that occurs after the parser has been 583 /// initialized but before it parses anything. 584 void Initialize(); 585 586 /// This virtual key function only exists to limit the emission of debug info 587 /// describing the Sema class. GCC and Clang only emit debug info for a class 588 /// with a vtable when the vtable is emitted. Sema is final and not 589 /// polymorphic, but the debug info size savings are so significant that it is 590 /// worth adding a vtable just to take advantage of this optimization. 591 virtual void anchor(); 592 getLangOpts()593 const LangOptions &getLangOpts() const { return LangOpts; } getOpenCLOptions()594 OpenCLOptions &getOpenCLOptions() { return OpenCLFeatures; } getCurFPFeatures()595 FPOptions &getCurFPFeatures() { return CurFPFeatures; } 596 getDiagnostics()597 DiagnosticsEngine &getDiagnostics() const { return Diags; } getSourceManager()598 SourceManager &getSourceManager() const { return SourceMgr; } getPreprocessor()599 Preprocessor &getPreprocessor() const { return PP; } getASTContext()600 ASTContext &getASTContext() const { return Context; } getASTConsumer()601 ASTConsumer &getASTConsumer() const { return Consumer; } 602 ASTMutationListener *getASTMutationListener() const; getExternalSource()603 ExternalSemaSource *getExternalSource() const { return ExternalSource.get(); } 604 605 DarwinSDKInfo *getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc, 606 StringRef Platform); 607 DarwinSDKInfo *getDarwinSDKInfoForAvailabilityChecking(); 608 609 /// Registers an external source. If an external source already exists, 610 /// creates a multiplex external source and appends to it. 611 /// 612 ///\param[in] E - A non-null external sema source. 613 /// 614 void addExternalSource(ExternalSemaSource *E); 615 616 /// Print out statistics about the semantic analysis. 617 void PrintStats() const; 618 619 /// Warn that the stack is nearly exhausted. 620 void warnStackExhausted(SourceLocation Loc); 621 622 /// Run some code with "sufficient" stack space. (Currently, at least 256K is 623 /// guaranteed). Produces a warning if we're low on stack space and allocates 624 /// more in that case. Use this in code that may recurse deeply (for example, 625 /// in template instantiation) to avoid stack overflow. 626 void runWithSufficientStackSpace(SourceLocation Loc, 627 llvm::function_ref<void()> Fn); 628 629 /// Returns default addr space for method qualifiers. 630 LangAS getDefaultCXXMethodAddrSpace() const; 631 632 /// Load weak undeclared identifiers from the external source. 633 void LoadExternalWeakUndeclaredIdentifiers(); 634 635 /// Determine if VD, which must be a variable or function, is an external 636 /// symbol that nonetheless can't be referenced from outside this translation 637 /// unit because its type has no linkage and it's not extern "C". 638 bool isExternalWithNoLinkageType(const ValueDecl *VD) const; 639 640 /// Obtain a sorted list of functions that are undefined but ODR-used. 641 void getUndefinedButUsed( 642 SmallVectorImpl<std::pair<NamedDecl *, SourceLocation>> &Undefined); 643 644 typedef std::pair<SourceLocation, bool> DeleteExprLoc; 645 typedef llvm::SmallVector<DeleteExprLoc, 4> DeleteLocs; 646 /// Retrieves list of suspicious delete-expressions that will be checked at 647 /// the end of translation unit. 648 const llvm::MapVector<FieldDecl *, DeleteLocs> & 649 getMismatchingDeleteExpressions() const; 650 651 /// Cause the active diagnostic on the DiagosticsEngine to be 652 /// emitted. This is closely coupled to the SemaDiagnosticBuilder class and 653 /// should not be used elsewhere. 654 void EmitCurrentDiagnostic(unsigned DiagID); 655 656 void addImplicitTypedef(StringRef Name, QualType T); 657 658 /// Whether uncompilable error has occurred. This includes error happens 659 /// in deferred diagnostics. 660 bool hasUncompilableErrorOccurred() const; 661 662 /// Looks through the macro-expansion chain for the given 663 /// location, looking for a macro expansion with the given name. 664 /// If one is found, returns true and sets the location to that 665 /// expansion loc. 666 bool findMacroSpelling(SourceLocation &loc, StringRef name); 667 668 /// Calls \c Lexer::getLocForEndOfToken() 669 SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0); 670 671 /// Retrieve the module loader associated with the preprocessor. 672 ModuleLoader &getModuleLoader() const; 673 674 /// Invent a new identifier for parameters of abbreviated templates. 675 IdentifierInfo * 676 InventAbbreviatedTemplateParameterTypeName(const IdentifierInfo *ParamName, 677 unsigned Index); 678 679 void emitAndClearUnusedLocalTypedefWarnings(); 680 681 // Emit all deferred diagnostics. 682 void emitDeferredDiags(); 683 684 enum TUFragmentKind { 685 /// The global module fragment, between 'module;' and a module-declaration. 686 Global, 687 /// A normal translation unit fragment. For a non-module unit, this is the 688 /// entire translation unit. Otherwise, it runs from the module-declaration 689 /// to the private-module-fragment (if any) or the end of the TU (if not). 690 Normal, 691 /// The private module fragment, between 'module :private;' and the end of 692 /// the translation unit. 693 Private 694 }; 695 696 /// This is called before the very first declaration in the translation unit 697 /// is parsed. Note that the ASTContext may have already injected some 698 /// declarations. 699 void ActOnStartOfTranslationUnit(); 700 /// ActOnEndOfTranslationUnit - This is called at the very end of the 701 /// translation unit when EOF is reached and all but the top-level scope is 702 /// popped. 703 void ActOnEndOfTranslationUnit(); 704 void ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind); 705 706 /// Determines the active Scope associated with the given declaration 707 /// context. 708 /// 709 /// This routine maps a declaration context to the active Scope object that 710 /// represents that declaration context in the parser. It is typically used 711 /// from "scope-less" code (e.g., template instantiation, lazy creation of 712 /// declarations) that injects a name for name-lookup purposes and, therefore, 713 /// must update the Scope. 714 /// 715 /// \returns The scope corresponding to the given declaraion context, or NULL 716 /// if no such scope is open. 717 Scope *getScopeForContext(DeclContext *Ctx); 718 719 void PushFunctionScope(); 720 void PushBlockScope(Scope *BlockScope, BlockDecl *Block); 721 sema::LambdaScopeInfo *PushLambdaScope(); 722 723 /// This is used to inform Sema what the current TemplateParameterDepth 724 /// is during Parsing. Currently it is used to pass on the depth 725 /// when parsing generic lambda 'auto' parameters. 726 void RecordParsingTemplateParameterDepth(unsigned Depth); 727 728 void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD, 729 RecordDecl *RD, CapturedRegionKind K, 730 unsigned OpenMPCaptureLevel = 0); 731 732 /// Custom deleter to allow FunctionScopeInfos to be kept alive for a short 733 /// time after they've been popped. 734 class PoppedFunctionScopeDeleter { 735 Sema *Self; 736 737 public: PoppedFunctionScopeDeleter(Sema * Self)738 explicit PoppedFunctionScopeDeleter(Sema *Self) : Self(Self) {} 739 void operator()(sema::FunctionScopeInfo *Scope) const; 740 }; 741 742 using PoppedFunctionScopePtr = 743 std::unique_ptr<sema::FunctionScopeInfo, PoppedFunctionScopeDeleter>; 744 745 /// Pop a function (or block or lambda or captured region) scope from the 746 /// stack. 747 /// 748 /// \param WP The warning policy to use for CFG-based warnings, or null if 749 /// such warnings should not be produced. 750 /// \param D The declaration corresponding to this function scope, if 751 /// producing CFG-based warnings. 752 /// \param BlockType The type of the block expression, if D is a BlockDecl. 753 PoppedFunctionScopePtr 754 PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr, 755 const Decl *D = nullptr, 756 QualType BlockType = QualType()); 757 758 sema::FunctionScopeInfo *getEnclosingFunction() const; 759 760 void setFunctionHasBranchIntoScope(); 761 void setFunctionHasBranchProtectedScope(); 762 void setFunctionHasIndirectGoto(); 763 void setFunctionHasMustTail(); 764 765 void PushCompoundScope(bool IsStmtExpr); 766 void PopCompoundScope(); 767 768 /// Determine whether any errors occurred within this function/method/ 769 /// block. 770 bool hasAnyUnrecoverableErrorsInThisFunction() const; 771 772 /// Retrieve the current block, if any. 773 sema::BlockScopeInfo *getCurBlock(); 774 775 /// Get the innermost lambda enclosing the current location, if any. This 776 /// looks through intervening non-lambda scopes such as local functions and 777 /// blocks. 778 sema::LambdaScopeInfo *getEnclosingLambda() const; 779 780 /// Retrieve the current lambda scope info, if any. 781 /// \param IgnoreNonLambdaCapturingScope true if should find the top-most 782 /// lambda scope info ignoring all inner capturing scopes that are not 783 /// lambda scopes. 784 sema::LambdaScopeInfo * 785 getCurLambda(bool IgnoreNonLambdaCapturingScope = false); 786 787 /// Retrieve the current generic lambda info, if any. 788 sema::LambdaScopeInfo *getCurGenericLambda(); 789 790 /// Retrieve the current captured region, if any. 791 sema::CapturedRegionScopeInfo *getCurCapturedRegion(); 792 793 void ActOnComment(SourceRange Comment); 794 795 /// Retrieve the parser's current scope. 796 /// 797 /// This routine must only be used when it is certain that semantic analysis 798 /// and the parser are in precisely the same context, which is not the case 799 /// when, e.g., we are performing any kind of template instantiation. 800 /// Therefore, the only safe places to use this scope are in the parser 801 /// itself and in routines directly invoked from the parser and *never* from 802 /// template substitution or instantiation. getCurScope()803 Scope *getCurScope() const { return CurScope; } 804 805 IdentifierInfo *getSuperIdentifier() const; 806 getCurLexicalContext()807 DeclContext *getCurLexicalContext() const { 808 return OriginalLexicalContext ? OriginalLexicalContext : CurContext; 809 } 810 811 SemaDiagnosticBuilder targetDiag(SourceLocation Loc, unsigned DiagID, 812 const FunctionDecl *FD = nullptr); 813 SemaDiagnosticBuilder targetDiag(SourceLocation Loc, 814 const PartialDiagnostic &PD, 815 const FunctionDecl *FD = nullptr) { 816 return targetDiag(Loc, PD.getDiagID(), FD) << PD; 817 } 818 819 /// Check if the type is allowed to be used for the current target. 820 void checkTypeSupport(QualType Ty, SourceLocation Loc, 821 ValueDecl *D = nullptr); 822 823 // /// The kind of conversion being performed. 824 // enum CheckedConversionKind { 825 // /// An implicit conversion. 826 // CCK_ImplicitConversion, 827 // /// A C-style cast. 828 // CCK_CStyleCast, 829 // /// A functional-style cast. 830 // CCK_FunctionalCast, 831 // /// A cast other than a C-style cast. 832 // CCK_OtherCast, 833 // /// A conversion for an operand of a builtin overloaded operator. 834 // CCK_ForBuiltinOverloadedOp 835 // }; 836 837 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit 838 /// cast. If there is already an implicit cast, merge into the existing one. 839 /// If isLvalue, the result of the cast is an lvalue. 840 ExprResult ImpCastExprToType( 841 Expr *E, QualType Type, CastKind CK, ExprValueKind VK = VK_PRValue, 842 const CXXCastPath *BasePath = nullptr, 843 CheckedConversionKind CCK = CheckedConversionKind::Implicit); 844 845 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding 846 /// to the conversion from scalar type ScalarTy to the Boolean type. 847 static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy); 848 849 /// If \p AllowLambda is true, treat lambda as function. 850 DeclContext *getFunctionLevelDeclContext(bool AllowLambda = false) const; 851 852 /// Returns a pointer to the innermost enclosing function, or nullptr if the 853 /// current context is not inside a function. If \p AllowLambda is true, 854 /// this can return the call operator of an enclosing lambda, otherwise 855 /// lambdas are skipped when looking for an enclosing function. 856 FunctionDecl *getCurFunctionDecl(bool AllowLambda = false) const; 857 858 /// getCurMethodDecl - If inside of a method body, this returns a pointer to 859 /// the method decl for the method being parsed. If we're currently 860 /// in a 'block', this returns the containing context. 861 ObjCMethodDecl *getCurMethodDecl(); 862 863 /// getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method 864 /// or C function we're in, otherwise return null. If we're currently 865 /// in a 'block', this returns the containing context. 866 NamedDecl *getCurFunctionOrMethodDecl() const; 867 868 /// Warn if we're implicitly casting from a _Nullable pointer type to a 869 /// _Nonnull one. 870 void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType, 871 SourceLocation Loc); 872 873 /// Warn when implicitly casting 0 to nullptr. 874 void diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E); 875 876 // ----- function effects --- 877 878 /// Warn when implicitly changing function effects. 879 void diagnoseFunctionEffectConversion(QualType DstType, QualType SrcType, 880 SourceLocation Loc); 881 882 /// Warn and return true if adding an effect to a set would create a conflict. 883 bool diagnoseConflictingFunctionEffect(const FunctionEffectsRef &FX, 884 const FunctionEffectWithCondition &EC, 885 SourceLocation NewAttrLoc); 886 887 // Report a failure to merge function effects between declarations due to a 888 // conflict. 889 void 890 diagnoseFunctionEffectMergeConflicts(const FunctionEffectSet::Conflicts &Errs, 891 SourceLocation NewLoc, 892 SourceLocation OldLoc); 893 894 /// Try to parse the conditional expression attached to an effect attribute 895 /// (e.g. 'nonblocking'). (c.f. Sema::ActOnNoexceptSpec). Return an empty 896 /// optional on error. 897 std::optional<FunctionEffectMode> 898 ActOnEffectExpression(Expr *CondExpr, StringRef AttributeName); 899 900 /// makeUnavailableInSystemHeader - There is an error in the current 901 /// context. If we're still in a system header, and we can plausibly 902 /// make the relevant declaration unavailable instead of erroring, do 903 /// so and return true. 904 bool makeUnavailableInSystemHeader(SourceLocation loc, 905 UnavailableAttr::ImplicitReason reason); 906 907 /// Retrieve a suitable printing policy for diagnostics. getPrintingPolicy()908 PrintingPolicy getPrintingPolicy() const { 909 return getPrintingPolicy(Context, PP); 910 } 911 912 /// Retrieve a suitable printing policy for diagnostics. 913 static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx, 914 const Preprocessor &PP); 915 916 /// Scope actions. 917 void ActOnTranslationUnitScope(Scope *S); 918 919 /// Determine whether \param D is function like (function or function 920 /// template) for parsing. 921 bool isDeclaratorFunctionLike(Declarator &D); 922 923 /// The maximum alignment, same as in llvm::Value. We duplicate them here 924 /// because that allows us not to duplicate the constants in clang code, 925 /// which we must to since we can't directly use the llvm constants. 926 /// The value is verified against llvm here: lib/CodeGen/CGDecl.cpp 927 /// 928 /// This is the greatest alignment value supported by load, store, and alloca 929 /// instructions, and global values. 930 static const unsigned MaxAlignmentExponent = 32; 931 static const uint64_t MaximumAlignment = 1ull << MaxAlignmentExponent; 932 933 /// Flag indicating whether or not to collect detailed statistics. 934 bool CollectStats; 935 936 std::unique_ptr<sema::FunctionScopeInfo> CachedFunctionScope; 937 938 /// Stack containing information about each of the nested 939 /// function, block, and method scopes that are currently active. 940 SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes; 941 942 /// The index of the first FunctionScope that corresponds to the current 943 /// context. 944 unsigned FunctionScopesStart = 0; 945 946 /// Track the number of currently active capturing scopes. 947 unsigned CapturingFunctionScopes = 0; 948 949 llvm::BumpPtrAllocator BumpAlloc; 950 951 /// The kind of translation unit we are processing. 952 /// 953 /// When we're processing a complete translation unit, Sema will perform 954 /// end-of-translation-unit semantic tasks (such as creating 955 /// initializers for tentative definitions in C) once parsing has 956 /// completed. Modules and precompiled headers perform different kinds of 957 /// checks. 958 const TranslationUnitKind TUKind; 959 960 /// Translation Unit Scope - useful to Objective-C actions that need 961 /// to lookup file scope declarations in the "ordinary" C decl namespace. 962 /// For example, user-defined classes, built-in "id" type, etc. 963 Scope *TUScope; 964 965 bool WarnedStackExhausted = false; 966 incrementMSManglingNumber()967 void incrementMSManglingNumber() const { 968 return CurScope->incrementMSManglingNumber(); 969 } 970 971 /// Try to recover by turning the given expression into a 972 /// call. Returns true if recovery was attempted or an error was 973 /// emitted; this may also leave the ExprResult invalid. 974 bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 975 bool ForceComplain = false, 976 bool (*IsPlausibleResult)(QualType) = nullptr); 977 978 /// Figure out if an expression could be turned into a call. 979 /// 980 /// Use this when trying to recover from an error where the programmer may 981 /// have written just the name of a function instead of actually calling it. 982 /// 983 /// \param E - The expression to examine. 984 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 985 /// with no arguments, this parameter is set to the type returned by such a 986 /// call; otherwise, it is set to an empty QualType. 987 /// \param OverloadSet - If the expression is an overloaded function 988 /// name, this parameter is populated with the decls of the various 989 /// overloads. 990 bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 991 UnresolvedSetImpl &NonTemplateOverloads); 992 993 typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy; 994 typedef OpaquePtr<TemplateName> TemplateTy; 995 typedef OpaquePtr<QualType> TypeTy; 996 997 OpenCLOptions OpenCLFeatures; 998 FPOptions CurFPFeatures; 999 1000 const LangOptions &LangOpts; 1001 Preprocessor &PP; 1002 ASTContext &Context; 1003 ASTConsumer &Consumer; 1004 DiagnosticsEngine &Diags; 1005 SourceManager &SourceMgr; 1006 api_notes::APINotesManager APINotes; 1007 1008 /// A RAII object to enter scope of a compound statement. 1009 class CompoundScopeRAII { 1010 public: S(S)1011 CompoundScopeRAII(Sema &S, bool IsStmtExpr = false) : S(S) { 1012 S.ActOnStartOfCompoundStmt(IsStmtExpr); 1013 } 1014 ~CompoundScopeRAII()1015 ~CompoundScopeRAII() { S.ActOnFinishOfCompoundStmt(); } 1016 1017 private: 1018 Sema &S; 1019 }; 1020 1021 /// An RAII helper that pops function a function scope on exit. 1022 struct FunctionScopeRAII { 1023 Sema &S; 1024 bool Active; FunctionScopeRAIIFunctionScopeRAII1025 FunctionScopeRAII(Sema &S) : S(S), Active(true) {} ~FunctionScopeRAIIFunctionScopeRAII1026 ~FunctionScopeRAII() { 1027 if (Active) 1028 S.PopFunctionScopeInfo(); 1029 } disableFunctionScopeRAII1030 void disable() { Active = false; } 1031 }; 1032 getCurFunction()1033 sema::FunctionScopeInfo *getCurFunction() const { 1034 return FunctionScopes.empty() ? nullptr : FunctionScopes.back(); 1035 } 1036 1037 /// Worker object for performing CFG-based warnings. 1038 sema::AnalysisBasedWarnings AnalysisWarnings; 1039 threadSafety::BeforeSet *ThreadSafetyDeclCache; 1040 1041 /// Callback to the parser to parse templated functions when needed. 1042 typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT); 1043 typedef void LateTemplateParserCleanupCB(void *P); 1044 LateTemplateParserCB *LateTemplateParser; 1045 LateTemplateParserCleanupCB *LateTemplateParserCleanup; 1046 void *OpaqueParser; 1047 SetLateTemplateParser(LateTemplateParserCB * LTP,LateTemplateParserCleanupCB * LTPCleanup,void * P)1048 void SetLateTemplateParser(LateTemplateParserCB *LTP, 1049 LateTemplateParserCleanupCB *LTPCleanup, void *P) { 1050 LateTemplateParser = LTP; 1051 LateTemplateParserCleanup = LTPCleanup; 1052 OpaqueParser = P; 1053 } 1054 1055 /// Callback to the parser to parse a type expressed as a string. 1056 std::function<TypeResult(StringRef, StringRef, SourceLocation)> 1057 ParseTypeFromStringCallback; 1058 1059 /// VAListTagName - The declaration name corresponding to __va_list_tag. 1060 /// This is used as part of a hack to omit that class from ADL results. 1061 DeclarationName VAListTagName; 1062 1063 /// Is the last error level diagnostic immediate. This is used to determined 1064 /// whether the next info diagnostic should be immediate. 1065 bool IsLastErrorImmediate = true; 1066 1067 class DelayedDiagnostics; 1068 1069 class DelayedDiagnosticsState { 1070 sema::DelayedDiagnosticPool *SavedPool = nullptr; 1071 friend class Sema::DelayedDiagnostics; 1072 }; 1073 typedef DelayedDiagnosticsState ParsingDeclState; 1074 typedef DelayedDiagnosticsState ProcessingContextState; 1075 1076 /// A class which encapsulates the logic for delaying diagnostics 1077 /// during parsing and other processing. 1078 class DelayedDiagnostics { 1079 /// The current pool of diagnostics into which delayed 1080 /// diagnostics should go. 1081 sema::DelayedDiagnosticPool *CurPool = nullptr; 1082 1083 public: 1084 DelayedDiagnostics() = default; 1085 1086 /// Adds a delayed diagnostic. 1087 void add(const sema::DelayedDiagnostic &diag); // in DelayedDiagnostic.h 1088 1089 /// Determines whether diagnostics should be delayed. shouldDelayDiagnostics()1090 bool shouldDelayDiagnostics() { return CurPool != nullptr; } 1091 1092 /// Returns the current delayed-diagnostics pool. getCurrentPool()1093 sema::DelayedDiagnosticPool *getCurrentPool() const { return CurPool; } 1094 1095 /// Enter a new scope. Access and deprecation diagnostics will be 1096 /// collected in this pool. push(sema::DelayedDiagnosticPool & pool)1097 DelayedDiagnosticsState push(sema::DelayedDiagnosticPool &pool) { 1098 DelayedDiagnosticsState state; 1099 state.SavedPool = CurPool; 1100 CurPool = &pool; 1101 return state; 1102 } 1103 1104 /// Leave a delayed-diagnostic state that was previously pushed. 1105 /// Do not emit any of the diagnostics. This is performed as part 1106 /// of the bookkeeping of popping a pool "properly". popWithoutEmitting(DelayedDiagnosticsState state)1107 void popWithoutEmitting(DelayedDiagnosticsState state) { 1108 CurPool = state.SavedPool; 1109 } 1110 1111 /// Enter a new scope where access and deprecation diagnostics are 1112 /// not delayed. pushUndelayed()1113 DelayedDiagnosticsState pushUndelayed() { 1114 DelayedDiagnosticsState state; 1115 state.SavedPool = CurPool; 1116 CurPool = nullptr; 1117 return state; 1118 } 1119 1120 /// Undo a previous pushUndelayed(). popUndelayed(DelayedDiagnosticsState state)1121 void popUndelayed(DelayedDiagnosticsState state) { 1122 assert(CurPool == nullptr); 1123 CurPool = state.SavedPool; 1124 } 1125 } DelayedDiagnostics; 1126 PushParsingDeclaration(sema::DelayedDiagnosticPool & pool)1127 ParsingDeclState PushParsingDeclaration(sema::DelayedDiagnosticPool &pool) { 1128 return DelayedDiagnostics.push(pool); 1129 } 1130 1131 /// Diagnostics that are emitted only if we discover that the given function 1132 /// must be codegen'ed. Because handling these correctly adds overhead to 1133 /// compilation, this is currently only enabled for CUDA compilations. 1134 SemaDiagnosticBuilder::DeferredDiagnosticsType DeviceDeferredDiags; 1135 1136 /// CurContext - This is the current declaration context of parsing. 1137 DeclContext *CurContext; 1138 AMDGPU()1139 SemaAMDGPU &AMDGPU() { 1140 assert(AMDGPUPtr); 1141 return *AMDGPUPtr; 1142 } 1143 ARM()1144 SemaARM &ARM() { 1145 assert(ARMPtr); 1146 return *ARMPtr; 1147 } 1148 AVR()1149 SemaAVR &AVR() { 1150 assert(AVRPtr); 1151 return *AVRPtr; 1152 } 1153 BPF()1154 SemaBPF &BPF() { 1155 assert(BPFPtr); 1156 return *BPFPtr; 1157 } 1158 CodeCompletion()1159 SemaCodeCompletion &CodeCompletion() { 1160 assert(CodeCompletionPtr); 1161 return *CodeCompletionPtr; 1162 } 1163 CUDA()1164 SemaCUDA &CUDA() { 1165 assert(CUDAPtr); 1166 return *CUDAPtr; 1167 } 1168 HLSL()1169 SemaHLSL &HLSL() { 1170 assert(HLSLPtr); 1171 return *HLSLPtr; 1172 } 1173 Hexagon()1174 SemaHexagon &Hexagon() { 1175 assert(HexagonPtr); 1176 return *HexagonPtr; 1177 } 1178 LoongArch()1179 SemaLoongArch &LoongArch() { 1180 assert(LoongArchPtr); 1181 return *LoongArchPtr; 1182 } 1183 M68k()1184 SemaM68k &M68k() { 1185 assert(M68kPtr); 1186 return *M68kPtr; 1187 } 1188 MIPS()1189 SemaMIPS &MIPS() { 1190 assert(MIPSPtr); 1191 return *MIPSPtr; 1192 } 1193 MSP430()1194 SemaMSP430 &MSP430() { 1195 assert(MSP430Ptr); 1196 return *MSP430Ptr; 1197 } 1198 NVPTX()1199 SemaNVPTX &NVPTX() { 1200 assert(NVPTXPtr); 1201 return *NVPTXPtr; 1202 } 1203 ObjC()1204 SemaObjC &ObjC() { 1205 assert(ObjCPtr); 1206 return *ObjCPtr; 1207 } 1208 OpenACC()1209 SemaOpenACC &OpenACC() { 1210 assert(OpenACCPtr); 1211 return *OpenACCPtr; 1212 } 1213 OpenCL()1214 SemaOpenCL &OpenCL() { 1215 assert(OpenCLPtr); 1216 return *OpenCLPtr; 1217 } 1218 OpenMP()1219 SemaOpenMP &OpenMP() { 1220 assert(OpenMPPtr && "SemaOpenMP is dead"); 1221 return *OpenMPPtr; 1222 } 1223 PPC()1224 SemaPPC &PPC() { 1225 assert(PPCPtr); 1226 return *PPCPtr; 1227 } 1228 PseudoObject()1229 SemaPseudoObject &PseudoObject() { 1230 assert(PseudoObjectPtr); 1231 return *PseudoObjectPtr; 1232 } 1233 RISCV()1234 SemaRISCV &RISCV() { 1235 assert(RISCVPtr); 1236 return *RISCVPtr; 1237 } 1238 SYCL()1239 SemaSYCL &SYCL() { 1240 assert(SYCLPtr); 1241 return *SYCLPtr; 1242 } 1243 Swift()1244 SemaSwift &Swift() { 1245 assert(SwiftPtr); 1246 return *SwiftPtr; 1247 } 1248 SystemZ()1249 SemaSystemZ &SystemZ() { 1250 assert(SystemZPtr); 1251 return *SystemZPtr; 1252 } 1253 Wasm()1254 SemaWasm &Wasm() { 1255 assert(WasmPtr); 1256 return *WasmPtr; 1257 } 1258 X86()1259 SemaX86 &X86() { 1260 assert(X86Ptr); 1261 return *X86Ptr; 1262 } 1263 1264 /// Source of additional semantic information. 1265 IntrusiveRefCntPtr<ExternalSemaSource> ExternalSource; 1266 1267 protected: 1268 friend class Parser; 1269 friend class InitializationSequence; 1270 friend class ASTReader; 1271 friend class ASTDeclReader; 1272 friend class ASTWriter; 1273 1274 private: 1275 std::optional<std::unique_ptr<DarwinSDKInfo>> CachedDarwinSDKInfo; 1276 bool WarnedDarwinSDKInfoMissing = false; 1277 1278 Sema(const Sema &) = delete; 1279 void operator=(const Sema &) = delete; 1280 1281 /// The handler for the FileChanged preprocessor events. 1282 /// 1283 /// Used for diagnostics that implement custom semantic analysis for #include 1284 /// directives, like -Wpragma-pack. 1285 sema::SemaPPCallbacks *SemaPPCallbackHandler; 1286 1287 /// The parser's current scope. 1288 /// 1289 /// The parser maintains this state here. 1290 Scope *CurScope; 1291 1292 mutable IdentifierInfo *Ident_super; 1293 1294 std::unique_ptr<SemaAMDGPU> AMDGPUPtr; 1295 std::unique_ptr<SemaARM> ARMPtr; 1296 std::unique_ptr<SemaAVR> AVRPtr; 1297 std::unique_ptr<SemaBPF> BPFPtr; 1298 std::unique_ptr<SemaCodeCompletion> CodeCompletionPtr; 1299 std::unique_ptr<SemaCUDA> CUDAPtr; 1300 std::unique_ptr<SemaHLSL> HLSLPtr; 1301 std::unique_ptr<SemaHexagon> HexagonPtr; 1302 std::unique_ptr<SemaLoongArch> LoongArchPtr; 1303 std::unique_ptr<SemaM68k> M68kPtr; 1304 std::unique_ptr<SemaMIPS> MIPSPtr; 1305 std::unique_ptr<SemaMSP430> MSP430Ptr; 1306 std::unique_ptr<SemaNVPTX> NVPTXPtr; 1307 std::unique_ptr<SemaObjC> ObjCPtr; 1308 std::unique_ptr<SemaOpenACC> OpenACCPtr; 1309 std::unique_ptr<SemaOpenCL> OpenCLPtr; 1310 std::unique_ptr<SemaOpenMP> OpenMPPtr; 1311 std::unique_ptr<SemaPPC> PPCPtr; 1312 std::unique_ptr<SemaPseudoObject> PseudoObjectPtr; 1313 std::unique_ptr<SemaRISCV> RISCVPtr; 1314 std::unique_ptr<SemaSYCL> SYCLPtr; 1315 std::unique_ptr<SemaSwift> SwiftPtr; 1316 std::unique_ptr<SemaSystemZ> SystemZPtr; 1317 std::unique_ptr<SemaWasm> WasmPtr; 1318 std::unique_ptr<SemaX86> X86Ptr; 1319 1320 ///@} 1321 1322 // 1323 // 1324 // ------------------------------------------------------------------------- 1325 // 1326 // 1327 1328 /// \name C++ Access Control 1329 /// Implementations are in SemaAccess.cpp 1330 ///@{ 1331 1332 public: 1333 enum AccessResult { 1334 AR_accessible, 1335 AR_inaccessible, 1336 AR_dependent, 1337 AR_delayed 1338 }; 1339 1340 /// SetMemberAccessSpecifier - Set the access specifier of a member. 1341 /// Returns true on error (when the previous member decl access specifier 1342 /// is different from the new member decl access specifier). 1343 bool SetMemberAccessSpecifier(NamedDecl *MemberDecl, 1344 NamedDecl *PrevMemberDecl, 1345 AccessSpecifier LexicalAS); 1346 1347 /// Perform access-control checking on a previously-unresolved member 1348 /// access which has now been resolved to a member. 1349 AccessResult CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E, 1350 DeclAccessPair FoundDecl); 1351 AccessResult CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E, 1352 DeclAccessPair FoundDecl); 1353 1354 /// Checks access to an overloaded operator new or delete. 1355 AccessResult CheckAllocationAccess(SourceLocation OperatorLoc, 1356 SourceRange PlacementRange, 1357 CXXRecordDecl *NamingClass, 1358 DeclAccessPair FoundDecl, 1359 bool Diagnose = true); 1360 1361 /// Checks access to a constructor. 1362 AccessResult CheckConstructorAccess(SourceLocation Loc, CXXConstructorDecl *D, 1363 DeclAccessPair FoundDecl, 1364 const InitializedEntity &Entity, 1365 bool IsCopyBindingRefToTemp = false); 1366 1367 /// Checks access to a constructor. 1368 AccessResult CheckConstructorAccess(SourceLocation Loc, CXXConstructorDecl *D, 1369 DeclAccessPair FoundDecl, 1370 const InitializedEntity &Entity, 1371 const PartialDiagnostic &PDiag); 1372 AccessResult CheckDestructorAccess(SourceLocation Loc, 1373 CXXDestructorDecl *Dtor, 1374 const PartialDiagnostic &PDiag, 1375 QualType objectType = QualType()); 1376 1377 /// Checks access to the target of a friend declaration. 1378 AccessResult CheckFriendAccess(NamedDecl *D); 1379 1380 /// Checks access to a member. 1381 AccessResult CheckMemberAccess(SourceLocation UseLoc, 1382 CXXRecordDecl *NamingClass, 1383 DeclAccessPair Found); 1384 1385 /// Checks implicit access to a member in a structured binding. 1386 AccessResult 1387 CheckStructuredBindingMemberAccess(SourceLocation UseLoc, 1388 CXXRecordDecl *DecomposedClass, 1389 DeclAccessPair Field); 1390 AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr, 1391 const SourceRange &, 1392 DeclAccessPair FoundDecl); 1393 1394 /// Checks access to an overloaded member operator, including 1395 /// conversion operators. 1396 AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr, 1397 Expr *ArgExpr, 1398 DeclAccessPair FoundDecl); 1399 AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr, 1400 ArrayRef<Expr *> ArgExprs, 1401 DeclAccessPair FoundDecl); 1402 AccessResult CheckAddressOfMemberAccess(Expr *OvlExpr, 1403 DeclAccessPair FoundDecl); 1404 1405 /// Checks access for a hierarchy conversion. 1406 /// 1407 /// \param ForceCheck true if this check should be performed even if access 1408 /// control is disabled; some things rely on this for semantics 1409 /// \param ForceUnprivileged true if this check should proceed as if the 1410 /// context had no special privileges 1411 AccessResult CheckBaseClassAccess(SourceLocation AccessLoc, QualType Base, 1412 QualType Derived, const CXXBasePath &Path, 1413 unsigned DiagID, bool ForceCheck = false, 1414 bool ForceUnprivileged = false); 1415 1416 /// Checks access to all the declarations in the given result set. 1417 void CheckLookupAccess(const LookupResult &R); 1418 1419 /// Checks access to Target from the given class. The check will take access 1420 /// specifiers into account, but no member access expressions and such. 1421 /// 1422 /// \param Target the declaration to check if it can be accessed 1423 /// \param NamingClass the class in which the lookup was started. 1424 /// \param BaseType type of the left side of member access expression. 1425 /// \p BaseType and \p NamingClass are used for C++ access control. 1426 /// Depending on the lookup case, they should be set to the following: 1427 /// - lhs.target (member access without a qualifier): 1428 /// \p BaseType and \p NamingClass are both the type of 'lhs'. 1429 /// - lhs.X::target (member access with a qualifier): 1430 /// BaseType is the type of 'lhs', NamingClass is 'X' 1431 /// - X::target (qualified lookup without member access): 1432 /// BaseType is null, NamingClass is 'X'. 1433 /// - target (unqualified lookup). 1434 /// BaseType is null, NamingClass is the parent class of 'target'. 1435 /// \return true if the Target is accessible from the Class, false otherwise. 1436 bool IsSimplyAccessible(NamedDecl *Decl, CXXRecordDecl *NamingClass, 1437 QualType BaseType); 1438 1439 /// Is the given member accessible for the purposes of deciding whether to 1440 /// define a special member function as deleted? 1441 bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass, 1442 DeclAccessPair Found, QualType ObjectType, 1443 SourceLocation Loc, 1444 const PartialDiagnostic &Diag); isMemberAccessibleForDeletion(CXXRecordDecl * NamingClass,DeclAccessPair Found,QualType ObjectType)1445 bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass, 1446 DeclAccessPair Found, 1447 QualType ObjectType) { 1448 return isMemberAccessibleForDeletion(NamingClass, Found, ObjectType, 1449 SourceLocation(), PDiag()); 1450 } 1451 1452 void HandleDependentAccessCheck( 1453 const DependentDiagnostic &DD, 1454 const MultiLevelTemplateArgumentList &TemplateArgs); 1455 void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx); 1456 1457 ///@} 1458 1459 // 1460 // 1461 // ------------------------------------------------------------------------- 1462 // 1463 // 1464 1465 /// \name Attributes 1466 /// Implementations are in SemaAttr.cpp 1467 ///@{ 1468 1469 public: 1470 /// Controls member pointer representation format under the MS ABI. 1471 LangOptions::PragmaMSPointersToMembersKind 1472 MSPointerToMemberRepresentationMethod; 1473 1474 bool MSStructPragmaOn; // True when \#pragma ms_struct on 1475 1476 /// Source location for newly created implicit MSInheritanceAttrs 1477 SourceLocation ImplicitMSInheritanceAttrLoc; 1478 1479 /// pragma clang section kind 1480 enum PragmaClangSectionKind { 1481 PCSK_Invalid = 0, 1482 PCSK_BSS = 1, 1483 PCSK_Data = 2, 1484 PCSK_Rodata = 3, 1485 PCSK_Text = 4, 1486 PCSK_Relro = 5 1487 }; 1488 1489 enum PragmaClangSectionAction { PCSA_Set = 0, PCSA_Clear = 1 }; 1490 1491 struct PragmaClangSection { 1492 std::string SectionName; 1493 bool Valid = false; 1494 SourceLocation PragmaLocation; 1495 }; 1496 1497 PragmaClangSection PragmaClangBSSSection; 1498 PragmaClangSection PragmaClangDataSection; 1499 PragmaClangSection PragmaClangRodataSection; 1500 PragmaClangSection PragmaClangRelroSection; 1501 PragmaClangSection PragmaClangTextSection; 1502 1503 enum PragmaMsStackAction { 1504 PSK_Reset = 0x0, // #pragma () 1505 PSK_Set = 0x1, // #pragma (value) 1506 PSK_Push = 0x2, // #pragma (push[, id]) 1507 PSK_Pop = 0x4, // #pragma (pop[, id]) 1508 PSK_Show = 0x8, // #pragma (show) -- only for "pack"! 1509 PSK_Push_Set = PSK_Push | PSK_Set, // #pragma (push[, id], value) 1510 PSK_Pop_Set = PSK_Pop | PSK_Set, // #pragma (pop[, id], value) 1511 }; 1512 1513 struct PragmaPackInfo { 1514 PragmaMsStackAction Action; 1515 StringRef SlotLabel; 1516 Token Alignment; 1517 }; 1518 1519 // #pragma pack and align. 1520 class AlignPackInfo { 1521 public: 1522 // `Native` represents default align mode, which may vary based on the 1523 // platform. 1524 enum Mode : unsigned char { Native, Natural, Packed, Mac68k }; 1525 1526 // #pragma pack info constructor AlignPackInfo(AlignPackInfo::Mode M,unsigned Num,bool IsXL)1527 AlignPackInfo(AlignPackInfo::Mode M, unsigned Num, bool IsXL) 1528 : PackAttr(true), AlignMode(M), PackNumber(Num), XLStack(IsXL) { 1529 assert(Num == PackNumber && "The pack number has been truncated."); 1530 } 1531 1532 // #pragma align info constructor AlignPackInfo(AlignPackInfo::Mode M,bool IsXL)1533 AlignPackInfo(AlignPackInfo::Mode M, bool IsXL) 1534 : PackAttr(false), AlignMode(M), 1535 PackNumber(M == Packed ? 1 : UninitPackVal), XLStack(IsXL) {} 1536 AlignPackInfo(bool IsXL)1537 explicit AlignPackInfo(bool IsXL) : AlignPackInfo(Native, IsXL) {} 1538 AlignPackInfo()1539 AlignPackInfo() : AlignPackInfo(Native, false) {} 1540 1541 // When a AlignPackInfo itself cannot be used, this returns an 32-bit 1542 // integer encoding for it. This should only be passed to 1543 // AlignPackInfo::getFromRawEncoding, it should not be inspected directly. getRawEncoding(const AlignPackInfo & Info)1544 static uint32_t getRawEncoding(const AlignPackInfo &Info) { 1545 std::uint32_t Encoding{}; 1546 if (Info.IsXLStack()) 1547 Encoding |= IsXLMask; 1548 1549 Encoding |= static_cast<uint32_t>(Info.getAlignMode()) << 1; 1550 1551 if (Info.IsPackAttr()) 1552 Encoding |= PackAttrMask; 1553 1554 Encoding |= static_cast<uint32_t>(Info.getPackNumber()) << 4; 1555 1556 return Encoding; 1557 } 1558 getFromRawEncoding(unsigned Encoding)1559 static AlignPackInfo getFromRawEncoding(unsigned Encoding) { 1560 bool IsXL = static_cast<bool>(Encoding & IsXLMask); 1561 AlignPackInfo::Mode M = 1562 static_cast<AlignPackInfo::Mode>((Encoding & AlignModeMask) >> 1); 1563 int PackNumber = (Encoding & PackNumMask) >> 4; 1564 1565 if (Encoding & PackAttrMask) 1566 return AlignPackInfo(M, PackNumber, IsXL); 1567 1568 return AlignPackInfo(M, IsXL); 1569 } 1570 IsPackAttr()1571 bool IsPackAttr() const { return PackAttr; } 1572 IsAlignAttr()1573 bool IsAlignAttr() const { return !PackAttr; } 1574 getAlignMode()1575 Mode getAlignMode() const { return AlignMode; } 1576 getPackNumber()1577 unsigned getPackNumber() const { return PackNumber; } 1578 IsPackSet()1579 bool IsPackSet() const { 1580 // #pragma align, #pragma pack(), and #pragma pack(0) do not set the pack 1581 // attriute on a decl. 1582 return PackNumber != UninitPackVal && PackNumber != 0; 1583 } 1584 IsXLStack()1585 bool IsXLStack() const { return XLStack; } 1586 1587 bool operator==(const AlignPackInfo &Info) const { 1588 return std::tie(AlignMode, PackNumber, PackAttr, XLStack) == 1589 std::tie(Info.AlignMode, Info.PackNumber, Info.PackAttr, 1590 Info.XLStack); 1591 } 1592 1593 bool operator!=(const AlignPackInfo &Info) const { 1594 return !(*this == Info); 1595 } 1596 1597 private: 1598 /// \brief True if this is a pragma pack attribute, 1599 /// not a pragma align attribute. 1600 bool PackAttr; 1601 1602 /// \brief The alignment mode that is in effect. 1603 Mode AlignMode; 1604 1605 /// \brief The pack number of the stack. 1606 unsigned char PackNumber; 1607 1608 /// \brief True if it is a XL #pragma align/pack stack. 1609 bool XLStack; 1610 1611 /// \brief Uninitialized pack value. 1612 static constexpr unsigned char UninitPackVal = -1; 1613 1614 // Masks to encode and decode an AlignPackInfo. 1615 static constexpr uint32_t IsXLMask{0x0000'0001}; 1616 static constexpr uint32_t AlignModeMask{0x0000'0006}; 1617 static constexpr uint32_t PackAttrMask{0x00000'0008}; 1618 static constexpr uint32_t PackNumMask{0x0000'01F0}; 1619 }; 1620 1621 template <typename ValueType> struct PragmaStack { 1622 struct Slot { 1623 llvm::StringRef StackSlotLabel; 1624 ValueType Value; 1625 SourceLocation PragmaLocation; 1626 SourceLocation PragmaPushLocation; SlotPragmaStack::Slot1627 Slot(llvm::StringRef StackSlotLabel, ValueType Value, 1628 SourceLocation PragmaLocation, SourceLocation PragmaPushLocation) 1629 : StackSlotLabel(StackSlotLabel), Value(Value), 1630 PragmaLocation(PragmaLocation), 1631 PragmaPushLocation(PragmaPushLocation) {} 1632 }; 1633 ActPragmaStack1634 void Act(SourceLocation PragmaLocation, PragmaMsStackAction Action, 1635 llvm::StringRef StackSlotLabel, ValueType Value) { 1636 if (Action == PSK_Reset) { 1637 CurrentValue = DefaultValue; 1638 CurrentPragmaLocation = PragmaLocation; 1639 return; 1640 } 1641 if (Action & PSK_Push) 1642 Stack.emplace_back(StackSlotLabel, CurrentValue, CurrentPragmaLocation, 1643 PragmaLocation); 1644 else if (Action & PSK_Pop) { 1645 if (!StackSlotLabel.empty()) { 1646 // If we've got a label, try to find it and jump there. 1647 auto I = llvm::find_if(llvm::reverse(Stack), [&](const Slot &x) { 1648 return x.StackSlotLabel == StackSlotLabel; 1649 }); 1650 // If we found the label so pop from there. 1651 if (I != Stack.rend()) { 1652 CurrentValue = I->Value; 1653 CurrentPragmaLocation = I->PragmaLocation; 1654 Stack.erase(std::prev(I.base()), Stack.end()); 1655 } 1656 } else if (!Stack.empty()) { 1657 // We do not have a label, just pop the last entry. 1658 CurrentValue = Stack.back().Value; 1659 CurrentPragmaLocation = Stack.back().PragmaLocation; 1660 Stack.pop_back(); 1661 } 1662 } 1663 if (Action & PSK_Set) { 1664 CurrentValue = Value; 1665 CurrentPragmaLocation = PragmaLocation; 1666 } 1667 } 1668 1669 // MSVC seems to add artificial slots to #pragma stacks on entering a C++ 1670 // method body to restore the stacks on exit, so it works like this: 1671 // 1672 // struct S { 1673 // #pragma <name>(push, InternalPragmaSlot, <current_pragma_value>) 1674 // void Method {} 1675 // #pragma <name>(pop, InternalPragmaSlot) 1676 // }; 1677 // 1678 // It works even with #pragma vtordisp, although MSVC doesn't support 1679 // #pragma vtordisp(push [, id], n) 1680 // syntax. 1681 // 1682 // Push / pop a named sentinel slot. SentinelActionPragmaStack1683 void SentinelAction(PragmaMsStackAction Action, StringRef Label) { 1684 assert((Action == PSK_Push || Action == PSK_Pop) && 1685 "Can only push / pop #pragma stack sentinels!"); 1686 Act(CurrentPragmaLocation, Action, Label, CurrentValue); 1687 } 1688 1689 // Constructors. PragmaStackPragmaStack1690 explicit PragmaStack(const ValueType &Default) 1691 : DefaultValue(Default), CurrentValue(Default) {} 1692 hasValuePragmaStack1693 bool hasValue() const { return CurrentValue != DefaultValue; } 1694 1695 SmallVector<Slot, 2> Stack; 1696 ValueType DefaultValue; // Value used for PSK_Reset action. 1697 ValueType CurrentValue; 1698 SourceLocation CurrentPragmaLocation; 1699 }; 1700 // FIXME: We should serialize / deserialize these if they occur in a PCH (but 1701 // we shouldn't do so if they're in a module). 1702 1703 /// Whether to insert vtordisps prior to virtual bases in the Microsoft 1704 /// C++ ABI. Possible values are 0, 1, and 2, which mean: 1705 /// 1706 /// 0: Suppress all vtordisps 1707 /// 1: Insert vtordisps in the presence of vbase overrides and non-trivial 1708 /// structors 1709 /// 2: Always insert vtordisps to support RTTI on partially constructed 1710 /// objects 1711 PragmaStack<MSVtorDispMode> VtorDispStack; 1712 PragmaStack<AlignPackInfo> AlignPackStack; 1713 // The current #pragma align/pack values and locations at each #include. 1714 struct AlignPackIncludeState { 1715 AlignPackInfo CurrentValue; 1716 SourceLocation CurrentPragmaLocation; 1717 bool HasNonDefaultValue, ShouldWarnOnInclude; 1718 }; 1719 SmallVector<AlignPackIncludeState, 8> AlignPackIncludeStack; 1720 // Segment #pragmas. 1721 PragmaStack<StringLiteral *> DataSegStack; 1722 PragmaStack<StringLiteral *> BSSSegStack; 1723 PragmaStack<StringLiteral *> ConstSegStack; 1724 PragmaStack<StringLiteral *> CodeSegStack; 1725 1726 // #pragma strict_gs_check. 1727 PragmaStack<bool> StrictGuardStackCheckStack; 1728 1729 // This stack tracks the current state of Sema.CurFPFeatures. 1730 PragmaStack<FPOptionsOverride> FpPragmaStack; CurFPFeatureOverrides()1731 FPOptionsOverride CurFPFeatureOverrides() { 1732 FPOptionsOverride result; 1733 if (!FpPragmaStack.hasValue()) { 1734 result = FPOptionsOverride(); 1735 } else { 1736 result = FpPragmaStack.CurrentValue; 1737 } 1738 return result; 1739 } 1740 1741 enum PragmaSectionKind { 1742 PSK_DataSeg, 1743 PSK_BSSSeg, 1744 PSK_ConstSeg, 1745 PSK_CodeSeg, 1746 }; 1747 1748 // RAII object to push / pop sentinel slots for all MS #pragma stacks. 1749 // Actions should be performed only if we enter / exit a C++ method body. 1750 class PragmaStackSentinelRAII { 1751 public: 1752 PragmaStackSentinelRAII(Sema &S, StringRef SlotLabel, bool ShouldAct); 1753 ~PragmaStackSentinelRAII(); 1754 1755 private: 1756 Sema &S; 1757 StringRef SlotLabel; 1758 bool ShouldAct; 1759 }; 1760 1761 /// Last section used with #pragma init_seg. 1762 StringLiteral *CurInitSeg; 1763 SourceLocation CurInitSegLoc; 1764 1765 /// Sections used with #pragma alloc_text. 1766 llvm::StringMap<std::tuple<StringRef, SourceLocation>> FunctionToSectionMap; 1767 1768 /// VisContext - Manages the stack for \#pragma GCC visibility. 1769 void *VisContext; // Really a "PragmaVisStack*" 1770 1771 /// This an attribute introduced by \#pragma clang attribute. 1772 struct PragmaAttributeEntry { 1773 SourceLocation Loc; 1774 ParsedAttr *Attribute; 1775 SmallVector<attr::SubjectMatchRule, 4> MatchRules; 1776 bool IsUsed; 1777 }; 1778 1779 /// A push'd group of PragmaAttributeEntries. 1780 struct PragmaAttributeGroup { 1781 /// The location of the push attribute. 1782 SourceLocation Loc; 1783 /// The namespace of this push group. 1784 const IdentifierInfo *Namespace; 1785 SmallVector<PragmaAttributeEntry, 2> Entries; 1786 }; 1787 1788 SmallVector<PragmaAttributeGroup, 2> PragmaAttributeStack; 1789 1790 /// The declaration that is currently receiving an attribute from the 1791 /// #pragma attribute stack. 1792 const Decl *PragmaAttributeCurrentTargetDecl; 1793 1794 /// This represents the last location of a "#pragma clang optimize off" 1795 /// directive if such a directive has not been closed by an "on" yet. If 1796 /// optimizations are currently "on", this is set to an invalid location. 1797 SourceLocation OptimizeOffPragmaLocation; 1798 1799 /// Get the location for the currently active "\#pragma clang optimize 1800 /// off". If this location is invalid, then the state of the pragma is "on". getOptimizeOffPragmaLocation()1801 SourceLocation getOptimizeOffPragmaLocation() const { 1802 return OptimizeOffPragmaLocation; 1803 } 1804 1805 /// The "on" or "off" argument passed by \#pragma optimize, that denotes 1806 /// whether the optimizations in the list passed to the pragma should be 1807 /// turned off or on. This boolean is true by default because command line 1808 /// options are honored when `#pragma optimize("", on)`. 1809 /// (i.e. `ModifyFnAttributeMSPragmaOptimze()` does nothing) 1810 bool MSPragmaOptimizeIsOn = true; 1811 1812 /// Set of no-builtin functions listed by \#pragma function. 1813 llvm::SmallSetVector<StringRef, 4> MSFunctionNoBuiltins; 1814 1815 /// AddAlignmentAttributesForRecord - Adds any needed alignment attributes to 1816 /// a the record decl, to handle '\#pragma pack' and '\#pragma options align'. 1817 void AddAlignmentAttributesForRecord(RecordDecl *RD); 1818 1819 /// AddMsStructLayoutForRecord - Adds ms_struct layout attribute to record. 1820 void AddMsStructLayoutForRecord(RecordDecl *RD); 1821 1822 /// Add gsl::Pointer attribute to std::container::iterator 1823 /// \param ND The declaration that introduces the name 1824 /// std::container::iterator. \param UnderlyingRecord The record named by ND. 1825 void inferGslPointerAttribute(NamedDecl *ND, CXXRecordDecl *UnderlyingRecord); 1826 1827 /// Add [[gsl::Owner]] and [[gsl::Pointer]] attributes for std:: types. 1828 void inferGslOwnerPointerAttribute(CXXRecordDecl *Record); 1829 1830 /// Add [[gsl::Pointer]] attributes for std:: types. 1831 void inferGslPointerAttribute(TypedefNameDecl *TD); 1832 1833 /// Add _Nullable attributes for std:: types. 1834 void inferNullableClassAttribute(CXXRecordDecl *CRD); 1835 1836 enum PragmaOptionsAlignKind { 1837 POAK_Native, // #pragma options align=native 1838 POAK_Natural, // #pragma options align=natural 1839 POAK_Packed, // #pragma options align=packed 1840 POAK_Power, // #pragma options align=power 1841 POAK_Mac68k, // #pragma options align=mac68k 1842 POAK_Reset // #pragma options align=reset 1843 }; 1844 1845 /// ActOnPragmaClangSection - Called on well formed \#pragma clang section 1846 void ActOnPragmaClangSection(SourceLocation PragmaLoc, 1847 PragmaClangSectionAction Action, 1848 PragmaClangSectionKind SecKind, 1849 StringRef SecName); 1850 1851 /// ActOnPragmaOptionsAlign - Called on well formed \#pragma options align. 1852 void ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, 1853 SourceLocation PragmaLoc); 1854 1855 /// ActOnPragmaPack - Called on well formed \#pragma pack(...). 1856 void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, 1857 StringRef SlotLabel, Expr *Alignment); 1858 1859 /// ConstantFoldAttrArgs - Folds attribute arguments into ConstantExprs 1860 /// (unless they are value dependent or type dependent). Returns false 1861 /// and emits a diagnostic if one or more of the arguments could not be 1862 /// folded into a constant. 1863 bool ConstantFoldAttrArgs(const AttributeCommonInfo &CI, 1864 MutableArrayRef<Expr *> Args); 1865 1866 enum class PragmaAlignPackDiagnoseKind { 1867 NonDefaultStateAtInclude, 1868 ChangedStateAtExit 1869 }; 1870 1871 void DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, 1872 SourceLocation IncludeLoc); 1873 void DiagnoseUnterminatedPragmaAlignPack(); 1874 1875 /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off]. 1876 void ActOnPragmaMSStruct(PragmaMSStructKind Kind); 1877 1878 /// ActOnPragmaMSComment - Called on well formed 1879 /// \#pragma comment(kind, "arg"). 1880 void ActOnPragmaMSComment(SourceLocation CommentLoc, PragmaMSCommentKind Kind, 1881 StringRef Arg); 1882 1883 /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch 1884 void ActOnPragmaDetectMismatch(SourceLocation Loc, StringRef Name, 1885 StringRef Value); 1886 1887 /// Are precise floating point semantics currently enabled? isPreciseFPEnabled()1888 bool isPreciseFPEnabled() { 1889 return !CurFPFeatures.getAllowFPReassociate() && 1890 !CurFPFeatures.getNoSignedZero() && 1891 !CurFPFeatures.getAllowReciprocal() && 1892 !CurFPFeatures.getAllowApproxFunc(); 1893 } 1894 1895 void ActOnPragmaFPEvalMethod(SourceLocation Loc, 1896 LangOptions::FPEvalMethodKind Value); 1897 1898 /// ActOnPragmaFloatControl - Call on well-formed \#pragma float_control 1899 void ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, 1900 PragmaFloatControlKind Value); 1901 1902 /// ActOnPragmaMSPointersToMembers - called on well formed \#pragma 1903 /// pointers_to_members(representation method[, general purpose 1904 /// representation]). 1905 void ActOnPragmaMSPointersToMembers( 1906 LangOptions::PragmaMSPointersToMembersKind Kind, 1907 SourceLocation PragmaLoc); 1908 1909 /// Called on well formed \#pragma vtordisp(). 1910 void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action, 1911 SourceLocation PragmaLoc, MSVtorDispMode Value); 1912 1913 bool UnifySection(StringRef SectionName, int SectionFlags, 1914 NamedDecl *TheDecl); 1915 bool UnifySection(StringRef SectionName, int SectionFlags, 1916 SourceLocation PragmaSectionLocation); 1917 1918 /// Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg. 1919 void ActOnPragmaMSSeg(SourceLocation PragmaLocation, 1920 PragmaMsStackAction Action, 1921 llvm::StringRef StackSlotLabel, 1922 StringLiteral *SegmentName, llvm::StringRef PragmaName); 1923 1924 /// Called on well formed \#pragma section(). 1925 void ActOnPragmaMSSection(SourceLocation PragmaLocation, int SectionFlags, 1926 StringLiteral *SegmentName); 1927 1928 /// Called on well-formed \#pragma init_seg(). 1929 void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation, 1930 StringLiteral *SegmentName); 1931 1932 /// Called on well-formed \#pragma alloc_text(). 1933 void ActOnPragmaMSAllocText( 1934 SourceLocation PragmaLocation, StringRef Section, 1935 const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> 1936 &Functions); 1937 1938 /// ActOnPragmaMSStrictGuardStackCheck - Called on well formed \#pragma 1939 /// strict_gs_check. 1940 void ActOnPragmaMSStrictGuardStackCheck(SourceLocation PragmaLocation, 1941 PragmaMsStackAction Action, 1942 bool Value); 1943 1944 /// ActOnPragmaUnused - Called on well-formed '\#pragma unused'. 1945 void ActOnPragmaUnused(const Token &Identifier, Scope *curScope, 1946 SourceLocation PragmaLoc); 1947 1948 void ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, 1949 SourceLocation PragmaLoc, 1950 attr::ParsedSubjectMatchRuleSet Rules); 1951 void ActOnPragmaAttributeEmptyPush(SourceLocation PragmaLoc, 1952 const IdentifierInfo *Namespace); 1953 1954 /// Called on well-formed '\#pragma clang attribute pop'. 1955 void ActOnPragmaAttributePop(SourceLocation PragmaLoc, 1956 const IdentifierInfo *Namespace); 1957 1958 /// Adds the attributes that have been specified using the 1959 /// '\#pragma clang attribute push' directives to the given declaration. 1960 void AddPragmaAttributes(Scope *S, Decl *D); 1961 1962 void PrintPragmaAttributeInstantiationPoint(); 1963 1964 void DiagnoseUnterminatedPragmaAttribute(); 1965 1966 /// Called on well formed \#pragma clang optimize. 1967 void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc); 1968 1969 /// #pragma optimize("[optimization-list]", on | off). 1970 void ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn); 1971 1972 /// Call on well formed \#pragma function. 1973 void 1974 ActOnPragmaMSFunction(SourceLocation Loc, 1975 const llvm::SmallVectorImpl<StringRef> &NoBuiltins); 1976 1977 /// Only called on function definitions; if there is a pragma in scope 1978 /// with the effect of a range-based optnone, consider marking the function 1979 /// with attribute optnone. 1980 void AddRangeBasedOptnone(FunctionDecl *FD); 1981 1982 /// Only called on function definitions; if there is a `#pragma alloc_text` 1983 /// that decides which code section the function should be in, add 1984 /// attribute section to the function. 1985 void AddSectionMSAllocText(FunctionDecl *FD); 1986 1987 /// Adds the 'optnone' attribute to the function declaration if there 1988 /// are no conflicts; Loc represents the location causing the 'optnone' 1989 /// attribute to be added (usually because of a pragma). 1990 void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc); 1991 1992 /// Only called on function definitions; if there is a MSVC #pragma optimize 1993 /// in scope, consider changing the function's attributes based on the 1994 /// optimization list passed to the pragma. 1995 void ModifyFnAttributesMSPragmaOptimize(FunctionDecl *FD); 1996 1997 /// Only called on function definitions; if there is a pragma in scope 1998 /// with the effect of a range-based no_builtin, consider marking the function 1999 /// with attribute no_builtin. 2000 void AddImplicitMSFunctionNoBuiltinAttr(FunctionDecl *FD); 2001 2002 /// AddPushedVisibilityAttribute - If '\#pragma GCC visibility' was used, 2003 /// add an appropriate visibility attribute. 2004 void AddPushedVisibilityAttribute(Decl *RD); 2005 2006 /// FreeVisContext - Deallocate and null out VisContext. 2007 void FreeVisContext(); 2008 2009 /// ActOnPragmaVisibility - Called on well formed \#pragma GCC visibility... . 2010 void ActOnPragmaVisibility(const IdentifierInfo *VisType, 2011 SourceLocation PragmaLoc); 2012 2013 /// ActOnPragmaFPContract - Called on well formed 2014 /// \#pragma {STDC,OPENCL} FP_CONTRACT and 2015 /// \#pragma clang fp contract 2016 void ActOnPragmaFPContract(SourceLocation Loc, LangOptions::FPModeKind FPC); 2017 2018 /// Called on well formed 2019 /// \#pragma clang fp reassociate 2020 /// or 2021 /// \#pragma clang fp reciprocal 2022 void ActOnPragmaFPValueChangingOption(SourceLocation Loc, PragmaFPKind Kind, 2023 bool IsEnabled); 2024 2025 /// ActOnPragmaFenvAccess - Called on well formed 2026 /// \#pragma STDC FENV_ACCESS 2027 void ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled); 2028 2029 /// ActOnPragmaCXLimitedRange - Called on well formed 2030 /// \#pragma STDC CX_LIMITED_RANGE 2031 void ActOnPragmaCXLimitedRange(SourceLocation Loc, 2032 LangOptions::ComplexRangeKind Range); 2033 2034 /// Called on well formed '\#pragma clang fp' that has option 'exceptions'. 2035 void ActOnPragmaFPExceptions(SourceLocation Loc, 2036 LangOptions::FPExceptionModeKind); 2037 2038 /// Called to set constant rounding mode for floating point operations. 2039 void ActOnPragmaFEnvRound(SourceLocation Loc, llvm::RoundingMode); 2040 2041 /// Called to set exception behavior for floating point operations. 2042 void setExceptionMode(SourceLocation Loc, LangOptions::FPExceptionModeKind); 2043 2044 /// PushNamespaceVisibilityAttr - Note that we've entered a 2045 /// namespace with a visibility attribute. 2046 void PushNamespaceVisibilityAttr(const VisibilityAttr *Attr, 2047 SourceLocation Loc); 2048 2049 /// PopPragmaVisibility - Pop the top element of the visibility stack; used 2050 /// for '\#pragma GCC visibility' and visibility attributes on namespaces. 2051 void PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc); 2052 2053 /// Handles semantic checking for features that are common to all attributes, 2054 /// such as checking whether a parameter was properly specified, or the 2055 /// correct number of arguments were passed, etc. Returns true if the 2056 /// attribute has been diagnosed. 2057 bool checkCommonAttributeFeatures(const Decl *D, const ParsedAttr &A, 2058 bool SkipArgCountCheck = false); 2059 bool checkCommonAttributeFeatures(const Stmt *S, const ParsedAttr &A, 2060 bool SkipArgCountCheck = false); 2061 2062 ///@} 2063 2064 // 2065 // 2066 // ------------------------------------------------------------------------- 2067 // 2068 // 2069 2070 /// \name Availability Attribute Handling 2071 /// Implementations are in SemaAvailability.cpp 2072 ///@{ 2073 2074 public: 2075 /// Issue any -Wunguarded-availability warnings in \c FD 2076 void DiagnoseUnguardedAvailabilityViolations(Decl *FD); 2077 2078 void handleDelayedAvailabilityCheck(sema::DelayedDiagnostic &DD, Decl *Ctx); 2079 2080 /// Retrieve the current function, if any, that should be analyzed for 2081 /// potential availability violations. 2082 sema::FunctionScopeInfo *getCurFunctionAvailabilityContext(); 2083 2084 void DiagnoseAvailabilityOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, 2085 const ObjCInterfaceDecl *UnknownObjCClass, 2086 bool ObjCPropertyAccess, 2087 bool AvoidPartialAvailabilityChecks = false, 2088 ObjCInterfaceDecl *ClassReceiver = nullptr); 2089 2090 ///@} 2091 2092 // 2093 // 2094 // ------------------------------------------------------------------------- 2095 // 2096 // 2097 2098 /// \name Casts 2099 /// Implementations are in SemaCast.cpp 2100 ///@{ 2101 2102 public: isCast(CheckedConversionKind CCK)2103 static bool isCast(CheckedConversionKind CCK) { 2104 return CCK == CheckedConversionKind::CStyleCast || 2105 CCK == CheckedConversionKind::FunctionalCast || 2106 CCK == CheckedConversionKind::OtherCast; 2107 } 2108 2109 /// ActOnCXXNamedCast - Parse 2110 /// {dynamic,static,reinterpret,const,addrspace}_cast's. 2111 ExprResult ActOnCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind, 2112 SourceLocation LAngleBracketLoc, Declarator &D, 2113 SourceLocation RAngleBracketLoc, 2114 SourceLocation LParenLoc, Expr *E, 2115 SourceLocation RParenLoc); 2116 2117 ExprResult BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind, 2118 TypeSourceInfo *Ty, Expr *E, 2119 SourceRange AngleBrackets, SourceRange Parens); 2120 2121 ExprResult ActOnBuiltinBitCastExpr(SourceLocation KWLoc, Declarator &Dcl, 2122 ExprResult Operand, 2123 SourceLocation RParenLoc); 2124 2125 ExprResult BuildBuiltinBitCastExpr(SourceLocation KWLoc, TypeSourceInfo *TSI, 2126 Expr *Operand, SourceLocation RParenLoc); 2127 2128 // Checks that reinterpret casts don't have undefined behavior. 2129 void CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType, 2130 bool IsDereference, SourceRange Range); 2131 2132 // Checks that the vector type should be initialized from a scalar 2133 // by splatting the value rather than populating a single element. 2134 // This is the case for AltiVecVector types as well as with 2135 // AltiVecPixel and AltiVecBool when -faltivec-src-compat=xl is specified. 2136 bool ShouldSplatAltivecScalarInCast(const VectorType *VecTy); 2137 2138 // Checks if the -faltivec-src-compat=gcc option is specified. 2139 // If so, AltiVecVector, AltiVecBool and AltiVecPixel types are 2140 // treated the same way as they are when trying to initialize 2141 // these vectors on gcc (an error is emitted). 2142 bool CheckAltivecInitFromScalar(SourceRange R, QualType VecTy, 2143 QualType SrcTy); 2144 2145 ExprResult BuildCStyleCastExpr(SourceLocation LParenLoc, TypeSourceInfo *Ty, 2146 SourceLocation RParenLoc, Expr *Op); 2147 2148 ExprResult BuildCXXFunctionalCastExpr(TypeSourceInfo *TInfo, QualType Type, 2149 SourceLocation LParenLoc, 2150 Expr *CastExpr, 2151 SourceLocation RParenLoc); 2152 2153 ///@} 2154 2155 // 2156 // 2157 // ------------------------------------------------------------------------- 2158 // 2159 // 2160 2161 /// \name Extra Semantic Checking 2162 /// Implementations are in SemaChecking.cpp 2163 ///@{ 2164 2165 public: 2166 /// Used to change context to isConstantEvaluated without pushing a heavy 2167 /// ExpressionEvaluationContextRecord object. 2168 bool isConstantEvaluatedOverride = false; 2169 isConstantEvaluatedContext()2170 bool isConstantEvaluatedContext() const { 2171 return currentEvaluationContext().isConstantEvaluated() || 2172 isConstantEvaluatedOverride; 2173 } 2174 2175 SourceLocation getLocationOfStringLiteralByte(const StringLiteral *SL, 2176 unsigned ByteNo) const; 2177 2178 enum FormatArgumentPassingKind { 2179 FAPK_Fixed, // values to format are fixed (no C-style variadic arguments) 2180 FAPK_Variadic, // values to format are passed as variadic arguments 2181 FAPK_VAList, // values to format are passed in a va_list 2182 }; 2183 2184 // Used to grab the relevant information from a FormatAttr and a 2185 // FunctionDeclaration. 2186 struct FormatStringInfo { 2187 unsigned FormatIdx; 2188 unsigned FirstDataArg; 2189 FormatArgumentPassingKind ArgPassingKind; 2190 }; 2191 2192 /// Given a FunctionDecl's FormatAttr, attempts to populate the 2193 /// FomatStringInfo parameter with the FormatAttr's correct format_idx and 2194 /// firstDataArg. Returns true when the format fits the function and the 2195 /// FormatStringInfo has been populated. 2196 static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember, 2197 bool IsVariadic, FormatStringInfo *FSI); 2198 2199 // Used by C++ template instantiation. 2200 ExprResult BuiltinShuffleVector(CallExpr *TheCall); 2201 2202 /// ConvertVectorExpr - Handle __builtin_convertvector 2203 ExprResult ConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, 2204 SourceLocation BuiltinLoc, 2205 SourceLocation RParenLoc); 2206 2207 enum FormatStringType { 2208 FST_Scanf, 2209 FST_Printf, 2210 FST_NSString, 2211 FST_Strftime, 2212 FST_Strfmon, 2213 FST_Kprintf, 2214 FST_FreeBSDKPrintf, 2215 FST_OSTrace, 2216 FST_OSLog, 2217 FST_Unknown 2218 }; 2219 static FormatStringType GetFormatStringType(const FormatAttr *Format); 2220 2221 bool FormatStringHasSArg(const StringLiteral *FExpr); 2222 2223 /// Check for comparisons of floating-point values using == and !=. Issue a 2224 /// warning if the comparison is not likely to do what the programmer 2225 /// intended. 2226 void CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, 2227 BinaryOperatorKind Opcode); 2228 2229 /// Register a magic integral constant to be used as a type tag. 2230 void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind, 2231 uint64_t MagicValue, QualType Type, 2232 bool LayoutCompatible, bool MustBeNull); 2233 2234 struct TypeTagData { TypeTagDataTypeTagData2235 TypeTagData() {} 2236 TypeTagDataTypeTagData2237 TypeTagData(QualType Type, bool LayoutCompatible, bool MustBeNull) 2238 : Type(Type), LayoutCompatible(LayoutCompatible), 2239 MustBeNull(MustBeNull) {} 2240 2241 QualType Type; 2242 2243 /// If true, \c Type should be compared with other expression's types for 2244 /// layout-compatibility. 2245 LLVM_PREFERRED_TYPE(bool) 2246 unsigned LayoutCompatible : 1; 2247 LLVM_PREFERRED_TYPE(bool) 2248 unsigned MustBeNull : 1; 2249 }; 2250 2251 /// A pair of ArgumentKind identifier and magic value. This uniquely 2252 /// identifies the magic value. 2253 typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue; 2254 2255 /// Diagnoses the current set of gathered accesses. This typically 2256 /// happens at full expression level. The set is cleared after emitting the 2257 /// diagnostics. 2258 void DiagnoseMisalignedMembers(); 2259 2260 /// This function checks if the expression is in the sef of potentially 2261 /// misaligned members and it is converted to some pointer type T with lower 2262 /// or equal alignment requirements. If so it removes it. This is used when 2263 /// we do not want to diagnose such misaligned access (e.g. in conversions to 2264 /// void*). 2265 void DiscardMisalignedMemberAddress(const Type *T, Expr *E); 2266 2267 /// This function calls Action when it determines that E designates a 2268 /// misaligned member due to the packed attribute. This is used to emit 2269 /// local diagnostics like in reference binding. 2270 void RefersToMemberWithReducedAlignment( 2271 Expr *E, 2272 llvm::function_ref<void(Expr *, RecordDecl *, FieldDecl *, CharUnits)> 2273 Action); 2274 2275 enum class AtomicArgumentOrder { API, AST }; 2276 ExprResult 2277 BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, 2278 SourceLocation RParenLoc, MultiExprArg Args, 2279 AtomicExpr::AtomicOp Op, 2280 AtomicArgumentOrder ArgOrder = AtomicArgumentOrder::API); 2281 2282 /// Check to see if a given expression could have '.c_str()' called on it. 2283 bool hasCStrMethod(const Expr *E); 2284 2285 /// Diagnose pointers that are always non-null. 2286 /// \param E the expression containing the pointer 2287 /// \param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is 2288 /// compared to a null pointer 2289 /// \param IsEqual True when the comparison is equal to a null pointer 2290 /// \param Range Extra SourceRange to highlight in the diagnostic 2291 void DiagnoseAlwaysNonNullPointer(Expr *E, 2292 Expr::NullPointerConstantKind NullType, 2293 bool IsEqual, SourceRange Range); 2294 2295 /// CheckParmsForFunctionDef - Check that the parameters of the given 2296 /// function are appropriate for the definition of a function. This 2297 /// takes care of any checks that cannot be performed on the 2298 /// declaration itself, e.g., that the types of each of the function 2299 /// parameters are complete. 2300 bool CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, 2301 bool CheckParameterNames); 2302 2303 /// CheckCastAlign - Implements -Wcast-align, which warns when a 2304 /// pointer cast increases the alignment requirements. 2305 void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange); 2306 2307 /// checkUnsafeAssigns - Check whether +1 expr is being assigned 2308 /// to weak/__unsafe_unretained type. 2309 bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS); 2310 2311 /// checkUnsafeExprAssigns - Check whether +1 expr is being assigned 2312 /// to weak/__unsafe_unretained expression. 2313 void checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS); 2314 2315 /// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null 2316 /// statement as a \p Body, and it is located on the same line. 2317 /// 2318 /// This helps prevent bugs due to typos, such as: 2319 /// if (condition); 2320 /// do_stuff(); 2321 void DiagnoseEmptyStmtBody(SourceLocation StmtLoc, const Stmt *Body, 2322 unsigned DiagID); 2323 2324 /// Warn if a for/while loop statement \p S, which is followed by 2325 /// \p PossibleBody, has a suspicious null statement as a body. 2326 void DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody); 2327 2328 /// DiagnoseSelfMove - Emits a warning if a value is moved to itself. 2329 void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, 2330 SourceLocation OpLoc); 2331 2332 // Used for emitting the right warning by DefaultVariadicArgumentPromotion 2333 enum VariadicCallType { 2334 VariadicFunction, 2335 VariadicBlock, 2336 VariadicMethod, 2337 VariadicConstructor, 2338 VariadicDoesNotApply 2339 }; 2340 2341 bool IsLayoutCompatible(QualType T1, QualType T2) const; 2342 bool IsPointerInterconvertibleBaseOf(const TypeSourceInfo *Base, 2343 const TypeSourceInfo *Derived); 2344 2345 /// CheckFunctionCall - Check a direct function call for various correctness 2346 /// and safety properties not strictly enforced by the C type system. 2347 bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall, 2348 const FunctionProtoType *Proto); 2349 2350 bool BuiltinVectorMath(CallExpr *TheCall, QualType &Res); 2351 bool BuiltinVectorToScalarMath(CallExpr *TheCall); 2352 2353 /// Handles the checks for format strings, non-POD arguments to vararg 2354 /// functions, NULL arguments passed to non-NULL parameters, diagnose_if 2355 /// attributes and AArch64 SME attributes. 2356 void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, 2357 const Expr *ThisArg, ArrayRef<const Expr *> Args, 2358 bool IsMemberFunction, SourceLocation Loc, SourceRange Range, 2359 VariadicCallType CallType); 2360 2361 /// \brief Enforce the bounds of a TCB 2362 /// CheckTCBEnforcement - Enforces that every function in a named TCB only 2363 /// directly calls other functions in the same TCB as marked by the 2364 /// enforce_tcb and enforce_tcb_leaf attributes. 2365 void CheckTCBEnforcement(const SourceLocation CallExprLoc, 2366 const NamedDecl *Callee); 2367 2368 void CheckConstrainedAuto(const AutoType *AutoT, SourceLocation Loc); 2369 2370 /// BuiltinConstantArg - Handle a check if argument ArgNum of CallExpr 2371 /// TheCall is a constant expression. 2372 bool BuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result); 2373 2374 /// BuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr 2375 /// TheCall is a constant expression in the range [Low, High]. 2376 bool BuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, 2377 bool RangeIsError = true); 2378 2379 /// BuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr 2380 /// TheCall is a constant expression is a multiple of Num.. 2381 bool BuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, 2382 unsigned Multiple); 2383 2384 /// BuiltinConstantArgPower2 - Check if argument ArgNum of TheCall is a 2385 /// constant expression representing a power of 2. 2386 bool BuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum); 2387 2388 /// BuiltinConstantArgShiftedByte - Check if argument ArgNum of TheCall is 2389 /// a constant expression representing an arbitrary byte value shifted left by 2390 /// a multiple of 8 bits. 2391 bool BuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum, 2392 unsigned ArgBits); 2393 2394 /// BuiltinConstantArgShiftedByteOr0xFF - Check if argument ArgNum of 2395 /// TheCall is a constant expression representing either a shifted byte value, 2396 /// or a value of the form 0x??FF (i.e. a member of the arithmetic progression 2397 /// 0x00FF, 0x01FF, ..., 0xFFFF). This strange range check is needed for some 2398 /// Arm MVE intrinsics. 2399 bool BuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum, 2400 unsigned ArgBits); 2401 2402 /// Checks that a call expression's argument count is at least the desired 2403 /// number. This is useful when doing custom type-checking on a variadic 2404 /// function. Returns true on error. 2405 bool checkArgCountAtLeast(CallExpr *Call, unsigned MinArgCount); 2406 2407 /// Checks that a call expression's argument count is at most the desired 2408 /// number. This is useful when doing custom type-checking on a variadic 2409 /// function. Returns true on error. 2410 bool checkArgCountAtMost(CallExpr *Call, unsigned MaxArgCount); 2411 2412 /// Checks that a call expression's argument count is in the desired range. 2413 /// This is useful when doing custom type-checking on a variadic function. 2414 /// Returns true on error. 2415 bool checkArgCountRange(CallExpr *Call, unsigned MinArgCount, 2416 unsigned MaxArgCount); 2417 2418 /// Checks that a call expression's argument count is the desired number. 2419 /// This is useful when doing custom type-checking. Returns true on error. 2420 bool checkArgCount(CallExpr *Call, unsigned DesiredArgCount); 2421 2422 /// Returns true if the argument consists of one contiguous run of 1s with any 2423 /// number of 0s on either side. The 1s are allowed to wrap from LSB to MSB, 2424 /// so 0x000FFF0, 0x0000FFFF, 0xFF0000FF, 0x0 are all runs. 0x0F0F0000 is not, 2425 /// since all 1s are not contiguous. 2426 bool ValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum); 2427 2428 void CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, 2429 bool *ICContext = nullptr, 2430 bool IsListInit = false); 2431 2432 bool BuiltinElementwiseTernaryMath(CallExpr *TheCall, 2433 bool CheckForFloatArgs = true); 2434 bool PrepareBuiltinElementwiseMathOneArgCall(CallExpr *TheCall); 2435 2436 private: 2437 void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, 2438 const ArraySubscriptExpr *ASE = nullptr, 2439 bool AllowOnePastEnd = true, bool IndexNegated = false); 2440 void CheckArrayAccess(const Expr *E); 2441 2442 bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall, 2443 const FunctionProtoType *Proto); 2444 2445 /// Checks function calls when a FunctionDecl or a NamedDecl is not available, 2446 /// such as function pointers returned from functions. 2447 bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto); 2448 2449 /// CheckConstructorCall - Check a constructor call for correctness and safety 2450 /// properties not enforced by the C type system. 2451 void CheckConstructorCall(FunctionDecl *FDecl, QualType ThisType, 2452 ArrayRef<const Expr *> Args, 2453 const FunctionProtoType *Proto, SourceLocation Loc); 2454 2455 /// Warn if a pointer or reference argument passed to a function points to an 2456 /// object that is less aligned than the parameter. This can happen when 2457 /// creating a typedef with a lower alignment than the original type and then 2458 /// calling functions defined in terms of the original type. 2459 void CheckArgAlignment(SourceLocation Loc, NamedDecl *FDecl, 2460 StringRef ParamName, QualType ArgTy, QualType ParamTy); 2461 2462 ExprResult CheckOSLogFormatStringArg(Expr *Arg); 2463 2464 ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, 2465 CallExpr *TheCall); 2466 2467 bool CheckTSBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, 2468 CallExpr *TheCall); 2469 2470 void checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall); 2471 2472 /// Check the arguments to '__builtin_va_start' or '__builtin_ms_va_start' 2473 /// for validity. Emit an error and return true on failure; return false 2474 /// on success. 2475 bool BuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall); 2476 bool BuiltinVAStartARMMicrosoft(CallExpr *Call); 2477 2478 /// BuiltinUnorderedCompare - Handle functions like __builtin_isgreater and 2479 /// friends. This is declared to take (...), so we have to check everything. 2480 bool BuiltinUnorderedCompare(CallExpr *TheCall, unsigned BuiltinID); 2481 2482 /// BuiltinSemaBuiltinFPClassification - Handle functions like 2483 /// __builtin_isnan and friends. This is declared to take (...), so we have 2484 /// to check everything. 2485 bool BuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs, 2486 unsigned BuiltinID); 2487 2488 /// Perform semantic analysis for a call to __builtin_complex. 2489 bool BuiltinComplex(CallExpr *TheCall); 2490 bool BuiltinOSLogFormat(CallExpr *TheCall); 2491 2492 /// BuiltinPrefetch - Handle __builtin_prefetch. 2493 /// This is declared to take (const void*, ...) and can take two 2494 /// optional constant int args. 2495 bool BuiltinPrefetch(CallExpr *TheCall); 2496 2497 /// Handle __builtin_alloca_with_align. This is declared 2498 /// as (size_t, size_t) where the second size_t must be a power of 2 greater 2499 /// than 8. 2500 bool BuiltinAllocaWithAlign(CallExpr *TheCall); 2501 2502 /// BuiltinArithmeticFence - Handle __arithmetic_fence. 2503 bool BuiltinArithmeticFence(CallExpr *TheCall); 2504 2505 /// BuiltinAssume - Handle __assume (MS Extension). 2506 /// __assume does not evaluate its arguments, and should warn if its argument 2507 /// has side effects. 2508 bool BuiltinAssume(CallExpr *TheCall); 2509 2510 /// Handle __builtin_assume_aligned. This is declared 2511 /// as (const void*, size_t, ...) and can take one optional constant int arg. 2512 bool BuiltinAssumeAligned(CallExpr *TheCall); 2513 2514 /// BuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val). 2515 /// This checks that the target supports __builtin_longjmp and 2516 /// that val is a constant 1. 2517 bool BuiltinLongjmp(CallExpr *TheCall); 2518 2519 /// BuiltinSetjmp - Handle __builtin_setjmp(void *env[5]). 2520 /// This checks that the target supports __builtin_setjmp. 2521 bool BuiltinSetjmp(CallExpr *TheCall); 2522 2523 /// We have a call to a function like __sync_fetch_and_add, which is an 2524 /// overloaded function based on the pointer type of its first argument. 2525 /// The main BuildCallExpr routines have already promoted the types of 2526 /// arguments because all of these calls are prototyped as void(...). 2527 /// 2528 /// This function goes through and does final semantic checking for these 2529 /// builtins, as well as generating any warnings. 2530 ExprResult BuiltinAtomicOverloaded(ExprResult TheCallResult); 2531 2532 /// BuiltinNontemporalOverloaded - We have a call to 2533 /// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an 2534 /// overloaded function based on the pointer type of its last argument. 2535 /// 2536 /// This function goes through and does final semantic checking for these 2537 /// builtins. 2538 ExprResult BuiltinNontemporalOverloaded(ExprResult TheCallResult); 2539 ExprResult AtomicOpsOverloaded(ExprResult TheCallResult, 2540 AtomicExpr::AtomicOp Op); 2541 2542 bool BuiltinElementwiseMath(CallExpr *TheCall); 2543 bool PrepareBuiltinReduceMathOneArgCall(CallExpr *TheCall); 2544 2545 bool BuiltinNonDeterministicValue(CallExpr *TheCall); 2546 2547 // Matrix builtin handling. 2548 ExprResult BuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult); 2549 ExprResult BuiltinMatrixColumnMajorLoad(CallExpr *TheCall, 2550 ExprResult CallResult); 2551 ExprResult BuiltinMatrixColumnMajorStore(CallExpr *TheCall, 2552 ExprResult CallResult); 2553 2554 /// CheckFormatArguments - Check calls to printf and scanf (and similar 2555 /// functions) for correct use of format strings. 2556 /// Returns true if a format string has been fully checked. 2557 bool CheckFormatArguments(const FormatAttr *Format, 2558 ArrayRef<const Expr *> Args, bool IsCXXMember, 2559 VariadicCallType CallType, SourceLocation Loc, 2560 SourceRange Range, 2561 llvm::SmallBitVector &CheckedVarArgs); 2562 bool CheckFormatArguments(ArrayRef<const Expr *> Args, 2563 FormatArgumentPassingKind FAPK, unsigned format_idx, 2564 unsigned firstDataArg, FormatStringType Type, 2565 VariadicCallType CallType, SourceLocation Loc, 2566 SourceRange range, 2567 llvm::SmallBitVector &CheckedVarArgs); 2568 2569 void CheckInfNaNFunction(const CallExpr *Call, const FunctionDecl *FDecl); 2570 2571 /// Warn when using the wrong abs() function. 2572 void CheckAbsoluteValueFunction(const CallExpr *Call, 2573 const FunctionDecl *FDecl); 2574 2575 void CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl); 2576 2577 /// Check for dangerous or invalid arguments to memset(). 2578 /// 2579 /// This issues warnings on known problematic, dangerous or unspecified 2580 /// arguments to the standard 'memset', 'memcpy', 'memmove', and 'memcmp' 2581 /// function calls. 2582 /// 2583 /// \param Call The call expression to diagnose. 2584 void CheckMemaccessArguments(const CallExpr *Call, unsigned BId, 2585 IdentifierInfo *FnName); 2586 2587 // Warn if the user has made the 'size' argument to strlcpy or strlcat 2588 // be the size of the source, instead of the destination. 2589 void CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName); 2590 2591 // Warn on anti-patterns as the 'size' argument to strncat. 2592 // The correct size argument should look like following: 2593 // strncat(dst, src, sizeof(dst) - strlen(dest) - 1); 2594 void CheckStrncatArguments(const CallExpr *Call, IdentifierInfo *FnName); 2595 2596 /// Alerts the user that they are attempting to free a non-malloc'd object. 2597 void CheckFreeArguments(const CallExpr *E); 2598 2599 void CheckReturnValExpr(Expr *RetValExp, QualType lhsType, 2600 SourceLocation ReturnLoc, bool isObjCMethod = false, 2601 const AttrVec *Attrs = nullptr, 2602 const FunctionDecl *FD = nullptr); 2603 2604 /// Diagnoses "dangerous" implicit conversions within the given 2605 /// expression (which is a full expression). Implements -Wconversion 2606 /// and -Wsign-compare. 2607 /// 2608 /// \param CC the "context" location of the implicit conversion, i.e. 2609 /// the most location of the syntactic entity requiring the implicit 2610 /// conversion 2611 void CheckImplicitConversions(Expr *E, SourceLocation CC = SourceLocation()); 2612 2613 /// CheckBoolLikeConversion - Check conversion of given expression to boolean. 2614 /// Input argument E is a logical expression. 2615 void CheckBoolLikeConversion(Expr *E, SourceLocation CC); 2616 2617 /// Diagnose when expression is an integer constant expression and its 2618 /// evaluation results in integer overflow 2619 void CheckForIntOverflow(const Expr *E); 2620 void CheckUnsequencedOperations(const Expr *E); 2621 2622 /// Perform semantic checks on a completed expression. This will either 2623 /// be a full-expression or a default argument expression. 2624 void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(), 2625 bool IsConstexpr = false); 2626 2627 void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field, 2628 Expr *Init); 2629 2630 /// A map from magic value to type information. 2631 std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>> 2632 TypeTagForDatatypeMagicValues; 2633 2634 /// Peform checks on a call of a function with argument_with_type_tag 2635 /// or pointer_with_type_tag attributes. 2636 void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, 2637 const ArrayRef<const Expr *> ExprArgs, 2638 SourceLocation CallSiteLoc); 2639 2640 /// Check if we are taking the address of a packed field 2641 /// as this may be a problem if the pointer value is dereferenced. 2642 void CheckAddressOfPackedMember(Expr *rhs); 2643 2644 /// Helper class that collects misaligned member designations and 2645 /// their location info for delayed diagnostics. 2646 struct MisalignedMember { 2647 Expr *E; 2648 RecordDecl *RD; 2649 ValueDecl *MD; 2650 CharUnits Alignment; 2651 MisalignedMemberMisalignedMember2652 MisalignedMember() : E(), RD(), MD() {} MisalignedMemberMisalignedMember2653 MisalignedMember(Expr *E, RecordDecl *RD, ValueDecl *MD, 2654 CharUnits Alignment) 2655 : E(E), RD(RD), MD(MD), Alignment(Alignment) {} MisalignedMemberMisalignedMember2656 explicit MisalignedMember(Expr *E) 2657 : MisalignedMember(E, nullptr, nullptr, CharUnits()) {} 2658 2659 bool operator==(const MisalignedMember &m) { return this->E == m.E; } 2660 }; 2661 /// Small set of gathered accesses to potentially misaligned members 2662 /// due to the packed attribute. 2663 SmallVector<MisalignedMember, 4> MisalignedMembers; 2664 2665 /// Adds an expression to the set of gathered misaligned members. 2666 void AddPotentialMisalignedMembers(Expr *E, RecordDecl *RD, ValueDecl *MD, 2667 CharUnits Alignment); 2668 ///@} 2669 2670 // 2671 // 2672 // ------------------------------------------------------------------------- 2673 // 2674 // 2675 2676 /// \name C++ Coroutines 2677 /// Implementations are in SemaCoroutine.cpp 2678 ///@{ 2679 2680 public: 2681 /// The C++ "std::coroutine_traits" template, which is defined in 2682 /// \<coroutine_traits> 2683 ClassTemplateDecl *StdCoroutineTraitsCache; 2684 2685 bool ActOnCoroutineBodyStart(Scope *S, SourceLocation KwLoc, 2686 StringRef Keyword); 2687 ExprResult ActOnCoawaitExpr(Scope *S, SourceLocation KwLoc, Expr *E); 2688 ExprResult ActOnCoyieldExpr(Scope *S, SourceLocation KwLoc, Expr *E); 2689 StmtResult ActOnCoreturnStmt(Scope *S, SourceLocation KwLoc, Expr *E); 2690 2691 ExprResult BuildOperatorCoawaitLookupExpr(Scope *S, SourceLocation Loc); 2692 ExprResult BuildOperatorCoawaitCall(SourceLocation Loc, Expr *E, 2693 UnresolvedLookupExpr *Lookup); 2694 ExprResult BuildResolvedCoawaitExpr(SourceLocation KwLoc, Expr *Operand, 2695 Expr *Awaiter, bool IsImplicit = false); 2696 ExprResult BuildUnresolvedCoawaitExpr(SourceLocation KwLoc, Expr *Operand, 2697 UnresolvedLookupExpr *Lookup); 2698 ExprResult BuildCoyieldExpr(SourceLocation KwLoc, Expr *E); 2699 StmtResult BuildCoreturnStmt(SourceLocation KwLoc, Expr *E, 2700 bool IsImplicit = false); 2701 StmtResult BuildCoroutineBodyStmt(CoroutineBodyStmt::CtorArgs); 2702 bool buildCoroutineParameterMoves(SourceLocation Loc); 2703 VarDecl *buildCoroutinePromise(SourceLocation Loc); 2704 void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body); 2705 2706 // As a clang extension, enforces that a non-coroutine function must be marked 2707 // with [[clang::coro_wrapper]] if it returns a type marked with 2708 // [[clang::coro_return_type]]. 2709 // Expects that FD is not a coroutine. 2710 void CheckCoroutineWrapper(FunctionDecl *FD); 2711 /// Lookup 'coroutine_traits' in std namespace and std::experimental 2712 /// namespace. The namespace found is recorded in Namespace. 2713 ClassTemplateDecl *lookupCoroutineTraits(SourceLocation KwLoc, 2714 SourceLocation FuncLoc); 2715 /// Check that the expression co_await promise.final_suspend() shall not be 2716 /// potentially-throwing. 2717 bool checkFinalSuspendNoThrow(const Stmt *FinalSuspend); 2718 2719 ///@} 2720 2721 // 2722 // 2723 // ------------------------------------------------------------------------- 2724 // 2725 // 2726 2727 /// \name C++ Scope Specifiers 2728 /// Implementations are in SemaCXXScopeSpec.cpp 2729 ///@{ 2730 2731 public: 2732 // Marks SS invalid if it represents an incomplete type. 2733 bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC); 2734 // Complete an enum decl, maybe without a scope spec. 2735 bool RequireCompleteEnumDecl(EnumDecl *D, SourceLocation L, 2736 CXXScopeSpec *SS = nullptr); 2737 2738 /// Compute the DeclContext that is associated with the given type. 2739 /// 2740 /// \param T the type for which we are attempting to find a DeclContext. 2741 /// 2742 /// \returns the declaration context represented by the type T, 2743 /// or NULL if the declaration context cannot be computed (e.g., because it is 2744 /// dependent and not the current instantiation). 2745 DeclContext *computeDeclContext(QualType T); 2746 2747 /// Compute the DeclContext that is associated with the given 2748 /// scope specifier. 2749 /// 2750 /// \param SS the C++ scope specifier as it appears in the source 2751 /// 2752 /// \param EnteringContext when true, we will be entering the context of 2753 /// this scope specifier, so we can retrieve the declaration context of a 2754 /// class template or class template partial specialization even if it is 2755 /// not the current instantiation. 2756 /// 2757 /// \returns the declaration context represented by the scope specifier @p SS, 2758 /// or NULL if the declaration context cannot be computed (e.g., because it is 2759 /// dependent and not the current instantiation). 2760 DeclContext *computeDeclContext(const CXXScopeSpec &SS, 2761 bool EnteringContext = false); 2762 bool isDependentScopeSpecifier(const CXXScopeSpec &SS); 2763 2764 /// If the given nested name specifier refers to the current 2765 /// instantiation, return the declaration that corresponds to that 2766 /// current instantiation (C++0x [temp.dep.type]p1). 2767 /// 2768 /// \param NNS a dependent nested name specifier. 2769 CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS); 2770 2771 /// The parser has parsed a global nested-name-specifier '::'. 2772 /// 2773 /// \param CCLoc The location of the '::'. 2774 /// 2775 /// \param SS The nested-name-specifier, which will be updated in-place 2776 /// to reflect the parsed nested-name-specifier. 2777 /// 2778 /// \returns true if an error occurred, false otherwise. 2779 bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS); 2780 2781 /// The parser has parsed a '__super' nested-name-specifier. 2782 /// 2783 /// \param SuperLoc The location of the '__super' keyword. 2784 /// 2785 /// \param ColonColonLoc The location of the '::'. 2786 /// 2787 /// \param SS The nested-name-specifier, which will be updated in-place 2788 /// to reflect the parsed nested-name-specifier. 2789 /// 2790 /// \returns true if an error occurred, false otherwise. 2791 bool ActOnSuperScopeSpecifier(SourceLocation SuperLoc, 2792 SourceLocation ColonColonLoc, CXXScopeSpec &SS); 2793 2794 /// Determines whether the given declaration is an valid acceptable 2795 /// result for name lookup of a nested-name-specifier. 2796 /// \param SD Declaration checked for nested-name-specifier. 2797 /// \param IsExtension If not null and the declaration is accepted as an 2798 /// extension, the pointed variable is assigned true. 2799 bool isAcceptableNestedNameSpecifier(const NamedDecl *SD, 2800 bool *CanCorrect = nullptr); 2801 2802 /// If the given nested-name-specifier begins with a bare identifier 2803 /// (e.g., Base::), perform name lookup for that identifier as a 2804 /// nested-name-specifier within the given scope, and return the result of 2805 /// that name lookup. 2806 NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS); 2807 2808 /// Keeps information about an identifier in a nested-name-spec. 2809 /// 2810 struct NestedNameSpecInfo { 2811 /// The type of the object, if we're parsing nested-name-specifier in 2812 /// a member access expression. 2813 ParsedType ObjectType; 2814 2815 /// The identifier preceding the '::'. 2816 IdentifierInfo *Identifier; 2817 2818 /// The location of the identifier. 2819 SourceLocation IdentifierLoc; 2820 2821 /// The location of the '::'. 2822 SourceLocation CCLoc; 2823 2824 /// Creates info object for the most typical case. 2825 NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc, 2826 SourceLocation ColonColonLoc, 2827 ParsedType ObjectType = ParsedType()) ObjectTypeNestedNameSpecInfo2828 : ObjectType(ObjectType), Identifier(II), IdentifierLoc(IdLoc), 2829 CCLoc(ColonColonLoc) {} 2830 NestedNameSpecInfoNestedNameSpecInfo2831 NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc, 2832 SourceLocation ColonColonLoc, QualType ObjectType) 2833 : ObjectType(ParsedType::make(ObjectType)), Identifier(II), 2834 IdentifierLoc(IdLoc), CCLoc(ColonColonLoc) {} 2835 }; 2836 2837 /// Build a new nested-name-specifier for "identifier::", as described 2838 /// by ActOnCXXNestedNameSpecifier. 2839 /// 2840 /// \param S Scope in which the nested-name-specifier occurs. 2841 /// \param IdInfo Parser information about an identifier in the 2842 /// nested-name-spec. 2843 /// \param EnteringContext If true, enter the context specified by the 2844 /// nested-name-specifier. 2845 /// \param SS Optional nested name specifier preceding the identifier. 2846 /// \param ScopeLookupResult Provides the result of name lookup within the 2847 /// scope of the nested-name-specifier that was computed at template 2848 /// definition time. 2849 /// \param ErrorRecoveryLookup Specifies if the method is called to improve 2850 /// error recovery and what kind of recovery is performed. 2851 /// \param IsCorrectedToColon If not null, suggestion of replace '::' -> ':' 2852 /// are allowed. The bool value pointed by this parameter is set to 2853 /// 'true' if the identifier is treated as if it was followed by ':', 2854 /// not '::'. 2855 /// \param OnlyNamespace If true, only considers namespaces in lookup. 2856 /// 2857 /// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in 2858 /// that it contains an extra parameter \p ScopeLookupResult, which provides 2859 /// the result of name lookup within the scope of the nested-name-specifier 2860 /// that was computed at template definition time. 2861 /// 2862 /// If ErrorRecoveryLookup is true, then this call is used to improve error 2863 /// recovery. This means that it should not emit diagnostics, it should 2864 /// just return true on failure. It also means it should only return a valid 2865 /// scope if it *knows* that the result is correct. It should not return in a 2866 /// dependent context, for example. Nor will it extend \p SS with the scope 2867 /// specifier. 2868 bool BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, 2869 bool EnteringContext, CXXScopeSpec &SS, 2870 NamedDecl *ScopeLookupResult, 2871 bool ErrorRecoveryLookup, 2872 bool *IsCorrectedToColon = nullptr, 2873 bool OnlyNamespace = false); 2874 2875 /// The parser has parsed a nested-name-specifier 'identifier::'. 2876 /// 2877 /// \param S The scope in which this nested-name-specifier occurs. 2878 /// 2879 /// \param IdInfo Parser information about an identifier in the 2880 /// nested-name-spec. 2881 /// 2882 /// \param EnteringContext Whether we're entering the context nominated by 2883 /// this nested-name-specifier. 2884 /// 2885 /// \param SS The nested-name-specifier, which is both an input 2886 /// parameter (the nested-name-specifier before this type) and an 2887 /// output parameter (containing the full nested-name-specifier, 2888 /// including this new type). 2889 /// 2890 /// \param IsCorrectedToColon If not null, suggestions to replace '::' -> ':' 2891 /// are allowed. The bool value pointed by this parameter is set to 'true' 2892 /// if the identifier is treated as if it was followed by ':', not '::'. 2893 /// 2894 /// \param OnlyNamespace If true, only considers namespaces in lookup. 2895 /// 2896 /// \returns true if an error occurred, false otherwise. 2897 bool ActOnCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, 2898 bool EnteringContext, CXXScopeSpec &SS, 2899 bool *IsCorrectedToColon = nullptr, 2900 bool OnlyNamespace = false); 2901 2902 /// The parser has parsed a nested-name-specifier 2903 /// 'template[opt] template-name < template-args >::'. 2904 /// 2905 /// \param S The scope in which this nested-name-specifier occurs. 2906 /// 2907 /// \param SS The nested-name-specifier, which is both an input 2908 /// parameter (the nested-name-specifier before this type) and an 2909 /// output parameter (containing the full nested-name-specifier, 2910 /// including this new type). 2911 /// 2912 /// \param TemplateKWLoc the location of the 'template' keyword, if any. 2913 /// \param TemplateName the template name. 2914 /// \param TemplateNameLoc The location of the template name. 2915 /// \param LAngleLoc The location of the opening angle bracket ('<'). 2916 /// \param TemplateArgs The template arguments. 2917 /// \param RAngleLoc The location of the closing angle bracket ('>'). 2918 /// \param CCLoc The location of the '::'. 2919 /// 2920 /// \param EnteringContext Whether we're entering the context of the 2921 /// nested-name-specifier. 2922 /// 2923 /// 2924 /// \returns true if an error occurred, false otherwise. 2925 bool ActOnCXXNestedNameSpecifier( 2926 Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 2927 TemplateTy TemplateName, SourceLocation TemplateNameLoc, 2928 SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs, 2929 SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext); 2930 2931 bool ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS, const DeclSpec &DS, 2932 SourceLocation ColonColonLoc); 2933 2934 bool ActOnCXXNestedNameSpecifierIndexedPack(CXXScopeSpec &SS, 2935 const DeclSpec &DS, 2936 SourceLocation ColonColonLoc, 2937 QualType Type); 2938 2939 /// IsInvalidUnlessNestedName - This method is used for error recovery 2940 /// purposes to determine whether the specified identifier is only valid as 2941 /// a nested name specifier, for example a namespace name. It is 2942 /// conservatively correct to always return false from this method. 2943 /// 2944 /// The arguments are the same as those passed to ActOnCXXNestedNameSpecifier. 2945 bool IsInvalidUnlessNestedName(Scope *S, CXXScopeSpec &SS, 2946 NestedNameSpecInfo &IdInfo, 2947 bool EnteringContext); 2948 2949 /// Given a C++ nested-name-specifier, produce an annotation value 2950 /// that the parser can use later to reconstruct the given 2951 /// nested-name-specifier. 2952 /// 2953 /// \param SS A nested-name-specifier. 2954 /// 2955 /// \returns A pointer containing all of the information in the 2956 /// nested-name-specifier \p SS. 2957 void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS); 2958 2959 /// Given an annotation pointer for a nested-name-specifier, restore 2960 /// the nested-name-specifier structure. 2961 /// 2962 /// \param Annotation The annotation pointer, produced by 2963 /// \c SaveNestedNameSpecifierAnnotation(). 2964 /// 2965 /// \param AnnotationRange The source range corresponding to the annotation. 2966 /// 2967 /// \param SS The nested-name-specifier that will be updated with the contents 2968 /// of the annotation pointer. 2969 void RestoreNestedNameSpecifierAnnotation(void *Annotation, 2970 SourceRange AnnotationRange, 2971 CXXScopeSpec &SS); 2972 2973 bool ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS); 2974 2975 /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global 2976 /// scope or nested-name-specifier) is parsed, part of a declarator-id. 2977 /// After this method is called, according to [C++ 3.4.3p3], names should be 2978 /// looked up in the declarator-id's scope, until the declarator is parsed and 2979 /// ActOnCXXExitDeclaratorScope is called. 2980 /// The 'SS' should be a non-empty valid CXXScopeSpec. 2981 bool ActOnCXXEnterDeclaratorScope(Scope *S, CXXScopeSpec &SS); 2982 2983 /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously 2984 /// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same 2985 /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well. 2986 /// Used to indicate that names should revert to being looked up in the 2987 /// defining scope. 2988 void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS); 2989 2990 ///@} 2991 2992 // 2993 // 2994 // ------------------------------------------------------------------------- 2995 // 2996 // 2997 2998 /// \name Declarations 2999 /// Implementations are in SemaDecl.cpp 3000 ///@{ 3001 3002 public: 3003 IdentifierResolver IdResolver; 3004 3005 /// The index of the first InventedParameterInfo that refers to the current 3006 /// context. 3007 unsigned InventedParameterInfosStart = 0; 3008 3009 /// A RAII object to temporarily push a declaration context. 3010 class ContextRAII { 3011 private: 3012 Sema &S; 3013 DeclContext *SavedContext; 3014 ProcessingContextState SavedContextState; 3015 QualType SavedCXXThisTypeOverride; 3016 unsigned SavedFunctionScopesStart; 3017 unsigned SavedInventedParameterInfosStart; 3018 3019 public: 3020 ContextRAII(Sema &S, DeclContext *ContextToPush, bool NewThisContext = true) S(S)3021 : S(S), SavedContext(S.CurContext), 3022 SavedContextState(S.DelayedDiagnostics.pushUndelayed()), 3023 SavedCXXThisTypeOverride(S.CXXThisTypeOverride), 3024 SavedFunctionScopesStart(S.FunctionScopesStart), 3025 SavedInventedParameterInfosStart(S.InventedParameterInfosStart) { 3026 assert(ContextToPush && "pushing null context"); 3027 S.CurContext = ContextToPush; 3028 if (NewThisContext) 3029 S.CXXThisTypeOverride = QualType(); 3030 // Any saved FunctionScopes do not refer to this context. 3031 S.FunctionScopesStart = S.FunctionScopes.size(); 3032 S.InventedParameterInfosStart = S.InventedParameterInfos.size(); 3033 } 3034 pop()3035 void pop() { 3036 if (!SavedContext) 3037 return; 3038 S.CurContext = SavedContext; 3039 S.DelayedDiagnostics.popUndelayed(SavedContextState); 3040 S.CXXThisTypeOverride = SavedCXXThisTypeOverride; 3041 S.FunctionScopesStart = SavedFunctionScopesStart; 3042 S.InventedParameterInfosStart = SavedInventedParameterInfosStart; 3043 SavedContext = nullptr; 3044 } 3045 ~ContextRAII()3046 ~ContextRAII() { pop(); } 3047 }; 3048 3049 void DiagnoseInvalidJumps(Stmt *Body); 3050 3051 /// The function definitions which were renamed as part of typo-correction 3052 /// to match their respective declarations. We want to keep track of them 3053 /// to ensure that we don't emit a "redefinition" error if we encounter a 3054 /// correctly named definition after the renamed definition. 3055 llvm::SmallPtrSet<const NamedDecl *, 4> TypoCorrectedFunctionDefinitions; 3056 3057 /// A cache of the flags available in enumerations with the flag_bits 3058 /// attribute. 3059 mutable llvm::DenseMap<const EnumDecl *, llvm::APInt> FlagBitsCache; 3060 3061 /// WeakUndeclaredIdentifiers - Identifiers contained in \#pragma weak before 3062 /// declared. Rare. May alias another identifier, declared or undeclared. 3063 /// 3064 /// For aliases, the target identifier is used as a key for eventual 3065 /// processing when the target is declared. For the single-identifier form, 3066 /// the sole identifier is used as the key. Each entry is a `SetVector` 3067 /// (ordered by parse order) of aliases (identified by the alias name) in case 3068 /// of multiple aliases to the same undeclared identifier. 3069 llvm::MapVector< 3070 IdentifierInfo *, 3071 llvm::SetVector< 3072 WeakInfo, llvm::SmallVector<WeakInfo, 1u>, 3073 llvm::SmallDenseSet<WeakInfo, 2u, WeakInfo::DenseMapInfoByAliasOnly>>> 3074 WeakUndeclaredIdentifiers; 3075 3076 /// ExtnameUndeclaredIdentifiers - Identifiers contained in 3077 /// \#pragma redefine_extname before declared. Used in Solaris system headers 3078 /// to define functions that occur in multiple standards to call the version 3079 /// in the currently selected standard. 3080 llvm::DenseMap<IdentifierInfo *, AsmLabelAttr *> ExtnameUndeclaredIdentifiers; 3081 3082 /// Set containing all typedefs that are likely unused. 3083 llvm::SmallSetVector<const TypedefNameDecl *, 4> 3084 UnusedLocalTypedefNameCandidates; 3085 3086 typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource, 3087 &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2> 3088 UnusedFileScopedDeclsType; 3089 3090 /// The set of file scoped decls seen so far that have not been used 3091 /// and must warn if not used. Only contains the first declaration. 3092 UnusedFileScopedDeclsType UnusedFileScopedDecls; 3093 3094 typedef LazyVector<VarDecl *, ExternalSemaSource, 3095 &ExternalSemaSource::ReadTentativeDefinitions, 2, 2> 3096 TentativeDefinitionsType; 3097 3098 /// All the tentative definitions encountered in the TU. 3099 TentativeDefinitionsType TentativeDefinitions; 3100 3101 /// All the external declarations encoutered and used in the TU. 3102 SmallVector<DeclaratorDecl *, 4> ExternalDeclarations; 3103 3104 /// Generally null except when we temporarily switch decl contexts, 3105 /// like in \see SemaObjC::ActOnObjCTemporaryExitContainerContext. 3106 DeclContext *OriginalLexicalContext; 3107 3108 /// Is the module scope we are in a C++ Header Unit? currentModuleIsHeaderUnit()3109 bool currentModuleIsHeaderUnit() const { 3110 return ModuleScopes.empty() ? false 3111 : ModuleScopes.back().Module->isHeaderUnit(); 3112 } 3113 3114 /// Get the module owning an entity. getOwningModule(const Decl * Entity)3115 Module *getOwningModule(const Decl *Entity) { 3116 return Entity->getOwningModule(); 3117 } 3118 3119 DeclGroupPtrTy ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType = nullptr); 3120 3121 /// If the identifier refers to a type name within this scope, 3122 /// return the declaration of that type. 3123 /// 3124 /// This routine performs ordinary name lookup of the identifier II 3125 /// within the given scope, with optional C++ scope specifier SS, to 3126 /// determine whether the name refers to a type. If so, returns an 3127 /// opaque pointer (actually a QualType) corresponding to that 3128 /// type. Otherwise, returns NULL. 3129 ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, 3130 Scope *S, CXXScopeSpec *SS = nullptr, 3131 bool isClassName = false, bool HasTrailingDot = false, 3132 ParsedType ObjectType = nullptr, 3133 bool IsCtorOrDtorName = false, 3134 bool WantNontrivialTypeSourceInfo = false, 3135 bool IsClassTemplateDeductionContext = true, 3136 ImplicitTypenameContext AllowImplicitTypename = 3137 ImplicitTypenameContext::No, 3138 IdentifierInfo **CorrectedII = nullptr); 3139 3140 /// isTagName() - This method is called *for error recovery purposes only* 3141 /// to determine if the specified name is a valid tag name ("struct foo"). If 3142 /// so, this returns the TST for the tag corresponding to it (TST_enum, 3143 /// TST_union, TST_struct, TST_interface, TST_class). This is used to 3144 /// diagnose cases in C where the user forgot to specify the tag. 3145 TypeSpecifierType isTagName(IdentifierInfo &II, Scope *S); 3146 3147 /// isMicrosoftMissingTypename - In Microsoft mode, within class scope, 3148 /// if a CXXScopeSpec's type is equal to the type of one of the base classes 3149 /// then downgrade the missing typename error to a warning. 3150 /// This is needed for MSVC compatibility; Example: 3151 /// @code 3152 /// template<class T> class A { 3153 /// public: 3154 /// typedef int TYPE; 3155 /// }; 3156 /// template<class T> class B : public A<T> { 3157 /// public: 3158 /// A<T>::TYPE a; // no typename required because A<T> is a base class. 3159 /// }; 3160 /// @endcode 3161 bool isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S); 3162 void DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, 3163 Scope *S, CXXScopeSpec *SS, 3164 ParsedType &SuggestedType, 3165 bool IsTemplateName = false); 3166 3167 /// Attempt to behave like MSVC in situations where lookup of an unqualified 3168 /// type name has failed in a dependent context. In these situations, we 3169 /// automatically form a DependentTypeName that will retry lookup in a related 3170 /// scope during instantiation. 3171 ParsedType ActOnMSVCUnknownTypeName(const IdentifierInfo &II, 3172 SourceLocation NameLoc, 3173 bool IsTemplateTypeArg); 3174 3175 /// Describes the result of the name lookup and resolution performed 3176 /// by \c ClassifyName(). 3177 enum NameClassificationKind { 3178 /// This name is not a type or template in this context, but might be 3179 /// something else. 3180 NC_Unknown, 3181 /// Classification failed; an error has been produced. 3182 NC_Error, 3183 /// The name has been typo-corrected to a keyword. 3184 NC_Keyword, 3185 /// The name was classified as a type. 3186 NC_Type, 3187 /// The name was classified as a specific non-type, non-template 3188 /// declaration. ActOnNameClassifiedAsNonType should be called to 3189 /// convert the declaration to an expression. 3190 NC_NonType, 3191 /// The name was classified as an ADL-only function name. 3192 /// ActOnNameClassifiedAsUndeclaredNonType should be called to convert the 3193 /// result to an expression. 3194 NC_UndeclaredNonType, 3195 /// The name denotes a member of a dependent type that could not be 3196 /// resolved. ActOnNameClassifiedAsDependentNonType should be called to 3197 /// convert the result to an expression. 3198 NC_DependentNonType, 3199 /// The name was classified as an overload set, and an expression 3200 /// representing that overload set has been formed. 3201 /// ActOnNameClassifiedAsOverloadSet should be called to form a suitable 3202 /// expression referencing the overload set. 3203 NC_OverloadSet, 3204 /// The name was classified as a template whose specializations are types. 3205 NC_TypeTemplate, 3206 /// The name was classified as a variable template name. 3207 NC_VarTemplate, 3208 /// The name was classified as a function template name. 3209 NC_FunctionTemplate, 3210 /// The name was classified as an ADL-only function template name. 3211 NC_UndeclaredTemplate, 3212 /// The name was classified as a concept name. 3213 NC_Concept, 3214 }; 3215 3216 class NameClassification { 3217 NameClassificationKind Kind; 3218 union { 3219 ExprResult Expr; 3220 NamedDecl *NonTypeDecl; 3221 TemplateName Template; 3222 ParsedType Type; 3223 }; 3224 NameClassification(NameClassificationKind Kind)3225 explicit NameClassification(NameClassificationKind Kind) : Kind(Kind) {} 3226 3227 public: NameClassification(ParsedType Type)3228 NameClassification(ParsedType Type) : Kind(NC_Type), Type(Type) {} 3229 NameClassification(const IdentifierInfo * Keyword)3230 NameClassification(const IdentifierInfo *Keyword) : Kind(NC_Keyword) {} 3231 Error()3232 static NameClassification Error() { return NameClassification(NC_Error); } 3233 Unknown()3234 static NameClassification Unknown() { 3235 return NameClassification(NC_Unknown); 3236 } 3237 OverloadSet(ExprResult E)3238 static NameClassification OverloadSet(ExprResult E) { 3239 NameClassification Result(NC_OverloadSet); 3240 Result.Expr = E; 3241 return Result; 3242 } 3243 NonType(NamedDecl * D)3244 static NameClassification NonType(NamedDecl *D) { 3245 NameClassification Result(NC_NonType); 3246 Result.NonTypeDecl = D; 3247 return Result; 3248 } 3249 UndeclaredNonType()3250 static NameClassification UndeclaredNonType() { 3251 return NameClassification(NC_UndeclaredNonType); 3252 } 3253 DependentNonType()3254 static NameClassification DependentNonType() { 3255 return NameClassification(NC_DependentNonType); 3256 } 3257 TypeTemplate(TemplateName Name)3258 static NameClassification TypeTemplate(TemplateName Name) { 3259 NameClassification Result(NC_TypeTemplate); 3260 Result.Template = Name; 3261 return Result; 3262 } 3263 VarTemplate(TemplateName Name)3264 static NameClassification VarTemplate(TemplateName Name) { 3265 NameClassification Result(NC_VarTemplate); 3266 Result.Template = Name; 3267 return Result; 3268 } 3269 FunctionTemplate(TemplateName Name)3270 static NameClassification FunctionTemplate(TemplateName Name) { 3271 NameClassification Result(NC_FunctionTemplate); 3272 Result.Template = Name; 3273 return Result; 3274 } 3275 Concept(TemplateName Name)3276 static NameClassification Concept(TemplateName Name) { 3277 NameClassification Result(NC_Concept); 3278 Result.Template = Name; 3279 return Result; 3280 } 3281 UndeclaredTemplate(TemplateName Name)3282 static NameClassification UndeclaredTemplate(TemplateName Name) { 3283 NameClassification Result(NC_UndeclaredTemplate); 3284 Result.Template = Name; 3285 return Result; 3286 } 3287 getKind()3288 NameClassificationKind getKind() const { return Kind; } 3289 getExpression()3290 ExprResult getExpression() const { 3291 assert(Kind == NC_OverloadSet); 3292 return Expr; 3293 } 3294 getType()3295 ParsedType getType() const { 3296 assert(Kind == NC_Type); 3297 return Type; 3298 } 3299 getNonTypeDecl()3300 NamedDecl *getNonTypeDecl() const { 3301 assert(Kind == NC_NonType); 3302 return NonTypeDecl; 3303 } 3304 getTemplateName()3305 TemplateName getTemplateName() const { 3306 assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate || 3307 Kind == NC_VarTemplate || Kind == NC_Concept || 3308 Kind == NC_UndeclaredTemplate); 3309 return Template; 3310 } 3311 getTemplateNameKind()3312 TemplateNameKind getTemplateNameKind() const { 3313 switch (Kind) { 3314 case NC_TypeTemplate: 3315 return TNK_Type_template; 3316 case NC_FunctionTemplate: 3317 return TNK_Function_template; 3318 case NC_VarTemplate: 3319 return TNK_Var_template; 3320 case NC_Concept: 3321 return TNK_Concept_template; 3322 case NC_UndeclaredTemplate: 3323 return TNK_Undeclared_template; 3324 default: 3325 llvm_unreachable("unsupported name classification."); 3326 } 3327 } 3328 }; 3329 3330 /// Perform name lookup on the given name, classifying it based on 3331 /// the results of name lookup and the following token. 3332 /// 3333 /// This routine is used by the parser to resolve identifiers and help direct 3334 /// parsing. When the identifier cannot be found, this routine will attempt 3335 /// to correct the typo and classify based on the resulting name. 3336 /// 3337 /// \param S The scope in which we're performing name lookup. 3338 /// 3339 /// \param SS The nested-name-specifier that precedes the name. 3340 /// 3341 /// \param Name The identifier. If typo correction finds an alternative name, 3342 /// this pointer parameter will be updated accordingly. 3343 /// 3344 /// \param NameLoc The location of the identifier. 3345 /// 3346 /// \param NextToken The token following the identifier. Used to help 3347 /// disambiguate the name. 3348 /// 3349 /// \param CCC The correction callback, if typo correction is desired. 3350 NameClassification ClassifyName(Scope *S, CXXScopeSpec &SS, 3351 IdentifierInfo *&Name, SourceLocation NameLoc, 3352 const Token &NextToken, 3353 CorrectionCandidateCallback *CCC = nullptr); 3354 3355 /// Act on the result of classifying a name as an undeclared (ADL-only) 3356 /// non-type declaration. 3357 ExprResult ActOnNameClassifiedAsUndeclaredNonType(IdentifierInfo *Name, 3358 SourceLocation NameLoc); 3359 /// Act on the result of classifying a name as an undeclared member of a 3360 /// dependent base class. 3361 ExprResult ActOnNameClassifiedAsDependentNonType(const CXXScopeSpec &SS, 3362 IdentifierInfo *Name, 3363 SourceLocation NameLoc, 3364 bool IsAddressOfOperand); 3365 /// Act on the result of classifying a name as a specific non-type 3366 /// declaration. 3367 ExprResult ActOnNameClassifiedAsNonType(Scope *S, const CXXScopeSpec &SS, 3368 NamedDecl *Found, 3369 SourceLocation NameLoc, 3370 const Token &NextToken); 3371 /// Act on the result of classifying a name as an overload set. 3372 ExprResult ActOnNameClassifiedAsOverloadSet(Scope *S, Expr *OverloadSet); 3373 3374 /// Describes the detailed kind of a template name. Used in diagnostics. 3375 enum class TemplateNameKindForDiagnostics { 3376 ClassTemplate, 3377 FunctionTemplate, 3378 VarTemplate, 3379 AliasTemplate, 3380 TemplateTemplateParam, 3381 Concept, 3382 DependentTemplate 3383 }; 3384 TemplateNameKindForDiagnostics 3385 getTemplateNameKindForDiagnostics(TemplateName Name); 3386 3387 /// Determine whether it's plausible that E was intended to be a 3388 /// template-name. mightBeIntendedToBeTemplateName(ExprResult E,bool & Dependent)3389 bool mightBeIntendedToBeTemplateName(ExprResult E, bool &Dependent) { 3390 if (!getLangOpts().CPlusPlus || E.isInvalid()) 3391 return false; 3392 Dependent = false; 3393 if (auto *DRE = dyn_cast<DeclRefExpr>(E.get())) 3394 return !DRE->hasExplicitTemplateArgs(); 3395 if (auto *ME = dyn_cast<MemberExpr>(E.get())) 3396 return !ME->hasExplicitTemplateArgs(); 3397 Dependent = true; 3398 if (auto *DSDRE = dyn_cast<DependentScopeDeclRefExpr>(E.get())) 3399 return !DSDRE->hasExplicitTemplateArgs(); 3400 if (auto *DSME = dyn_cast<CXXDependentScopeMemberExpr>(E.get())) 3401 return !DSME->hasExplicitTemplateArgs(); 3402 // Any additional cases recognized here should also be handled by 3403 // diagnoseExprIntendedAsTemplateName. 3404 return false; 3405 } 3406 3407 void warnOnReservedIdentifier(const NamedDecl *D); 3408 3409 Decl *ActOnDeclarator(Scope *S, Declarator &D); 3410 3411 NamedDecl *HandleDeclarator(Scope *S, Declarator &D, 3412 MultiTemplateParamsArg TemplateParameterLists); 3413 3414 /// Attempt to fold a variable-sized type to a constant-sized type, returning 3415 /// true if we were successful. 3416 bool tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, 3417 SourceLocation Loc, 3418 unsigned FailedFoldDiagID); 3419 3420 /// Register the given locally-scoped extern "C" declaration so 3421 /// that it can be found later for redeclarations. We include any extern "C" 3422 /// declaration that is not visible in the translation unit here, not just 3423 /// function-scope declarations. 3424 void RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S); 3425 3426 /// DiagnoseClassNameShadow - Implement C++ [class.mem]p13: 3427 /// If T is the name of a class, then each of the following shall have a 3428 /// name different from T: 3429 /// - every static data member of class T; 3430 /// - every member function of class T 3431 /// - every member of class T that is itself a type; 3432 /// \returns true if the declaration name violates these rules. 3433 bool DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo Info); 3434 3435 /// Diagnose a declaration whose declarator-id has the given 3436 /// nested-name-specifier. 3437 /// 3438 /// \param SS The nested-name-specifier of the declarator-id. 3439 /// 3440 /// \param DC The declaration context to which the nested-name-specifier 3441 /// resolves. 3442 /// 3443 /// \param Name The name of the entity being declared. 3444 /// 3445 /// \param Loc The location of the name of the entity being declared. 3446 /// 3447 /// \param IsMemberSpecialization Whether we are declaring a member 3448 /// specialization. 3449 /// 3450 /// \param TemplateId The template-id, if any. 3451 /// 3452 /// \returns true if we cannot safely recover from this error, false 3453 /// otherwise. 3454 bool diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, 3455 DeclarationName Name, SourceLocation Loc, 3456 TemplateIdAnnotation *TemplateId, 3457 bool IsMemberSpecialization); 3458 3459 bool checkPointerAuthEnabled(SourceLocation Loc, SourceRange Range); 3460 3461 bool checkConstantPointerAuthKey(Expr *keyExpr, unsigned &key); 3462 3463 /// Diagnose function specifiers on a declaration of an identifier that 3464 /// does not identify a function. 3465 void DiagnoseFunctionSpecifiers(const DeclSpec &DS); 3466 3467 /// Return the declaration shadowed by the given typedef \p D, or null 3468 /// if it doesn't shadow any declaration or shadowing warnings are disabled. 3469 NamedDecl *getShadowedDeclaration(const TypedefNameDecl *D, 3470 const LookupResult &R); 3471 3472 /// Return the declaration shadowed by the given variable \p D, or null 3473 /// if it doesn't shadow any declaration or shadowing warnings are disabled. 3474 NamedDecl *getShadowedDeclaration(const VarDecl *D, const LookupResult &R); 3475 3476 /// Return the declaration shadowed by the given variable \p D, or null 3477 /// if it doesn't shadow any declaration or shadowing warnings are disabled. 3478 NamedDecl *getShadowedDeclaration(const BindingDecl *D, 3479 const LookupResult &R); 3480 /// Diagnose variable or built-in function shadowing. Implements 3481 /// -Wshadow. 3482 /// 3483 /// This method is called whenever a VarDecl is added to a "useful" 3484 /// scope. 3485 /// 3486 /// \param ShadowedDecl the declaration that is shadowed by the given variable 3487 /// \param R the lookup of the name 3488 void CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, 3489 const LookupResult &R); 3490 3491 /// Check -Wshadow without the advantage of a previous lookup. 3492 void CheckShadow(Scope *S, VarDecl *D); 3493 3494 /// Warn if 'E', which is an expression that is about to be modified, refers 3495 /// to a shadowing declaration. 3496 void CheckShadowingDeclModification(Expr *E, SourceLocation Loc); 3497 3498 /// Diagnose shadowing for variables shadowed in the lambda record \p LambdaRD 3499 /// when these variables are captured by the lambda. 3500 void DiagnoseShadowingLambdaDecls(const sema::LambdaScopeInfo *LSI); 3501 3502 void handleTagNumbering(const TagDecl *Tag, Scope *TagScope); 3503 void setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, 3504 TypedefNameDecl *NewTD); 3505 void CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *D); 3506 NamedDecl *ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, 3507 TypeSourceInfo *TInfo, 3508 LookupResult &Previous); 3509 3510 /// ActOnTypedefNameDecl - Perform semantic checking for a declaration which 3511 /// declares a typedef-name, either using the 'typedef' type specifier or via 3512 /// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'. 3513 NamedDecl *ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *D, 3514 LookupResult &Previous, bool &Redeclaration); 3515 NamedDecl *ActOnVariableDeclarator( 3516 Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, 3517 LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, 3518 bool &AddToScope, ArrayRef<BindingDecl *> Bindings = std::nullopt); 3519 3520 /// Perform semantic checking on a newly-created variable 3521 /// declaration. 3522 /// 3523 /// This routine performs all of the type-checking required for a 3524 /// variable declaration once it has been built. It is used both to 3525 /// check variables after they have been parsed and their declarators 3526 /// have been translated into a declaration, and to check variables 3527 /// that have been instantiated from a template. 3528 /// 3529 /// Sets NewVD->isInvalidDecl() if an error was encountered. 3530 /// 3531 /// Returns true if the variable declaration is a redeclaration. 3532 bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous); 3533 void CheckVariableDeclarationType(VarDecl *NewVD); 3534 void CheckCompleteVariableDeclaration(VarDecl *VD); 3535 3536 NamedDecl *ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, 3537 TypeSourceInfo *TInfo, 3538 LookupResult &Previous, 3539 MultiTemplateParamsArg TemplateParamLists, 3540 bool &AddToScope); 3541 3542 /// AddOverriddenMethods - See if a method overrides any in the base classes, 3543 /// and if so, check that it's a valid override and remember it. 3544 bool AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD); 3545 3546 /// Perform semantic checking of a new function declaration. 3547 /// 3548 /// Performs semantic analysis of the new function declaration 3549 /// NewFD. This routine performs all semantic checking that does not 3550 /// require the actual declarator involved in the declaration, and is 3551 /// used both for the declaration of functions as they are parsed 3552 /// (called via ActOnDeclarator) and for the declaration of functions 3553 /// that have been instantiated via C++ template instantiation (called 3554 /// via InstantiateDecl). 3555 /// 3556 /// \param IsMemberSpecialization whether this new function declaration is 3557 /// a member specialization (that replaces any definition provided by the 3558 /// previous declaration). 3559 /// 3560 /// This sets NewFD->isInvalidDecl() to true if there was an error. 3561 /// 3562 /// \returns true if the function declaration is a redeclaration. 3563 bool CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, 3564 LookupResult &Previous, 3565 bool IsMemberSpecialization, bool DeclIsDefn); 3566 3567 /// Checks if the new declaration declared in dependent context must be 3568 /// put in the same redeclaration chain as the specified declaration. 3569 /// 3570 /// \param D Declaration that is checked. 3571 /// \param PrevDecl Previous declaration found with proper lookup method for 3572 /// the same declaration name. 3573 /// \returns True if D must be added to the redeclaration chain which PrevDecl 3574 /// belongs to. 3575 bool shouldLinkDependentDeclWithPrevious(Decl *D, Decl *OldDecl); 3576 3577 /// Determines if we can perform a correct type check for \p D as a 3578 /// redeclaration of \p PrevDecl. If not, we can generally still perform a 3579 /// best-effort check. 3580 /// 3581 /// \param NewD The new declaration. 3582 /// \param OldD The old declaration. 3583 /// \param NewT The portion of the type of the new declaration to check. 3584 /// \param OldT The portion of the type of the old declaration to check. 3585 bool canFullyTypeCheckRedeclaration(ValueDecl *NewD, ValueDecl *OldD, 3586 QualType NewT, QualType OldT); 3587 void CheckMain(FunctionDecl *FD, const DeclSpec &D); 3588 void CheckMSVCRTEntryPoint(FunctionDecl *FD); 3589 3590 /// Returns an implicit CodeSegAttr if a __declspec(code_seg) is found on a 3591 /// containing class. Otherwise it will return implicit SectionAttr if the 3592 /// function is a definition and there is an active value on CodeSegStack 3593 /// (from the current #pragma code-seg value). 3594 /// 3595 /// \param FD Function being declared. 3596 /// \param IsDefinition Whether it is a definition or just a declaration. 3597 /// \returns A CodeSegAttr or SectionAttr to apply to the function or 3598 /// nullptr if no attribute should be added. 3599 Attr *getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD, 3600 bool IsDefinition); 3601 3602 /// Common checks for a parameter-declaration that should apply to both 3603 /// function parameters and non-type template parameters. 3604 void CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D); 3605 3606 /// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator() 3607 /// to introduce parameters into function prototype scope. 3608 Decl *ActOnParamDeclarator(Scope *S, Declarator &D, 3609 SourceLocation ExplicitThisLoc = {}); 3610 3611 /// Synthesizes a variable for a parameter arising from a 3612 /// typedef. 3613 ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC, SourceLocation Loc, 3614 QualType T); 3615 ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc, 3616 SourceLocation NameLoc, 3617 const IdentifierInfo *Name, QualType T, 3618 TypeSourceInfo *TSInfo, StorageClass SC); 3619 3620 // Contexts where using non-trivial C union types can be disallowed. This is 3621 // passed to err_non_trivial_c_union_in_invalid_context. 3622 enum NonTrivialCUnionContext { 3623 // Function parameter. 3624 NTCUC_FunctionParam, 3625 // Function return. 3626 NTCUC_FunctionReturn, 3627 // Default-initialized object. 3628 NTCUC_DefaultInitializedObject, 3629 // Variable with automatic storage duration. 3630 NTCUC_AutoVar, 3631 // Initializer expression that might copy from another object. 3632 NTCUC_CopyInit, 3633 // Assignment. 3634 NTCUC_Assignment, 3635 // Compound literal. 3636 NTCUC_CompoundLiteral, 3637 // Block capture. 3638 NTCUC_BlockCapture, 3639 // lvalue-to-rvalue conversion of volatile type. 3640 NTCUC_LValueToRValueVolatile, 3641 }; 3642 3643 /// Emit diagnostics if the initializer or any of its explicit or 3644 /// implicitly-generated subexpressions require copying or 3645 /// default-initializing a type that is or contains a C union type that is 3646 /// non-trivial to copy or default-initialize. 3647 void checkNonTrivialCUnionInInitializer(const Expr *Init, SourceLocation Loc); 3648 3649 // These flags are passed to checkNonTrivialCUnion. 3650 enum NonTrivialCUnionKind { 3651 NTCUK_Init = 0x1, 3652 NTCUK_Destruct = 0x2, 3653 NTCUK_Copy = 0x4, 3654 }; 3655 3656 /// Emit diagnostics if a non-trivial C union type or a struct that contains 3657 /// a non-trivial C union is used in an invalid context. 3658 void checkNonTrivialCUnion(QualType QT, SourceLocation Loc, 3659 NonTrivialCUnionContext UseContext, 3660 unsigned NonTrivialKind); 3661 3662 /// AddInitializerToDecl - Adds the initializer Init to the 3663 /// declaration dcl. If DirectInit is true, this is C++ direct 3664 /// initialization rather than copy initialization. 3665 void AddInitializerToDecl(Decl *dcl, Expr *init, bool DirectInit); 3666 void ActOnUninitializedDecl(Decl *dcl); 3667 3668 /// ActOnInitializerError - Given that there was an error parsing an 3669 /// initializer for the given declaration, try to at least re-establish 3670 /// invariants such as whether a variable's type is either dependent or 3671 /// complete. 3672 void ActOnInitializerError(Decl *Dcl); 3673 3674 void ActOnCXXForRangeDecl(Decl *D); 3675 StmtResult ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc, 3676 IdentifierInfo *Ident, 3677 ParsedAttributes &Attrs); 3678 3679 /// Check if VD needs to be dllexport/dllimport due to being in a 3680 /// dllexport/import function. 3681 void CheckStaticLocalForDllExport(VarDecl *VD); 3682 void CheckThreadLocalForLargeAlignment(VarDecl *VD); 3683 3684 /// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform 3685 /// any semantic actions necessary after any initializer has been attached. 3686 void FinalizeDeclaration(Decl *D); 3687 DeclGroupPtrTy FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, 3688 ArrayRef<Decl *> Group); 3689 3690 /// BuildDeclaratorGroup - convert a list of declarations into a declaration 3691 /// group, performing any necessary semantic checking. 3692 DeclGroupPtrTy BuildDeclaratorGroup(MutableArrayRef<Decl *> Group); 3693 3694 /// Should be called on all declarations that might have attached 3695 /// documentation comments. 3696 void ActOnDocumentableDecl(Decl *D); 3697 void ActOnDocumentableDecls(ArrayRef<Decl *> Group); 3698 3699 enum class FnBodyKind { 3700 /// C++26 [dcl.fct.def.general]p1 3701 /// function-body: 3702 /// ctor-initializer[opt] compound-statement 3703 /// function-try-block 3704 Other, 3705 /// = default ; 3706 Default, 3707 /// deleted-function-body 3708 /// 3709 /// deleted-function-body: 3710 /// = delete ; 3711 /// = delete ( unevaluated-string ) ; 3712 Delete 3713 }; 3714 3715 void ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D, 3716 SourceLocation LocAfterDecls); 3717 void CheckForFunctionRedefinition( 3718 FunctionDecl *FD, const FunctionDecl *EffectiveDefinition = nullptr, 3719 SkipBodyInfo *SkipBody = nullptr); 3720 Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D, 3721 MultiTemplateParamsArg TemplateParamLists, 3722 SkipBodyInfo *SkipBody = nullptr, 3723 FnBodyKind BodyKind = FnBodyKind::Other); 3724 Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D, 3725 SkipBodyInfo *SkipBody = nullptr, 3726 FnBodyKind BodyKind = FnBodyKind::Other); 3727 void applyFunctionAttributesBeforeParsingBody(Decl *FD); 3728 3729 /// Determine whether we can delay parsing the body of a function or 3730 /// function template until it is used, assuming we don't care about emitting 3731 /// code for that function. 3732 /// 3733 /// This will be \c false if we may need the body of the function in the 3734 /// middle of parsing an expression (where it's impractical to switch to 3735 /// parsing a different function), for instance, if it's constexpr in C++11 3736 /// or has an 'auto' return type in C++14. These cases are essentially bugs. 3737 bool canDelayFunctionBody(const Declarator &D); 3738 3739 /// Determine whether we can skip parsing the body of a function 3740 /// definition, assuming we don't care about analyzing its body or emitting 3741 /// code for that function. 3742 /// 3743 /// This will be \c false only if we may need the body of the function in 3744 /// order to parse the rest of the program (for instance, if it is 3745 /// \c constexpr in C++11 or has an 'auto' return type in C++14). 3746 bool canSkipFunctionBody(Decl *D); 3747 3748 /// Given the set of return statements within a function body, 3749 /// compute the variables that are subject to the named return value 3750 /// optimization. 3751 /// 3752 /// Each of the variables that is subject to the named return value 3753 /// optimization will be marked as NRVO variables in the AST, and any 3754 /// return statement that has a marked NRVO variable as its NRVO candidate can 3755 /// use the named return value optimization. 3756 /// 3757 /// This function applies a very simplistic algorithm for NRVO: if every 3758 /// return statement in the scope of a variable has the same NRVO candidate, 3759 /// that candidate is an NRVO variable. 3760 void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope); 3761 Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body); 3762 Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation); 3763 Decl *ActOnSkippedFunctionBody(Decl *Decl); 3764 void ActOnFinishInlineFunctionDef(FunctionDecl *D); 3765 3766 /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an 3767 /// attribute for which parsing is delayed. 3768 void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs); 3769 3770 /// Diagnose any unused parameters in the given sequence of 3771 /// ParmVarDecl pointers. 3772 void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters); 3773 3774 /// Diagnose whether the size of parameters or return value of a 3775 /// function or obj-c method definition is pass-by-value and larger than a 3776 /// specified threshold. 3777 void 3778 DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters, 3779 QualType ReturnTy, NamedDecl *D); 3780 3781 Decl *ActOnFileScopeAsmDecl(Expr *expr, SourceLocation AsmLoc, 3782 SourceLocation RParenLoc); 3783 3784 TopLevelStmtDecl *ActOnStartTopLevelStmtDecl(Scope *S); 3785 void ActOnFinishTopLevelStmtDecl(TopLevelStmtDecl *D, Stmt *Statement); 3786 3787 void ActOnPopScope(SourceLocation Loc, Scope *S); 3788 3789 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with 3790 /// no declarator (e.g. "struct foo;") is parsed. 3791 Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, 3792 const ParsedAttributesView &DeclAttrs, 3793 RecordDecl *&AnonRecord); 3794 3795 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with 3796 /// no declarator (e.g. "struct foo;") is parsed. It also accepts template 3797 /// parameters to cope with template friend declarations. 3798 Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, 3799 const ParsedAttributesView &DeclAttrs, 3800 MultiTemplateParamsArg TemplateParams, 3801 bool IsExplicitInstantiation, 3802 RecordDecl *&AnonRecord); 3803 3804 /// BuildAnonymousStructOrUnion - Handle the declaration of an 3805 /// anonymous structure or union. Anonymous unions are a C++ feature 3806 /// (C++ [class.union]) and a C11 feature; anonymous structures 3807 /// are a C11 feature and GNU C++ extension. 3808 Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, 3809 RecordDecl *Record, 3810 const PrintingPolicy &Policy); 3811 3812 /// Called once it is known whether 3813 /// a tag declaration is an anonymous union or struct. 3814 void ActOnDefinedDeclarationSpecifier(Decl *D); 3815 3816 /// Emit diagnostic warnings for placeholder members. 3817 /// We can only do that after the class is fully constructed, 3818 /// as anonymous union/structs can insert placeholders 3819 /// in their parent scope (which might be a Record). 3820 void DiagPlaceholderFieldDeclDefinitions(RecordDecl *Record); 3821 3822 /// BuildMicrosoftCAnonymousStruct - Handle the declaration of an 3823 /// Microsoft C anonymous structure. 3824 /// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx 3825 /// Example: 3826 /// 3827 /// struct A { int a; }; 3828 /// struct B { struct A; int b; }; 3829 /// 3830 /// void foo() { 3831 /// B var; 3832 /// var.a = 3; 3833 /// } 3834 Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS, 3835 RecordDecl *Record); 3836 3837 /// Common ways to introduce type names without a tag for use in diagnostics. 3838 /// Keep in sync with err_tag_reference_non_tag. 3839 enum NonTagKind { 3840 NTK_NonStruct, 3841 NTK_NonClass, 3842 NTK_NonUnion, 3843 NTK_NonEnum, 3844 NTK_Typedef, 3845 NTK_TypeAlias, 3846 NTK_Template, 3847 NTK_TypeAliasTemplate, 3848 NTK_TemplateTemplateArgument, 3849 }; 3850 3851 /// Given a non-tag type declaration, returns an enum useful for indicating 3852 /// what kind of non-tag type this is. 3853 NonTagKind getNonTagTypeDeclKind(const Decl *D, TagTypeKind TTK); 3854 3855 /// Determine whether a tag with a given kind is acceptable 3856 /// as a redeclaration of the given tag declaration. 3857 /// 3858 /// \returns true if the new tag kind is acceptable, false otherwise. 3859 bool isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, 3860 bool isDefinition, SourceLocation NewTagLoc, 3861 const IdentifierInfo *Name); 3862 3863 enum OffsetOfKind { 3864 // Not parsing a type within __builtin_offsetof. 3865 OOK_Outside, 3866 // Parsing a type within __builtin_offsetof. 3867 OOK_Builtin, 3868 // Parsing a type within macro "offsetof", defined in __buitin_offsetof 3869 // To improve our diagnostic message. 3870 OOK_Macro, 3871 }; 3872 3873 /// This is invoked when we see 'struct foo' or 'struct {'. In the 3874 /// former case, Name will be non-null. In the later case, Name will be null. 3875 /// TagSpec indicates what kind of tag this is. TUK indicates whether this is 3876 /// a reference/declaration/definition of a tag. 3877 /// 3878 /// \param IsTypeSpecifier \c true if this is a type-specifier (or 3879 /// trailing-type-specifier) other than one in an alias-declaration. 3880 /// 3881 /// \param SkipBody If non-null, will be set to indicate if the caller should 3882 /// skip the definition of this tag and treat it as if it were a declaration. 3883 DeclResult ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, 3884 SourceLocation KWLoc, CXXScopeSpec &SS, 3885 IdentifierInfo *Name, SourceLocation NameLoc, 3886 const ParsedAttributesView &Attr, AccessSpecifier AS, 3887 SourceLocation ModulePrivateLoc, 3888 MultiTemplateParamsArg TemplateParameterLists, 3889 bool &OwnedDecl, bool &IsDependent, 3890 SourceLocation ScopedEnumKWLoc, 3891 bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, 3892 bool IsTypeSpecifier, bool IsTemplateParamOrArg, 3893 OffsetOfKind OOK, SkipBodyInfo *SkipBody = nullptr); 3894 3895 /// ActOnField - Each field of a C struct/union is passed into this in order 3896 /// to create a FieldDecl object for it. 3897 Decl *ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart, 3898 Declarator &D, Expr *BitfieldWidth); 3899 3900 /// HandleField - Analyze a field of a C struct or a C++ data member. 3901 FieldDecl *HandleField(Scope *S, RecordDecl *TagD, SourceLocation DeclStart, 3902 Declarator &D, Expr *BitfieldWidth, 3903 InClassInitStyle InitStyle, AccessSpecifier AS); 3904 3905 /// Build a new FieldDecl and check its well-formedness. 3906 /// 3907 /// This routine builds a new FieldDecl given the fields name, type, 3908 /// record, etc. \p PrevDecl should refer to any previous declaration 3909 /// with the same name and in the same scope as the field to be 3910 /// created. 3911 /// 3912 /// \returns a new FieldDecl. 3913 /// 3914 /// \todo The Declarator argument is a hack. It will be removed once 3915 FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T, 3916 TypeSourceInfo *TInfo, RecordDecl *Record, 3917 SourceLocation Loc, bool Mutable, 3918 Expr *BitfieldWidth, InClassInitStyle InitStyle, 3919 SourceLocation TSSL, AccessSpecifier AS, 3920 NamedDecl *PrevDecl, Declarator *D = nullptr); 3921 3922 bool CheckNontrivialField(FieldDecl *FD); 3923 3924 /// ActOnLastBitfield - This routine handles synthesized bitfields rules for 3925 /// class and class extensions. For every class \@interface and class 3926 /// extension \@interface, if the last ivar is a bitfield of any type, 3927 /// then add an implicit `char :0` ivar to the end of that interface. 3928 void ActOnLastBitfield(SourceLocation DeclStart, 3929 SmallVectorImpl<Decl *> &AllIvarDecls); 3930 3931 // This is used for both record definitions and ObjC interface declarations. 3932 void ActOnFields(Scope *S, SourceLocation RecLoc, Decl *TagDecl, 3933 ArrayRef<Decl *> Fields, SourceLocation LBrac, 3934 SourceLocation RBrac, const ParsedAttributesView &AttrList); 3935 3936 /// ActOnTagStartDefinition - Invoked when we have entered the 3937 /// scope of a tag's definition (e.g., for an enumeration, class, 3938 /// struct, or union). 3939 void ActOnTagStartDefinition(Scope *S, Decl *TagDecl); 3940 3941 /// Perform ODR-like check for C/ObjC when merging tag types from modules. 3942 /// Differently from C++, actually parse the body and reject / error out 3943 /// in case of a structural mismatch. 3944 bool ActOnDuplicateDefinition(Decl *Prev, SkipBodyInfo &SkipBody); 3945 3946 typedef void *SkippedDefinitionContext; 3947 3948 /// Invoked when we enter a tag definition that we're skipping. 3949 SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD); 3950 3951 /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a 3952 /// C++ record definition's base-specifiers clause and are starting its 3953 /// member declarations. 3954 void ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagDecl, 3955 SourceLocation FinalLoc, 3956 bool IsFinalSpelledSealed, 3957 bool IsAbstract, 3958 SourceLocation LBraceLoc); 3959 3960 /// ActOnTagFinishDefinition - Invoked once we have finished parsing 3961 /// the definition of a tag (enumeration, class, struct, or union). 3962 void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl, 3963 SourceRange BraceRange); 3964 3965 void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context); 3966 3967 /// ActOnTagDefinitionError - Invoked when there was an unrecoverable 3968 /// error parsing the definition of a tag. 3969 void ActOnTagDefinitionError(Scope *S, Decl *TagDecl); 3970 3971 EnumConstantDecl *CheckEnumConstant(EnumDecl *Enum, 3972 EnumConstantDecl *LastEnumConst, 3973 SourceLocation IdLoc, IdentifierInfo *Id, 3974 Expr *val); 3975 3976 /// Check that this is a valid underlying type for an enum declaration. 3977 bool CheckEnumUnderlyingType(TypeSourceInfo *TI); 3978 3979 /// Check whether this is a valid redeclaration of a previous enumeration. 3980 /// \return true if the redeclaration was invalid. 3981 bool CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped, 3982 QualType EnumUnderlyingTy, bool IsFixed, 3983 const EnumDecl *Prev); 3984 3985 /// Determine whether the body of an anonymous enumeration should be skipped. 3986 /// \param II The name of the first enumerator. 3987 SkipBodyInfo shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II, 3988 SourceLocation IILoc); 3989 3990 Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant, 3991 SourceLocation IdLoc, IdentifierInfo *Id, 3992 const ParsedAttributesView &Attrs, 3993 SourceLocation EqualLoc, Expr *Val); 3994 void ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, 3995 Decl *EnumDecl, ArrayRef<Decl *> Elements, Scope *S, 3996 const ParsedAttributesView &Attr); 3997 3998 /// Set the current declaration context until it gets popped. 3999 void PushDeclContext(Scope *S, DeclContext *DC); 4000 void PopDeclContext(); 4001 4002 /// EnterDeclaratorContext - Used when we must lookup names in the context 4003 /// of a declarator's nested name specifier. 4004 void EnterDeclaratorContext(Scope *S, DeclContext *DC); 4005 void ExitDeclaratorContext(Scope *S); 4006 4007 /// Enter a template parameter scope, after it's been associated with a 4008 /// particular DeclContext. Causes lookup within the scope to chain through 4009 /// enclosing contexts in the correct order. 4010 void EnterTemplatedContext(Scope *S, DeclContext *DC); 4011 4012 /// Push the parameters of D, which must be a function, into scope. 4013 void ActOnReenterFunctionContext(Scope *S, Decl *D); 4014 void ActOnExitFunctionContext(); 4015 4016 /// Add this decl to the scope shadowed decl chains. 4017 void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true); 4018 4019 /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true 4020 /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns 4021 /// true if 'D' belongs to the given declaration context. 4022 /// 4023 /// \param AllowInlineNamespace If \c true, allow the declaration to be in the 4024 /// enclosing namespace set of the context, rather than contained 4025 /// directly within it. 4026 bool isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S = nullptr, 4027 bool AllowInlineNamespace = false) const; 4028 4029 /// Finds the scope corresponding to the given decl context, if it 4030 /// happens to be an enclosing scope. Otherwise return NULL. 4031 static Scope *getScopeForDeclContext(Scope *S, DeclContext *DC); 4032 4033 /// Subroutines of ActOnDeclarator(). 4034 TypedefDecl *ParseTypedefDecl(Scope *S, Declarator &D, QualType T, 4035 TypeSourceInfo *TInfo); 4036 bool isIncompatibleTypedef(const TypeDecl *Old, TypedefNameDecl *New); 4037 4038 /// Describes the kind of merge to perform for availability 4039 /// attributes (including "deprecated", "unavailable", and "availability"). 4040 enum AvailabilityMergeKind { 4041 /// Don't merge availability attributes at all. 4042 AMK_None, 4043 /// Merge availability attributes for a redeclaration, which requires 4044 /// an exact match. 4045 AMK_Redeclaration, 4046 /// Merge availability attributes for an override, which requires 4047 /// an exact match or a weakening of constraints. 4048 AMK_Override, 4049 /// Merge availability attributes for an implementation of 4050 /// a protocol requirement. 4051 AMK_ProtocolImplementation, 4052 /// Merge availability attributes for an implementation of 4053 /// an optional protocol requirement. 4054 AMK_OptionalProtocolImplementation 4055 }; 4056 4057 /// mergeDeclAttributes - Copy attributes from the Old decl to the New one. 4058 void mergeDeclAttributes(NamedDecl *New, Decl *Old, 4059 AvailabilityMergeKind AMK = AMK_Redeclaration); 4060 4061 /// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the 4062 /// same name and scope as a previous declaration 'Old'. Figure out 4063 /// how to resolve this situation, merging decls or emitting 4064 /// diagnostics as appropriate. If there was an error, set New to be invalid. 4065 void MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, 4066 LookupResult &OldDecls); 4067 4068 /// MergeFunctionDecl - We just parsed a function 'New' from 4069 /// declarator D which has the same name and scope as a previous 4070 /// declaration 'Old'. Figure out how to resolve this situation, 4071 /// merging decls or emitting diagnostics as appropriate. 4072 /// 4073 /// In C++, New and Old must be declarations that are not 4074 /// overloaded. Use IsOverload to determine whether New and Old are 4075 /// overloaded, and to select the Old declaration that New should be 4076 /// merged with. 4077 /// 4078 /// Returns true if there was an error, false otherwise. 4079 bool MergeFunctionDecl(FunctionDecl *New, NamedDecl *&Old, Scope *S, 4080 bool MergeTypeWithOld, bool NewDeclIsDefn); 4081 4082 /// Completes the merge of two function declarations that are 4083 /// known to be compatible. 4084 /// 4085 /// This routine handles the merging of attributes and other 4086 /// properties of function declarations from the old declaration to 4087 /// the new declaration, once we know that New is in fact a 4088 /// redeclaration of Old. 4089 /// 4090 /// \returns false 4091 bool MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old, 4092 Scope *S, bool MergeTypeWithOld); 4093 void mergeObjCMethodDecls(ObjCMethodDecl *New, ObjCMethodDecl *Old); 4094 4095 /// MergeVarDecl - We just parsed a variable 'New' which has the same name 4096 /// and scope as a previous declaration 'Old'. Figure out how to resolve this 4097 /// situation, merging decls or emitting diagnostics as appropriate. 4098 /// 4099 /// Tentative definition rules (C99 6.9.2p2) are checked by 4100 /// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative 4101 /// definitions here, since the initializer hasn't been attached. 4102 void MergeVarDecl(VarDecl *New, LookupResult &Previous); 4103 4104 /// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and 4105 /// scope as a previous declaration 'Old'. Figure out how to merge their 4106 /// types, emitting diagnostics as appropriate. 4107 /// 4108 /// Declarations using the auto type specifier (C++ [decl.spec.auto]) call 4109 /// back to here in AddInitializerToDecl. We can't check them before the 4110 /// initializer is attached. 4111 void MergeVarDeclTypes(VarDecl *New, VarDecl *Old, bool MergeTypeWithOld); 4112 4113 /// We've just determined that \p Old and \p New both appear to be definitions 4114 /// of the same variable. Either diagnose or fix the problem. 4115 bool checkVarDeclRedefinition(VarDecl *OldDefn, VarDecl *NewDefn); 4116 void notePreviousDefinition(const NamedDecl *Old, SourceLocation New); 4117 4118 /// Filters out lookup results that don't fall within the given scope 4119 /// as determined by isDeclInScope. 4120 void FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S, 4121 bool ConsiderLinkage, bool AllowInlineNamespace); 4122 4123 /// We've determined that \p New is a redeclaration of \p Old. Check that they 4124 /// have compatible owning modules. 4125 bool CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old); 4126 4127 /// [module.interface]p6: 4128 /// A redeclaration of an entity X is implicitly exported if X was introduced 4129 /// by an exported declaration; otherwise it shall not be exported. 4130 bool CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old); 4131 4132 /// A wrapper function for checking the semantic restrictions of 4133 /// a redeclaration within a module. 4134 bool CheckRedeclarationInModule(NamedDecl *New, NamedDecl *Old); 4135 4136 /// Check the redefinition in C++20 Modules. 4137 /// 4138 /// [basic.def.odr]p14: 4139 /// For any definable item D with definitions in multiple translation units, 4140 /// - if D is a non-inline non-templated function or variable, or 4141 /// - if the definitions in different translation units do not satisfy the 4142 /// following requirements, 4143 /// the program is ill-formed; a diagnostic is required only if the 4144 /// definable item is attached to a named module and a prior definition is 4145 /// reachable at the point where a later definition occurs. 4146 /// - Each such definition shall not be attached to a named module 4147 /// ([module.unit]). 4148 /// - Each such definition shall consist of the same sequence of tokens, ... 4149 /// ... 4150 /// 4151 /// Return true if the redefinition is not allowed. Return false otherwise. 4152 bool IsRedefinitionInModule(const NamedDecl *New, const NamedDecl *Old) const; 4153 4154 bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const; 4155 4156 /// If it's a file scoped decl that must warn if not used, keep track 4157 /// of it. 4158 void MarkUnusedFileScopedDecl(const DeclaratorDecl *D); 4159 4160 typedef llvm::function_ref<void(SourceLocation Loc, PartialDiagnostic PD)> 4161 DiagReceiverTy; 4162 4163 void DiagnoseUnusedNestedTypedefs(const RecordDecl *D); 4164 void DiagnoseUnusedNestedTypedefs(const RecordDecl *D, 4165 DiagReceiverTy DiagReceiver); 4166 void DiagnoseUnusedDecl(const NamedDecl *ND); 4167 4168 /// DiagnoseUnusedDecl - Emit warnings about declarations that are not used 4169 /// unless they are marked attr(unused). 4170 void DiagnoseUnusedDecl(const NamedDecl *ND, DiagReceiverTy DiagReceiver); 4171 4172 /// If VD is set but not otherwise used, diagnose, for a parameter or a 4173 /// variable. 4174 void DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver); 4175 4176 /// getNonFieldDeclScope - Retrieves the innermost scope, starting 4177 /// from S, where a non-field would be declared. This routine copes 4178 /// with the difference between C and C++ scoping rules in structs and 4179 /// unions. For example, the following code is well-formed in C but 4180 /// ill-formed in C++: 4181 /// @code 4182 /// struct S6 { 4183 /// enum { BAR } e; 4184 /// }; 4185 /// 4186 /// void test_S6() { 4187 /// struct S6 a; 4188 /// a.e = BAR; 4189 /// } 4190 /// @endcode 4191 /// For the declaration of BAR, this routine will return a different 4192 /// scope. The scope S will be the scope of the unnamed enumeration 4193 /// within S6. In C++, this routine will return the scope associated 4194 /// with S6, because the enumeration's scope is a transparent 4195 /// context but structures can contain non-field names. In C, this 4196 /// routine will return the translation unit scope, since the 4197 /// enumeration's scope is a transparent context and structures cannot 4198 /// contain non-field names. 4199 Scope *getNonFieldDeclScope(Scope *S); 4200 4201 FunctionDecl *CreateBuiltin(IdentifierInfo *II, QualType Type, unsigned ID, 4202 SourceLocation Loc); 4203 4204 /// LazilyCreateBuiltin - The specified Builtin-ID was first used at 4205 /// file scope. lazily create a decl for it. ForRedeclaration is true 4206 /// if we're creating this built-in in anticipation of redeclaring the 4207 /// built-in. 4208 NamedDecl *LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, 4209 bool ForRedeclaration, SourceLocation Loc); 4210 4211 /// Get the outermost AttributedType node that sets a calling convention. 4212 /// Valid types should not have multiple attributes with different CCs. 4213 const AttributedType *getCallingConvAttributedType(QualType T) const; 4214 4215 /// GetNameForDeclarator - Determine the full declaration name for the 4216 /// given Declarator. 4217 DeclarationNameInfo GetNameForDeclarator(Declarator &D); 4218 4219 /// Retrieves the declaration name from a parsed unqualified-id. 4220 DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name); 4221 4222 /// ParsingInitForAutoVars - a set of declarations with auto types for which 4223 /// we are currently parsing the initializer. 4224 llvm::SmallPtrSet<const Decl *, 4> ParsingInitForAutoVars; 4225 4226 /// Look for a locally scoped extern "C" declaration by the given name. 4227 NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name); 4228 4229 void deduceOpenCLAddressSpace(ValueDecl *decl); 4230 4231 /// Adjust the \c DeclContext for a function or variable that might be a 4232 /// function-local external declaration. 4233 static bool adjustContextForLocalExternDecl(DeclContext *&DC); 4234 4235 void MarkTypoCorrectedFunctionDefinition(const NamedDecl *F); 4236 4237 /// Checks if the variant/multiversion functions are compatible. 4238 bool areMultiversionVariantFunctionsCompatible( 4239 const FunctionDecl *OldFD, const FunctionDecl *NewFD, 4240 const PartialDiagnostic &NoProtoDiagID, 4241 const PartialDiagnosticAt &NoteCausedDiagIDAt, 4242 const PartialDiagnosticAt &NoSupportDiagIDAt, 4243 const PartialDiagnosticAt &DiffDiagIDAt, bool TemplatesSupported, 4244 bool ConstexprSupported, bool CLinkageMayDiffer); 4245 4246 /// type checking declaration initializers (C99 6.7.8) 4247 bool CheckForConstantInitializer( 4248 Expr *Init, unsigned DiagID = diag::err_init_element_not_constant); 4249 4250 QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, 4251 QualType Type, TypeSourceInfo *TSI, 4252 SourceRange Range, bool DirectInit, 4253 Expr *Init); 4254 4255 bool DeduceVariableDeclarationType(VarDecl *VDecl, bool DirectInit, 4256 Expr *Init); 4257 4258 sema::LambdaScopeInfo *RebuildLambdaScopeInfo(CXXMethodDecl *CallOperator); 4259 4260 // Heuristically tells if the function is `get_return_object` member of a 4261 // coroutine promise_type by matching the function name. 4262 static bool CanBeGetReturnObject(const FunctionDecl *FD); 4263 static bool CanBeGetReturnTypeOnAllocFailure(const FunctionDecl *FD); 4264 4265 /// ImplicitlyDefineFunction - An undeclared identifier was used in a function 4266 /// call, forming a call to an implicitly defined function (per C99 6.5.1p2). 4267 NamedDecl *ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, 4268 Scope *S); 4269 4270 /// If this function is a C++ replaceable global allocation function 4271 /// (C++2a [basic.stc.dynamic.allocation], C++2a [new.delete]), 4272 /// adds any function attributes that we know a priori based on the standard. 4273 /// 4274 /// We need to check for duplicate attributes both here and where user-written 4275 /// attributes are applied to declarations. 4276 void AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction( 4277 FunctionDecl *FD); 4278 4279 /// Adds any function attributes that we know a priori based on 4280 /// the declaration of this function. 4281 /// 4282 /// These attributes can apply both to implicitly-declared builtins 4283 /// (like __builtin___printf_chk) or to library-declared functions 4284 /// like NSLog or printf. 4285 /// 4286 /// We need to check for duplicate attributes both here and where user-written 4287 /// attributes are applied to declarations. 4288 void AddKnownFunctionAttributes(FunctionDecl *FD); 4289 4290 /// VerifyBitField - verifies that a bit field expression is an ICE and has 4291 /// the correct width, and that the field type is valid. 4292 /// Returns false on success. 4293 ExprResult VerifyBitField(SourceLocation FieldLoc, 4294 const IdentifierInfo *FieldName, QualType FieldTy, 4295 bool IsMsStruct, Expr *BitWidth); 4296 4297 /// IsValueInFlagEnum - Determine if a value is allowed as part of a flag 4298 /// enum. If AllowMask is true, then we also allow the complement of a valid 4299 /// value, to be used as a mask. 4300 bool IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val, 4301 bool AllowMask) const; 4302 4303 /// ActOnPragmaWeakID - Called on well formed \#pragma weak ident. 4304 void ActOnPragmaWeakID(IdentifierInfo *WeakName, SourceLocation PragmaLoc, 4305 SourceLocation WeakNameLoc); 4306 4307 /// ActOnPragmaRedefineExtname - Called on well formed 4308 /// \#pragma redefine_extname oldname newname. 4309 void ActOnPragmaRedefineExtname(IdentifierInfo *WeakName, 4310 IdentifierInfo *AliasName, 4311 SourceLocation PragmaLoc, 4312 SourceLocation WeakNameLoc, 4313 SourceLocation AliasNameLoc); 4314 4315 /// ActOnPragmaWeakAlias - Called on well formed \#pragma weak ident = ident. 4316 void ActOnPragmaWeakAlias(IdentifierInfo *WeakName, IdentifierInfo *AliasName, 4317 SourceLocation PragmaLoc, 4318 SourceLocation WeakNameLoc, 4319 SourceLocation AliasNameLoc); 4320 4321 /// Status of the function emission on the CUDA/HIP/OpenMP host/device attrs. 4322 enum class FunctionEmissionStatus { 4323 Emitted, 4324 CUDADiscarded, // Discarded due to CUDA/HIP hostness 4325 OMPDiscarded, // Discarded due to OpenMP hostness 4326 TemplateDiscarded, // Discarded due to uninstantiated templates 4327 Unknown, 4328 }; 4329 FunctionEmissionStatus getEmissionStatus(const FunctionDecl *Decl, 4330 bool Final = false); 4331 4332 // Whether the callee should be ignored in CUDA/HIP/OpenMP host/device check. 4333 bool shouldIgnoreInHostDeviceCheck(FunctionDecl *Callee); 4334 4335 private: 4336 /// Function or variable declarations to be checked for whether the deferred 4337 /// diagnostics should be emitted. 4338 llvm::SmallSetVector<Decl *, 4> DeclsToCheckForDeferredDiags; 4339 4340 /// Map of current shadowing declarations to shadowed declarations. Warn if 4341 /// it looks like the user is trying to modify the shadowing declaration. 4342 llvm::DenseMap<const NamedDecl *, const NamedDecl *> ShadowingDecls; 4343 4344 // We need this to handle 4345 // 4346 // typedef struct { 4347 // void *foo() { return 0; } 4348 // } A; 4349 // 4350 // When we see foo we don't know if after the typedef we will get 'A' or '*A' 4351 // for example. If 'A', foo will have external linkage. If we have '*A', 4352 // foo will have no linkage. Since we can't know until we get to the end 4353 // of the typedef, this function finds out if D might have non-external 4354 // linkage. Callers should verify at the end of the TU if it D has external 4355 // linkage or not. 4356 static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD); 4357 4358 ///@} 4359 4360 // 4361 // 4362 // ------------------------------------------------------------------------- 4363 // 4364 // 4365 4366 /// \name Declaration Attribute Handling 4367 /// Implementations are in SemaDeclAttr.cpp 4368 ///@{ 4369 4370 public: 4371 /// Describes the kind of priority given to an availability attribute. 4372 /// 4373 /// The sum of priorities deteremines the final priority of the attribute. 4374 /// The final priority determines how the attribute will be merged. 4375 /// An attribute with a lower priority will always remove higher priority 4376 /// attributes for the specified platform when it is being applied. An 4377 /// attribute with a higher priority will not be applied if the declaration 4378 /// already has an availability attribute with a lower priority for the 4379 /// specified platform. The final prirority values are not expected to match 4380 /// the values in this enumeration, but instead should be treated as a plain 4381 /// integer value. This enumeration just names the priority weights that are 4382 /// used to calculate that final vaue. 4383 enum AvailabilityPriority : int { 4384 /// The availability attribute was specified explicitly next to the 4385 /// declaration. 4386 AP_Explicit = 0, 4387 4388 /// The availability attribute was applied using '#pragma clang attribute'. 4389 AP_PragmaClangAttribute = 1, 4390 4391 /// The availability attribute for a specific platform was inferred from 4392 /// an availability attribute for another platform. 4393 AP_InferredFromOtherPlatform = 2 4394 }; 4395 4396 /// Describes the reason a calling convention specification was ignored, used 4397 /// for diagnostics. 4398 enum class CallingConventionIgnoredReason { 4399 ForThisTarget = 0, 4400 VariadicFunction, 4401 ConstructorDestructor, 4402 BuiltinFunction 4403 }; 4404 4405 /// A helper function to provide Attribute Location for the Attr types 4406 /// AND the ParsedAttr. 4407 template <typename AttrInfo> 4408 static std::enable_if_t<std::is_base_of_v<Attr, AttrInfo>, SourceLocation> getAttrLoc(const AttrInfo & AL)4409 getAttrLoc(const AttrInfo &AL) { 4410 return AL.getLocation(); 4411 } 4412 SourceLocation getAttrLoc(const ParsedAttr &AL); 4413 4414 /// If Expr is a valid integer constant, get the value of the integer 4415 /// expression and return success or failure. May output an error. 4416 /// 4417 /// Negative argument is implicitly converted to unsigned, unless 4418 /// \p StrictlyUnsigned is true. 4419 template <typename AttrInfo> 4420 bool checkUInt32Argument(const AttrInfo &AI, const Expr *Expr, uint32_t &Val, 4421 unsigned Idx = UINT_MAX, 4422 bool StrictlyUnsigned = false) { 4423 std::optional<llvm::APSInt> I = llvm::APSInt(32); 4424 if (Expr->isTypeDependent() || 4425 !(I = Expr->getIntegerConstantExpr(Context))) { 4426 if (Idx != UINT_MAX) 4427 Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type) 4428 << &AI << Idx << AANT_ArgumentIntegerConstant 4429 << Expr->getSourceRange(); 4430 else 4431 Diag(getAttrLoc(AI), diag::err_attribute_argument_type) 4432 << &AI << AANT_ArgumentIntegerConstant << Expr->getSourceRange(); 4433 return false; 4434 } 4435 4436 if (!I->isIntN(32)) { 4437 Diag(Expr->getExprLoc(), diag::err_ice_too_large) 4438 << toString(*I, 10, false) << 32 << /* Unsigned */ 1; 4439 return false; 4440 } 4441 4442 if (StrictlyUnsigned && I->isSigned() && I->isNegative()) { 4443 Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer) 4444 << &AI << /*non-negative*/ 1; 4445 return false; 4446 } 4447 4448 Val = (uint32_t)I->getZExtValue(); 4449 return true; 4450 } 4451 4452 /// WeakTopLevelDecl - Translation-unit scoped declarations generated by 4453 /// \#pragma weak during processing of other Decls. 4454 /// I couldn't figure out a clean way to generate these in-line, so 4455 /// we store them here and handle separately -- which is a hack. 4456 /// It would be best to refactor this. 4457 SmallVector<Decl *, 2> WeakTopLevelDecl; 4458 4459 /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls WeakTopLevelDecls()4460 SmallVectorImpl<Decl *> &WeakTopLevelDecls() { return WeakTopLevelDecl; } 4461 4462 typedef LazyVector<TypedefNameDecl *, ExternalSemaSource, 4463 &ExternalSemaSource::ReadExtVectorDecls, 2, 2> 4464 ExtVectorDeclsType; 4465 4466 /// ExtVectorDecls - This is a list all the extended vector types. This allows 4467 /// us to associate a raw vector type with one of the ext_vector type names. 4468 /// This is only necessary for issuing pretty diagnostics. 4469 ExtVectorDeclsType ExtVectorDecls; 4470 4471 /// Check if the argument \p E is a ASCII string literal. If not emit an error 4472 /// and return false, otherwise set \p Str to the value of the string literal 4473 /// and return true. 4474 bool checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI, 4475 const Expr *E, StringRef &Str, 4476 SourceLocation *ArgLocation = nullptr); 4477 4478 /// Check if the argument \p ArgNum of \p Attr is a ASCII string literal. 4479 /// If not emit an error and return false. If the argument is an identifier it 4480 /// will emit an error with a fixit hint and treat it as if it was a string 4481 /// literal. 4482 bool checkStringLiteralArgumentAttr(const ParsedAttr &Attr, unsigned ArgNum, 4483 StringRef &Str, 4484 SourceLocation *ArgLocation = nullptr); 4485 4486 /// Determine if type T is a valid subject for a nonnull and similar 4487 /// attributes. By default, we look through references (the behavior used by 4488 /// nonnull), but if the second parameter is true, then we treat a reference 4489 /// type as valid. 4490 bool isValidPointerAttrType(QualType T, bool RefOkay = false); 4491 4492 /// AddAssumeAlignedAttr - Adds an assume_aligned attribute to a particular 4493 /// declaration. 4494 void AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, 4495 Expr *OE); 4496 4497 /// AddAllocAlignAttr - Adds an alloc_align attribute to a particular 4498 /// declaration. 4499 void AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, 4500 Expr *ParamExpr); 4501 4502 bool CheckAttrTarget(const ParsedAttr &CurrAttr); 4503 bool CheckAttrNoArgs(const ParsedAttr &CurrAttr); 4504 4505 AvailabilityAttr *mergeAvailabilityAttr( 4506 NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, 4507 bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, 4508 VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, 4509 bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, 4510 int Priority, IdentifierInfo *IIEnvironment); 4511 4512 TypeVisibilityAttr * 4513 mergeTypeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI, 4514 TypeVisibilityAttr::VisibilityType Vis); 4515 VisibilityAttr *mergeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI, 4516 VisibilityAttr::VisibilityType Vis); 4517 SectionAttr *mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, 4518 StringRef Name); 4519 4520 /// Used to implement to perform semantic checking on 4521 /// attribute((section("foo"))) specifiers. 4522 /// 4523 /// In this case, "foo" is passed in to be checked. If the section 4524 /// specifier is invalid, return an Error that indicates the problem. 4525 /// 4526 /// This is a simple quality of implementation feature to catch errors 4527 /// and give good diagnostics in cases when the assembler or code generator 4528 /// would otherwise reject the section specifier. 4529 llvm::Error isValidSectionSpecifier(StringRef Str); 4530 bool checkSectionName(SourceLocation LiteralLoc, StringRef Str); 4531 CodeSegAttr *mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, 4532 StringRef Name); 4533 4534 // Check for things we'd like to warn about. Multiversioning issues are 4535 // handled later in the process, once we know how many exist. 4536 bool checkTargetAttr(SourceLocation LiteralLoc, StringRef Str); 4537 4538 /// Check Target Version attrs 4539 bool checkTargetVersionAttr(SourceLocation Loc, Decl *D, StringRef Str); 4540 bool checkTargetClonesAttrString( 4541 SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, 4542 Decl *D, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, 4543 SmallVectorImpl<SmallString<64>> &StringsBuffer); 4544 4545 ErrorAttr *mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, 4546 StringRef NewUserDiagnostic); 4547 FormatAttr *mergeFormatAttr(Decl *D, const AttributeCommonInfo &CI, 4548 IdentifierInfo *Format, int FormatIdx, 4549 int FirstArg); 4550 4551 /// AddAlignedAttr - Adds an aligned attribute to a particular declaration. 4552 void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, 4553 bool IsPackExpansion); 4554 void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *T, 4555 bool IsPackExpansion); 4556 4557 /// AddAlignValueAttr - Adds an align_value attribute to a particular 4558 /// declaration. 4559 void AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E); 4560 4561 /// AddAnnotationAttr - Adds an annotation Annot with Args arguments to D. 4562 void AddAnnotationAttr(Decl *D, const AttributeCommonInfo &CI, 4563 StringRef Annot, MutableArrayRef<Expr *> Args); 4564 4565 bool checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range, 4566 bool BestCase, 4567 MSInheritanceModel SemanticSpelling); 4568 4569 void CheckAlignasUnderalignment(Decl *D); 4570 4571 /// AddModeAttr - Adds a mode attribute to a particular declaration. 4572 void AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, 4573 bool InInstantiation = false); 4574 AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D, 4575 const AttributeCommonInfo &CI, 4576 const IdentifierInfo *Ident); 4577 MinSizeAttr *mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI); 4578 OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D, 4579 const AttributeCommonInfo &CI); 4580 InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL); 4581 InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, 4582 const InternalLinkageAttr &AL); 4583 4584 /// Check validaty of calling convention attribute \p attr. If \p FD 4585 /// is not null pointer, use \p FD to determine the CUDA/HIP host/device 4586 /// target. Otherwise, it is specified by \p CFT. 4587 bool CheckCallingConvAttr( 4588 const ParsedAttr &attr, CallingConv &CC, const FunctionDecl *FD = nullptr, 4589 CUDAFunctionTarget CFT = CUDAFunctionTarget::InvalidTarget); 4590 4591 /// Checks a regparm attribute, returning true if it is ill-formed and 4592 /// otherwise setting numParams to the appropriate value. 4593 bool CheckRegparmAttr(const ParsedAttr &attr, unsigned &value); 4594 4595 /// Create an CUDALaunchBoundsAttr attribute. 4596 CUDALaunchBoundsAttr *CreateLaunchBoundsAttr(const AttributeCommonInfo &CI, 4597 Expr *MaxThreads, 4598 Expr *MinBlocks, 4599 Expr *MaxBlocks); 4600 4601 /// AddLaunchBoundsAttr - Adds a launch_bounds attribute to a particular 4602 /// declaration. 4603 void AddLaunchBoundsAttr(Decl *D, const AttributeCommonInfo &CI, 4604 Expr *MaxThreads, Expr *MinBlocks, Expr *MaxBlocks); 4605 4606 enum class RetainOwnershipKind { NS, CF, OS }; 4607 4608 UuidAttr *mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, 4609 StringRef UuidAsWritten, MSGuidDecl *GuidDecl); 4610 4611 BTFDeclTagAttr *mergeBTFDeclTagAttr(Decl *D, const BTFDeclTagAttr &AL); 4612 4613 DLLImportAttr *mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI); 4614 DLLExportAttr *mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI); 4615 MSInheritanceAttr *mergeMSInheritanceAttr(Decl *D, 4616 const AttributeCommonInfo &CI, 4617 bool BestCase, 4618 MSInheritanceModel Model); 4619 4620 EnforceTCBAttr *mergeEnforceTCBAttr(Decl *D, const EnforceTCBAttr &AL); 4621 EnforceTCBLeafAttr *mergeEnforceTCBLeafAttr(Decl *D, 4622 const EnforceTCBLeafAttr &AL); 4623 4624 /// Helper for delayed processing TransparentUnion or 4625 /// BPFPreserveAccessIndexAttr attribute. 4626 void ProcessDeclAttributeDelayed(Decl *D, 4627 const ParsedAttributesView &AttrList); 4628 4629 // Options for ProcessDeclAttributeList(). 4630 struct ProcessDeclAttributeOptions { ProcessDeclAttributeOptionsProcessDeclAttributeOptions4631 ProcessDeclAttributeOptions() 4632 : IncludeCXX11Attributes(true), IgnoreTypeAttributes(false) {} 4633 WithIncludeCXX11AttributesProcessDeclAttributeOptions4634 ProcessDeclAttributeOptions WithIncludeCXX11Attributes(bool Val) { 4635 ProcessDeclAttributeOptions Result = *this; 4636 Result.IncludeCXX11Attributes = Val; 4637 return Result; 4638 } 4639 WithIgnoreTypeAttributesProcessDeclAttributeOptions4640 ProcessDeclAttributeOptions WithIgnoreTypeAttributes(bool Val) { 4641 ProcessDeclAttributeOptions Result = *this; 4642 Result.IgnoreTypeAttributes = Val; 4643 return Result; 4644 } 4645 4646 // Should C++11 attributes be processed? 4647 bool IncludeCXX11Attributes; 4648 4649 // Should any type attributes encountered be ignored? 4650 // If this option is false, a diagnostic will be emitted for any type 4651 // attributes of a kind that does not "slide" from the declaration to 4652 // the decl-specifier-seq. 4653 bool IgnoreTypeAttributes; 4654 }; 4655 4656 /// ProcessDeclAttributeList - Apply all the decl attributes in the specified 4657 /// attribute list to the specified decl, ignoring any type attributes. 4658 void ProcessDeclAttributeList(Scope *S, Decl *D, 4659 const ParsedAttributesView &AttrList, 4660 const ProcessDeclAttributeOptions &Options = 4661 ProcessDeclAttributeOptions()); 4662 4663 /// Annotation attributes are the only attributes allowed after an access 4664 /// specifier. 4665 bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl, 4666 const ParsedAttributesView &AttrList); 4667 4668 /// checkUnusedDeclAttributes - Given a declarator which is not being 4669 /// used to build a declaration, complain about any decl attributes 4670 /// which might be lying around on it. 4671 void checkUnusedDeclAttributes(Declarator &D); 4672 4673 /// DeclClonePragmaWeak - clone existing decl (maybe definition), 4674 /// \#pragma weak needs a non-definition decl and source may not have one. 4675 NamedDecl *DeclClonePragmaWeak(NamedDecl *ND, const IdentifierInfo *II, 4676 SourceLocation Loc); 4677 4678 /// DeclApplyPragmaWeak - A declaration (maybe definition) needs \#pragma weak 4679 /// applied to it, possibly with an alias. 4680 void DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, const WeakInfo &W); 4681 4682 void ProcessPragmaWeak(Scope *S, Decl *D); 4683 // Decl attributes - this routine is the top level dispatcher. 4684 void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD); 4685 4686 void PopParsingDeclaration(ParsingDeclState state, Decl *decl); 4687 4688 /// Given a set of delayed diagnostics, re-emit them as if they had 4689 /// been delayed in the current context instead of in the given pool. 4690 /// Essentially, this just moves them to the current pool. 4691 void redelayDiagnostics(sema::DelayedDiagnosticPool &pool); 4692 4693 /// Check if IdxExpr is a valid parameter index for a function or 4694 /// instance method D. May output an error. 4695 /// 4696 /// \returns true if IdxExpr is a valid index. 4697 template <typename AttrInfo> 4698 bool checkFunctionOrMethodParameterIndex(const Decl *D, const AttrInfo &AI, 4699 unsigned AttrArgNum, 4700 const Expr *IdxExpr, ParamIdx &Idx, 4701 bool CanIndexImplicitThis = false) { 4702 assert(isFunctionOrMethodOrBlockForAttrSubject(D)); 4703 4704 // In C++ the implicit 'this' function parameter also counts. 4705 // Parameters are counted from one. 4706 bool HP = hasFunctionProto(D); 4707 bool HasImplicitThisParam = isInstanceMethod(D); 4708 bool IV = HP && isFunctionOrMethodVariadic(D); 4709 unsigned NumParams = 4710 (HP ? getFunctionOrMethodNumParams(D) : 0) + HasImplicitThisParam; 4711 4712 std::optional<llvm::APSInt> IdxInt; 4713 if (IdxExpr->isTypeDependent() || 4714 !(IdxInt = IdxExpr->getIntegerConstantExpr(Context))) { 4715 Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type) 4716 << &AI << AttrArgNum << AANT_ArgumentIntegerConstant 4717 << IdxExpr->getSourceRange(); 4718 return false; 4719 } 4720 4721 unsigned IdxSource = IdxInt->getLimitedValue(UINT_MAX); 4722 if (IdxSource < 1 || (!IV && IdxSource > NumParams)) { 4723 Diag(getAttrLoc(AI), diag::err_attribute_argument_out_of_bounds) 4724 << &AI << AttrArgNum << IdxExpr->getSourceRange(); 4725 return false; 4726 } 4727 if (HasImplicitThisParam && !CanIndexImplicitThis) { 4728 if (IdxSource == 1) { 4729 Diag(getAttrLoc(AI), diag::err_attribute_invalid_implicit_this_argument) 4730 << &AI << IdxExpr->getSourceRange(); 4731 return false; 4732 } 4733 } 4734 4735 Idx = ParamIdx(IdxSource, D); 4736 return true; 4737 } 4738 4739 ///@} 4740 4741 // 4742 // 4743 // ------------------------------------------------------------------------- 4744 // 4745 // 4746 4747 /// \name C++ Declarations 4748 /// Implementations are in SemaDeclCXX.cpp 4749 ///@{ 4750 4751 public: 4752 void CheckDelegatingCtorCycles(); 4753 4754 /// Called before parsing a function declarator belonging to a function 4755 /// declaration. 4756 void ActOnStartFunctionDeclarationDeclarator(Declarator &D, 4757 unsigned TemplateParameterDepth); 4758 4759 /// Called after parsing a function declarator belonging to a function 4760 /// declaration. 4761 void ActOnFinishFunctionDeclarationDeclarator(Declarator &D); 4762 4763 // Act on C++ namespaces 4764 Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc, 4765 SourceLocation NamespaceLoc, 4766 SourceLocation IdentLoc, IdentifierInfo *Ident, 4767 SourceLocation LBrace, 4768 const ParsedAttributesView &AttrList, 4769 UsingDirectiveDecl *&UsingDecl, bool IsNested); 4770 4771 /// ActOnFinishNamespaceDef - This callback is called after a namespace is 4772 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef. 4773 void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace); 4774 4775 NamespaceDecl *getStdNamespace() const; 4776 4777 /// Retrieve the special "std" namespace, which may require us to 4778 /// implicitly define the namespace. 4779 NamespaceDecl *getOrCreateStdNamespace(); 4780 4781 CXXRecordDecl *getStdBadAlloc() const; 4782 EnumDecl *getStdAlignValT() const; 4783 4784 ValueDecl *tryLookupUnambiguousFieldDecl(RecordDecl *ClassDecl, 4785 const IdentifierInfo *MemberOrBase); 4786 4787 enum class ComparisonCategoryUsage { 4788 /// The '<=>' operator was used in an expression and a builtin operator 4789 /// was selected. 4790 OperatorInExpression, 4791 /// A defaulted 'operator<=>' needed the comparison category. This 4792 /// typically only applies to 'std::strong_ordering', due to the implicit 4793 /// fallback return value. 4794 DefaultedOperator, 4795 }; 4796 4797 /// Lookup the specified comparison category types in the standard 4798 /// library, an check the VarDecls possibly returned by the operator<=> 4799 /// builtins for that type. 4800 /// 4801 /// \return The type of the comparison category type corresponding to the 4802 /// specified Kind, or a null type if an error occurs 4803 QualType CheckComparisonCategoryType(ComparisonCategoryType Kind, 4804 SourceLocation Loc, 4805 ComparisonCategoryUsage Usage); 4806 4807 /// Tests whether Ty is an instance of std::initializer_list and, if 4808 /// it is and Element is not NULL, assigns the element type to Element. 4809 bool isStdInitializerList(QualType Ty, QualType *Element); 4810 4811 /// Looks for the std::initializer_list template and instantiates it 4812 /// with Element, or emits an error if it's not found. 4813 /// 4814 /// \returns The instantiated template, or null on error. 4815 QualType BuildStdInitializerList(QualType Element, SourceLocation Loc); 4816 4817 /// Determine whether Ctor is an initializer-list constructor, as 4818 /// defined in [dcl.init.list]p2. 4819 bool isInitListConstructor(const FunctionDecl *Ctor); 4820 4821 Decl *ActOnUsingDirective(Scope *CurScope, SourceLocation UsingLoc, 4822 SourceLocation NamespcLoc, CXXScopeSpec &SS, 4823 SourceLocation IdentLoc, 4824 IdentifierInfo *NamespcName, 4825 const ParsedAttributesView &AttrList); 4826 4827 void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir); 4828 4829 Decl *ActOnNamespaceAliasDef(Scope *CurScope, SourceLocation NamespaceLoc, 4830 SourceLocation AliasLoc, IdentifierInfo *Alias, 4831 CXXScopeSpec &SS, SourceLocation IdentLoc, 4832 IdentifierInfo *Ident); 4833 4834 /// Remove decls we can't actually see from a lookup being used to declare 4835 /// shadow using decls. 4836 /// 4837 /// \param S - The scope of the potential shadow decl 4838 /// \param Previous - The lookup of a potential shadow decl's name. 4839 void FilterUsingLookup(Scope *S, LookupResult &lookup); 4840 4841 /// Hides a using shadow declaration. This is required by the current 4842 /// using-decl implementation when a resolvable using declaration in a 4843 /// class is followed by a declaration which would hide or override 4844 /// one or more of the using decl's targets; for example: 4845 /// 4846 /// struct Base { void foo(int); }; 4847 /// struct Derived : Base { 4848 /// using Base::foo; 4849 /// void foo(int); 4850 /// }; 4851 /// 4852 /// The governing language is C++03 [namespace.udecl]p12: 4853 /// 4854 /// When a using-declaration brings names from a base class into a 4855 /// derived class scope, member functions in the derived class 4856 /// override and/or hide member functions with the same name and 4857 /// parameter types in a base class (rather than conflicting). 4858 /// 4859 /// There are two ways to implement this: 4860 /// (1) optimistically create shadow decls when they're not hidden 4861 /// by existing declarations, or 4862 /// (2) don't create any shadow decls (or at least don't make them 4863 /// visible) until we've fully parsed/instantiated the class. 4864 /// The problem with (1) is that we might have to retroactively remove 4865 /// a shadow decl, which requires several O(n) operations because the 4866 /// decl structures are (very reasonably) not designed for removal. 4867 /// (2) avoids this but is very fiddly and phase-dependent. 4868 void HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow); 4869 4870 /// Determines whether to create a using shadow decl for a particular 4871 /// decl, given the set of decls existing prior to this using lookup. 4872 bool CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Target, 4873 const LookupResult &PreviousDecls, 4874 UsingShadowDecl *&PrevShadow); 4875 4876 /// Builds a shadow declaration corresponding to a 'using' declaration. 4877 UsingShadowDecl *BuildUsingShadowDecl(Scope *S, BaseUsingDecl *BUD, 4878 NamedDecl *Target, 4879 UsingShadowDecl *PrevDecl); 4880 4881 /// Checks that the given using declaration is not an invalid 4882 /// redeclaration. Note that this is checking only for the using decl 4883 /// itself, not for any ill-formedness among the UsingShadowDecls. 4884 bool CheckUsingDeclRedeclaration(SourceLocation UsingLoc, 4885 bool HasTypenameKeyword, 4886 const CXXScopeSpec &SS, 4887 SourceLocation NameLoc, 4888 const LookupResult &Previous); 4889 4890 /// Checks that the given nested-name qualifier used in a using decl 4891 /// in the current context is appropriately related to the current 4892 /// scope. If an error is found, diagnoses it and returns true. 4893 /// R is nullptr, if the caller has not (yet) done a lookup, otherwise it's 4894 /// the result of that lookup. UD is likewise nullptr, except when we have an 4895 /// already-populated UsingDecl whose shadow decls contain the same 4896 /// information (i.e. we're instantiating a UsingDecl with non-dependent 4897 /// scope). 4898 bool CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, 4899 const CXXScopeSpec &SS, 4900 const DeclarationNameInfo &NameInfo, 4901 SourceLocation NameLoc, 4902 const LookupResult *R = nullptr, 4903 const UsingDecl *UD = nullptr); 4904 4905 /// Builds a using declaration. 4906 /// 4907 /// \param IsInstantiation - Whether this call arises from an 4908 /// instantiation of an unresolved using declaration. We treat 4909 /// the lookup differently for these declarations. 4910 NamedDecl *BuildUsingDeclaration(Scope *S, AccessSpecifier AS, 4911 SourceLocation UsingLoc, 4912 bool HasTypenameKeyword, 4913 SourceLocation TypenameLoc, CXXScopeSpec &SS, 4914 DeclarationNameInfo NameInfo, 4915 SourceLocation EllipsisLoc, 4916 const ParsedAttributesView &AttrList, 4917 bool IsInstantiation, bool IsUsingIfExists); 4918 NamedDecl *BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, 4919 SourceLocation UsingLoc, 4920 SourceLocation EnumLoc, 4921 SourceLocation NameLoc, 4922 TypeSourceInfo *EnumType, EnumDecl *ED); 4923 NamedDecl *BuildUsingPackDecl(NamedDecl *InstantiatedFrom, 4924 ArrayRef<NamedDecl *> Expansions); 4925 4926 /// Additional checks for a using declaration referring to a constructor name. 4927 bool CheckInheritingConstructorUsingDecl(UsingDecl *UD); 4928 4929 /// Given a derived-class using shadow declaration for a constructor and the 4930 /// correspnding base class constructor, find or create the implicit 4931 /// synthesized derived class constructor to use for this initialization. 4932 CXXConstructorDecl * 4933 findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor, 4934 ConstructorUsingShadowDecl *DerivedShadow); 4935 4936 Decl *ActOnUsingDeclaration(Scope *CurScope, AccessSpecifier AS, 4937 SourceLocation UsingLoc, 4938 SourceLocation TypenameLoc, CXXScopeSpec &SS, 4939 UnqualifiedId &Name, SourceLocation EllipsisLoc, 4940 const ParsedAttributesView &AttrList); 4941 Decl *ActOnUsingEnumDeclaration(Scope *CurScope, AccessSpecifier AS, 4942 SourceLocation UsingLoc, 4943 SourceLocation EnumLoc, SourceRange TyLoc, 4944 const IdentifierInfo &II, ParsedType Ty, 4945 CXXScopeSpec *SS = nullptr); 4946 Decl *ActOnAliasDeclaration(Scope *CurScope, AccessSpecifier AS, 4947 MultiTemplateParamsArg TemplateParams, 4948 SourceLocation UsingLoc, UnqualifiedId &Name, 4949 const ParsedAttributesView &AttrList, 4950 TypeResult Type, Decl *DeclFromDeclSpec); 4951 4952 /// BuildCXXConstructExpr - Creates a complete call to a constructor, 4953 /// including handling of its default argument expressions. 4954 /// 4955 /// \param ConstructKind - a CXXConstructExpr::ConstructionKind 4956 ExprResult BuildCXXConstructExpr( 4957 SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl, 4958 CXXConstructorDecl *Constructor, MultiExprArg Exprs, 4959 bool HadMultipleCandidates, bool IsListInitialization, 4960 bool IsStdInitListInitialization, bool RequiresZeroInit, 4961 CXXConstructionKind ConstructKind, SourceRange ParenRange); 4962 4963 /// Build a CXXConstructExpr whose constructor has already been resolved if 4964 /// it denotes an inherited constructor. 4965 ExprResult BuildCXXConstructExpr( 4966 SourceLocation ConstructLoc, QualType DeclInitType, 4967 CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg Exprs, 4968 bool HadMultipleCandidates, bool IsListInitialization, 4969 bool IsStdInitListInitialization, bool RequiresZeroInit, 4970 CXXConstructionKind ConstructKind, SourceRange ParenRange); 4971 4972 // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if 4973 // the constructor can be elidable? 4974 ExprResult BuildCXXConstructExpr( 4975 SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl, 4976 CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg Exprs, 4977 bool HadMultipleCandidates, bool IsListInitialization, 4978 bool IsStdInitListInitialization, bool RequiresZeroInit, 4979 CXXConstructionKind ConstructKind, SourceRange ParenRange); 4980 4981 ExprResult ConvertMemberDefaultInitExpression(FieldDecl *FD, Expr *InitExpr, 4982 SourceLocation InitLoc); 4983 4984 /// FinalizeVarWithDestructor - Prepare for calling destructor on the 4985 /// constructed variable. 4986 void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType); 4987 4988 /// Helper class that collects exception specifications for 4989 /// implicitly-declared special member functions. 4990 class ImplicitExceptionSpecification { 4991 // Pointer to allow copying 4992 Sema *Self; 4993 // We order exception specifications thus: 4994 // noexcept is the most restrictive, but is only used in C++11. 4995 // throw() comes next. 4996 // Then a throw(collected exceptions) 4997 // Finally no specification, which is expressed as noexcept(false). 4998 // throw(...) is used instead if any called function uses it. 4999 ExceptionSpecificationType ComputedEST; 5000 llvm::SmallPtrSet<CanQualType, 4> ExceptionsSeen; 5001 SmallVector<QualType, 4> Exceptions; 5002 ClearExceptions()5003 void ClearExceptions() { 5004 ExceptionsSeen.clear(); 5005 Exceptions.clear(); 5006 } 5007 5008 public: ImplicitExceptionSpecification(Sema & Self)5009 explicit ImplicitExceptionSpecification(Sema &Self) 5010 : Self(&Self), ComputedEST(EST_BasicNoexcept) { 5011 if (!Self.getLangOpts().CPlusPlus11) 5012 ComputedEST = EST_DynamicNone; 5013 } 5014 5015 /// Get the computed exception specification type. getExceptionSpecType()5016 ExceptionSpecificationType getExceptionSpecType() const { 5017 assert(!isComputedNoexcept(ComputedEST) && 5018 "noexcept(expr) should not be a possible result"); 5019 return ComputedEST; 5020 } 5021 5022 /// The number of exceptions in the exception specification. size()5023 unsigned size() const { return Exceptions.size(); } 5024 5025 /// The set of exceptions in the exception specification. data()5026 const QualType *data() const { return Exceptions.data(); } 5027 5028 /// Integrate another called method into the collected data. 5029 void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method); 5030 5031 /// Integrate an invoked expression into the collected data. CalledExpr(Expr * E)5032 void CalledExpr(Expr *E) { CalledStmt(E); } 5033 5034 /// Integrate an invoked statement into the collected data. 5035 void CalledStmt(Stmt *S); 5036 5037 /// Overwrite an EPI's exception specification with this 5038 /// computed exception specification. getExceptionSpec()5039 FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const { 5040 FunctionProtoType::ExceptionSpecInfo ESI; 5041 ESI.Type = getExceptionSpecType(); 5042 if (ESI.Type == EST_Dynamic) { 5043 ESI.Exceptions = Exceptions; 5044 } else if (ESI.Type == EST_None) { 5045 /// C++11 [except.spec]p14: 5046 /// The exception-specification is noexcept(false) if the set of 5047 /// potential exceptions of the special member function contains "any" 5048 ESI.Type = EST_NoexceptFalse; 5049 ESI.NoexceptExpr = 5050 Self->ActOnCXXBoolLiteral(SourceLocation(), tok::kw_false).get(); 5051 } 5052 return ESI; 5053 } 5054 }; 5055 5056 /// Evaluate the implicit exception specification for a defaulted 5057 /// special member function. 5058 void EvaluateImplicitExceptionSpec(SourceLocation Loc, FunctionDecl *FD); 5059 5060 /// Check the given exception-specification and update the 5061 /// exception specification information with the results. 5062 void checkExceptionSpecification(bool IsTopLevel, 5063 ExceptionSpecificationType EST, 5064 ArrayRef<ParsedType> DynamicExceptions, 5065 ArrayRef<SourceRange> DynamicExceptionRanges, 5066 Expr *NoexceptExpr, 5067 SmallVectorImpl<QualType> &Exceptions, 5068 FunctionProtoType::ExceptionSpecInfo &ESI); 5069 5070 /// Add an exception-specification to the given member or friend function 5071 /// (or function template). The exception-specification was parsed 5072 /// after the function itself was declared. 5073 void actOnDelayedExceptionSpecification( 5074 Decl *D, ExceptionSpecificationType EST, SourceRange SpecificationRange, 5075 ArrayRef<ParsedType> DynamicExceptions, 5076 ArrayRef<SourceRange> DynamicExceptionRanges, Expr *NoexceptExpr); 5077 5078 class InheritedConstructorInfo; 5079 5080 /// Determine if a special member function should have a deleted 5081 /// definition when it is defaulted. 5082 bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMemberKind CSM, 5083 InheritedConstructorInfo *ICI = nullptr, 5084 bool Diagnose = false); 5085 5086 /// Produce notes explaining why a defaulted function was defined as deleted. 5087 void DiagnoseDeletedDefaultedFunction(FunctionDecl *FD); 5088 5089 /// Declare the implicit default constructor for the given class. 5090 /// 5091 /// \param ClassDecl The class declaration into which the implicit 5092 /// default constructor will be added. 5093 /// 5094 /// \returns The implicitly-declared default constructor. 5095 CXXConstructorDecl * 5096 DeclareImplicitDefaultConstructor(CXXRecordDecl *ClassDecl); 5097 5098 /// DefineImplicitDefaultConstructor - Checks for feasibility of 5099 /// defining this constructor as the default constructor. 5100 void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation, 5101 CXXConstructorDecl *Constructor); 5102 5103 /// Declare the implicit destructor for the given class. 5104 /// 5105 /// \param ClassDecl The class declaration into which the implicit 5106 /// destructor will be added. 5107 /// 5108 /// \returns The implicitly-declared destructor. 5109 CXXDestructorDecl *DeclareImplicitDestructor(CXXRecordDecl *ClassDecl); 5110 5111 /// DefineImplicitDestructor - Checks for feasibility of 5112 /// defining this destructor as the default destructor. 5113 void DefineImplicitDestructor(SourceLocation CurrentLocation, 5114 CXXDestructorDecl *Destructor); 5115 5116 /// Build an exception spec for destructors that don't have one. 5117 /// 5118 /// C++11 says that user-defined destructors with no exception spec get one 5119 /// that looks as if the destructor was implicitly declared. 5120 void AdjustDestructorExceptionSpec(CXXDestructorDecl *Destructor); 5121 5122 /// Define the specified inheriting constructor. 5123 void DefineInheritingConstructor(SourceLocation UseLoc, 5124 CXXConstructorDecl *Constructor); 5125 5126 /// Declare the implicit copy constructor for the given class. 5127 /// 5128 /// \param ClassDecl The class declaration into which the implicit 5129 /// copy constructor will be added. 5130 /// 5131 /// \returns The implicitly-declared copy constructor. 5132 CXXConstructorDecl *DeclareImplicitCopyConstructor(CXXRecordDecl *ClassDecl); 5133 5134 /// DefineImplicitCopyConstructor - Checks for feasibility of 5135 /// defining this constructor as the copy constructor. 5136 void DefineImplicitCopyConstructor(SourceLocation CurrentLocation, 5137 CXXConstructorDecl *Constructor); 5138 5139 /// Declare the implicit move constructor for the given class. 5140 /// 5141 /// \param ClassDecl The Class declaration into which the implicit 5142 /// move constructor will be added. 5143 /// 5144 /// \returns The implicitly-declared move constructor, or NULL if it wasn't 5145 /// declared. 5146 CXXConstructorDecl *DeclareImplicitMoveConstructor(CXXRecordDecl *ClassDecl); 5147 5148 /// DefineImplicitMoveConstructor - Checks for feasibility of 5149 /// defining this constructor as the move constructor. 5150 void DefineImplicitMoveConstructor(SourceLocation CurrentLocation, 5151 CXXConstructorDecl *Constructor); 5152 5153 /// Declare the implicit copy assignment operator for the given class. 5154 /// 5155 /// \param ClassDecl The class declaration into which the implicit 5156 /// copy assignment operator will be added. 5157 /// 5158 /// \returns The implicitly-declared copy assignment operator. 5159 CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl); 5160 5161 /// Defines an implicitly-declared copy assignment operator. 5162 void DefineImplicitCopyAssignment(SourceLocation CurrentLocation, 5163 CXXMethodDecl *MethodDecl); 5164 5165 /// Declare the implicit move assignment operator for the given class. 5166 /// 5167 /// \param ClassDecl The Class declaration into which the implicit 5168 /// move assignment operator will be added. 5169 /// 5170 /// \returns The implicitly-declared move assignment operator, or NULL if it 5171 /// wasn't declared. 5172 CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl); 5173 5174 /// Defines an implicitly-declared move assignment operator. 5175 void DefineImplicitMoveAssignment(SourceLocation CurrentLocation, 5176 CXXMethodDecl *MethodDecl); 5177 5178 /// Check a completed declaration of an implicit special member. 5179 void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD); 5180 5181 /// Determine whether the given function is an implicitly-deleted 5182 /// special member function. 5183 bool isImplicitlyDeleted(FunctionDecl *FD); 5184 5185 /// Check whether 'this' shows up in the type of a static member 5186 /// function after the (naturally empty) cv-qualifier-seq would be. 5187 /// 5188 /// \returns true if an error occurred. 5189 bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method); 5190 5191 /// Whether this' shows up in the exception specification of a static 5192 /// member function. 5193 bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method); 5194 5195 /// Check whether 'this' shows up in the attributes of the given 5196 /// static member function. 5197 /// 5198 /// \returns true if an error occurred. 5199 bool checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method); 5200 5201 bool CheckImmediateEscalatingFunctionDefinition( 5202 FunctionDecl *FD, const sema::FunctionScopeInfo *FSI); 5203 5204 void DiagnoseImmediateEscalatingReason(FunctionDecl *FD); 5205 5206 /// Given a constructor and the set of arguments provided for the 5207 /// constructor, convert the arguments and add any required default arguments 5208 /// to form a proper call to this constructor. 5209 /// 5210 /// \returns true if an error occurred, false otherwise. 5211 bool CompleteConstructorCall(CXXConstructorDecl *Constructor, 5212 QualType DeclInitType, MultiExprArg ArgsPtr, 5213 SourceLocation Loc, 5214 SmallVectorImpl<Expr *> &ConvertedArgs, 5215 bool AllowExplicit = false, 5216 bool IsListInitialization = false); 5217 5218 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an 5219 /// initializer for the declaration 'Dcl'. 5220 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a 5221 /// static data member of class X, names should be looked up in the scope of 5222 /// class X. 5223 void ActOnCXXEnterDeclInitializer(Scope *S, Decl *Dcl); 5224 5225 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an 5226 /// initializer for the declaration 'Dcl'. 5227 void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl); 5228 5229 /// Define the "body" of the conversion from a lambda object to a 5230 /// function pointer. 5231 /// 5232 /// This routine doesn't actually define a sensible body; rather, it fills 5233 /// in the initialization expression needed to copy the lambda object into 5234 /// the block, and IR generation actually generates the real body of the 5235 /// block pointer conversion. 5236 void 5237 DefineImplicitLambdaToFunctionPointerConversion(SourceLocation CurrentLoc, 5238 CXXConversionDecl *Conv); 5239 5240 /// Define the "body" of the conversion from a lambda object to a 5241 /// block pointer. 5242 /// 5243 /// This routine doesn't actually define a sensible body; rather, it fills 5244 /// in the initialization expression needed to copy the lambda object into 5245 /// the block, and IR generation actually generates the real body of the 5246 /// block pointer conversion. 5247 void DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLoc, 5248 CXXConversionDecl *Conv); 5249 5250 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++ 5251 /// linkage specification, including the language and (if present) 5252 /// the '{'. ExternLoc is the location of the 'extern', Lang is the 5253 /// language string literal. LBraceLoc, if valid, provides the location of 5254 /// the '{' brace. Otherwise, this linkage specification does not 5255 /// have any braces. 5256 Decl *ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc, 5257 Expr *LangStr, SourceLocation LBraceLoc); 5258 5259 /// ActOnFinishLinkageSpecification - Complete the definition of 5260 /// the C++ linkage specification LinkageSpec. If RBraceLoc is 5261 /// valid, it's the position of the closing '}' brace in a linkage 5262 /// specification that uses braces. 5263 Decl *ActOnFinishLinkageSpecification(Scope *S, Decl *LinkageSpec, 5264 SourceLocation RBraceLoc); 5265 5266 //===--------------------------------------------------------------------===// 5267 // C++ Classes 5268 // 5269 5270 /// Get the class that is directly named by the current context. This is the 5271 /// class for which an unqualified-id in this scope could name a constructor 5272 /// or destructor. 5273 /// 5274 /// If the scope specifier denotes a class, this will be that class. 5275 /// If the scope specifier is empty, this will be the class whose 5276 /// member-specification we are currently within. Otherwise, there 5277 /// is no such class. 5278 CXXRecordDecl *getCurrentClass(Scope *S, const CXXScopeSpec *SS); 5279 5280 /// isCurrentClassName - Determine whether the identifier II is the 5281 /// name of the class type currently being defined. In the case of 5282 /// nested classes, this will only return true if II is the name of 5283 /// the innermost class. 5284 bool isCurrentClassName(const IdentifierInfo &II, Scope *S, 5285 const CXXScopeSpec *SS = nullptr); 5286 5287 /// Determine whether the identifier II is a typo for the name of 5288 /// the class type currently being defined. If so, update it to the identifier 5289 /// that should have been used. 5290 bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS); 5291 5292 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon. 5293 bool ActOnAccessSpecifier(AccessSpecifier Access, SourceLocation ASLoc, 5294 SourceLocation ColonLoc, 5295 const ParsedAttributesView &Attrs); 5296 5297 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member 5298 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the 5299 /// bitfield width if there is one, 'InitExpr' specifies the initializer if 5300 /// one has been parsed, and 'InitStyle' is set if an in-class initializer is 5301 /// present (but parsing it has been deferred). 5302 NamedDecl * 5303 ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, 5304 MultiTemplateParamsArg TemplateParameterLists, 5305 Expr *BitfieldWidth, const VirtSpecifiers &VS, 5306 InClassInitStyle InitStyle); 5307 5308 /// Enter a new C++ default initializer scope. After calling this, the 5309 /// caller must call \ref ActOnFinishCXXInClassMemberInitializer, even if 5310 /// parsing or instantiating the initializer failed. 5311 void ActOnStartCXXInClassMemberInitializer(); 5312 5313 /// This is invoked after parsing an in-class initializer for a 5314 /// non-static C++ class member, and after instantiating an in-class 5315 /// initializer in a class template. Such actions are deferred until the class 5316 /// is complete. 5317 void ActOnFinishCXXInClassMemberInitializer(Decl *VarDecl, 5318 SourceLocation EqualLoc, 5319 Expr *Init); 5320 5321 /// Handle a C++ member initializer using parentheses syntax. 5322 MemInitResult 5323 ActOnMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, 5324 IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, 5325 const DeclSpec &DS, SourceLocation IdLoc, 5326 SourceLocation LParenLoc, ArrayRef<Expr *> Args, 5327 SourceLocation RParenLoc, SourceLocation EllipsisLoc); 5328 5329 /// Handle a C++ member initializer using braced-init-list syntax. 5330 MemInitResult ActOnMemInitializer(Decl *ConstructorD, Scope *S, 5331 CXXScopeSpec &SS, 5332 IdentifierInfo *MemberOrBase, 5333 ParsedType TemplateTypeTy, 5334 const DeclSpec &DS, SourceLocation IdLoc, 5335 Expr *InitList, SourceLocation EllipsisLoc); 5336 5337 /// Handle a C++ member initializer. 5338 MemInitResult BuildMemInitializer(Decl *ConstructorD, Scope *S, 5339 CXXScopeSpec &SS, 5340 IdentifierInfo *MemberOrBase, 5341 ParsedType TemplateTypeTy, 5342 const DeclSpec &DS, SourceLocation IdLoc, 5343 Expr *Init, SourceLocation EllipsisLoc); 5344 5345 MemInitResult BuildMemberInitializer(ValueDecl *Member, Expr *Init, 5346 SourceLocation IdLoc); 5347 5348 MemInitResult BuildBaseInitializer(QualType BaseType, 5349 TypeSourceInfo *BaseTInfo, Expr *Init, 5350 CXXRecordDecl *ClassDecl, 5351 SourceLocation EllipsisLoc); 5352 5353 MemInitResult BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, 5354 CXXRecordDecl *ClassDecl); 5355 5356 bool SetDelegatingInitializer(CXXConstructorDecl *Constructor, 5357 CXXCtorInitializer *Initializer); 5358 5359 bool SetCtorInitializers( 5360 CXXConstructorDecl *Constructor, bool AnyErrors, 5361 ArrayRef<CXXCtorInitializer *> Initializers = std::nullopt); 5362 5363 /// MarkBaseAndMemberDestructorsReferenced - Given a record decl, 5364 /// mark all the non-trivial destructors of its members and bases as 5365 /// referenced. 5366 void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc, 5367 CXXRecordDecl *Record); 5368 5369 /// Mark destructors of virtual bases of this class referenced. In the Itanium 5370 /// C++ ABI, this is done when emitting a destructor for any non-abstract 5371 /// class. In the Microsoft C++ ABI, this is done any time a class's 5372 /// destructor is referenced. 5373 void MarkVirtualBaseDestructorsReferenced( 5374 SourceLocation Location, CXXRecordDecl *ClassDecl, 5375 llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases = nullptr); 5376 5377 /// Do semantic checks to allow the complete destructor variant to be emitted 5378 /// when the destructor is defined in another translation unit. In the Itanium 5379 /// C++ ABI, destructor variants are emitted together. In the MS C++ ABI, they 5380 /// can be emitted in separate TUs. To emit the complete variant, run a subset 5381 /// of the checks performed when emitting a regular destructor. 5382 void CheckCompleteDestructorVariant(SourceLocation CurrentLocation, 5383 CXXDestructorDecl *Dtor); 5384 5385 /// The list of classes whose vtables have been used within 5386 /// this translation unit, and the source locations at which the 5387 /// first use occurred. 5388 typedef std::pair<CXXRecordDecl *, SourceLocation> VTableUse; 5389 5390 /// The list of vtables that are required but have not yet been 5391 /// materialized. 5392 SmallVector<VTableUse, 16> VTableUses; 5393 5394 /// The set of classes whose vtables have been used within 5395 /// this translation unit, and a bit that will be true if the vtable is 5396 /// required to be emitted (otherwise, it should be emitted only if needed 5397 /// by code generation). 5398 llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed; 5399 5400 /// Load any externally-stored vtable uses. 5401 void LoadExternalVTableUses(); 5402 5403 /// Note that the vtable for the given class was used at the 5404 /// given location. 5405 void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class, 5406 bool DefinitionRequired = false); 5407 5408 /// Mark the exception specifications of all virtual member functions 5409 /// in the given class as needed. 5410 void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc, 5411 const CXXRecordDecl *RD); 5412 5413 /// MarkVirtualMembersReferenced - Will mark all members of the given 5414 /// CXXRecordDecl referenced. 5415 void MarkVirtualMembersReferenced(SourceLocation Loc, const CXXRecordDecl *RD, 5416 bool ConstexprOnly = false); 5417 5418 /// Define all of the vtables that have been used in this 5419 /// translation unit and reference any virtual members used by those 5420 /// vtables. 5421 /// 5422 /// \returns true if any work was done, false otherwise. 5423 bool DefineUsedVTables(); 5424 5425 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared 5426 /// special functions, such as the default constructor, copy 5427 /// constructor, or destructor, to the given C++ class (C++ 5428 /// [special]p1). This routine can only be executed just before the 5429 /// definition of the class is complete. 5430 void AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl); 5431 5432 /// ActOnMemInitializers - Handle the member initializers for a constructor. 5433 void ActOnMemInitializers(Decl *ConstructorDecl, SourceLocation ColonLoc, 5434 ArrayRef<CXXCtorInitializer *> MemInits, 5435 bool AnyErrors); 5436 5437 /// Check class-level dllimport/dllexport attribute. The caller must 5438 /// ensure that referenceDLLExportedClassMethods is called some point later 5439 /// when all outer classes of Class are complete. 5440 void checkClassLevelDLLAttribute(CXXRecordDecl *Class); 5441 void checkClassLevelCodeSegAttribute(CXXRecordDecl *Class); 5442 5443 void referenceDLLExportedClassMethods(); 5444 5445 /// Perform propagation of DLL attributes from a derived class to a 5446 /// templated base class for MS compatibility. 5447 void propagateDLLAttrToBaseClassTemplate( 5448 CXXRecordDecl *Class, Attr *ClassAttr, 5449 ClassTemplateSpecializationDecl *BaseTemplateSpec, 5450 SourceLocation BaseLoc); 5451 5452 /// Perform semantic checks on a class definition that has been 5453 /// completing, introducing implicitly-declared members, checking for 5454 /// abstract types, etc. 5455 /// 5456 /// \param S The scope in which the class was parsed. Null if we didn't just 5457 /// parse a class definition. 5458 /// \param Record The completed class. 5459 void CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record); 5460 5461 /// Check that the C++ class annoated with "trivial_abi" satisfies all the 5462 /// conditions that are needed for the attribute to have an effect. 5463 void checkIllFormedTrivialABIStruct(CXXRecordDecl &RD); 5464 5465 /// Check that VTable Pointer authentication is only being set on the first 5466 /// first instantiation of the vtable 5467 void checkIncorrectVTablePointerAuthenticationAttribute(CXXRecordDecl &RD); 5468 5469 void ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc, 5470 Decl *TagDecl, SourceLocation LBrac, 5471 SourceLocation RBrac, 5472 const ParsedAttributesView &AttrList); 5473 5474 /// Perform any semantic analysis which needs to be delayed until all 5475 /// pending class member declarations have been parsed. 5476 void ActOnFinishCXXMemberDecls(); 5477 void ActOnFinishCXXNonNestedClass(); 5478 5479 /// This is used to implement the constant expression evaluation part of the 5480 /// attribute enable_if extension. There is nothing in standard C++ which 5481 /// would require reentering parameters. 5482 void ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param); 5483 unsigned ActOnReenterTemplateScope(Decl *Template, 5484 llvm::function_ref<Scope *()> EnterScope); 5485 void ActOnStartDelayedMemberDeclarations(Scope *S, Decl *Record); 5486 5487 /// ActOnStartDelayedCXXMethodDeclaration - We have completed 5488 /// parsing a top-level (non-nested) C++ class, and we are now 5489 /// parsing those parts of the given Method declaration that could 5490 /// not be parsed earlier (C++ [class.mem]p2), such as default 5491 /// arguments. This action should enter the scope of the given 5492 /// Method declaration as if we had just parsed the qualified method 5493 /// name. However, it should not bring the parameters into scope; 5494 /// that will be performed by ActOnDelayedCXXMethodParameter. 5495 void ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *Method); 5496 void ActOnDelayedCXXMethodParameter(Scope *S, Decl *Param); 5497 void ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *Record); 5498 5499 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished 5500 /// processing the delayed method declaration for Method. The method 5501 /// declaration is now considered finished. There may be a separate 5502 /// ActOnStartOfFunctionDef action later (not necessarily 5503 /// immediately!) for this method, if it was also defined inside the 5504 /// class body. 5505 void ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *Method); 5506 void ActOnFinishDelayedMemberInitializers(Decl *Record); 5507 5508 bool EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, 5509 ASTContext &Ctx, 5510 bool ErrorOnInvalidMessage); 5511 Decl *ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc, 5512 Expr *AssertExpr, Expr *AssertMessageExpr, 5513 SourceLocation RParenLoc); 5514 Decl *BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, 5515 Expr *AssertExpr, Expr *AssertMessageExpr, 5516 SourceLocation RParenLoc, bool Failed); 5517 5518 /// Try to print more useful information about a failed static_assert 5519 /// with expression \E 5520 void DiagnoseStaticAssertDetails(const Expr *E); 5521 5522 /// Handle a friend type declaration. This works in tandem with 5523 /// ActOnTag. 5524 /// 5525 /// Notes on friend class templates: 5526 /// 5527 /// We generally treat friend class declarations as if they were 5528 /// declaring a class. So, for example, the elaborated type specifier 5529 /// in a friend declaration is required to obey the restrictions of a 5530 /// class-head (i.e. no typedefs in the scope chain), template 5531 /// parameters are required to match up with simple template-ids, &c. 5532 /// However, unlike when declaring a template specialization, it's 5533 /// okay to refer to a template specialization without an empty 5534 /// template parameter declaration, e.g. 5535 /// friend class A<T>::B<unsigned>; 5536 /// We permit this as a special case; if there are any template 5537 /// parameters present at all, require proper matching, i.e. 5538 /// template <> template \<class T> friend class A<int>::B; 5539 Decl *ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, 5540 MultiTemplateParamsArg TemplateParams); 5541 NamedDecl *ActOnFriendFunctionDecl(Scope *S, Declarator &D, 5542 MultiTemplateParamsArg TemplateParams); 5543 5544 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check 5545 /// the well-formedness of the constructor declarator @p D with type @p 5546 /// R. If there are any errors in the declarator, this routine will 5547 /// emit diagnostics and set the invalid bit to true. In any case, the type 5548 /// will be updated to reflect a well-formed type for the constructor and 5549 /// returned. 5550 QualType CheckConstructorDeclarator(Declarator &D, QualType R, 5551 StorageClass &SC); 5552 5553 /// CheckConstructor - Checks a fully-formed constructor for 5554 /// well-formedness, issuing any diagnostics required. Returns true if 5555 /// the constructor declarator is invalid. 5556 void CheckConstructor(CXXConstructorDecl *Constructor); 5557 5558 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check 5559 /// the well-formednes of the destructor declarator @p D with type @p 5560 /// R. If there are any errors in the declarator, this routine will 5561 /// emit diagnostics and set the declarator to invalid. Even if this happens, 5562 /// will be updated to reflect a well-formed type for the destructor and 5563 /// returned. 5564 QualType CheckDestructorDeclarator(Declarator &D, QualType R, 5565 StorageClass &SC); 5566 5567 /// CheckDestructor - Checks a fully-formed destructor definition for 5568 /// well-formedness, issuing any diagnostics required. Returns true 5569 /// on error. 5570 bool CheckDestructor(CXXDestructorDecl *Destructor); 5571 5572 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the 5573 /// well-formednes of the conversion function declarator @p D with 5574 /// type @p R. If there are any errors in the declarator, this routine 5575 /// will emit diagnostics and return true. Otherwise, it will return 5576 /// false. Either way, the type @p R will be updated to reflect a 5577 /// well-formed type for the conversion operator. 5578 void CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC); 5579 5580 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete 5581 /// the declaration of the given C++ conversion function. This routine 5582 /// is responsible for recording the conversion function in the C++ 5583 /// class, if possible. 5584 Decl *ActOnConversionDeclarator(CXXConversionDecl *Conversion); 5585 5586 /// Check the validity of a declarator that we parsed for a deduction-guide. 5587 /// These aren't actually declarators in the grammar, so we need to check that 5588 /// the user didn't specify any pieces that are not part of the 5589 /// deduction-guide grammar. Return true on invalid deduction-guide. 5590 bool CheckDeductionGuideDeclarator(Declarator &D, QualType &R, 5591 StorageClass &SC); 5592 5593 void CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *MD); 5594 5595 bool CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, 5596 CXXSpecialMemberKind CSM, 5597 SourceLocation DefaultLoc); 5598 void CheckDelayedMemberExceptionSpecs(); 5599 5600 /// Kinds of defaulted comparison operator functions. 5601 enum class DefaultedComparisonKind : unsigned char { 5602 /// This is not a defaultable comparison operator. 5603 None, 5604 /// This is an operator== that should be implemented as a series of 5605 /// subobject comparisons. 5606 Equal, 5607 /// This is an operator<=> that should be implemented as a series of 5608 /// subobject comparisons. 5609 ThreeWay, 5610 /// This is an operator!= that should be implemented as a rewrite in terms 5611 /// of a == comparison. 5612 NotEqual, 5613 /// This is an <, <=, >, or >= that should be implemented as a rewrite in 5614 /// terms of a <=> comparison. 5615 Relational, 5616 }; 5617 5618 bool CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *MD, 5619 DefaultedComparisonKind DCK); 5620 void DeclareImplicitEqualityComparison(CXXRecordDecl *RD, 5621 FunctionDecl *Spaceship); 5622 void DefineDefaultedComparison(SourceLocation Loc, FunctionDecl *FD, 5623 DefaultedComparisonKind DCK); 5624 5625 void CheckExplicitObjectMemberFunction(Declarator &D, DeclarationName Name, 5626 QualType R, bool IsLambda, 5627 DeclContext *DC = nullptr); 5628 void CheckExplicitObjectMemberFunction(DeclContext *DC, Declarator &D, 5629 DeclarationName Name, QualType R); 5630 void CheckExplicitObjectLambda(Declarator &D); 5631 5632 //===--------------------------------------------------------------------===// 5633 // C++ Derived Classes 5634 // 5635 5636 /// Check the validity of a C++ base class specifier. 5637 /// 5638 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics 5639 /// and returns NULL otherwise. 5640 CXXBaseSpecifier *CheckBaseSpecifier(CXXRecordDecl *Class, 5641 SourceRange SpecifierRange, bool Virtual, 5642 AccessSpecifier Access, 5643 TypeSourceInfo *TInfo, 5644 SourceLocation EllipsisLoc); 5645 5646 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is 5647 /// one entry in the base class list of a class specifier, for 5648 /// example: 5649 /// class foo : public bar, virtual private baz { 5650 /// 'public bar' and 'virtual private baz' are each base-specifiers. 5651 BaseResult ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, 5652 const ParsedAttributesView &Attrs, bool Virtual, 5653 AccessSpecifier Access, ParsedType basetype, 5654 SourceLocation BaseLoc, 5655 SourceLocation EllipsisLoc); 5656 5657 /// Performs the actual work of attaching the given base class 5658 /// specifiers to a C++ class. 5659 bool AttachBaseSpecifiers(CXXRecordDecl *Class, 5660 MutableArrayRef<CXXBaseSpecifier *> Bases); 5661 5662 /// ActOnBaseSpecifiers - Attach the given base specifiers to the 5663 /// class, after checking whether there are any duplicate base 5664 /// classes. 5665 void ActOnBaseSpecifiers(Decl *ClassDecl, 5666 MutableArrayRef<CXXBaseSpecifier *> Bases); 5667 5668 /// Determine whether the type \p Derived is a C++ class that is 5669 /// derived from the type \p Base. 5670 bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base); 5671 5672 /// Determine whether the type \p Derived is a C++ class that is 5673 /// derived from the type \p Base. 5674 bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base, 5675 CXXBasePaths &Paths); 5676 5677 // FIXME: I don't like this name. 5678 void BuildBasePathArray(const CXXBasePaths &Paths, CXXCastPath &BasePath); 5679 5680 bool CheckDerivedToBaseConversion(QualType Derived, QualType Base, 5681 SourceLocation Loc, SourceRange Range, 5682 CXXCastPath *BasePath = nullptr, 5683 bool IgnoreAccess = false); 5684 5685 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base 5686 /// conversion (where Derived and Base are class types) is 5687 /// well-formed, meaning that the conversion is unambiguous (and 5688 /// that all of the base classes are accessible). Returns true 5689 /// and emits a diagnostic if the code is ill-formed, returns false 5690 /// otherwise. Loc is the location where this routine should point to 5691 /// if there is an error, and Range is the source range to highlight 5692 /// if there is an error. 5693 /// 5694 /// If either InaccessibleBaseID or AmbiguousBaseConvID are 0, then the 5695 /// diagnostic for the respective type of error will be suppressed, but the 5696 /// check for ill-formed code will still be performed. 5697 bool CheckDerivedToBaseConversion(QualType Derived, QualType Base, 5698 unsigned InaccessibleBaseID, 5699 unsigned AmbiguousBaseConvID, 5700 SourceLocation Loc, SourceRange Range, 5701 DeclarationName Name, CXXCastPath *BasePath, 5702 bool IgnoreAccess = false); 5703 5704 /// Builds a string representing ambiguous paths from a 5705 /// specific derived class to different subobjects of the same base 5706 /// class. 5707 /// 5708 /// This function builds a string that can be used in error messages 5709 /// to show the different paths that one can take through the 5710 /// inheritance hierarchy to go from the derived class to different 5711 /// subobjects of a base class. The result looks something like this: 5712 /// @code 5713 /// struct D -> struct B -> struct A 5714 /// struct D -> struct C -> struct A 5715 /// @endcode 5716 std::string getAmbiguousPathsDisplayString(CXXBasePaths &Paths); 5717 5718 bool CheckOverridingFunctionAttributes(CXXMethodDecl *New, 5719 const CXXMethodDecl *Old); 5720 5721 /// CheckOverridingFunctionReturnType - Checks whether the return types are 5722 /// covariant, according to C++ [class.virtual]p5. 5723 bool CheckOverridingFunctionReturnType(const CXXMethodDecl *New, 5724 const CXXMethodDecl *Old); 5725 5726 // Check that the overriding method has no explicit object parameter. 5727 bool CheckExplicitObjectOverride(CXXMethodDecl *New, 5728 const CXXMethodDecl *Old); 5729 5730 /// Mark the given method pure. 5731 /// 5732 /// \param Method the method to be marked pure. 5733 /// 5734 /// \param InitRange the source range that covers the "0" initializer. 5735 bool CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange); 5736 5737 /// CheckOverrideControl - Check C++11 override control semantics. 5738 void CheckOverrideControl(NamedDecl *D); 5739 5740 /// DiagnoseAbsenceOfOverrideControl - Diagnose if 'override' keyword was 5741 /// not used in the declaration of an overriding method. 5742 void DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent); 5743 5744 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member 5745 /// function overrides a virtual member function marked 'final', according to 5746 /// C++11 [class.virtual]p4. 5747 bool CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New, 5748 const CXXMethodDecl *Old); 5749 5750 enum AbstractDiagSelID { 5751 AbstractNone = -1, 5752 AbstractReturnType, 5753 AbstractParamType, 5754 AbstractVariableType, 5755 AbstractFieldType, 5756 AbstractIvarType, 5757 AbstractSynthesizedIvarType, 5758 AbstractArrayType 5759 }; 5760 5761 struct TypeDiagnoser; 5762 5763 bool isAbstractType(SourceLocation Loc, QualType T); 5764 bool RequireNonAbstractType(SourceLocation Loc, QualType T, 5765 TypeDiagnoser &Diagnoser); 5766 template <typename... Ts> RequireNonAbstractType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)5767 bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned DiagID, 5768 const Ts &...Args) { 5769 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 5770 return RequireNonAbstractType(Loc, T, Diagnoser); 5771 } 5772 5773 void DiagnoseAbstractType(const CXXRecordDecl *RD); 5774 5775 //===--------------------------------------------------------------------===// 5776 // C++ Overloaded Operators [C++ 13.5] 5777 // 5778 5779 /// CheckOverloadedOperatorDeclaration - Check whether the declaration 5780 /// of this overloaded operator is well-formed. If so, returns false; 5781 /// otherwise, emits appropriate diagnostics and returns true. 5782 bool CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl); 5783 5784 /// CheckLiteralOperatorDeclaration - Check whether the declaration 5785 /// of this literal operator function is well-formed. If so, returns 5786 /// false; otherwise, emits appropriate diagnostics and returns true. 5787 bool CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl); 5788 5789 /// ActOnExplicitBoolSpecifier - Build an ExplicitSpecifier from an expression 5790 /// found in an explicit(bool) specifier. 5791 ExplicitSpecifier ActOnExplicitBoolSpecifier(Expr *E); 5792 5793 /// tryResolveExplicitSpecifier - Attempt to resolve the explict specifier. 5794 /// Returns true if the explicit specifier is now resolved. 5795 bool tryResolveExplicitSpecifier(ExplicitSpecifier &ExplicitSpec); 5796 5797 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a 5798 /// C++ if/switch/while/for statement. 5799 /// e.g: "if (int x = f()) {...}" 5800 DeclResult ActOnCXXConditionDeclaration(Scope *S, Declarator &D); 5801 5802 // Emitting members of dllexported classes is delayed until the class 5803 // (including field initializers) is fully parsed. 5804 SmallVector<CXXRecordDecl *, 4> DelayedDllExportClasses; 5805 SmallVector<CXXMethodDecl *, 4> DelayedDllExportMemberFunctions; 5806 5807 /// Merge the exception specifications of two variable declarations. 5808 /// 5809 /// This is called when there's a redeclaration of a VarDecl. The function 5810 /// checks if the redeclaration might have an exception specification and 5811 /// validates compatibility and merges the specs if necessary. 5812 void MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old); 5813 5814 /// MergeCXXFunctionDecl - Merge two declarations of the same C++ 5815 /// function, once we already know that they have the same 5816 /// type. Subroutine of MergeFunctionDecl. Returns true if there was an 5817 /// error, false otherwise. 5818 bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S); 5819 5820 /// Helpers for dealing with blocks and functions. 5821 void CheckCXXDefaultArguments(FunctionDecl *FD); 5822 5823 /// CheckExtraCXXDefaultArguments - Check for any extra default 5824 /// arguments in the declarator, which is not a function declaration 5825 /// or definition and therefore is not permitted to have default 5826 /// arguments. This routine should be invoked for every declarator 5827 /// that is not a function declaration or definition. 5828 void CheckExtraCXXDefaultArguments(Declarator &D); 5829 getSpecialMember(const CXXMethodDecl * MD)5830 CXXSpecialMemberKind getSpecialMember(const CXXMethodDecl *MD) { 5831 return getDefaultedFunctionKind(MD).asSpecialMember(); 5832 } 5833 5834 /// Perform semantic analysis for the variable declaration that 5835 /// occurs within a C++ catch clause, returning the newly-created 5836 /// variable. 5837 VarDecl *BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, 5838 SourceLocation StartLoc, 5839 SourceLocation IdLoc, 5840 const IdentifierInfo *Id); 5841 5842 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch 5843 /// handler. 5844 Decl *ActOnExceptionDeclarator(Scope *S, Declarator &D); 5845 5846 void DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock); 5847 5848 /// Handle a friend tag declaration where the scope specifier was 5849 /// templated. 5850 DeclResult ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, 5851 unsigned TagSpec, SourceLocation TagLoc, 5852 CXXScopeSpec &SS, IdentifierInfo *Name, 5853 SourceLocation NameLoc, 5854 const ParsedAttributesView &Attr, 5855 MultiTemplateParamsArg TempParamLists); 5856 5857 MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD, 5858 SourceLocation DeclStart, Declarator &D, 5859 Expr *BitfieldWidth, 5860 InClassInitStyle InitStyle, 5861 AccessSpecifier AS, 5862 const ParsedAttr &MSPropertyAttr); 5863 5864 /// Diagnose why the specified class does not have a trivial special member of 5865 /// the given kind. 5866 void DiagnoseNontrivial(const CXXRecordDecl *Record, 5867 CXXSpecialMemberKind CSM); 5868 5869 enum TrivialABIHandling { 5870 /// The triviality of a method unaffected by "trivial_abi". 5871 TAH_IgnoreTrivialABI, 5872 5873 /// The triviality of a method affected by "trivial_abi". 5874 TAH_ConsiderTrivialABI 5875 }; 5876 5877 /// Determine whether a defaulted or deleted special member function is 5878 /// trivial, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12, 5879 /// C++11 [class.copy]p25, and C++11 [class.dtor]p5. 5880 bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMemberKind CSM, 5881 TrivialABIHandling TAH = TAH_IgnoreTrivialABI, 5882 bool Diagnose = false); 5883 5884 /// For a defaulted function, the kind of defaulted function that it is. 5885 class DefaultedFunctionKind { 5886 LLVM_PREFERRED_TYPE(CXXSpecialMemberKind) 5887 unsigned SpecialMember : 8; 5888 unsigned Comparison : 8; 5889 5890 public: DefaultedFunctionKind()5891 DefaultedFunctionKind() 5892 : SpecialMember(llvm::to_underlying(CXXSpecialMemberKind::Invalid)), 5893 Comparison(llvm::to_underlying(DefaultedComparisonKind::None)) {} DefaultedFunctionKind(CXXSpecialMemberKind CSM)5894 DefaultedFunctionKind(CXXSpecialMemberKind CSM) 5895 : SpecialMember(llvm::to_underlying(CSM)), 5896 Comparison(llvm::to_underlying(DefaultedComparisonKind::None)) {} DefaultedFunctionKind(DefaultedComparisonKind Comp)5897 DefaultedFunctionKind(DefaultedComparisonKind Comp) 5898 : SpecialMember(llvm::to_underlying(CXXSpecialMemberKind::Invalid)), 5899 Comparison(llvm::to_underlying(Comp)) {} 5900 isSpecialMember()5901 bool isSpecialMember() const { 5902 return static_cast<CXXSpecialMemberKind>(SpecialMember) != 5903 CXXSpecialMemberKind::Invalid; 5904 } isComparison()5905 bool isComparison() const { 5906 return static_cast<DefaultedComparisonKind>(Comparison) != 5907 DefaultedComparisonKind::None; 5908 } 5909 5910 explicit operator bool() const { 5911 return isSpecialMember() || isComparison(); 5912 } 5913 asSpecialMember()5914 CXXSpecialMemberKind asSpecialMember() const { 5915 return static_cast<CXXSpecialMemberKind>(SpecialMember); 5916 } asComparison()5917 DefaultedComparisonKind asComparison() const { 5918 return static_cast<DefaultedComparisonKind>(Comparison); 5919 } 5920 5921 /// Get the index of this function kind for use in diagnostics. getDiagnosticIndex()5922 unsigned getDiagnosticIndex() const { 5923 static_assert(llvm::to_underlying(CXXSpecialMemberKind::Invalid) > 5924 llvm::to_underlying(CXXSpecialMemberKind::Destructor), 5925 "invalid should have highest index"); 5926 static_assert((unsigned)DefaultedComparisonKind::None == 0, 5927 "none should be equal to zero"); 5928 return SpecialMember + Comparison; 5929 } 5930 }; 5931 5932 /// Determine the kind of defaulting that would be done for a given function. 5933 /// 5934 /// If the function is both a default constructor and a copy / move 5935 /// constructor (due to having a default argument for the first parameter), 5936 /// this picks CXXSpecialMemberKind::DefaultConstructor. 5937 /// 5938 /// FIXME: Check that case is properly handled by all callers. 5939 DefaultedFunctionKind getDefaultedFunctionKind(const FunctionDecl *FD); 5940 5941 /// Handle a C++11 empty-declaration and attribute-declaration. 5942 Decl *ActOnEmptyDeclaration(Scope *S, const ParsedAttributesView &AttrList, 5943 SourceLocation SemiLoc); 5944 5945 enum class CheckConstexprKind { 5946 /// Diagnose issues that are non-constant or that are extensions. 5947 Diagnose, 5948 /// Identify whether this function satisfies the formal rules for constexpr 5949 /// functions in the current lanugage mode (with no extensions). 5950 CheckValid 5951 }; 5952 5953 // Check whether a function declaration satisfies the requirements of a 5954 // constexpr function definition or a constexpr constructor definition. If so, 5955 // return true. If not, produce appropriate diagnostics (unless asked not to 5956 // by Kind) and return false. 5957 // 5958 // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360. 5959 bool CheckConstexprFunctionDefinition(const FunctionDecl *FD, 5960 CheckConstexprKind Kind); 5961 5962 /// Diagnose methods which overload virtual methods in a base class 5963 /// without overriding any. 5964 void DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD); 5965 5966 /// Check if a method overloads virtual methods in a base class without 5967 /// overriding any. 5968 void 5969 FindHiddenVirtualMethods(CXXMethodDecl *MD, 5970 SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods); 5971 void 5972 NoteHiddenVirtualMethods(CXXMethodDecl *MD, 5973 SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods); 5974 5975 /// ActOnParamDefaultArgument - Check whether the default argument 5976 /// provided for a function parameter is well-formed. If so, attach it 5977 /// to the parameter declaration. 5978 void ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, 5979 Expr *defarg); 5980 5981 /// ActOnParamUnparsedDefaultArgument - We've seen a default 5982 /// argument for a function parameter, but we can't parse it yet 5983 /// because we're inside a class definition. Note that this default 5984 /// argument will be parsed later. 5985 void ActOnParamUnparsedDefaultArgument(Decl *param, SourceLocation EqualLoc, 5986 SourceLocation ArgLoc); 5987 5988 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of 5989 /// the default argument for the parameter param failed. 5990 void ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc, 5991 Expr *DefaultArg); 5992 ExprResult ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg, 5993 SourceLocation EqualLoc); 5994 void SetParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg, 5995 SourceLocation EqualLoc); 5996 5997 void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc); 5998 void SetDeclDeleted(Decl *dcl, SourceLocation DelLoc, 5999 StringLiteral *Message = nullptr); 6000 void SetDeclDefaulted(Decl *dcl, SourceLocation DefaultLoc); 6001 6002 void SetFunctionBodyKind(Decl *D, SourceLocation Loc, FnBodyKind BodyKind, 6003 StringLiteral *DeletedMessage = nullptr); 6004 void ActOnStartTrailingRequiresClause(Scope *S, Declarator &D); 6005 ExprResult ActOnFinishTrailingRequiresClause(ExprResult ConstraintExpr); 6006 ExprResult ActOnRequiresClause(ExprResult ConstraintExpr); 6007 6008 NamedDecl * 6009 ActOnDecompositionDeclarator(Scope *S, Declarator &D, 6010 MultiTemplateParamsArg TemplateParamLists); 6011 void DiagPlaceholderVariableDefinition(SourceLocation Loc); 6012 bool DiagRedefinedPlaceholderFieldDecl(SourceLocation Loc, 6013 RecordDecl *ClassDecl, 6014 const IdentifierInfo *Name); 6015 6016 void CheckCompleteDecompositionDeclaration(DecompositionDecl *DD); 6017 6018 /// Stack containing information needed when in C++2a an 'auto' is encountered 6019 /// in a function declaration parameter type specifier in order to invent a 6020 /// corresponding template parameter in the enclosing abbreviated function 6021 /// template. This information is also present in LambdaScopeInfo, stored in 6022 /// the FunctionScopes stack. 6023 SmallVector<InventedTemplateParameterInfo, 4> InventedParameterInfos; 6024 6025 /// FieldCollector - Collects CXXFieldDecls during parsing of C++ classes. 6026 std::unique_ptr<CXXFieldCollector> FieldCollector; 6027 6028 typedef llvm::SmallSetVector<const NamedDecl *, 16> NamedDeclSetType; 6029 /// Set containing all declared private fields that are not used. 6030 NamedDeclSetType UnusedPrivateFields; 6031 6032 typedef llvm::SmallPtrSet<const CXXRecordDecl *, 8> RecordDeclSetTy; 6033 6034 /// PureVirtualClassDiagSet - a set of class declarations which we have 6035 /// emitted a list of pure virtual functions. Used to prevent emitting the 6036 /// same list more than once. 6037 std::unique_ptr<RecordDeclSetTy> PureVirtualClassDiagSet; 6038 6039 typedef LazyVector<CXXConstructorDecl *, ExternalSemaSource, 6040 &ExternalSemaSource::ReadDelegatingConstructors, 2, 2> 6041 DelegatingCtorDeclsType; 6042 6043 /// All the delegating constructors seen so far in the file, used for 6044 /// cycle detection at the end of the TU. 6045 DelegatingCtorDeclsType DelegatingCtorDecls; 6046 6047 /// The C++ "std" namespace, where the standard library resides. 6048 LazyDeclPtr StdNamespace; 6049 6050 /// The C++ "std::initializer_list" template, which is defined in 6051 /// \<initializer_list>. 6052 ClassTemplateDecl *StdInitializerList; 6053 6054 // Contains the locations of the beginning of unparsed default 6055 // argument locations. 6056 llvm::DenseMap<ParmVarDecl *, SourceLocation> UnparsedDefaultArgLocs; 6057 6058 /// UndefinedInternals - all the used, undefined objects which require a 6059 /// definition in this translation unit. 6060 llvm::MapVector<NamedDecl *, SourceLocation> UndefinedButUsed; 6061 6062 typedef llvm::PointerIntPair<CXXRecordDecl *, 3, CXXSpecialMemberKind> 6063 SpecialMemberDecl; 6064 6065 /// The C++ special members which we are currently in the process of 6066 /// declaring. If this process recursively triggers the declaration of the 6067 /// same special member, we should act as if it is not yet declared. 6068 llvm::SmallPtrSet<SpecialMemberDecl, 4> SpecialMembersBeingDeclared; 6069 6070 void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD); 6071 6072 void ActOnDefaultCtorInitializers(Decl *CDtorDecl); 6073 6074 typedef ProcessingContextState ParsingClassState; PushParsingClass()6075 ParsingClassState PushParsingClass() { 6076 ParsingClassDepth++; 6077 return DelayedDiagnostics.pushUndelayed(); 6078 } PopParsingClass(ParsingClassState state)6079 void PopParsingClass(ParsingClassState state) { 6080 ParsingClassDepth--; 6081 DelayedDiagnostics.popUndelayed(state); 6082 } 6083 6084 ValueDecl *tryLookupCtorInitMemberDecl(CXXRecordDecl *ClassDecl, 6085 CXXScopeSpec &SS, 6086 ParsedType TemplateTypeTy, 6087 IdentifierInfo *MemberOrBase); 6088 6089 private: 6090 void setupImplicitSpecialMemberType(CXXMethodDecl *SpecialMem, 6091 QualType ResultTy, 6092 ArrayRef<QualType> Args); 6093 6094 // A cache representing if we've fully checked the various comparison category 6095 // types stored in ASTContext. The bit-index corresponds to the integer value 6096 // of a ComparisonCategoryType enumerator. 6097 llvm::SmallBitVector FullyCheckedComparisonCategories; 6098 6099 /// Check if there is a field shadowing. 6100 void CheckShadowInheritedFields(const SourceLocation &Loc, 6101 DeclarationName FieldName, 6102 const CXXRecordDecl *RD, 6103 bool DeclIsField = true); 6104 6105 ///@} 6106 6107 // 6108 // 6109 // ------------------------------------------------------------------------- 6110 // 6111 // 6112 6113 /// \name C++ Exception Specifications 6114 /// Implementations are in SemaExceptionSpec.cpp 6115 ///@{ 6116 6117 public: 6118 /// All the overriding functions seen during a class definition 6119 /// that had their exception spec checks delayed, plus the overridden 6120 /// function. 6121 SmallVector<std::pair<const CXXMethodDecl *, const CXXMethodDecl *>, 2> 6122 DelayedOverridingExceptionSpecChecks; 6123 6124 /// All the function redeclarations seen during a class definition that had 6125 /// their exception spec checks delayed, plus the prior declaration they 6126 /// should be checked against. Except during error recovery, the new decl 6127 /// should always be a friend declaration, as that's the only valid way to 6128 /// redeclare a special member before its class is complete. 6129 SmallVector<std::pair<FunctionDecl *, FunctionDecl *>, 2> 6130 DelayedEquivalentExceptionSpecChecks; 6131 6132 /// Determine if we're in a case where we need to (incorrectly) eagerly 6133 /// parse an exception specification to work around a libstdc++ bug. 6134 bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D); 6135 6136 /// Check the given noexcept-specifier, convert its expression, and compute 6137 /// the appropriate ExceptionSpecificationType. 6138 ExprResult ActOnNoexceptSpec(Expr *NoexceptExpr, 6139 ExceptionSpecificationType &EST); 6140 6141 CanThrowResult canThrow(const Stmt *E); 6142 /// Determine whether the callee of a particular function call can throw. 6143 /// E, D and Loc are all optional. 6144 static CanThrowResult canCalleeThrow(Sema &S, const Expr *E, const Decl *D, 6145 SourceLocation Loc = SourceLocation()); 6146 const FunctionProtoType *ResolveExceptionSpec(SourceLocation Loc, 6147 const FunctionProtoType *FPT); 6148 void UpdateExceptionSpec(FunctionDecl *FD, 6149 const FunctionProtoType::ExceptionSpecInfo &ESI); 6150 6151 /// CheckSpecifiedExceptionType - Check if the given type is valid in an 6152 /// exception specification. Incomplete types, or pointers to incomplete types 6153 /// other than void are not allowed. 6154 /// 6155 /// \param[in,out] T The exception type. This will be decayed to a pointer 6156 /// type 6157 /// when the input is an array or a function type. 6158 bool CheckSpecifiedExceptionType(QualType &T, SourceRange Range); 6159 6160 /// CheckDistantExceptionSpec - Check if the given type is a pointer or 6161 /// pointer to member to a function with an exception specification. This 6162 /// means that it is invalid to add another level of indirection. 6163 bool CheckDistantExceptionSpec(QualType T); 6164 bool CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New); 6165 6166 /// CheckEquivalentExceptionSpec - Check if the two types have equivalent 6167 /// exception specifications. Exception specifications are equivalent if 6168 /// they allow exactly the same set of exception types. It does not matter how 6169 /// that is achieved. See C++ [except.spec]p2. 6170 bool CheckEquivalentExceptionSpec(const FunctionProtoType *Old, 6171 SourceLocation OldLoc, 6172 const FunctionProtoType *New, 6173 SourceLocation NewLoc); 6174 bool CheckEquivalentExceptionSpec(const PartialDiagnostic &DiagID, 6175 const PartialDiagnostic &NoteID, 6176 const FunctionProtoType *Old, 6177 SourceLocation OldLoc, 6178 const FunctionProtoType *New, 6179 SourceLocation NewLoc); 6180 bool handlerCanCatch(QualType HandlerType, QualType ExceptionType); 6181 6182 /// CheckExceptionSpecSubset - Check whether the second function type's 6183 /// exception specification is a subset (or equivalent) of the first function 6184 /// type. This is used by override and pointer assignment checks. 6185 bool CheckExceptionSpecSubset( 6186 const PartialDiagnostic &DiagID, const PartialDiagnostic &NestedDiagID, 6187 const PartialDiagnostic &NoteID, const PartialDiagnostic &NoThrowDiagID, 6188 const FunctionProtoType *Superset, bool SkipSupersetFirstParameter, 6189 SourceLocation SuperLoc, const FunctionProtoType *Subset, 6190 bool SkipSubsetFirstParameter, SourceLocation SubLoc); 6191 6192 /// CheckParamExceptionSpec - Check if the parameter and return types of the 6193 /// two functions have equivalent exception specs. This is part of the 6194 /// assignment and override compatibility check. We do not check the 6195 /// parameters of parameter function pointers recursively, as no sane 6196 /// programmer would even be able to write such a function type. 6197 bool CheckParamExceptionSpec( 6198 const PartialDiagnostic &NestedDiagID, const PartialDiagnostic &NoteID, 6199 const FunctionProtoType *Target, bool SkipTargetFirstParameter, 6200 SourceLocation TargetLoc, const FunctionProtoType *Source, 6201 bool SkipSourceFirstParameter, SourceLocation SourceLoc); 6202 6203 bool CheckExceptionSpecCompatibility(Expr *From, QualType ToType); 6204 6205 /// CheckOverridingFunctionExceptionSpec - Checks whether the exception 6206 /// spec is a subset of base spec. 6207 bool CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, 6208 const CXXMethodDecl *Old); 6209 6210 ///@} 6211 6212 // 6213 // 6214 // ------------------------------------------------------------------------- 6215 // 6216 // 6217 6218 /// \name Expressions 6219 /// Implementations are in SemaExpr.cpp 6220 ///@{ 6221 6222 public: 6223 /// Describes how the expressions currently being parsed are 6224 /// evaluated at run-time, if at all. 6225 enum class ExpressionEvaluationContext { 6226 /// The current expression and its subexpressions occur within an 6227 /// unevaluated operand (C++11 [expr]p7), such as the subexpression of 6228 /// \c sizeof, where the type of the expression may be significant but 6229 /// no code will be generated to evaluate the value of the expression at 6230 /// run time. 6231 Unevaluated, 6232 6233 /// The current expression occurs within a braced-init-list within 6234 /// an unevaluated operand. This is mostly like a regular unevaluated 6235 /// context, except that we still instantiate constexpr functions that are 6236 /// referenced here so that we can perform narrowing checks correctly. 6237 UnevaluatedList, 6238 6239 /// The current expression occurs within a discarded statement. 6240 /// This behaves largely similarly to an unevaluated operand in preventing 6241 /// definitions from being required, but not in other ways. 6242 DiscardedStatement, 6243 6244 /// The current expression occurs within an unevaluated 6245 /// operand that unconditionally permits abstract references to 6246 /// fields, such as a SIZE operator in MS-style inline assembly. 6247 UnevaluatedAbstract, 6248 6249 /// The current context is "potentially evaluated" in C++11 terms, 6250 /// but the expression is evaluated at compile-time (like the values of 6251 /// cases in a switch statement). 6252 ConstantEvaluated, 6253 6254 /// In addition of being constant evaluated, the current expression 6255 /// occurs in an immediate function context - either a consteval function 6256 /// or a consteval if statement. 6257 ImmediateFunctionContext, 6258 6259 /// The current expression is potentially evaluated at run time, 6260 /// which means that code may be generated to evaluate the value of the 6261 /// expression at run time. 6262 PotentiallyEvaluated, 6263 6264 /// The current expression is potentially evaluated, but any 6265 /// declarations referenced inside that expression are only used if 6266 /// in fact the current expression is used. 6267 /// 6268 /// This value is used when parsing default function arguments, for which 6269 /// we would like to provide diagnostics (e.g., passing non-POD arguments 6270 /// through varargs) but do not want to mark declarations as "referenced" 6271 /// until the default argument is used. 6272 PotentiallyEvaluatedIfUsed 6273 }; 6274 6275 /// Store a set of either DeclRefExprs or MemberExprs that contain a reference 6276 /// to a variable (constant) that may or may not be odr-used in this Expr, and 6277 /// we won't know until all lvalue-to-rvalue and discarded value conversions 6278 /// have been applied to all subexpressions of the enclosing full expression. 6279 /// This is cleared at the end of each full expression. 6280 using MaybeODRUseExprSet = llvm::SmallSetVector<Expr *, 4>; 6281 MaybeODRUseExprSet MaybeODRUseExprs; 6282 6283 using ImmediateInvocationCandidate = llvm::PointerIntPair<ConstantExpr *, 1>; 6284 6285 /// Data structure used to record current or nested 6286 /// expression evaluation contexts. 6287 struct ExpressionEvaluationContextRecord { 6288 /// The expression evaluation context. 6289 ExpressionEvaluationContext Context; 6290 6291 /// Whether the enclosing context needed a cleanup. 6292 CleanupInfo ParentCleanup; 6293 6294 /// The number of active cleanup objects when we entered 6295 /// this expression evaluation context. 6296 unsigned NumCleanupObjects; 6297 6298 /// The number of typos encountered during this expression evaluation 6299 /// context (i.e. the number of TypoExprs created). 6300 unsigned NumTypos; 6301 6302 MaybeODRUseExprSet SavedMaybeODRUseExprs; 6303 6304 /// The lambdas that are present within this context, if it 6305 /// is indeed an unevaluated context. 6306 SmallVector<LambdaExpr *, 2> Lambdas; 6307 6308 /// The declaration that provides context for lambda expressions 6309 /// and block literals if the normal declaration context does not 6310 /// suffice, e.g., in a default function argument. 6311 Decl *ManglingContextDecl; 6312 6313 /// If we are processing a decltype type, a set of call expressions 6314 /// for which we have deferred checking the completeness of the return type. 6315 SmallVector<CallExpr *, 8> DelayedDecltypeCalls; 6316 6317 /// If we are processing a decltype type, a set of temporary binding 6318 /// expressions for which we have deferred checking the destructor. 6319 SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds; 6320 6321 llvm::SmallPtrSet<const Expr *, 8> PossibleDerefs; 6322 6323 /// Expressions appearing as the LHS of a volatile assignment in this 6324 /// context. We produce a warning for these when popping the context if 6325 /// they are not discarded-value expressions nor unevaluated operands. 6326 SmallVector<Expr *, 2> VolatileAssignmentLHSs; 6327 6328 /// Set of candidates for starting an immediate invocation. 6329 llvm::SmallVector<ImmediateInvocationCandidate, 4> 6330 ImmediateInvocationCandidates; 6331 6332 /// Set of DeclRefExprs referencing a consteval function when used in a 6333 /// context not already known to be immediately invoked. 6334 llvm::SmallPtrSet<DeclRefExpr *, 4> ReferenceToConsteval; 6335 6336 /// P2718R0 - Lifetime extension in range-based for loops. 6337 /// MaterializeTemporaryExprs in for-range-init expressions which need to 6338 /// extend lifetime. Add MaterializeTemporaryExpr* if the value of 6339 /// InLifetimeExtendingContext is true. 6340 SmallVector<MaterializeTemporaryExpr *, 8> ForRangeLifetimeExtendTemps; 6341 6342 /// \brief Describes whether we are in an expression constext which we have 6343 /// to handle differently. 6344 enum ExpressionKind { 6345 EK_Decltype, 6346 EK_TemplateArgument, 6347 EK_AttrArgument, 6348 EK_Other 6349 } ExprContext; 6350 6351 // A context can be nested in both a discarded statement context and 6352 // an immediate function context, so they need to be tracked independently. 6353 bool InDiscardedStatement; 6354 bool InImmediateFunctionContext; 6355 bool InImmediateEscalatingFunctionContext; 6356 6357 bool IsCurrentlyCheckingDefaultArgumentOrInitializer = false; 6358 6359 // We are in a constant context, but we also allow 6360 // non constant expressions, for example for array bounds (which may be 6361 // VLAs). 6362 bool InConditionallyConstantEvaluateContext = false; 6363 6364 /// Whether we are currently in a context in which all temporaries must be 6365 /// lifetime-extended, even if they're not bound to a reference (for 6366 /// example, in a for-range initializer). 6367 bool InLifetimeExtendingContext = false; 6368 6369 // When evaluating immediate functions in the initializer of a default 6370 // argument or default member initializer, this is the declaration whose 6371 // default initializer is being evaluated and the location of the call 6372 // or constructor definition. 6373 struct InitializationContext { InitializationContextExpressionEvaluationContextRecord::InitializationContext6374 InitializationContext(SourceLocation Loc, ValueDecl *Decl, 6375 DeclContext *Context) 6376 : Loc(Loc), Decl(Decl), Context(Context) { 6377 assert(Decl && Context && "invalid initialization context"); 6378 } 6379 6380 SourceLocation Loc; 6381 ValueDecl *Decl = nullptr; 6382 DeclContext *Context = nullptr; 6383 }; 6384 std::optional<InitializationContext> DelayedDefaultInitializationContext; 6385 ExpressionEvaluationContextRecordExpressionEvaluationContextRecord6386 ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context, 6387 unsigned NumCleanupObjects, 6388 CleanupInfo ParentCleanup, 6389 Decl *ManglingContextDecl, 6390 ExpressionKind ExprContext) 6391 : Context(Context), ParentCleanup(ParentCleanup), 6392 NumCleanupObjects(NumCleanupObjects), NumTypos(0), 6393 ManglingContextDecl(ManglingContextDecl), ExprContext(ExprContext), 6394 InDiscardedStatement(false), InImmediateFunctionContext(false), 6395 InImmediateEscalatingFunctionContext(false) {} 6396 isUnevaluatedExpressionEvaluationContextRecord6397 bool isUnevaluated() const { 6398 return Context == ExpressionEvaluationContext::Unevaluated || 6399 Context == ExpressionEvaluationContext::UnevaluatedAbstract || 6400 Context == ExpressionEvaluationContext::UnevaluatedList; 6401 } 6402 isPotentiallyEvaluatedExpressionEvaluationContextRecord6403 bool isPotentiallyEvaluated() const { 6404 return Context == ExpressionEvaluationContext::PotentiallyEvaluated || 6405 Context == 6406 ExpressionEvaluationContext::PotentiallyEvaluatedIfUsed || 6407 Context == ExpressionEvaluationContext::ConstantEvaluated; 6408 } 6409 isConstantEvaluatedExpressionEvaluationContextRecord6410 bool isConstantEvaluated() const { 6411 return Context == ExpressionEvaluationContext::ConstantEvaluated || 6412 Context == ExpressionEvaluationContext::ImmediateFunctionContext; 6413 } 6414 isImmediateFunctionContextExpressionEvaluationContextRecord6415 bool isImmediateFunctionContext() const { 6416 return Context == ExpressionEvaluationContext::ImmediateFunctionContext || 6417 (Context == ExpressionEvaluationContext::DiscardedStatement && 6418 InImmediateFunctionContext) || 6419 // C++23 [expr.const]p14: 6420 // An expression or conversion is in an immediate function 6421 // context if it is potentially evaluated and either: 6422 // * its innermost enclosing non-block scope is a function 6423 // parameter scope of an immediate function, or 6424 // * its enclosing statement is enclosed by the compound- 6425 // statement of a consteval if statement. 6426 (Context == ExpressionEvaluationContext::PotentiallyEvaluated && 6427 InImmediateFunctionContext); 6428 } 6429 isDiscardedStatementContextExpressionEvaluationContextRecord6430 bool isDiscardedStatementContext() const { 6431 return Context == ExpressionEvaluationContext::DiscardedStatement || 6432 (Context == 6433 ExpressionEvaluationContext::ImmediateFunctionContext && 6434 InDiscardedStatement); 6435 } 6436 }; 6437 currentEvaluationContext()6438 const ExpressionEvaluationContextRecord ¤tEvaluationContext() const { 6439 assert(!ExprEvalContexts.empty() && 6440 "Must be in an expression evaluation context"); 6441 return ExprEvalContexts.back(); 6442 }; 6443 currentEvaluationContext()6444 ExpressionEvaluationContextRecord ¤tEvaluationContext() { 6445 assert(!ExprEvalContexts.empty() && 6446 "Must be in an expression evaluation context"); 6447 return ExprEvalContexts.back(); 6448 }; 6449 parentEvaluationContext()6450 ExpressionEvaluationContextRecord &parentEvaluationContext() { 6451 assert(ExprEvalContexts.size() >= 2 && 6452 "Must be in an expression evaluation context"); 6453 return ExprEvalContexts[ExprEvalContexts.size() - 2]; 6454 }; 6455 parentEvaluationContext()6456 const ExpressionEvaluationContextRecord &parentEvaluationContext() const { 6457 return const_cast<Sema *>(this)->parentEvaluationContext(); 6458 }; 6459 isAttrContext()6460 bool isAttrContext() const { 6461 return ExprEvalContexts.back().ExprContext == 6462 ExpressionEvaluationContextRecord::ExpressionKind::EK_AttrArgument; 6463 } 6464 6465 /// Increment when we find a reference; decrement when we find an ignored 6466 /// assignment. Ultimately the value is 0 if every reference is an ignored 6467 /// assignment. 6468 llvm::DenseMap<const VarDecl *, int> RefsMinusAssignments; 6469 6470 /// Used to control the generation of ExprWithCleanups. 6471 CleanupInfo Cleanup; 6472 6473 /// ExprCleanupObjects - This is the stack of objects requiring 6474 /// cleanup that are created by the current full expression. 6475 SmallVector<ExprWithCleanups::CleanupObject, 8> ExprCleanupObjects; 6476 6477 // AssignmentAction - This is used by all the assignment diagnostic functions 6478 // to represent what is actually causing the operation 6479 enum AssignmentAction { 6480 AA_Assigning, 6481 AA_Passing, 6482 AA_Returning, 6483 AA_Converting, 6484 AA_Initializing, 6485 AA_Sending, 6486 AA_Casting, 6487 AA_Passing_CFAudited 6488 }; 6489 6490 /// Determine whether the use of this declaration is valid, without 6491 /// emitting diagnostics. 6492 bool CanUseDecl(NamedDecl *D, bool TreatUnavailableAsInvalid); 6493 // A version of DiagnoseUseOfDecl that should be used if overload resolution 6494 // has been used to find this declaration, which means we don't have to bother 6495 // checking the trailing requires clause. DiagnoseUseOfOverloadedDecl(NamedDecl * D,SourceLocation Loc)6496 bool DiagnoseUseOfOverloadedDecl(NamedDecl *D, SourceLocation Loc) { 6497 return DiagnoseUseOfDecl( 6498 D, Loc, /*UnknownObjCClass=*/nullptr, /*ObjCPropertyAccess=*/false, 6499 /*AvoidPartialAvailabilityChecks=*/false, /*ClassReceiver=*/nullptr, 6500 /*SkipTrailingRequiresClause=*/true); 6501 } 6502 6503 /// Determine whether the use of this declaration is valid, and 6504 /// emit any corresponding diagnostics. 6505 /// 6506 /// This routine diagnoses various problems with referencing 6507 /// declarations that can occur when using a declaration. For example, 6508 /// it might warn if a deprecated or unavailable declaration is being 6509 /// used, or produce an error (and return true) if a C++0x deleted 6510 /// function is being used. 6511 /// 6512 /// \returns true if there was an error (this declaration cannot be 6513 /// referenced), false otherwise. 6514 bool DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, 6515 const ObjCInterfaceDecl *UnknownObjCClass = nullptr, 6516 bool ObjCPropertyAccess = false, 6517 bool AvoidPartialAvailabilityChecks = false, 6518 ObjCInterfaceDecl *ClassReciever = nullptr, 6519 bool SkipTrailingRequiresClause = false); 6520 6521 /// Emit a note explaining that this function is deleted. 6522 void NoteDeletedFunction(FunctionDecl *FD); 6523 6524 /// DiagnoseSentinelCalls - This routine checks whether a call or 6525 /// message-send is to a declaration with the sentinel attribute, and 6526 /// if so, it checks that the requirements of the sentinel are 6527 /// satisfied. 6528 void DiagnoseSentinelCalls(const NamedDecl *D, SourceLocation Loc, 6529 ArrayRef<Expr *> Args); 6530 6531 void PushExpressionEvaluationContext( 6532 ExpressionEvaluationContext NewContext, Decl *LambdaContextDecl = nullptr, 6533 ExpressionEvaluationContextRecord::ExpressionKind Type = 6534 ExpressionEvaluationContextRecord::EK_Other); 6535 enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl }; 6536 void PushExpressionEvaluationContext( 6537 ExpressionEvaluationContext NewContext, ReuseLambdaContextDecl_t, 6538 ExpressionEvaluationContextRecord::ExpressionKind Type = 6539 ExpressionEvaluationContextRecord::EK_Other); 6540 void PopExpressionEvaluationContext(); 6541 6542 void DiscardCleanupsInEvaluationContext(); 6543 6544 ExprResult TransformToPotentiallyEvaluated(Expr *E); 6545 TypeSourceInfo *TransformToPotentiallyEvaluated(TypeSourceInfo *TInfo); 6546 ExprResult HandleExprEvaluationContextForTypeof(Expr *E); 6547 6548 /// Check whether E, which is either a discarded-value expression or an 6549 /// unevaluated operand, is a simple-assignment to a volatlie-qualified 6550 /// lvalue, and if so, remove it from the list of volatile-qualified 6551 /// assignments that we are going to warn are deprecated. 6552 void CheckUnusedVolatileAssignment(Expr *E); 6553 6554 ExprResult ActOnConstantExpression(ExprResult Res); 6555 6556 // Functions for marking a declaration referenced. These functions also 6557 // contain the relevant logic for marking if a reference to a function or 6558 // variable is an odr-use (in the C++11 sense). There are separate variants 6559 // for expressions referring to a decl; these exist because odr-use marking 6560 // needs to be delayed for some constant variables when we build one of the 6561 // named expressions. 6562 // 6563 // MightBeOdrUse indicates whether the use could possibly be an odr-use, and 6564 // should usually be true. This only needs to be set to false if the lack of 6565 // odr-use cannot be determined from the current context (for instance, 6566 // because the name denotes a virtual function and was written without an 6567 // explicit nested-name-specifier). 6568 void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse); 6569 6570 /// Mark a function referenced, and check whether it is odr-used 6571 /// (C++ [basic.def.odr]p2, C99 6.9p3) 6572 void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func, 6573 bool MightBeOdrUse = true); 6574 6575 /// Mark a variable referenced, and check whether it is odr-used 6576 /// (C++ [basic.def.odr]p2, C99 6.9p3). Note that this should not be 6577 /// used directly for normal expressions referring to VarDecl. 6578 void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var); 6579 6580 /// Perform reference-marking and odr-use handling for a DeclRefExpr. 6581 /// 6582 /// Note, this may change the dependence of the DeclRefExpr, and so needs to 6583 /// be handled with care if the DeclRefExpr is not newly-created. 6584 void MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base = nullptr); 6585 6586 /// Perform reference-marking and odr-use handling for a MemberExpr. 6587 void MarkMemberReferenced(MemberExpr *E); 6588 6589 /// Perform reference-marking and odr-use handling for a FunctionParmPackExpr. 6590 void MarkFunctionParmPackReferenced(FunctionParmPackExpr *E); 6591 void MarkCaptureUsedInEnclosingContext(ValueDecl *Capture, SourceLocation Loc, 6592 unsigned CapturingScopeIndex); 6593 6594 ExprResult CheckLValueToRValueConversionOperand(Expr *E); 6595 void CleanupVarDeclMarking(); 6596 6597 enum TryCaptureKind { 6598 TryCapture_Implicit, 6599 TryCapture_ExplicitByVal, 6600 TryCapture_ExplicitByRef 6601 }; 6602 6603 /// Try to capture the given variable. 6604 /// 6605 /// \param Var The variable to capture. 6606 /// 6607 /// \param Loc The location at which the capture occurs. 6608 /// 6609 /// \param Kind The kind of capture, which may be implicit (for either a 6610 /// block or a lambda), or explicit by-value or by-reference (for a lambda). 6611 /// 6612 /// \param EllipsisLoc The location of the ellipsis, if one is provided in 6613 /// an explicit lambda capture. 6614 /// 6615 /// \param BuildAndDiagnose Whether we are actually supposed to add the 6616 /// captures or diagnose errors. If false, this routine merely check whether 6617 /// the capture can occur without performing the capture itself or complaining 6618 /// if the variable cannot be captured. 6619 /// 6620 /// \param CaptureType Will be set to the type of the field used to capture 6621 /// this variable in the innermost block or lambda. Only valid when the 6622 /// variable can be captured. 6623 /// 6624 /// \param DeclRefType Will be set to the type of a reference to the capture 6625 /// from within the current scope. Only valid when the variable can be 6626 /// captured. 6627 /// 6628 /// \param FunctionScopeIndexToStopAt If non-null, it points to the index 6629 /// of the FunctionScopeInfo stack beyond which we do not attempt to capture. 6630 /// This is useful when enclosing lambdas must speculatively capture 6631 /// variables that may or may not be used in certain specializations of 6632 /// a nested generic lambda. 6633 /// 6634 /// \returns true if an error occurred (i.e., the variable cannot be 6635 /// captured) and false if the capture succeeded. 6636 bool tryCaptureVariable(ValueDecl *Var, SourceLocation Loc, 6637 TryCaptureKind Kind, SourceLocation EllipsisLoc, 6638 bool BuildAndDiagnose, QualType &CaptureType, 6639 QualType &DeclRefType, 6640 const unsigned *const FunctionScopeIndexToStopAt); 6641 6642 /// Try to capture the given variable. 6643 bool tryCaptureVariable(ValueDecl *Var, SourceLocation Loc, 6644 TryCaptureKind Kind = TryCapture_Implicit, 6645 SourceLocation EllipsisLoc = SourceLocation()); 6646 6647 /// Checks if the variable must be captured. 6648 bool NeedToCaptureVariable(ValueDecl *Var, SourceLocation Loc); 6649 6650 /// Given a variable, determine the type that a reference to that 6651 /// variable will have in the given scope. 6652 QualType getCapturedDeclRefType(ValueDecl *Var, SourceLocation Loc); 6653 6654 /// Mark all of the declarations referenced within a particular AST node as 6655 /// referenced. Used when template instantiation instantiates a non-dependent 6656 /// type -- entities referenced by the type are now referenced. 6657 void MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T); 6658 6659 /// Mark any declarations that appear within this expression or any 6660 /// potentially-evaluated subexpressions as "referenced". 6661 /// 6662 /// \param SkipLocalVariables If true, don't mark local variables as 6663 /// 'referenced'. 6664 /// \param StopAt Subexpressions that we shouldn't recurse into. 6665 void MarkDeclarationsReferencedInExpr( 6666 Expr *E, bool SkipLocalVariables = false, 6667 ArrayRef<const Expr *> StopAt = std::nullopt); 6668 6669 /// Try to convert an expression \p E to type \p Ty. Returns the result of the 6670 /// conversion. 6671 ExprResult tryConvertExprToType(Expr *E, QualType Ty); 6672 6673 /// Conditionally issue a diagnostic based on the statements's reachability 6674 /// analysis. 6675 /// 6676 /// \param Stmts If Stmts is non-empty, delay reporting the diagnostic until 6677 /// the function body is parsed, and then do a basic reachability analysis to 6678 /// determine if the statement is reachable. If it is unreachable, the 6679 /// diagnostic will not be emitted. 6680 bool DiagIfReachable(SourceLocation Loc, ArrayRef<const Stmt *> Stmts, 6681 const PartialDiagnostic &PD); 6682 6683 /// Conditionally issue a diagnostic based on the current 6684 /// evaluation context. 6685 /// 6686 /// \param Statement If Statement is non-null, delay reporting the 6687 /// diagnostic until the function body is parsed, and then do a basic 6688 /// reachability analysis to determine if the statement is reachable. 6689 /// If it is unreachable, the diagnostic will not be emitted. 6690 bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement, 6691 const PartialDiagnostic &PD); 6692 /// Similar, but diagnostic is only produced if all the specified statements 6693 /// are reachable. 6694 bool DiagRuntimeBehavior(SourceLocation Loc, ArrayRef<const Stmt *> Stmts, 6695 const PartialDiagnostic &PD); 6696 6697 // Primary Expressions. 6698 SourceRange getExprRange(Expr *E) const; 6699 6700 ExprResult ActOnIdExpression(Scope *S, CXXScopeSpec &SS, 6701 SourceLocation TemplateKWLoc, UnqualifiedId &Id, 6702 bool HasTrailingLParen, bool IsAddressOfOperand, 6703 CorrectionCandidateCallback *CCC = nullptr, 6704 bool IsInlineAsmIdentifier = false, 6705 Token *KeywordReplacement = nullptr); 6706 6707 /// Decomposes the given name into a DeclarationNameInfo, its location, and 6708 /// possibly a list of template arguments. 6709 /// 6710 /// If this produces template arguments, it is permitted to call 6711 /// DecomposeTemplateName. 6712 /// 6713 /// This actually loses a lot of source location information for 6714 /// non-standard name kinds; we should consider preserving that in 6715 /// some way. 6716 void DecomposeUnqualifiedId(const UnqualifiedId &Id, 6717 TemplateArgumentListInfo &Buffer, 6718 DeclarationNameInfo &NameInfo, 6719 const TemplateArgumentListInfo *&TemplateArgs); 6720 6721 /// Diagnose a lookup that found results in an enclosing class during error 6722 /// recovery. This usually indicates that the results were found in a 6723 /// dependent base class that could not be searched as part of a template 6724 /// definition. Always issues a diagnostic (though this may be only a warning 6725 /// in MS compatibility mode). 6726 /// 6727 /// Return \c true if the error is unrecoverable, or \c false if the caller 6728 /// should attempt to recover using these lookup results. 6729 bool DiagnoseDependentMemberLookup(const LookupResult &R); 6730 6731 /// Diagnose an empty lookup. 6732 /// 6733 /// \return false if new lookup candidates were found 6734 bool 6735 DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, 6736 CorrectionCandidateCallback &CCC, 6737 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr, 6738 ArrayRef<Expr *> Args = std::nullopt, 6739 DeclContext *LookupCtx = nullptr, 6740 TypoExpr **Out = nullptr); 6741 6742 /// If \p D cannot be odr-used in the current expression evaluation context, 6743 /// return a reason explaining why. Otherwise, return NOUR_None. 6744 NonOdrUseReason getNonOdrUseReasonInCurrentContext(ValueDecl *D); 6745 6746 DeclRefExpr *BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, 6747 SourceLocation Loc, 6748 const CXXScopeSpec *SS = nullptr); 6749 DeclRefExpr * 6750 BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, 6751 const DeclarationNameInfo &NameInfo, 6752 const CXXScopeSpec *SS = nullptr, 6753 NamedDecl *FoundD = nullptr, 6754 SourceLocation TemplateKWLoc = SourceLocation(), 6755 const TemplateArgumentListInfo *TemplateArgs = nullptr); 6756 6757 /// BuildDeclRefExpr - Build an expression that references a 6758 /// declaration that does not require a closure capture. 6759 DeclRefExpr * 6760 BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, 6761 const DeclarationNameInfo &NameInfo, 6762 NestedNameSpecifierLoc NNS, NamedDecl *FoundD = nullptr, 6763 SourceLocation TemplateKWLoc = SourceLocation(), 6764 const TemplateArgumentListInfo *TemplateArgs = nullptr); 6765 6766 bool UseArgumentDependentLookup(const CXXScopeSpec &SS, const LookupResult &R, 6767 bool HasTrailingLParen); 6768 6769 /// BuildQualifiedDeclarationNameExpr - Build a C++ qualified 6770 /// declaration name, generally during template instantiation. 6771 /// There's a large number of things which don't need to be done along 6772 /// this path. 6773 ExprResult BuildQualifiedDeclarationNameExpr( 6774 CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, 6775 bool IsAddressOfOperand, TypeSourceInfo **RecoveryTSI = nullptr); 6776 6777 ExprResult BuildDeclarationNameExpr(const CXXScopeSpec &SS, LookupResult &R, 6778 bool NeedsADL, 6779 bool AcceptInvalidDecl = false); 6780 6781 /// Complete semantic analysis for a reference to the given declaration. 6782 ExprResult BuildDeclarationNameExpr( 6783 const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, 6784 NamedDecl *FoundD = nullptr, 6785 const TemplateArgumentListInfo *TemplateArgs = nullptr, 6786 bool AcceptInvalidDecl = false); 6787 6788 // ExpandFunctionLocalPredefinedMacros - Returns a new vector of Tokens, 6789 // where Tokens representing function local predefined macros (such as 6790 // __FUNCTION__) are replaced (expanded) with string-literal Tokens. 6791 std::vector<Token> ExpandFunctionLocalPredefinedMacros(ArrayRef<Token> Toks); 6792 6793 ExprResult BuildPredefinedExpr(SourceLocation Loc, PredefinedIdentKind IK); 6794 ExprResult ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind); 6795 ExprResult ActOnIntegerConstant(SourceLocation Loc, uint64_t Val); 6796 6797 bool CheckLoopHintExpr(Expr *E, SourceLocation Loc, bool AllowZero); 6798 6799 ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr); 6800 ExprResult ActOnCharacterConstant(const Token &Tok, 6801 Scope *UDLScope = nullptr); 6802 ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E); 6803 ExprResult ActOnParenListExpr(SourceLocation L, SourceLocation R, 6804 MultiExprArg Val); 6805 6806 /// ActOnStringLiteral - The specified tokens were lexed as pasted string 6807 /// fragments (e.g. "foo" "bar" L"baz"). The result string has to handle 6808 /// string concatenation ([C99 5.1.1.2, translation phase #6]), so it may come 6809 /// from multiple tokens. However, the common case is that StringToks points 6810 /// to one string. 6811 ExprResult ActOnStringLiteral(ArrayRef<Token> StringToks, 6812 Scope *UDLScope = nullptr); 6813 6814 ExprResult ActOnUnevaluatedStringLiteral(ArrayRef<Token> StringToks); 6815 6816 /// ControllingExprOrType is either an opaque pointer coming out of a 6817 /// ParsedType or an Expr *. FIXME: it'd be better to split this interface 6818 /// into two so we don't take a void *, but that's awkward because one of 6819 /// the operands is either a ParsedType or an Expr *, which doesn't lend 6820 /// itself to generic code very well. 6821 ExprResult ActOnGenericSelectionExpr(SourceLocation KeyLoc, 6822 SourceLocation DefaultLoc, 6823 SourceLocation RParenLoc, 6824 bool PredicateIsExpr, 6825 void *ControllingExprOrType, 6826 ArrayRef<ParsedType> ArgTypes, 6827 ArrayRef<Expr *> ArgExprs); 6828 /// ControllingExprOrType is either a TypeSourceInfo * or an Expr *. FIXME: 6829 /// it'd be better to split this interface into two so we don't take a 6830 /// void *, but see the FIXME on ActOnGenericSelectionExpr as to why that 6831 /// isn't a trivial change. 6832 ExprResult CreateGenericSelectionExpr(SourceLocation KeyLoc, 6833 SourceLocation DefaultLoc, 6834 SourceLocation RParenLoc, 6835 bool PredicateIsExpr, 6836 void *ControllingExprOrType, 6837 ArrayRef<TypeSourceInfo *> Types, 6838 ArrayRef<Expr *> Exprs); 6839 6840 // Binary/Unary Operators. 'Tok' is the token for the operator. 6841 ExprResult CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, 6842 Expr *InputExpr, bool IsAfterAmp = false); 6843 ExprResult BuildUnaryOp(Scope *S, SourceLocation OpLoc, UnaryOperatorKind Opc, 6844 Expr *Input, bool IsAfterAmp = false); 6845 6846 /// Unary Operators. 'Tok' is the token for the operator. 6847 ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc, tok::TokenKind Op, 6848 Expr *Input, bool IsAfterAmp = false); 6849 6850 /// Determine whether the given expression is a qualified member 6851 /// access expression, of a form that could be turned into a pointer to member 6852 /// with the address-of operator. 6853 bool isQualifiedMemberAccess(Expr *E); 6854 bool CheckUseOfCXXMethodAsAddressOfOperand(SourceLocation OpLoc, 6855 const Expr *Op, 6856 const CXXMethodDecl *MD); 6857 6858 /// CheckAddressOfOperand - The operand of & must be either a function 6859 /// designator or an lvalue designating an object. If it is an lvalue, the 6860 /// object cannot be declared with storage class register or be a bit field. 6861 /// Note: The usual conversions are *not* applied to the operand of the & 6862 /// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue. 6863 /// In C++, the operand might be an overloaded function name, in which case 6864 /// we allow the '&' but retain the overloaded-function type. 6865 QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc); 6866 6867 /// ActOnAlignasTypeArgument - Handle @c alignas(type-id) and @c 6868 /// _Alignas(type-name) . 6869 /// [dcl.align] An alignment-specifier of the form 6870 /// alignas(type-id) has the same effect as alignas(alignof(type-id)). 6871 /// 6872 /// [N1570 6.7.5] _Alignas(type-name) is equivalent to 6873 /// _Alignas(_Alignof(type-name)). 6874 bool ActOnAlignasTypeArgument(StringRef KWName, ParsedType Ty, 6875 SourceLocation OpLoc, SourceRange R); 6876 bool CheckAlignasTypeArgument(StringRef KWName, TypeSourceInfo *TInfo, 6877 SourceLocation OpLoc, SourceRange R); 6878 6879 /// Build a sizeof or alignof expression given a type operand. 6880 ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo, 6881 SourceLocation OpLoc, 6882 UnaryExprOrTypeTrait ExprKind, 6883 SourceRange R); 6884 6885 /// Build a sizeof or alignof expression given an expression 6886 /// operand. 6887 ExprResult CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, 6888 UnaryExprOrTypeTrait ExprKind); 6889 6890 /// ActOnUnaryExprOrTypeTraitExpr - Handle @c sizeof(type) and @c sizeof @c 6891 /// expr and the same for @c alignof and @c __alignof 6892 /// Note that the ArgRange is invalid if isType is false. 6893 ExprResult ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc, 6894 UnaryExprOrTypeTrait ExprKind, 6895 bool IsType, void *TyOrEx, 6896 SourceRange ArgRange); 6897 6898 /// Check for operands with placeholder types and complain if found. 6899 /// Returns ExprError() if there was an error and no recovery was possible. 6900 ExprResult CheckPlaceholderExpr(Expr *E); 6901 bool CheckVecStepExpr(Expr *E); 6902 6903 /// Check the constraints on expression operands to unary type expression 6904 /// and type traits. 6905 /// 6906 /// Completes any types necessary and validates the constraints on the operand 6907 /// expression. The logic mostly mirrors the type-based overload, but may 6908 /// modify the expression as it completes the type for that expression through 6909 /// template instantiation, etc. 6910 bool CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind); 6911 6912 /// Check the constraints on operands to unary expression and type 6913 /// traits. 6914 /// 6915 /// This will complete any types necessary, and validate the various 6916 /// constraints on those operands. 6917 /// 6918 /// The UsualUnaryConversions() function is *not* called by this routine. 6919 /// C99 6.3.2.1p[2-4] all state: 6920 /// Except when it is the operand of the sizeof operator ... 6921 /// 6922 /// C++ [expr.sizeof]p4 6923 /// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer 6924 /// standard conversions are not applied to the operand of sizeof. 6925 /// 6926 /// This policy is followed for all of the unary trait expressions. 6927 bool CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, 6928 SourceRange ExprRange, 6929 UnaryExprOrTypeTrait ExprKind, 6930 StringRef KWName); 6931 6932 ExprResult ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc, 6933 tok::TokenKind Kind, Expr *Input); 6934 6935 ExprResult ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc, 6936 MultiExprArg ArgExprs, 6937 SourceLocation RLoc); 6938 ExprResult CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, 6939 Expr *Idx, SourceLocation RLoc); 6940 6941 ExprResult CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, 6942 Expr *ColumnIdx, 6943 SourceLocation RBLoc); 6944 6945 /// ConvertArgumentsForCall - Converts the arguments specified in 6946 /// Args/NumArgs to the parameter types of the function FDecl with 6947 /// function prototype Proto. Call is the call expression itself, and 6948 /// Fn is the function expression. For a C++ member function, this 6949 /// routine does not attempt to convert the object argument. Returns 6950 /// true if the call is ill-formed. 6951 bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, 6952 const FunctionProtoType *Proto, 6953 ArrayRef<Expr *> Args, SourceLocation RParenLoc, 6954 bool ExecConfig = false); 6955 6956 /// CheckStaticArrayArgument - If the given argument corresponds to a static 6957 /// array parameter, check that it is non-null, and that if it is formed by 6958 /// array-to-pointer decay, the underlying array is sufficiently large. 6959 /// 6960 /// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of 6961 /// the array type derivation, then for each call to the function, the value 6962 /// of the corresponding actual argument shall provide access to the first 6963 /// element of an array with at least as many elements as specified by the 6964 /// size expression. 6965 void CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param, 6966 const Expr *ArgExpr); 6967 6968 /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments. 6969 /// This provides the location of the left/right parens and a list of comma 6970 /// locations. 6971 ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc, 6972 MultiExprArg ArgExprs, SourceLocation RParenLoc, 6973 Expr *ExecConfig = nullptr); 6974 6975 /// BuildCallExpr - Handle a call to Fn with the specified array of arguments. 6976 /// This provides the location of the left/right parens and a list of comma 6977 /// locations. 6978 ExprResult BuildCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc, 6979 MultiExprArg ArgExprs, SourceLocation RParenLoc, 6980 Expr *ExecConfig = nullptr, 6981 bool IsExecConfig = false, 6982 bool AllowRecovery = false); 6983 6984 /// BuildBuiltinCallExpr - Create a call to a builtin function specified by Id 6985 // with the specified CallArgs 6986 Expr *BuildBuiltinCallExpr(SourceLocation Loc, Builtin::ID Id, 6987 MultiExprArg CallArgs); 6988 6989 using ADLCallKind = CallExpr::ADLCallKind; 6990 6991 /// BuildResolvedCallExpr - Build a call to a resolved expression, 6992 /// i.e. an expression not of \p OverloadTy. The expression should 6993 /// unary-convert to an expression of function-pointer or 6994 /// block-pointer type. 6995 /// 6996 /// \param NDecl the declaration being called, if available 6997 ExprResult 6998 BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, 6999 ArrayRef<Expr *> Arg, SourceLocation RParenLoc, 7000 Expr *Config = nullptr, bool IsExecConfig = false, 7001 ADLCallKind UsesADL = ADLCallKind::NotADL); 7002 7003 ExprResult ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D, 7004 ParsedType &Ty, SourceLocation RParenLoc, 7005 Expr *CastExpr); 7006 7007 /// Prepares for a scalar cast, performing all the necessary stages 7008 /// except the final cast and returning the kind required. 7009 CastKind PrepareScalarCast(ExprResult &src, QualType destType); 7010 7011 /// Build an altivec or OpenCL literal. 7012 ExprResult BuildVectorLiteral(SourceLocation LParenLoc, 7013 SourceLocation RParenLoc, Expr *E, 7014 TypeSourceInfo *TInfo); 7015 7016 /// This is not an AltiVec-style cast or or C++ direct-initialization, so turn 7017 /// the ParenListExpr into a sequence of comma binary operators. 7018 ExprResult MaybeConvertParenListExprToParenExpr(Scope *S, Expr *ME); 7019 7020 ExprResult ActOnCompoundLiteral(SourceLocation LParenLoc, ParsedType Ty, 7021 SourceLocation RParenLoc, Expr *InitExpr); 7022 7023 ExprResult BuildCompoundLiteralExpr(SourceLocation LParenLoc, 7024 TypeSourceInfo *TInfo, 7025 SourceLocation RParenLoc, 7026 Expr *LiteralExpr); 7027 7028 ExprResult ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, 7029 SourceLocation RBraceLoc); 7030 7031 ExprResult BuildInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, 7032 SourceLocation RBraceLoc); 7033 7034 /// Binary Operators. 'Tok' is the token for the operator. 7035 ExprResult ActOnBinOp(Scope *S, SourceLocation TokLoc, tok::TokenKind Kind, 7036 Expr *LHSExpr, Expr *RHSExpr); 7037 ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, 7038 Expr *LHSExpr, Expr *RHSExpr); 7039 7040 /// CreateBuiltinBinOp - Creates a new built-in binary operation with 7041 /// operator @p Opc at location @c TokLoc. This routine only supports 7042 /// built-in operations; ActOnBinOp handles overloaded operators. 7043 ExprResult CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, 7044 Expr *LHSExpr, Expr *RHSExpr); 7045 void LookupBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, 7046 UnresolvedSetImpl &Functions); 7047 7048 /// Look for instances where it is likely the comma operator is confused with 7049 /// another operator. There is an explicit list of acceptable expressions for 7050 /// the left hand side of the comma operator, otherwise emit a warning. 7051 void DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc); 7052 7053 /// ActOnConditionalOp - Parse a ?: operation. Note that 'LHS' may be null 7054 /// in the case of a the GNU conditional expr extension. 7055 ExprResult ActOnConditionalOp(SourceLocation QuestionLoc, 7056 SourceLocation ColonLoc, Expr *CondExpr, 7057 Expr *LHSExpr, Expr *RHSExpr); 7058 7059 /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo". 7060 ExprResult ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc, 7061 LabelDecl *TheDecl); 7062 7063 void ActOnStartStmtExpr(); 7064 ExprResult ActOnStmtExpr(Scope *S, SourceLocation LPLoc, Stmt *SubStmt, 7065 SourceLocation RPLoc); 7066 ExprResult BuildStmtExpr(SourceLocation LPLoc, Stmt *SubStmt, 7067 SourceLocation RPLoc, unsigned TemplateDepth); 7068 // Handle the final expression in a statement expression. 7069 ExprResult ActOnStmtExprResult(ExprResult E); 7070 void ActOnStmtExprError(); 7071 7072 // __builtin_offsetof(type, identifier(.identifier|[expr])*) 7073 struct OffsetOfComponent { 7074 SourceLocation LocStart, LocEnd; 7075 bool isBrackets; // true if [expr], false if .ident 7076 union { 7077 IdentifierInfo *IdentInfo; 7078 Expr *E; 7079 } U; 7080 }; 7081 7082 /// __builtin_offsetof(type, a.b[123][456].c) 7083 ExprResult BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, 7084 TypeSourceInfo *TInfo, 7085 ArrayRef<OffsetOfComponent> Components, 7086 SourceLocation RParenLoc); 7087 ExprResult ActOnBuiltinOffsetOf(Scope *S, SourceLocation BuiltinLoc, 7088 SourceLocation TypeLoc, 7089 ParsedType ParsedArgTy, 7090 ArrayRef<OffsetOfComponent> Components, 7091 SourceLocation RParenLoc); 7092 7093 // __builtin_choose_expr(constExpr, expr1, expr2) 7094 ExprResult ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, 7095 Expr *LHSExpr, Expr *RHSExpr, 7096 SourceLocation RPLoc); 7097 7098 // __builtin_va_arg(expr, type) 7099 ExprResult ActOnVAArg(SourceLocation BuiltinLoc, Expr *E, ParsedType Ty, 7100 SourceLocation RPLoc); 7101 ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, 7102 TypeSourceInfo *TInfo, SourceLocation RPLoc); 7103 7104 // __builtin_LINE(), __builtin_FUNCTION(), __builtin_FUNCSIG(), 7105 // __builtin_FILE(), __builtin_COLUMN(), __builtin_source_location() 7106 ExprResult ActOnSourceLocExpr(SourceLocIdentKind Kind, 7107 SourceLocation BuiltinLoc, 7108 SourceLocation RPLoc); 7109 7110 // #embed 7111 ExprResult ActOnEmbedExpr(SourceLocation EmbedKeywordLoc, 7112 StringLiteral *BinaryData); 7113 7114 // Build a potentially resolved SourceLocExpr. 7115 ExprResult BuildSourceLocExpr(SourceLocIdentKind Kind, QualType ResultTy, 7116 SourceLocation BuiltinLoc, SourceLocation RPLoc, 7117 DeclContext *ParentContext); 7118 7119 // __null 7120 ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc); 7121 7122 bool CheckCaseExpression(Expr *E); 7123 7124 //===------------------------- "Block" Extension ------------------------===// 7125 7126 /// ActOnBlockStart - This callback is invoked when a block literal is 7127 /// started. 7128 void ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope); 7129 7130 /// ActOnBlockArguments - This callback allows processing of block arguments. 7131 /// If there are no arguments, this is still invoked. 7132 void ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo, 7133 Scope *CurScope); 7134 7135 /// ActOnBlockError - If there is an error parsing a block, this callback 7136 /// is invoked to pop the information about the block from the action impl. 7137 void ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope); 7138 7139 /// ActOnBlockStmtExpr - This is called when the body of a block statement 7140 /// literal was successfully completed. ^(int x){...} 7141 ExprResult ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body, 7142 Scope *CurScope); 7143 7144 //===---------------------------- Clang Extensions ----------------------===// 7145 7146 /// ActOnConvertVectorExpr - create a new convert-vector expression from the 7147 /// provided arguments. 7148 /// 7149 /// __builtin_convertvector( value, dst type ) 7150 /// 7151 ExprResult ActOnConvertVectorExpr(Expr *E, ParsedType ParsedDestTy, 7152 SourceLocation BuiltinLoc, 7153 SourceLocation RParenLoc); 7154 7155 //===---------------------------- OpenCL Features -----------------------===// 7156 7157 /// Parse a __builtin_astype expression. 7158 /// 7159 /// __builtin_astype( value, dst type ) 7160 /// 7161 ExprResult ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy, 7162 SourceLocation BuiltinLoc, 7163 SourceLocation RParenLoc); 7164 7165 /// Create a new AsTypeExpr node (bitcast) from the arguments. 7166 ExprResult BuildAsTypeExpr(Expr *E, QualType DestTy, 7167 SourceLocation BuiltinLoc, 7168 SourceLocation RParenLoc); 7169 7170 /// Attempts to produce a RecoveryExpr after some AST node cannot be created. 7171 ExprResult CreateRecoveryExpr(SourceLocation Begin, SourceLocation End, 7172 ArrayRef<Expr *> SubExprs, 7173 QualType T = QualType()); 7174 7175 /// Cast a base object to a member's actual type. 7176 /// 7177 /// There are two relevant checks: 7178 /// 7179 /// C++ [class.access.base]p7: 7180 /// 7181 /// If a class member access operator [...] is used to access a non-static 7182 /// data member or non-static member function, the reference is ill-formed 7183 /// if the left operand [...] cannot be implicitly converted to a pointer to 7184 /// the naming class of the right operand. 7185 /// 7186 /// C++ [expr.ref]p7: 7187 /// 7188 /// If E2 is a non-static data member or a non-static member function, the 7189 /// program is ill-formed if the class of which E2 is directly a member is 7190 /// an ambiguous base (11.8) of the naming class (11.9.3) of E2. 7191 /// 7192 /// Note that the latter check does not consider access; the access of the 7193 /// "real" base class is checked as appropriate when checking the access of 7194 /// the member name. 7195 ExprResult PerformObjectMemberConversion(Expr *From, 7196 NestedNameSpecifier *Qualifier, 7197 NamedDecl *FoundDecl, 7198 NamedDecl *Member); 7199 7200 /// CheckCallReturnType - Checks that a call expression's return type is 7201 /// complete. Returns true on failure. The location passed in is the location 7202 /// that best represents the call. 7203 bool CheckCallReturnType(QualType ReturnType, SourceLocation Loc, 7204 CallExpr *CE, FunctionDecl *FD); 7205 7206 /// Emit a warning for all pending noderef expressions that we recorded. 7207 void WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec); 7208 7209 ExprResult BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field); 7210 7211 /// Instantiate or parse a C++ default argument expression as necessary. 7212 /// Return true on error. 7213 bool CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, 7214 ParmVarDecl *Param, Expr *Init = nullptr, 7215 bool SkipImmediateInvocations = true); 7216 7217 /// BuildCXXDefaultArgExpr - Creates a CXXDefaultArgExpr, instantiating 7218 /// the default expr if needed. 7219 ExprResult BuildCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, 7220 ParmVarDecl *Param, Expr *Init = nullptr); 7221 7222 /// Wrap the expression in a ConstantExpr if it is a potential immediate 7223 /// invocation. 7224 ExprResult CheckForImmediateInvocation(ExprResult E, FunctionDecl *Decl); 7225 7226 void MarkExpressionAsImmediateEscalating(Expr *E); 7227 7228 // Check that the SME attributes for PSTATE.ZA and PSTATE.SM are compatible. 7229 bool IsInvalidSMECallConversion(QualType FromType, QualType ToType); 7230 7231 /// Abstract base class used for diagnosing integer constant 7232 /// expression violations. 7233 class VerifyICEDiagnoser { 7234 public: 7235 bool Suppress; 7236 Suppress(Suppress)7237 VerifyICEDiagnoser(bool Suppress = false) : Suppress(Suppress) {} 7238 7239 virtual SemaDiagnosticBuilder 7240 diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T); 7241 virtual SemaDiagnosticBuilder diagnoseNotICE(Sema &S, 7242 SourceLocation Loc) = 0; 7243 virtual SemaDiagnosticBuilder diagnoseFold(Sema &S, SourceLocation Loc); ~VerifyICEDiagnoser()7244 virtual ~VerifyICEDiagnoser() {} 7245 }; 7246 7247 enum AllowFoldKind { 7248 NoFold, 7249 AllowFold, 7250 }; 7251 7252 /// VerifyIntegerConstantExpression - Verifies that an expression is an ICE, 7253 /// and reports the appropriate diagnostics. Returns false on success. 7254 /// Can optionally return the value of the expression. 7255 ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, 7256 VerifyICEDiagnoser &Diagnoser, 7257 AllowFoldKind CanFold = NoFold); 7258 ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, 7259 unsigned DiagID, 7260 AllowFoldKind CanFold = NoFold); 7261 ExprResult VerifyIntegerConstantExpression(Expr *E, 7262 llvm::APSInt *Result = nullptr, 7263 AllowFoldKind CanFold = NoFold); 7264 ExprResult VerifyIntegerConstantExpression(Expr *E, 7265 AllowFoldKind CanFold = NoFold) { 7266 return VerifyIntegerConstantExpression(E, nullptr, CanFold); 7267 } 7268 7269 /// DiagnoseAssignmentAsCondition - Given that an expression is 7270 /// being used as a boolean condition, warn if it's an assignment. 7271 void DiagnoseAssignmentAsCondition(Expr *E); 7272 7273 /// Redundant parentheses over an equality comparison can indicate 7274 /// that the user intended an assignment used as condition. 7275 void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE); 7276 7277 class FullExprArg { 7278 public: FullExprArg()7279 FullExprArg() : E(nullptr) {} FullExprArg(Sema & actions)7280 FullExprArg(Sema &actions) : E(nullptr) {} 7281 release()7282 ExprResult release() { return E; } 7283 get()7284 Expr *get() const { return E; } 7285 7286 Expr *operator->() { return E; } 7287 7288 private: 7289 // FIXME: No need to make the entire Sema class a friend when it's just 7290 // Sema::MakeFullExpr that needs access to the constructor below. 7291 friend class Sema; 7292 FullExprArg(Expr * expr)7293 explicit FullExprArg(Expr *expr) : E(expr) {} 7294 7295 Expr *E; 7296 }; 7297 MakeFullExpr(Expr * Arg)7298 FullExprArg MakeFullExpr(Expr *Arg) { 7299 return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation()); 7300 } MakeFullExpr(Expr * Arg,SourceLocation CC)7301 FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) { 7302 return FullExprArg( 7303 ActOnFinishFullExpr(Arg, CC, /*DiscardedValue*/ false).get()); 7304 } MakeFullDiscardedValueExpr(Expr * Arg)7305 FullExprArg MakeFullDiscardedValueExpr(Expr *Arg) { 7306 ExprResult FE = 7307 ActOnFinishFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation(), 7308 /*DiscardedValue*/ true); 7309 return FullExprArg(FE.get()); 7310 } 7311 7312 class ConditionResult { 7313 Decl *ConditionVar; 7314 FullExprArg Condition; 7315 bool Invalid; 7316 std::optional<bool> KnownValue; 7317 7318 friend class Sema; ConditionResult(Sema & S,Decl * ConditionVar,FullExprArg Condition,bool IsConstexpr)7319 ConditionResult(Sema &S, Decl *ConditionVar, FullExprArg Condition, 7320 bool IsConstexpr) 7321 : ConditionVar(ConditionVar), Condition(Condition), Invalid(false) { 7322 if (IsConstexpr && Condition.get()) { 7323 if (std::optional<llvm::APSInt> Val = 7324 Condition.get()->getIntegerConstantExpr(S.Context)) { 7325 KnownValue = !!(*Val); 7326 } 7327 } 7328 } ConditionResult(bool Invalid)7329 explicit ConditionResult(bool Invalid) 7330 : ConditionVar(nullptr), Condition(nullptr), Invalid(Invalid), 7331 KnownValue(std::nullopt) {} 7332 7333 public: ConditionResult()7334 ConditionResult() : ConditionResult(false) {} isInvalid()7335 bool isInvalid() const { return Invalid; } get()7336 std::pair<VarDecl *, Expr *> get() const { 7337 return std::make_pair(cast_or_null<VarDecl>(ConditionVar), 7338 Condition.get()); 7339 } getKnownValue()7340 std::optional<bool> getKnownValue() const { return KnownValue; } 7341 }; ConditionError()7342 static ConditionResult ConditionError() { return ConditionResult(true); } 7343 7344 /// CheckBooleanCondition - Diagnose problems involving the use of 7345 /// the given expression as a boolean condition (e.g. in an if 7346 /// statement). Also performs the standard function and array 7347 /// decays, possibly changing the input variable. 7348 /// 7349 /// \param Loc - A location associated with the condition, e.g. the 7350 /// 'if' keyword. 7351 /// \return true iff there were any errors 7352 ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E, 7353 bool IsConstexpr = false); 7354 7355 enum class ConditionKind { 7356 Boolean, ///< A boolean condition, from 'if', 'while', 'for', or 'do'. 7357 ConstexprIf, ///< A constant boolean condition from 'if constexpr'. 7358 Switch ///< An integral condition for a 'switch' statement. 7359 }; 7360 7361 ConditionResult ActOnCondition(Scope *S, SourceLocation Loc, Expr *SubExpr, 7362 ConditionKind CK, bool MissingOK = false); 7363 7364 QualType CheckConditionalOperands( // C99 6.5.15 7365 ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, 7366 ExprObjectKind &OK, SourceLocation QuestionLoc); 7367 7368 /// Emit a specialized diagnostic when one expression is a null pointer 7369 /// constant and the other is not a pointer. Returns true if a diagnostic is 7370 /// emitted. 7371 bool DiagnoseConditionalForNull(const Expr *LHSExpr, const Expr *RHSExpr, 7372 SourceLocation QuestionLoc); 7373 7374 /// type checking for vector binary operators. 7375 QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, 7376 SourceLocation Loc, bool IsCompAssign, 7377 bool AllowBothBool, bool AllowBoolConversion, 7378 bool AllowBoolOperation, bool ReportInvalid); 7379 7380 /// Return a signed ext_vector_type that is of identical size and number of 7381 /// elements. For floating point vectors, return an integer type of identical 7382 /// size and number of elements. In the non ext_vector_type case, search from 7383 /// the largest type to the smallest type to avoid cases where long long == 7384 /// long, where long gets picked over long long. 7385 QualType GetSignedVectorType(QualType V); 7386 QualType GetSignedSizelessVectorType(QualType V); 7387 7388 /// CheckVectorCompareOperands - vector comparisons are a clang extension that 7389 /// operates on extended vector types. Instead of producing an IntTy result, 7390 /// like a scalar comparison, a vector comparison produces a vector of integer 7391 /// types. 7392 QualType CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, 7393 SourceLocation Loc, 7394 BinaryOperatorKind Opc); 7395 QualType CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, 7396 SourceLocation Loc, 7397 BinaryOperatorKind Opc); 7398 QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS, 7399 SourceLocation Loc); 7400 7401 /// Context in which we're performing a usual arithmetic conversion. 7402 enum ArithConvKind { 7403 /// An arithmetic operation. 7404 ACK_Arithmetic, 7405 /// A bitwise operation. 7406 ACK_BitwiseOp, 7407 /// A comparison. 7408 ACK_Comparison, 7409 /// A conditional (?:) operator. 7410 ACK_Conditional, 7411 /// A compound assignment expression. 7412 ACK_CompAssign, 7413 }; 7414 7415 // type checking for sizeless vector binary operators. 7416 QualType CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, 7417 SourceLocation Loc, bool IsCompAssign, 7418 ArithConvKind OperationKind); 7419 7420 /// Type checking for matrix binary operators. 7421 QualType CheckMatrixElementwiseOperands(ExprResult &LHS, ExprResult &RHS, 7422 SourceLocation Loc, 7423 bool IsCompAssign); 7424 QualType CheckMatrixMultiplyOperands(ExprResult &LHS, ExprResult &RHS, 7425 SourceLocation Loc, bool IsCompAssign); 7426 7427 /// Are the two types SVE-bitcast-compatible types? I.e. is bitcasting from 7428 /// the first SVE type (e.g. an SVE VLAT) to the second type (e.g. an SVE 7429 /// VLST) allowed? 7430 /// 7431 /// This will also return false if the two given types do not make sense from 7432 /// the perspective of SVE bitcasts. 7433 bool isValidSveBitcast(QualType srcType, QualType destType); 7434 7435 /// Are the two types matrix types and do they have the same dimensions i.e. 7436 /// do they have the same number of rows and the same number of columns? 7437 bool areMatrixTypesOfTheSameDimension(QualType srcTy, QualType destTy); 7438 7439 bool areVectorTypesSameSize(QualType srcType, QualType destType); 7440 7441 /// Are the two types lax-compatible vector types? That is, given 7442 /// that one of them is a vector, do they have equal storage sizes, 7443 /// where the storage size is the number of elements times the element 7444 /// size? 7445 /// 7446 /// This will also return false if either of the types is neither a 7447 /// vector nor a real type. 7448 bool areLaxCompatibleVectorTypes(QualType srcType, QualType destType); 7449 7450 /// Is this a legal conversion between two types, one of which is 7451 /// known to be a vector type? 7452 bool isLaxVectorConversion(QualType srcType, QualType destType); 7453 7454 // This returns true if at least one of the types is an altivec vector. 7455 bool anyAltivecTypes(QualType srcType, QualType destType); 7456 7457 // type checking C++ declaration initializers (C++ [dcl.init]). 7458 7459 /// Check a cast of an unknown-any type. We intentionally only 7460 /// trigger this for C-style casts. 7461 ExprResult checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, 7462 Expr *CastExpr, CastKind &CastKind, 7463 ExprValueKind &VK, CXXCastPath &Path); 7464 7465 /// Force an expression with unknown-type to an expression of the 7466 /// given type. 7467 ExprResult forceUnknownAnyToType(Expr *E, QualType ToType); 7468 7469 /// Type-check an expression that's being passed to an 7470 /// __unknown_anytype parameter. 7471 ExprResult checkUnknownAnyArg(SourceLocation callLoc, Expr *result, 7472 QualType ¶mType); 7473 7474 // CheckMatrixCast - Check type constraints for matrix casts. 7475 // We allow casting between matrixes of the same dimensions i.e. when they 7476 // have the same number of rows and column. Returns true if the cast is 7477 // invalid. 7478 bool CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy, 7479 CastKind &Kind); 7480 7481 // CheckVectorCast - check type constraints for vectors. 7482 // Since vectors are an extension, there are no C standard reference for this. 7483 // We allow casting between vectors and integer datatypes of the same size. 7484 // returns true if the cast is invalid 7485 bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, 7486 CastKind &Kind); 7487 7488 /// Prepare `SplattedExpr` for a vector splat operation, adding 7489 /// implicit casts if necessary. 7490 ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr); 7491 7492 // CheckExtVectorCast - check type constraints for extended vectors. 7493 // Since vectors are an extension, there are no C standard reference for this. 7494 // We allow casting between vectors and integer datatypes of the same size, 7495 // or vectors and the element type of that vector. 7496 // returns the cast expr 7497 ExprResult CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr, 7498 CastKind &Kind); 7499 PreferredConditionType(ConditionKind K)7500 QualType PreferredConditionType(ConditionKind K) const { 7501 return K == ConditionKind::Switch ? Context.IntTy : Context.BoolTy; 7502 } 7503 7504 // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts 7505 // functions and arrays to their respective pointers (C99 6.3.2.1). 7506 ExprResult UsualUnaryConversions(Expr *E); 7507 7508 /// CallExprUnaryConversions - a special case of an unary conversion 7509 /// performed on a function designator of a call expression. 7510 ExprResult CallExprUnaryConversions(Expr *E); 7511 7512 // DefaultFunctionArrayConversion - converts functions and arrays 7513 // to their respective pointers (C99 6.3.2.1). 7514 ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose = true); 7515 7516 // DefaultFunctionArrayLvalueConversion - converts functions and 7517 // arrays to their respective pointers and performs the 7518 // lvalue-to-rvalue conversion. 7519 ExprResult DefaultFunctionArrayLvalueConversion(Expr *E, 7520 bool Diagnose = true); 7521 7522 // DefaultLvalueConversion - performs lvalue-to-rvalue conversion on 7523 // the operand. This function is a no-op if the operand has a function type 7524 // or an array type. 7525 ExprResult DefaultLvalueConversion(Expr *E); 7526 7527 // DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that 7528 // do not have a prototype. Integer promotions are performed on each 7529 // argument, and arguments that have type float are promoted to double. 7530 ExprResult DefaultArgumentPromotion(Expr *E); 7531 7532 VariadicCallType getVariadicCallType(FunctionDecl *FDecl, 7533 const FunctionProtoType *Proto, 7534 Expr *Fn); 7535 7536 // Used for determining in which context a type is allowed to be passed to a 7537 // vararg function. 7538 enum VarArgKind { 7539 VAK_Valid, 7540 VAK_ValidInCXX11, 7541 VAK_Undefined, 7542 VAK_MSVCUndefined, 7543 VAK_Invalid 7544 }; 7545 7546 /// Determine the degree of POD-ness for an expression. 7547 /// Incomplete types are considered POD, since this check can be performed 7548 /// when we're in an unevaluated context. 7549 VarArgKind isValidVarArgType(const QualType &Ty); 7550 7551 /// Check to see if the given expression is a valid argument to a variadic 7552 /// function, issuing a diagnostic if not. 7553 void checkVariadicArgument(const Expr *E, VariadicCallType CT); 7554 7555 /// GatherArgumentsForCall - Collector argument expressions for various 7556 /// form of call prototypes. 7557 bool GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl, 7558 const FunctionProtoType *Proto, 7559 unsigned FirstParam, ArrayRef<Expr *> Args, 7560 SmallVectorImpl<Expr *> &AllArgs, 7561 VariadicCallType CallType = VariadicDoesNotApply, 7562 bool AllowExplicit = false, 7563 bool IsListInitialization = false); 7564 7565 // DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but 7566 // will create a runtime trap if the resulting type is not a POD type. 7567 ExprResult DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, 7568 FunctionDecl *FDecl); 7569 7570 // UsualArithmeticConversions - performs the UsualUnaryConversions on it's 7571 // operands and then handles various conversions that are common to binary 7572 // operators (C99 6.3.1.8). If both operands aren't arithmetic, this 7573 // routine returns the first non-arithmetic type found. The client is 7574 // responsible for emitting appropriate error diagnostics. 7575 QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS, 7576 SourceLocation Loc, ArithConvKind ACK); 7577 7578 /// AssignConvertType - All of the 'assignment' semantic checks return this 7579 /// enum to indicate whether the assignment was allowed. These checks are 7580 /// done for simple assignments, as well as initialization, return from 7581 /// function, argument passing, etc. The query is phrased in terms of a 7582 /// source and destination type. 7583 enum AssignConvertType { 7584 /// Compatible - the types are compatible according to the standard. 7585 Compatible, 7586 7587 /// PointerToInt - The assignment converts a pointer to an int, which we 7588 /// accept as an extension. 7589 PointerToInt, 7590 7591 /// IntToPointer - The assignment converts an int to a pointer, which we 7592 /// accept as an extension. 7593 IntToPointer, 7594 7595 /// FunctionVoidPointer - The assignment is between a function pointer and 7596 /// void*, which the standard doesn't allow, but we accept as an extension. 7597 FunctionVoidPointer, 7598 7599 /// IncompatiblePointer - The assignment is between two pointers types that 7600 /// are not compatible, but we accept them as an extension. 7601 IncompatiblePointer, 7602 7603 /// IncompatibleFunctionPointer - The assignment is between two function 7604 /// pointers types that are not compatible, but we accept them as an 7605 /// extension. 7606 IncompatibleFunctionPointer, 7607 7608 /// IncompatibleFunctionPointerStrict - The assignment is between two 7609 /// function pointer types that are not identical, but are compatible, 7610 /// unless compiled with -fsanitize=cfi, in which case the type mismatch 7611 /// may trip an indirect call runtime check. 7612 IncompatibleFunctionPointerStrict, 7613 7614 /// IncompatiblePointerSign - The assignment is between two pointers types 7615 /// which point to integers which have a different sign, but are otherwise 7616 /// identical. This is a subset of the above, but broken out because it's by 7617 /// far the most common case of incompatible pointers. 7618 IncompatiblePointerSign, 7619 7620 /// CompatiblePointerDiscardsQualifiers - The assignment discards 7621 /// c/v/r qualifiers, which we accept as an extension. 7622 CompatiblePointerDiscardsQualifiers, 7623 7624 /// IncompatiblePointerDiscardsQualifiers - The assignment 7625 /// discards qualifiers that we don't permit to be discarded, 7626 /// like address spaces. 7627 IncompatiblePointerDiscardsQualifiers, 7628 7629 /// IncompatibleNestedPointerAddressSpaceMismatch - The assignment 7630 /// changes address spaces in nested pointer types which is not allowed. 7631 /// For instance, converting __private int ** to __generic int ** is 7632 /// illegal even though __private could be converted to __generic. 7633 IncompatibleNestedPointerAddressSpaceMismatch, 7634 7635 /// IncompatibleNestedPointerQualifiers - The assignment is between two 7636 /// nested pointer types, and the qualifiers other than the first two 7637 /// levels differ e.g. char ** -> const char **, but we accept them as an 7638 /// extension. 7639 IncompatibleNestedPointerQualifiers, 7640 7641 /// IncompatibleVectors - The assignment is between two vector types that 7642 /// have the same size, which we accept as an extension. 7643 IncompatibleVectors, 7644 7645 /// IntToBlockPointer - The assignment converts an int to a block 7646 /// pointer. We disallow this. 7647 IntToBlockPointer, 7648 7649 /// IncompatibleBlockPointer - The assignment is between two block 7650 /// pointers types that are not compatible. 7651 IncompatibleBlockPointer, 7652 7653 /// IncompatibleObjCQualifiedId - The assignment is between a qualified 7654 /// id type and something else (that is incompatible with it). For example, 7655 /// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol. 7656 IncompatibleObjCQualifiedId, 7657 7658 /// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an 7659 /// object with __weak qualifier. 7660 IncompatibleObjCWeakRef, 7661 7662 /// Incompatible - We reject this conversion outright, it is invalid to 7663 /// represent it in the AST. 7664 Incompatible 7665 }; 7666 7667 /// DiagnoseAssignmentResult - Emit a diagnostic, if required, for the 7668 /// assignment conversion type specified by ConvTy. This returns true if the 7669 /// conversion was invalid or false if the conversion was accepted. 7670 bool DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, 7671 QualType DstType, QualType SrcType, 7672 Expr *SrcExpr, AssignmentAction Action, 7673 bool *Complained = nullptr); 7674 7675 /// CheckAssignmentConstraints - Perform type checking for assignment, 7676 /// argument passing, variable initialization, and function return values. 7677 /// C99 6.5.16. 7678 AssignConvertType CheckAssignmentConstraints(SourceLocation Loc, 7679 QualType LHSType, 7680 QualType RHSType); 7681 7682 /// Check assignment constraints and optionally prepare for a conversion of 7683 /// the RHS to the LHS type. The conversion is prepared for if ConvertRHS 7684 /// is true. 7685 AssignConvertType CheckAssignmentConstraints(QualType LHSType, 7686 ExprResult &RHS, CastKind &Kind, 7687 bool ConvertRHS = true); 7688 7689 /// Check assignment constraints for an assignment of RHS to LHSType. 7690 /// 7691 /// \param LHSType The destination type for the assignment. 7692 /// \param RHS The source expression for the assignment. 7693 /// \param Diagnose If \c true, diagnostics may be produced when checking 7694 /// for assignability. If a diagnostic is produced, \p RHS will be 7695 /// set to ExprError(). Note that this function may still return 7696 /// without producing a diagnostic, even for an invalid assignment. 7697 /// \param DiagnoseCFAudited If \c true, the target is a function parameter 7698 /// in an audited Core Foundation API and does not need to be checked 7699 /// for ARC retain issues. 7700 /// \param ConvertRHS If \c true, \p RHS will be updated to model the 7701 /// conversions necessary to perform the assignment. If \c false, 7702 /// \p Diagnose must also be \c false. 7703 AssignConvertType CheckSingleAssignmentConstraints( 7704 QualType LHSType, ExprResult &RHS, bool Diagnose = true, 7705 bool DiagnoseCFAudited = false, bool ConvertRHS = true); 7706 7707 // If the lhs type is a transparent union, check whether we 7708 // can initialize the transparent union with the given expression. 7709 AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType, 7710 ExprResult &RHS); 7711 7712 /// the following "Check" methods will return a valid/converted QualType 7713 /// or a null QualType (indicating an error diagnostic was issued). 7714 7715 /// type checking binary operators (subroutines of CreateBuiltinBinOp). 7716 QualType InvalidOperands(SourceLocation Loc, ExprResult &LHS, 7717 ExprResult &RHS); 7718 7719 /// Diagnose cases where a scalar was implicitly converted to a vector and 7720 /// diagnose the underlying types. Otherwise, diagnose the error 7721 /// as invalid vector logical operands for non-C++ cases. 7722 QualType InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, 7723 ExprResult &RHS); 7724 7725 QualType CheckMultiplyDivideOperands( // C99 6.5.5 7726 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, 7727 bool IsDivide); 7728 QualType CheckRemainderOperands( // C99 6.5.5 7729 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 7730 bool IsCompAssign = false); 7731 QualType CheckAdditionOperands( // C99 6.5.6 7732 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 7733 BinaryOperatorKind Opc, QualType *CompLHSTy = nullptr); 7734 QualType CheckSubtractionOperands( // C99 6.5.6 7735 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 7736 QualType *CompLHSTy = nullptr); 7737 QualType CheckShiftOperands( // C99 6.5.7 7738 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 7739 BinaryOperatorKind Opc, bool IsCompAssign = false); 7740 void CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE); 7741 QualType CheckCompareOperands( // C99 6.5.8/9 7742 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 7743 BinaryOperatorKind Opc); 7744 QualType CheckBitwiseOperands( // C99 6.5.[10...12] 7745 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 7746 BinaryOperatorKind Opc); 7747 QualType CheckLogicalOperands( // C99 6.5.[13,14] 7748 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, 7749 BinaryOperatorKind Opc); 7750 // CheckAssignmentOperands is used for both simple and compound assignment. 7751 // For simple assignment, pass both expressions and a null converted type. 7752 // For compound assignment, pass both expressions and the converted type. 7753 QualType CheckAssignmentOperands( // C99 6.5.16.[1,2] 7754 Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, 7755 BinaryOperatorKind Opc); 7756 7757 /// To be used for checking whether the arguments being passed to 7758 /// function exceeds the number of parameters expected for it. 7759 static bool TooManyArguments(size_t NumParams, size_t NumArgs, 7760 bool PartialOverloading = false) { 7761 // We check whether we're just after a comma in code-completion. 7762 if (NumArgs > 0 && PartialOverloading) 7763 return NumArgs + 1 > NumParams; // If so, we view as an extra argument. 7764 return NumArgs > NumParams; 7765 } 7766 7767 /// Whether the AST is currently being rebuilt to correct immediate 7768 /// invocations. Immediate invocation candidates and references to consteval 7769 /// functions aren't tracked when this is set. 7770 bool RebuildingImmediateInvocation = false; 7771 isAlwaysConstantEvaluatedContext()7772 bool isAlwaysConstantEvaluatedContext() const { 7773 const ExpressionEvaluationContextRecord &Ctx = currentEvaluationContext(); 7774 return (Ctx.isConstantEvaluated() || isConstantEvaluatedOverride) && 7775 !Ctx.InConditionallyConstantEvaluateContext; 7776 } 7777 7778 /// Determines whether we are currently in a context that 7779 /// is not evaluated as per C++ [expr] p5. isUnevaluatedContext()7780 bool isUnevaluatedContext() const { 7781 return currentEvaluationContext().isUnevaluated(); 7782 } 7783 isImmediateFunctionContext()7784 bool isImmediateFunctionContext() const { 7785 return currentEvaluationContext().isImmediateFunctionContext(); 7786 } 7787 isInLifetimeExtendingContext()7788 bool isInLifetimeExtendingContext() const { 7789 assert(!ExprEvalContexts.empty() && 7790 "Must be in an expression evaluation context"); 7791 return ExprEvalContexts.back().InLifetimeExtendingContext; 7792 } 7793 isCheckingDefaultArgumentOrInitializer()7794 bool isCheckingDefaultArgumentOrInitializer() const { 7795 const ExpressionEvaluationContextRecord &Ctx = currentEvaluationContext(); 7796 return (Ctx.Context == 7797 ExpressionEvaluationContext::PotentiallyEvaluatedIfUsed) || 7798 Ctx.IsCurrentlyCheckingDefaultArgumentOrInitializer; 7799 } 7800 7801 std::optional<ExpressionEvaluationContextRecord::InitializationContext> InnermostDeclarationWithDelayedImmediateInvocations()7802 InnermostDeclarationWithDelayedImmediateInvocations() const { 7803 assert(!ExprEvalContexts.empty() && 7804 "Must be in an expression evaluation context"); 7805 for (const auto &Ctx : llvm::reverse(ExprEvalContexts)) { 7806 if (Ctx.Context == ExpressionEvaluationContext::PotentiallyEvaluated && 7807 Ctx.DelayedDefaultInitializationContext) 7808 return Ctx.DelayedDefaultInitializationContext; 7809 if (Ctx.isConstantEvaluated() || Ctx.isImmediateFunctionContext() || 7810 Ctx.isUnevaluated()) 7811 break; 7812 } 7813 return std::nullopt; 7814 } 7815 7816 std::optional<ExpressionEvaluationContextRecord::InitializationContext> OutermostDeclarationWithDelayedImmediateInvocations()7817 OutermostDeclarationWithDelayedImmediateInvocations() const { 7818 assert(!ExprEvalContexts.empty() && 7819 "Must be in an expression evaluation context"); 7820 std::optional<ExpressionEvaluationContextRecord::InitializationContext> Res; 7821 for (auto &Ctx : llvm::reverse(ExprEvalContexts)) { 7822 if (Ctx.Context == ExpressionEvaluationContext::PotentiallyEvaluated && 7823 !Ctx.DelayedDefaultInitializationContext && Res) 7824 break; 7825 if (Ctx.isConstantEvaluated() || Ctx.isImmediateFunctionContext() || 7826 Ctx.isUnevaluated()) 7827 break; 7828 Res = Ctx.DelayedDefaultInitializationContext; 7829 } 7830 return Res; 7831 } 7832 7833 /// keepInLifetimeExtendingContext - Pull down InLifetimeExtendingContext 7834 /// flag from previous context. keepInLifetimeExtendingContext()7835 void keepInLifetimeExtendingContext() { 7836 if (ExprEvalContexts.size() > 2 && 7837 parentEvaluationContext().InLifetimeExtendingContext) { 7838 auto &LastRecord = ExprEvalContexts.back(); 7839 auto &PrevRecord = parentEvaluationContext(); 7840 LastRecord.InLifetimeExtendingContext = 7841 PrevRecord.InLifetimeExtendingContext; 7842 } 7843 } 7844 getDefaultedComparisonKind(const FunctionDecl * FD)7845 DefaultedComparisonKind getDefaultedComparisonKind(const FunctionDecl *FD) { 7846 return getDefaultedFunctionKind(FD).asComparison(); 7847 } 7848 7849 /// Returns a field in a CXXRecordDecl that has the same name as the decl \p 7850 /// SelfAssigned when inside a CXXMethodDecl. 7851 const FieldDecl * 7852 getSelfAssignmentClassMemberCandidate(const ValueDecl *SelfAssigned); 7853 7854 void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D); 7855 7856 template <typename... Ts> RequireCompleteSizedType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)7857 bool RequireCompleteSizedType(SourceLocation Loc, QualType T, unsigned DiagID, 7858 const Ts &...Args) { 7859 SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 7860 return RequireCompleteType(Loc, T, CompleteTypeKind::Normal, Diagnoser); 7861 } 7862 7863 template <typename... Ts> RequireCompleteSizedExprType(Expr * E,unsigned DiagID,const Ts &...Args)7864 bool RequireCompleteSizedExprType(Expr *E, unsigned DiagID, 7865 const Ts &...Args) { 7866 SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 7867 return RequireCompleteExprType(E, CompleteTypeKind::Normal, Diagnoser); 7868 } 7869 7870 /// Abstract class used to diagnose incomplete types. 7871 struct TypeDiagnoser { TypeDiagnoserTypeDiagnoser7872 TypeDiagnoser() {} 7873 7874 virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) = 0; ~TypeDiagnoserTypeDiagnoser7875 virtual ~TypeDiagnoser() {} 7876 }; 7877 7878 template <typename... Ts> class BoundTypeDiagnoser : public TypeDiagnoser { 7879 protected: 7880 unsigned DiagID; 7881 std::tuple<const Ts &...> Args; 7882 7883 template <std::size_t... Is> emit(const SemaDiagnosticBuilder & DB,std::index_sequence<Is...>)7884 void emit(const SemaDiagnosticBuilder &DB, 7885 std::index_sequence<Is...>) const { 7886 // Apply all tuple elements to the builder in order. 7887 bool Dummy[] = {false, (DB << getPrintable(std::get<Is>(Args)))...}; 7888 (void)Dummy; 7889 } 7890 7891 public: BoundTypeDiagnoser(unsigned DiagID,const Ts &...Args)7892 BoundTypeDiagnoser(unsigned DiagID, const Ts &...Args) 7893 : TypeDiagnoser(), DiagID(DiagID), Args(Args...) { 7894 assert(DiagID != 0 && "no diagnostic for type diagnoser"); 7895 } 7896 diagnose(Sema & S,SourceLocation Loc,QualType T)7897 void diagnose(Sema &S, SourceLocation Loc, QualType T) override { 7898 const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID); 7899 emit(DB, std::index_sequence_for<Ts...>()); 7900 DB << T; 7901 } 7902 }; 7903 7904 /// A derivative of BoundTypeDiagnoser for which the diagnostic's type 7905 /// parameter is preceded by a 0/1 enum that is 1 if the type is sizeless. 7906 /// For example, a diagnostic with no other parameters would generally have 7907 /// the form "...%select{incomplete|sizeless}0 type %1...". 7908 template <typename... Ts> 7909 class SizelessTypeDiagnoser : public BoundTypeDiagnoser<Ts...> { 7910 public: SizelessTypeDiagnoser(unsigned DiagID,const Ts &...Args)7911 SizelessTypeDiagnoser(unsigned DiagID, const Ts &...Args) 7912 : BoundTypeDiagnoser<Ts...>(DiagID, Args...) {} 7913 diagnose(Sema & S,SourceLocation Loc,QualType T)7914 void diagnose(Sema &S, SourceLocation Loc, QualType T) override { 7915 const SemaDiagnosticBuilder &DB = S.Diag(Loc, this->DiagID); 7916 this->emit(DB, std::index_sequence_for<Ts...>()); 7917 DB << T->isSizelessType() << T; 7918 } 7919 }; 7920 7921 /// Check an argument list for placeholders that we won't try to 7922 /// handle later. 7923 bool CheckArgsForPlaceholders(MultiExprArg args); 7924 7925 /// The C++ "std::source_location::__impl" struct, defined in 7926 /// \<source_location>. 7927 RecordDecl *StdSourceLocationImplDecl; 7928 7929 /// A stack of expression evaluation contexts. 7930 SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts; 7931 7932 // Set of failed immediate invocations to avoid double diagnosing. 7933 llvm::SmallPtrSet<ConstantExpr *, 4> FailedImmediateInvocations; 7934 7935 /// List of SourceLocations where 'self' is implicitly retained inside a 7936 /// block. 7937 llvm::SmallVector<std::pair<SourceLocation, const BlockDecl *>, 1> 7938 ImplicitlyRetainedSelfLocs; 7939 7940 /// Do an explicit extend of the given block pointer if we're in ARC. 7941 void maybeExtendBlockObject(ExprResult &E); 7942 7943 private: 7944 static BinaryOperatorKind ConvertTokenKindToBinaryOpcode(tok::TokenKind Kind); 7945 7946 /// Methods for marking which expressions involve dereferencing a pointer 7947 /// marked with the 'noderef' attribute. Expressions are checked bottom up as 7948 /// they are parsed, meaning that a noderef pointer may not be accessed. For 7949 /// example, in `&*p` where `p` is a noderef pointer, we will first parse the 7950 /// `*p`, but need to check that `address of` is called on it. This requires 7951 /// keeping a container of all pending expressions and checking if the address 7952 /// of them are eventually taken. 7953 void CheckSubscriptAccessOfNoDeref(const ArraySubscriptExpr *E); 7954 void CheckAddressOfNoDeref(const Expr *E); 7955 7956 ///@} 7957 7958 // 7959 // 7960 // ------------------------------------------------------------------------- 7961 // 7962 // 7963 7964 /// \name C++ Expressions 7965 /// Implementations are in SemaExprCXX.cpp 7966 ///@{ 7967 7968 public: 7969 /// The C++ "std::bad_alloc" class, which is defined by the C++ 7970 /// standard library. 7971 LazyDeclPtr StdBadAlloc; 7972 7973 /// The C++ "std::align_val_t" enum class, which is defined by the C++ 7974 /// standard library. 7975 LazyDeclPtr StdAlignValT; 7976 7977 /// The C++ "type_info" declaration, which is defined in \<typeinfo>. 7978 RecordDecl *CXXTypeInfoDecl; 7979 7980 /// A flag to remember whether the implicit forms of operator new and delete 7981 /// have been declared. 7982 bool GlobalNewDeleteDeclared; 7983 7984 /// Delete-expressions to be analyzed at the end of translation unit 7985 /// 7986 /// This list contains class members, and locations of delete-expressions 7987 /// that could not be proven as to whether they mismatch with new-expression 7988 /// used in initializer of the field. 7989 llvm::MapVector<FieldDecl *, DeleteLocs> DeleteExprs; 7990 7991 /// Handle the result of the special case name lookup for inheriting 7992 /// constructor declarations. 'NS::X::X' and 'NS::X<...>::X' are treated as 7993 /// constructor names in member using declarations, even if 'X' is not the 7994 /// name of the corresponding type. 7995 ParsedType getInheritingConstructorName(CXXScopeSpec &SS, 7996 SourceLocation NameLoc, 7997 const IdentifierInfo &Name); 7998 7999 ParsedType getConstructorName(const IdentifierInfo &II, 8000 SourceLocation NameLoc, Scope *S, 8001 CXXScopeSpec &SS, bool EnteringContext); 8002 ParsedType getDestructorName(const IdentifierInfo &II, SourceLocation NameLoc, 8003 Scope *S, CXXScopeSpec &SS, 8004 ParsedType ObjectType, bool EnteringContext); 8005 8006 ParsedType getDestructorTypeForDecltype(const DeclSpec &DS, 8007 ParsedType ObjectType); 8008 8009 /// Build a C++ typeid expression with a type operand. 8010 ExprResult BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, 8011 TypeSourceInfo *Operand, SourceLocation RParenLoc); 8012 8013 /// Build a C++ typeid expression with an expression operand. 8014 ExprResult BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, 8015 Expr *Operand, SourceLocation RParenLoc); 8016 8017 /// ActOnCXXTypeid - Parse typeid( something ). 8018 ExprResult ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, 8019 bool isType, void *TyOrExpr, 8020 SourceLocation RParenLoc); 8021 8022 /// Build a Microsoft __uuidof expression with a type operand. 8023 ExprResult BuildCXXUuidof(QualType TypeInfoType, SourceLocation TypeidLoc, 8024 TypeSourceInfo *Operand, SourceLocation RParenLoc); 8025 8026 /// Build a Microsoft __uuidof expression with an expression operand. 8027 ExprResult BuildCXXUuidof(QualType TypeInfoType, SourceLocation TypeidLoc, 8028 Expr *Operand, SourceLocation RParenLoc); 8029 8030 /// ActOnCXXUuidof - Parse __uuidof( something ). 8031 ExprResult ActOnCXXUuidof(SourceLocation OpLoc, SourceLocation LParenLoc, 8032 bool isType, void *TyOrExpr, 8033 SourceLocation RParenLoc); 8034 8035 //// ActOnCXXThis - Parse 'this' pointer. 8036 ExprResult ActOnCXXThis(SourceLocation Loc); 8037 8038 /// Check whether the type of 'this' is valid in the current context. 8039 bool CheckCXXThisType(SourceLocation Loc, QualType Type); 8040 8041 /// Build a CXXThisExpr and mark it referenced in the current context. 8042 Expr *BuildCXXThisExpr(SourceLocation Loc, QualType Type, bool IsImplicit); 8043 void MarkThisReferenced(CXXThisExpr *This); 8044 8045 /// Try to retrieve the type of the 'this' pointer. 8046 /// 8047 /// \returns The type of 'this', if possible. Otherwise, returns a NULL type. 8048 QualType getCurrentThisType(); 8049 8050 /// When non-NULL, the C++ 'this' expression is allowed despite the 8051 /// current context not being a non-static member function. In such cases, 8052 /// this provides the type used for 'this'. 8053 QualType CXXThisTypeOverride; 8054 8055 /// RAII object used to temporarily allow the C++ 'this' expression 8056 /// to be used, with the given qualifiers on the current class type. 8057 class CXXThisScopeRAII { 8058 Sema &S; 8059 QualType OldCXXThisTypeOverride; 8060 bool Enabled; 8061 8062 public: 8063 /// Introduce a new scope where 'this' may be allowed (when enabled), 8064 /// using the given declaration (which is either a class template or a 8065 /// class) along with the given qualifiers. 8066 /// along with the qualifiers placed on '*this'. 8067 CXXThisScopeRAII(Sema &S, Decl *ContextDecl, Qualifiers CXXThisTypeQuals, 8068 bool Enabled = true); 8069 8070 ~CXXThisScopeRAII(); 8071 }; 8072 8073 /// Make sure the value of 'this' is actually available in the current 8074 /// context, if it is a potentially evaluated context. 8075 /// 8076 /// \param Loc The location at which the capture of 'this' occurs. 8077 /// 8078 /// \param Explicit Whether 'this' is explicitly captured in a lambda 8079 /// capture list. 8080 /// 8081 /// \param FunctionScopeIndexToStopAt If non-null, it points to the index 8082 /// of the FunctionScopeInfo stack beyond which we do not attempt to capture. 8083 /// This is useful when enclosing lambdas must speculatively capture 8084 /// 'this' that may or may not be used in certain specializations of 8085 /// a nested generic lambda (depending on whether the name resolves to 8086 /// a non-static member function or a static function). 8087 /// \return returns 'true' if failed, 'false' if success. 8088 bool CheckCXXThisCapture( 8089 SourceLocation Loc, bool Explicit = false, bool BuildAndDiagnose = true, 8090 const unsigned *const FunctionScopeIndexToStopAt = nullptr, 8091 bool ByCopy = false); 8092 8093 /// Determine whether the given type is the type of *this that is used 8094 /// outside of the body of a member function for a type that is currently 8095 /// being defined. 8096 bool isThisOutsideMemberFunctionBody(QualType BaseType); 8097 8098 /// ActOnCXXBoolLiteral - Parse {true,false} literals. 8099 ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind); 8100 8101 /// ActOnCXXNullPtrLiteral - Parse 'nullptr'. 8102 ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc); 8103 8104 //// ActOnCXXThrow - Parse throw expressions. 8105 ExprResult ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *expr); 8106 ExprResult BuildCXXThrow(SourceLocation OpLoc, Expr *Ex, 8107 bool IsThrownVarInScope); 8108 8109 /// CheckCXXThrowOperand - Validate the operand of a throw. 8110 bool CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ThrowTy, Expr *E); 8111 8112 /// ActOnCXXTypeConstructExpr - Parse construction of a specified type. 8113 /// Can be interpreted either as function-style casting ("int(x)") 8114 /// or class type construction ("ClassType(x,y,z)") 8115 /// or creation of a value-initialized type ("int()"). 8116 ExprResult ActOnCXXTypeConstructExpr(ParsedType TypeRep, 8117 SourceLocation LParenOrBraceLoc, 8118 MultiExprArg Exprs, 8119 SourceLocation RParenOrBraceLoc, 8120 bool ListInitialization); 8121 8122 ExprResult BuildCXXTypeConstructExpr(TypeSourceInfo *Type, 8123 SourceLocation LParenLoc, 8124 MultiExprArg Exprs, 8125 SourceLocation RParenLoc, 8126 bool ListInitialization); 8127 8128 /// Parsed a C++ 'new' expression (C++ 5.3.4). 8129 /// 8130 /// E.g.: 8131 /// @code new (memory) int[size][4] @endcode 8132 /// or 8133 /// @code ::new Foo(23, "hello") @endcode 8134 /// 8135 /// \param StartLoc The first location of the expression. 8136 /// \param UseGlobal True if 'new' was prefixed with '::'. 8137 /// \param PlacementLParen Opening paren of the placement arguments. 8138 /// \param PlacementArgs Placement new arguments. 8139 /// \param PlacementRParen Closing paren of the placement arguments. 8140 /// \param TypeIdParens If the type is in parens, the source range. 8141 /// \param D The type to be allocated, as well as array dimensions. 8142 /// \param Initializer The initializing expression or initializer-list, or 8143 /// null if there is none. 8144 ExprResult ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, 8145 SourceLocation PlacementLParen, 8146 MultiExprArg PlacementArgs, 8147 SourceLocation PlacementRParen, 8148 SourceRange TypeIdParens, Declarator &D, 8149 Expr *Initializer); 8150 ExprResult 8151 BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, 8152 MultiExprArg PlacementArgs, SourceLocation PlacementRParen, 8153 SourceRange TypeIdParens, QualType AllocType, 8154 TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, 8155 SourceRange DirectInitRange, Expr *Initializer); 8156 8157 /// Determine whether \p FD is an aligned allocation or deallocation 8158 /// function that is unavailable. 8159 bool isUnavailableAlignedAllocationFunction(const FunctionDecl &FD) const; 8160 8161 /// Produce diagnostics if \p FD is an aligned allocation or deallocation 8162 /// function that is unavailable. 8163 void diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD, 8164 SourceLocation Loc); 8165 8166 /// Checks that a type is suitable as the allocated type 8167 /// in a new-expression. 8168 bool CheckAllocatedType(QualType AllocType, SourceLocation Loc, 8169 SourceRange R); 8170 8171 /// The scope in which to find allocation functions. 8172 enum AllocationFunctionScope { 8173 /// Only look for allocation functions in the global scope. 8174 AFS_Global, 8175 /// Only look for allocation functions in the scope of the 8176 /// allocated class. 8177 AFS_Class, 8178 /// Look for allocation functions in both the global scope 8179 /// and in the scope of the allocated class. 8180 AFS_Both 8181 }; 8182 8183 /// Finds the overloads of operator new and delete that are appropriate 8184 /// for the allocation. 8185 bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, 8186 AllocationFunctionScope NewScope, 8187 AllocationFunctionScope DeleteScope, 8188 QualType AllocType, bool IsArray, 8189 bool &PassAlignment, MultiExprArg PlaceArgs, 8190 FunctionDecl *&OperatorNew, 8191 FunctionDecl *&OperatorDelete, 8192 bool Diagnose = true); 8193 8194 /// DeclareGlobalNewDelete - Declare the global forms of operator new and 8195 /// delete. These are: 8196 /// @code 8197 /// // C++03: 8198 /// void* operator new(std::size_t) throw(std::bad_alloc); 8199 /// void* operator new[](std::size_t) throw(std::bad_alloc); 8200 /// void operator delete(void *) throw(); 8201 /// void operator delete[](void *) throw(); 8202 /// // C++11: 8203 /// void* operator new(std::size_t); 8204 /// void* operator new[](std::size_t); 8205 /// void operator delete(void *) noexcept; 8206 /// void operator delete[](void *) noexcept; 8207 /// // C++1y: 8208 /// void* operator new(std::size_t); 8209 /// void* operator new[](std::size_t); 8210 /// void operator delete(void *) noexcept; 8211 /// void operator delete[](void *) noexcept; 8212 /// void operator delete(void *, std::size_t) noexcept; 8213 /// void operator delete[](void *, std::size_t) noexcept; 8214 /// @endcode 8215 /// Note that the placement and nothrow forms of new are *not* implicitly 8216 /// declared. Their use requires including \<new\>. 8217 void DeclareGlobalNewDelete(); 8218 void DeclareGlobalAllocationFunction(DeclarationName Name, QualType Return, 8219 ArrayRef<QualType> Params); 8220 8221 bool FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, 8222 DeclarationName Name, FunctionDecl *&Operator, 8223 bool Diagnose = true, bool WantSize = false, 8224 bool WantAligned = false); 8225 FunctionDecl *FindUsualDeallocationFunction(SourceLocation StartLoc, 8226 bool CanProvideSize, 8227 bool Overaligned, 8228 DeclarationName Name); 8229 FunctionDecl *FindDeallocationFunctionForDestructor(SourceLocation StartLoc, 8230 CXXRecordDecl *RD); 8231 8232 /// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in: 8233 /// @code ::delete ptr; @endcode 8234 /// or 8235 /// @code delete [] ptr; @endcode 8236 ExprResult ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, 8237 bool ArrayForm, Expr *Operand); 8238 void CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, 8239 bool IsDelete, bool CallCanBeVirtual, 8240 bool WarnOnNonAbstractTypes, 8241 SourceLocation DtorLoc); 8242 8243 ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen, 8244 Expr *Operand, SourceLocation RParen); 8245 ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, 8246 SourceLocation RParen); 8247 8248 ExprResult ActOnStartCXXMemberReference(Scope *S, Expr *Base, 8249 SourceLocation OpLoc, 8250 tok::TokenKind OpKind, 8251 ParsedType &ObjectType, 8252 bool &MayBePseudoDestructor); 8253 8254 ExprResult BuildPseudoDestructorExpr( 8255 Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, 8256 const CXXScopeSpec &SS, TypeSourceInfo *ScopeType, SourceLocation CCLoc, 8257 SourceLocation TildeLoc, PseudoDestructorTypeStorage DestroyedType); 8258 8259 ExprResult ActOnPseudoDestructorExpr( 8260 Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, 8261 CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, 8262 SourceLocation TildeLoc, UnqualifiedId &SecondTypeName); 8263 8264 ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base, 8265 SourceLocation OpLoc, 8266 tok::TokenKind OpKind, 8267 SourceLocation TildeLoc, 8268 const DeclSpec &DS); 8269 8270 /// MaybeCreateExprWithCleanups - If the current full-expression 8271 /// requires any cleanups, surround it with a ExprWithCleanups node. 8272 /// Otherwise, just returns the passed-in expression. 8273 Expr *MaybeCreateExprWithCleanups(Expr *SubExpr); 8274 Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt); 8275 ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr); 8276 ActOnFinishFullExpr(Expr * Expr,bool DiscardedValue)8277 ExprResult ActOnFinishFullExpr(Expr *Expr, bool DiscardedValue) { 8278 return ActOnFinishFullExpr( 8279 Expr, Expr ? Expr->getExprLoc() : SourceLocation(), DiscardedValue); 8280 } 8281 ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC, 8282 bool DiscardedValue, bool IsConstexpr = false, 8283 bool IsTemplateArgument = false); 8284 StmtResult ActOnFinishFullStmt(Stmt *Stmt); 8285 8286 /// Process the expression contained within a decltype. For such expressions, 8287 /// certain semantic checks on temporaries are delayed until this point, and 8288 /// are omitted for the 'topmost' call in the decltype expression. If the 8289 /// topmost call bound a temporary, strip that temporary off the expression. 8290 ExprResult ActOnDecltypeExpression(Expr *E); 8291 8292 bool checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Id, 8293 bool IsUDSuffix); 8294 8295 bool isUsualDeallocationFunction(const CXXMethodDecl *FD); 8296 8297 ConditionResult ActOnConditionVariable(Decl *ConditionVar, 8298 SourceLocation StmtLoc, 8299 ConditionKind CK); 8300 8301 /// Check the use of the given variable as a C++ condition in an if, 8302 /// while, do-while, or switch statement. 8303 ExprResult CheckConditionVariable(VarDecl *ConditionVar, 8304 SourceLocation StmtLoc, ConditionKind CK); 8305 8306 /// CheckCXXBooleanCondition - Returns true if conversion to bool is invalid. 8307 ExprResult CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr = false); 8308 8309 /// Helper function to determine whether this is the (deprecated) C++ 8310 /// conversion from a string literal to a pointer to non-const char or 8311 /// non-const wchar_t (for narrow and wide string literals, 8312 /// respectively). 8313 bool IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType); 8314 8315 /// PerformImplicitConversion - Perform an implicit conversion of the 8316 /// expression From to the type ToType using the pre-computed implicit 8317 /// conversion sequence ICS. Returns the converted 8318 /// expression. Action is the kind of conversion we're performing, 8319 /// used in the error message. 8320 ExprResult PerformImplicitConversion( 8321 Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, 8322 AssignmentAction Action, 8323 CheckedConversionKind CCK = CheckedConversionKind::Implicit); 8324 8325 /// PerformImplicitConversion - Perform an implicit conversion of the 8326 /// expression From to the type ToType by following the standard 8327 /// conversion sequence SCS. Returns the converted 8328 /// expression. Flavor is the context in which we're performing this 8329 /// conversion, for use in error messages. 8330 ExprResult PerformImplicitConversion(Expr *From, QualType ToType, 8331 const StandardConversionSequence &SCS, 8332 AssignmentAction Action, 8333 CheckedConversionKind CCK); 8334 8335 bool CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N); 8336 8337 /// Parsed one of the type trait support pseudo-functions. 8338 ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc, 8339 ArrayRef<ParsedType> Args, 8340 SourceLocation RParenLoc); 8341 ExprResult BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc, 8342 ArrayRef<TypeSourceInfo *> Args, 8343 SourceLocation RParenLoc); 8344 8345 /// ActOnArrayTypeTrait - Parsed one of the binary type trait support 8346 /// pseudo-functions. 8347 ExprResult ActOnArrayTypeTrait(ArrayTypeTrait ATT, SourceLocation KWLoc, 8348 ParsedType LhsTy, Expr *DimExpr, 8349 SourceLocation RParen); 8350 8351 ExprResult BuildArrayTypeTrait(ArrayTypeTrait ATT, SourceLocation KWLoc, 8352 TypeSourceInfo *TSInfo, Expr *DimExpr, 8353 SourceLocation RParen); 8354 8355 /// ActOnExpressionTrait - Parsed one of the unary type trait support 8356 /// pseudo-functions. 8357 ExprResult ActOnExpressionTrait(ExpressionTrait OET, SourceLocation KWLoc, 8358 Expr *Queried, SourceLocation RParen); 8359 8360 ExprResult BuildExpressionTrait(ExpressionTrait OET, SourceLocation KWLoc, 8361 Expr *Queried, SourceLocation RParen); 8362 8363 QualType CheckPointerToMemberOperands( // C++ 5.5 8364 ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation OpLoc, 8365 bool isIndirect); 8366 QualType CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, 8367 ExprResult &RHS, 8368 SourceLocation QuestionLoc); 8369 8370 QualType CheckSizelessVectorConditionalTypes(ExprResult &Cond, 8371 ExprResult &LHS, ExprResult &RHS, 8372 SourceLocation QuestionLoc); 8373 8374 /// Check the operands of ?: under C++ semantics. 8375 /// 8376 /// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y 8377 /// extension. In this case, LHS == Cond. (But they're not aliases.) 8378 /// 8379 /// This function also implements GCC's vector extension and the 8380 /// OpenCL/ext_vector_type extension for conditionals. The vector extensions 8381 /// permit the use of a?b:c where the type of a is that of a integer vector 8382 /// with the same number of elements and size as the vectors of b and c. If 8383 /// one of either b or c is a scalar it is implicitly converted to match the 8384 /// type of the vector. Otherwise the expression is ill-formed. If both b and 8385 /// c are scalars, then b and c are checked and converted to the type of a if 8386 /// possible. 8387 /// 8388 /// The expressions are evaluated differently for GCC's and OpenCL's 8389 /// extensions. For the GCC extension, the ?: operator is evaluated as 8390 /// (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]). 8391 /// For the OpenCL extensions, the ?: operator is evaluated as 8392 /// (most-significant-bit-set(a[0]) ? b[0] : c[0], .. , 8393 /// most-significant-bit-set(a[n]) ? b[n] : c[n]). 8394 QualType CXXCheckConditionalOperands( // C++ 5.16 8395 ExprResult &cond, ExprResult &lhs, ExprResult &rhs, ExprValueKind &VK, 8396 ExprObjectKind &OK, SourceLocation questionLoc); 8397 8398 /// Find a merged pointer type and convert the two expressions to it. 8399 /// 8400 /// This finds the composite pointer type for \p E1 and \p E2 according to 8401 /// C++2a [expr.type]p3. It converts both expressions to this type and returns 8402 /// it. It does not emit diagnostics (FIXME: that's not true if \p 8403 /// ConvertArgs is \c true). 8404 /// 8405 /// \param Loc The location of the operator requiring these two expressions to 8406 /// be converted to the composite pointer type. 8407 /// 8408 /// \param ConvertArgs If \c false, do not convert E1 and E2 to the target 8409 /// type. 8410 QualType FindCompositePointerType(SourceLocation Loc, Expr *&E1, Expr *&E2, 8411 bool ConvertArgs = true); 8412 QualType FindCompositePointerType(SourceLocation Loc, ExprResult &E1, 8413 ExprResult &E2, bool ConvertArgs = true) { 8414 Expr *E1Tmp = E1.get(), *E2Tmp = E2.get(); 8415 QualType Composite = 8416 FindCompositePointerType(Loc, E1Tmp, E2Tmp, ConvertArgs); 8417 E1 = E1Tmp; 8418 E2 = E2Tmp; 8419 return Composite; 8420 } 8421 8422 /// MaybeBindToTemporary - If the passed in expression has a record type with 8423 /// a non-trivial destructor, this will return CXXBindTemporaryExpr. Otherwise 8424 /// it simply returns the passed in expression. 8425 ExprResult MaybeBindToTemporary(Expr *E); 8426 8427 /// IgnoredValueConversions - Given that an expression's result is 8428 /// syntactically ignored, perform any conversions that are 8429 /// required. 8430 ExprResult IgnoredValueConversions(Expr *E); 8431 8432 ExprResult CheckUnevaluatedOperand(Expr *E); 8433 8434 /// Process any TypoExprs in the given Expr and its children, 8435 /// generating diagnostics as appropriate and returning a new Expr if there 8436 /// were typos that were all successfully corrected and ExprError if one or 8437 /// more typos could not be corrected. 8438 /// 8439 /// \param E The Expr to check for TypoExprs. 8440 /// 8441 /// \param InitDecl A VarDecl to avoid because the Expr being corrected is its 8442 /// initializer. 8443 /// 8444 /// \param RecoverUncorrectedTypos If true, when typo correction fails, it 8445 /// will rebuild the given Expr with all TypoExprs degraded to RecoveryExprs. 8446 /// 8447 /// \param Filter A function applied to a newly rebuilt Expr to determine if 8448 /// it is an acceptable/usable result from a single combination of typo 8449 /// corrections. As long as the filter returns ExprError, different 8450 /// combinations of corrections will be tried until all are exhausted. 8451 ExprResult CorrectDelayedTyposInExpr( 8452 Expr *E, VarDecl *InitDecl = nullptr, 8453 bool RecoverUncorrectedTypos = false, 8454 llvm::function_ref<ExprResult(Expr *)> Filter = 8455 [](Expr *E) -> ExprResult { return E; }); 8456 8457 ExprResult CorrectDelayedTyposInExpr( 8458 ExprResult ER, VarDecl *InitDecl = nullptr, 8459 bool RecoverUncorrectedTypos = false, 8460 llvm::function_ref<ExprResult(Expr *)> Filter = 8461 [](Expr *E) -> ExprResult { return E; }) { 8462 return ER.isInvalid() 8463 ? ER 8464 : CorrectDelayedTyposInExpr(ER.get(), InitDecl, 8465 RecoverUncorrectedTypos, Filter); 8466 } 8467 8468 /// Describes the result of an "if-exists" condition check. 8469 enum IfExistsResult { 8470 /// The symbol exists. 8471 IER_Exists, 8472 8473 /// The symbol does not exist. 8474 IER_DoesNotExist, 8475 8476 /// The name is a dependent name, so the results will differ 8477 /// from one instantiation to the next. 8478 IER_Dependent, 8479 8480 /// An error occurred. 8481 IER_Error 8482 }; 8483 8484 IfExistsResult 8485 CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS, 8486 const DeclarationNameInfo &TargetNameInfo); 8487 8488 IfExistsResult CheckMicrosoftIfExistsSymbol(Scope *S, 8489 SourceLocation KeywordLoc, 8490 bool IsIfExists, CXXScopeSpec &SS, 8491 UnqualifiedId &Name); 8492 8493 RequiresExprBodyDecl * 8494 ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, 8495 ArrayRef<ParmVarDecl *> LocalParameters, 8496 Scope *BodyScope); 8497 void ActOnFinishRequiresExpr(); 8498 concepts::Requirement *ActOnSimpleRequirement(Expr *E); 8499 concepts::Requirement *ActOnTypeRequirement(SourceLocation TypenameKWLoc, 8500 CXXScopeSpec &SS, 8501 SourceLocation NameLoc, 8502 const IdentifierInfo *TypeName, 8503 TemplateIdAnnotation *TemplateId); 8504 concepts::Requirement *ActOnCompoundRequirement(Expr *E, 8505 SourceLocation NoexceptLoc); 8506 concepts::Requirement *ActOnCompoundRequirement( 8507 Expr *E, SourceLocation NoexceptLoc, CXXScopeSpec &SS, 8508 TemplateIdAnnotation *TypeConstraint, unsigned Depth); 8509 concepts::Requirement *ActOnNestedRequirement(Expr *Constraint); 8510 concepts::ExprRequirement *BuildExprRequirement( 8511 Expr *E, bool IsSatisfied, SourceLocation NoexceptLoc, 8512 concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement); 8513 concepts::ExprRequirement *BuildExprRequirement( 8514 concepts::Requirement::SubstitutionDiagnostic *ExprSubstDiag, 8515 bool IsSatisfied, SourceLocation NoexceptLoc, 8516 concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement); 8517 concepts::TypeRequirement *BuildTypeRequirement(TypeSourceInfo *Type); 8518 concepts::TypeRequirement *BuildTypeRequirement( 8519 concepts::Requirement::SubstitutionDiagnostic *SubstDiag); 8520 concepts::NestedRequirement *BuildNestedRequirement(Expr *E); 8521 concepts::NestedRequirement * 8522 BuildNestedRequirement(StringRef InvalidConstraintEntity, 8523 const ASTConstraintSatisfaction &Satisfaction); 8524 ExprResult ActOnRequiresExpr(SourceLocation RequiresKWLoc, 8525 RequiresExprBodyDecl *Body, 8526 SourceLocation LParenLoc, 8527 ArrayRef<ParmVarDecl *> LocalParameters, 8528 SourceLocation RParenLoc, 8529 ArrayRef<concepts::Requirement *> Requirements, 8530 SourceLocation ClosingBraceLoc); 8531 8532 private: 8533 ExprResult BuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult, 8534 bool IsDelete); 8535 8536 void AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE); 8537 void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc, 8538 bool DeleteWasArrayForm); 8539 8540 ///@} 8541 8542 // 8543 // 8544 // ------------------------------------------------------------------------- 8545 // 8546 // 8547 8548 /// \name Member Access Expressions 8549 /// Implementations are in SemaExprMember.cpp 8550 ///@{ 8551 8552 public: 8553 /// Check whether an expression might be an implicit class member access. 8554 bool isPotentialImplicitMemberAccess(const CXXScopeSpec &SS, LookupResult &R, 8555 bool IsAddressOfOperand); 8556 8557 /// Builds an expression which might be an implicit member expression. 8558 ExprResult BuildPossibleImplicitMemberExpr( 8559 const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R, 8560 const TemplateArgumentListInfo *TemplateArgs, const Scope *S); 8561 8562 /// Builds an implicit member access expression. The current context 8563 /// is known to be an instance method, and the given unqualified lookup 8564 /// set is known to contain only instance members, at least one of which 8565 /// is from an appropriate type. 8566 ExprResult 8567 BuildImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 8568 LookupResult &R, 8569 const TemplateArgumentListInfo *TemplateArgs, 8570 bool IsDefiniteInstance, const Scope *S); 8571 8572 ExprResult ActOnDependentMemberExpr( 8573 Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OpLoc, 8574 const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 8575 NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, 8576 const TemplateArgumentListInfo *TemplateArgs); 8577 8578 /// The main callback when the parser finds something like 8579 /// expression . [nested-name-specifier] identifier 8580 /// expression -> [nested-name-specifier] identifier 8581 /// where 'identifier' encompasses a fairly broad spectrum of 8582 /// possibilities, including destructor and operator references. 8583 /// 8584 /// \param OpKind either tok::arrow or tok::period 8585 /// \param ObjCImpDecl the current Objective-C \@implementation 8586 /// decl; this is an ugly hack around the fact that Objective-C 8587 /// \@implementations aren't properly put in the context chain 8588 ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base, SourceLocation OpLoc, 8589 tok::TokenKind OpKind, CXXScopeSpec &SS, 8590 SourceLocation TemplateKWLoc, 8591 UnqualifiedId &Member, Decl *ObjCImpDecl); 8592 8593 MemberExpr * 8594 BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc, 8595 NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc, 8596 ValueDecl *Member, DeclAccessPair FoundDecl, 8597 bool HadMultipleCandidates, 8598 const DeclarationNameInfo &MemberNameInfo, QualType Ty, 8599 ExprValueKind VK, ExprObjectKind OK, 8600 const TemplateArgumentListInfo *TemplateArgs = nullptr); 8601 8602 // Check whether the declarations we found through a nested-name 8603 // specifier in a member expression are actually members of the base 8604 // type. The restriction here is: 8605 // 8606 // C++ [expr.ref]p2: 8607 // ... In these cases, the id-expression shall name a 8608 // member of the class or of one of its base classes. 8609 // 8610 // So it's perfectly legitimate for the nested-name specifier to name 8611 // an unrelated class, and for us to find an overload set including 8612 // decls from classes which are not superclasses, as long as the decl 8613 // we actually pick through overload resolution is from a superclass. 8614 bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType, 8615 const CXXScopeSpec &SS, 8616 const LookupResult &R); 8617 8618 // This struct is for use by ActOnMemberAccess to allow 8619 // BuildMemberReferenceExpr to be able to reinvoke ActOnMemberAccess after 8620 // changing the access operator from a '.' to a '->' (to see if that is the 8621 // change needed to fix an error about an unknown member, e.g. when the class 8622 // defines a custom operator->). 8623 struct ActOnMemberAccessExtraArgs { 8624 Scope *S; 8625 UnqualifiedId &Id; 8626 Decl *ObjCImpDecl; 8627 }; 8628 8629 ExprResult BuildMemberReferenceExpr( 8630 Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow, 8631 CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 8632 NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, 8633 const TemplateArgumentListInfo *TemplateArgs, const Scope *S, 8634 ActOnMemberAccessExtraArgs *ExtraArgs = nullptr); 8635 8636 ExprResult 8637 BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc, 8638 bool IsArrow, const CXXScopeSpec &SS, 8639 SourceLocation TemplateKWLoc, 8640 NamedDecl *FirstQualifierInScope, LookupResult &R, 8641 const TemplateArgumentListInfo *TemplateArgs, 8642 const Scope *S, bool SuppressQualifierCheck = false, 8643 ActOnMemberAccessExtraArgs *ExtraArgs = nullptr); 8644 8645 ExprResult BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow, 8646 SourceLocation OpLoc, 8647 const CXXScopeSpec &SS, FieldDecl *Field, 8648 DeclAccessPair FoundDecl, 8649 const DeclarationNameInfo &MemberNameInfo); 8650 8651 /// Perform conversions on the LHS of a member access expression. 8652 ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow); 8653 8654 ExprResult BuildAnonymousStructUnionMemberReference( 8655 const CXXScopeSpec &SS, SourceLocation nameLoc, 8656 IndirectFieldDecl *indirectField, 8657 DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_none), 8658 Expr *baseObjectExpr = nullptr, SourceLocation opLoc = SourceLocation()); 8659 8660 private: 8661 void CheckMemberAccessOfNoDeref(const MemberExpr *E); 8662 8663 ///@} 8664 8665 // 8666 // 8667 // ------------------------------------------------------------------------- 8668 // 8669 // 8670 8671 /// \name Initializers 8672 /// Implementations are in SemaInit.cpp 8673 ///@{ 8674 8675 public: 8676 /// Stack of types that correspond to the parameter entities that are 8677 /// currently being copy-initialized. Can be empty. 8678 llvm::SmallVector<QualType, 4> CurrentParameterCopyTypes; 8679 8680 llvm::DenseMap<unsigned, CXXDeductionGuideDecl *> 8681 AggregateDeductionCandidates; 8682 8683 bool IsStringInit(Expr *Init, const ArrayType *AT); 8684 8685 /// Determine whether we can perform aggregate initialization for the purposes 8686 /// of overload resolution. 8687 bool CanPerformAggregateInitializationForOverloadResolution( 8688 const InitializedEntity &Entity, InitListExpr *From); 8689 8690 ExprResult ActOnDesignatedInitializer(Designation &Desig, 8691 SourceLocation EqualOrColonLoc, 8692 bool GNUSyntax, ExprResult Init); 8693 8694 /// Check that the lifetime of the initializer (and its subobjects) is 8695 /// sufficient for initializing the entity, and perform lifetime extension 8696 /// (when permitted) if not. 8697 void checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init); 8698 8699 MaterializeTemporaryExpr * 8700 CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary, 8701 bool BoundToLvalueReference); 8702 8703 /// If \p E is a prvalue denoting an unmaterialized temporary, materialize 8704 /// it as an xvalue. In C++98, the result will still be a prvalue, because 8705 /// we don't have xvalues there. 8706 ExprResult TemporaryMaterializationConversion(Expr *E); 8707 8708 ExprResult PerformQualificationConversion( 8709 Expr *E, QualType Ty, ExprValueKind VK = VK_PRValue, 8710 CheckedConversionKind CCK = CheckedConversionKind::Implicit); 8711 8712 bool CanPerformCopyInitialization(const InitializedEntity &Entity, 8713 ExprResult Init); 8714 ExprResult PerformCopyInitialization(const InitializedEntity &Entity, 8715 SourceLocation EqualLoc, ExprResult Init, 8716 bool TopLevelOfInitList = false, 8717 bool AllowExplicit = false); 8718 8719 QualType DeduceTemplateSpecializationFromInitializer( 8720 TypeSourceInfo *TInfo, const InitializedEntity &Entity, 8721 const InitializationKind &Kind, MultiExprArg Init); 8722 8723 ///@} 8724 8725 // 8726 // 8727 // ------------------------------------------------------------------------- 8728 // 8729 // 8730 8731 /// \name C++ Lambda Expressions 8732 /// Implementations are in SemaLambda.cpp 8733 ///@{ 8734 8735 public: 8736 /// Create a new lambda closure type. 8737 CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange, 8738 TypeSourceInfo *Info, 8739 unsigned LambdaDependencyKind, 8740 LambdaCaptureDefault CaptureDefault); 8741 8742 /// Number lambda for linkage purposes if necessary. 8743 void handleLambdaNumbering(CXXRecordDecl *Class, CXXMethodDecl *Method, 8744 std::optional<CXXRecordDecl::LambdaNumbering> 8745 NumberingOverride = std::nullopt); 8746 8747 /// Endow the lambda scope info with the relevant properties. 8748 void buildLambdaScope(sema::LambdaScopeInfo *LSI, CXXMethodDecl *CallOperator, 8749 SourceRange IntroducerRange, 8750 LambdaCaptureDefault CaptureDefault, 8751 SourceLocation CaptureDefaultLoc, bool ExplicitParams, 8752 bool Mutable); 8753 8754 CXXMethodDecl *CreateLambdaCallOperator(SourceRange IntroducerRange, 8755 CXXRecordDecl *Class); 8756 8757 void AddTemplateParametersToLambdaCallOperator( 8758 CXXMethodDecl *CallOperator, CXXRecordDecl *Class, 8759 TemplateParameterList *TemplateParams); 8760 8761 void CompleteLambdaCallOperator( 8762 CXXMethodDecl *Method, SourceLocation LambdaLoc, 8763 SourceLocation CallOperatorLoc, Expr *TrailingRequiresClause, 8764 TypeSourceInfo *MethodTyInfo, ConstexprSpecKind ConstexprKind, 8765 StorageClass SC, ArrayRef<ParmVarDecl *> Params, 8766 bool HasExplicitResultType); 8767 8768 /// Returns true if the explicit object parameter was invalid. 8769 bool DiagnoseInvalidExplicitObjectParameterInLambda(CXXMethodDecl *Method, 8770 SourceLocation CallLoc); 8771 8772 /// Perform initialization analysis of the init-capture and perform 8773 /// any implicit conversions such as an lvalue-to-rvalue conversion if 8774 /// not being used to initialize a reference. actOnLambdaInitCaptureInitialization(SourceLocation Loc,bool ByRef,SourceLocation EllipsisLoc,IdentifierInfo * Id,LambdaCaptureInitKind InitKind,Expr * & Init)8775 ParsedType actOnLambdaInitCaptureInitialization( 8776 SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, 8777 IdentifierInfo *Id, LambdaCaptureInitKind InitKind, Expr *&Init) { 8778 return ParsedType::make(buildLambdaInitCaptureInitialization( 8779 Loc, ByRef, EllipsisLoc, std::nullopt, Id, 8780 InitKind != LambdaCaptureInitKind::CopyInit, Init)); 8781 } 8782 QualType buildLambdaInitCaptureInitialization( 8783 SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, 8784 std::optional<unsigned> NumExpansions, IdentifierInfo *Id, 8785 bool DirectInit, Expr *&Init); 8786 8787 /// Create a dummy variable within the declcontext of the lambda's 8788 /// call operator, for name lookup purposes for a lambda init capture. 8789 /// 8790 /// CodeGen handles emission of lambda captures, ignoring these dummy 8791 /// variables appropriately. 8792 VarDecl *createLambdaInitCaptureVarDecl( 8793 SourceLocation Loc, QualType InitCaptureType, SourceLocation EllipsisLoc, 8794 IdentifierInfo *Id, unsigned InitStyle, Expr *Init, DeclContext *DeclCtx); 8795 8796 /// Add an init-capture to a lambda scope. 8797 void addInitCapture(sema::LambdaScopeInfo *LSI, VarDecl *Var, bool ByRef); 8798 8799 /// Note that we have finished the explicit captures for the 8800 /// given lambda. 8801 void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI); 8802 8803 /// Deduce a block or lambda's return type based on the return 8804 /// statements present in the body. 8805 void deduceClosureReturnType(sema::CapturingScopeInfo &CSI); 8806 8807 /// Once the Lambdas capture are known, we can start to create the closure, 8808 /// call operator method, and keep track of the captures. 8809 /// We do the capture lookup here, but they are not actually captured until 8810 /// after we know what the qualifiers of the call operator are. 8811 void ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, 8812 Scope *CurContext); 8813 8814 /// This is called after parsing the explicit template parameter list 8815 /// on a lambda (if it exists) in C++2a. 8816 void ActOnLambdaExplicitTemplateParameterList(LambdaIntroducer &Intro, 8817 SourceLocation LAngleLoc, 8818 ArrayRef<NamedDecl *> TParams, 8819 SourceLocation RAngleLoc, 8820 ExprResult RequiresClause); 8821 8822 void ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro, 8823 SourceLocation MutableLoc); 8824 8825 void ActOnLambdaClosureParameters( 8826 Scope *LambdaScope, 8827 MutableArrayRef<DeclaratorChunk::ParamInfo> ParamInfo); 8828 8829 /// ActOnStartOfLambdaDefinition - This is called just before we start 8830 /// parsing the body of a lambda; it analyzes the explicit captures and 8831 /// arguments, and sets up various data-structures for the body of the 8832 /// lambda. 8833 void ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, 8834 Declarator &ParamInfo, const DeclSpec &DS); 8835 8836 /// ActOnLambdaError - If there is an error parsing a lambda, this callback 8837 /// is invoked to pop the information about the lambda. 8838 void ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope, 8839 bool IsInstantiation = false); 8840 8841 /// ActOnLambdaExpr - This is called when the body of a lambda expression 8842 /// was successfully completed. 8843 ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body); 8844 8845 /// Does copying/destroying the captured variable have side effects? 8846 bool CaptureHasSideEffects(const sema::Capture &From); 8847 8848 /// Diagnose if an explicit lambda capture is unused. Returns true if a 8849 /// diagnostic is emitted. 8850 bool DiagnoseUnusedLambdaCapture(SourceRange CaptureRange, 8851 const sema::Capture &From); 8852 8853 /// Build a FieldDecl suitable to hold the given capture. 8854 FieldDecl *BuildCaptureField(RecordDecl *RD, const sema::Capture &Capture); 8855 8856 /// Initialize the given capture with a suitable expression. 8857 ExprResult BuildCaptureInit(const sema::Capture &Capture, 8858 SourceLocation ImplicitCaptureLoc, 8859 bool IsOpenMPMapping = false); 8860 8861 /// Complete a lambda-expression having processed and attached the 8862 /// lambda body. 8863 ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, 8864 sema::LambdaScopeInfo *LSI); 8865 8866 /// Get the return type to use for a lambda's conversion function(s) to 8867 /// function pointer type, given the type of the call operator. 8868 QualType 8869 getLambdaConversionFunctionResultType(const FunctionProtoType *CallOpType, 8870 CallingConv CC); 8871 8872 ExprResult BuildBlockForLambdaConversion(SourceLocation CurrentLocation, 8873 SourceLocation ConvLocation, 8874 CXXConversionDecl *Conv, Expr *Src); 8875 8876 class LambdaScopeForCallOperatorInstantiationRAII 8877 : private FunctionScopeRAII { 8878 public: 8879 LambdaScopeForCallOperatorInstantiationRAII( 8880 Sema &SemasRef, FunctionDecl *FD, MultiLevelTemplateArgumentList MLTAL, 8881 LocalInstantiationScope &Scope, 8882 bool ShouldAddDeclsFromParentScope = true); 8883 }; 8884 8885 /// Compute the mangling number context for a lambda expression or 8886 /// block literal. Also return the extra mangling decl if any. 8887 /// 8888 /// \param DC - The DeclContext containing the lambda expression or 8889 /// block literal. 8890 std::tuple<MangleNumberingContext *, Decl *> 8891 getCurrentMangleNumberContext(const DeclContext *DC); 8892 8893 ///@} 8894 8895 // 8896 // 8897 // ------------------------------------------------------------------------- 8898 // 8899 // 8900 8901 /// \name Name Lookup 8902 /// 8903 /// These routines provide name lookup that is used during semantic 8904 /// analysis to resolve the various kinds of names (identifiers, 8905 /// overloaded operator names, constructor names, etc.) into zero or 8906 /// more declarations within a particular scope. The major entry 8907 /// points are LookupName, which performs unqualified name lookup, 8908 /// and LookupQualifiedName, which performs qualified name lookup. 8909 /// 8910 /// All name lookup is performed based on some specific criteria, 8911 /// which specify what names will be visible to name lookup and how 8912 /// far name lookup should work. These criteria are important both 8913 /// for capturing language semantics (certain lookups will ignore 8914 /// certain names, for example) and for performance, since name 8915 /// lookup is often a bottleneck in the compilation of C++. Name 8916 /// lookup criteria is specified via the LookupCriteria enumeration. 8917 /// 8918 /// The results of name lookup can vary based on the kind of name 8919 /// lookup performed, the current language, and the translation 8920 /// unit. In C, for example, name lookup will either return nothing 8921 /// (no entity found) or a single declaration. In C++, name lookup 8922 /// can additionally refer to a set of overloaded functions or 8923 /// result in an ambiguity. All of the possible results of name 8924 /// lookup are captured by the LookupResult class, which provides 8925 /// the ability to distinguish among them. 8926 /// 8927 /// Implementations are in SemaLookup.cpp 8928 ///@{ 8929 8930 public: 8931 /// Tracks whether we are in a context where typo correction is 8932 /// disabled. 8933 bool DisableTypoCorrection; 8934 8935 /// The number of typos corrected by CorrectTypo. 8936 unsigned TyposCorrected; 8937 8938 typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet; 8939 typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations; 8940 8941 /// A cache containing identifiers for which typo correction failed and 8942 /// their locations, so that repeated attempts to correct an identifier in a 8943 /// given location are ignored if typo correction already failed for it. 8944 IdentifierSourceLocations TypoCorrectionFailures; 8945 8946 /// SpecialMemberOverloadResult - The overloading result for a special member 8947 /// function. 8948 /// 8949 /// This is basically a wrapper around PointerIntPair. The lowest bits of the 8950 /// integer are used to determine whether overload resolution succeeded. 8951 class SpecialMemberOverloadResult { 8952 public: 8953 enum Kind { NoMemberOrDeleted, Ambiguous, Success }; 8954 8955 private: 8956 llvm::PointerIntPair<CXXMethodDecl *, 2> Pair; 8957 8958 public: SpecialMemberOverloadResult()8959 SpecialMemberOverloadResult() {} SpecialMemberOverloadResult(CXXMethodDecl * MD)8960 SpecialMemberOverloadResult(CXXMethodDecl *MD) 8961 : Pair(MD, MD->isDeleted() ? NoMemberOrDeleted : Success) {} 8962 getMethod()8963 CXXMethodDecl *getMethod() const { return Pair.getPointer(); } setMethod(CXXMethodDecl * MD)8964 void setMethod(CXXMethodDecl *MD) { Pair.setPointer(MD); } 8965 getKind()8966 Kind getKind() const { return static_cast<Kind>(Pair.getInt()); } setKind(Kind K)8967 void setKind(Kind K) { Pair.setInt(K); } 8968 }; 8969 8970 class SpecialMemberOverloadResultEntry : public llvm::FastFoldingSetNode, 8971 public SpecialMemberOverloadResult { 8972 public: SpecialMemberOverloadResultEntry(const llvm::FoldingSetNodeID & ID)8973 SpecialMemberOverloadResultEntry(const llvm::FoldingSetNodeID &ID) 8974 : FastFoldingSetNode(ID) {} 8975 }; 8976 8977 /// A cache of special member function overload resolution results 8978 /// for C++ records. 8979 llvm::FoldingSet<SpecialMemberOverloadResultEntry> SpecialMemberCache; 8980 8981 /// Holds TypoExprs that are created from `createDelayedTypo`. This is used by 8982 /// `TransformTypos` in order to keep track of any TypoExprs that are created 8983 /// recursively during typo correction and wipe them away if the correction 8984 /// fails. 8985 llvm::SmallVector<TypoExpr *, 2> TypoExprs; 8986 8987 enum class AcceptableKind { Visible, Reachable }; 8988 8989 // Members have to be NamespaceDecl* or TranslationUnitDecl*. 8990 // TODO: make this is a typesafe union. 8991 typedef llvm::SmallSetVector<DeclContext *, 16> AssociatedNamespaceSet; 8992 typedef llvm::SmallSetVector<CXXRecordDecl *, 16> AssociatedClassSet; 8993 8994 /// Describes the kind of name lookup to perform. 8995 enum LookupNameKind { 8996 /// Ordinary name lookup, which finds ordinary names (functions, 8997 /// variables, typedefs, etc.) in C and most kinds of names 8998 /// (functions, variables, members, types, etc.) in C++. 8999 LookupOrdinaryName = 0, 9000 /// Tag name lookup, which finds the names of enums, classes, 9001 /// structs, and unions. 9002 LookupTagName, 9003 /// Label name lookup. 9004 LookupLabel, 9005 /// Member name lookup, which finds the names of 9006 /// class/struct/union members. 9007 LookupMemberName, 9008 /// Look up of an operator name (e.g., operator+) for use with 9009 /// operator overloading. This lookup is similar to ordinary name 9010 /// lookup, but will ignore any declarations that are class members. 9011 LookupOperatorName, 9012 /// Look up a name following ~ in a destructor name. This is an ordinary 9013 /// lookup, but prefers tags to typedefs. 9014 LookupDestructorName, 9015 /// Look up of a name that precedes the '::' scope resolution 9016 /// operator in C++. This lookup completely ignores operator, object, 9017 /// function, and enumerator names (C++ [basic.lookup.qual]p1). 9018 LookupNestedNameSpecifierName, 9019 /// Look up a namespace name within a C++ using directive or 9020 /// namespace alias definition, ignoring non-namespace names (C++ 9021 /// [basic.lookup.udir]p1). 9022 LookupNamespaceName, 9023 /// Look up all declarations in a scope with the given name, 9024 /// including resolved using declarations. This is appropriate 9025 /// for checking redeclarations for a using declaration. 9026 LookupUsingDeclName, 9027 /// Look up an ordinary name that is going to be redeclared as a 9028 /// name with linkage. This lookup ignores any declarations that 9029 /// are outside of the current scope unless they have linkage. See 9030 /// C99 6.2.2p4-5 and C++ [basic.link]p6. 9031 LookupRedeclarationWithLinkage, 9032 /// Look up a friend of a local class. This lookup does not look 9033 /// outside the innermost non-class scope. See C++11 [class.friend]p11. 9034 LookupLocalFriendName, 9035 /// Look up the name of an Objective-C protocol. 9036 LookupObjCProtocolName, 9037 /// Look up implicit 'self' parameter of an objective-c method. 9038 LookupObjCImplicitSelfParam, 9039 /// Look up the name of an OpenMP user-defined reduction operation. 9040 LookupOMPReductionName, 9041 /// Look up the name of an OpenMP user-defined mapper. 9042 LookupOMPMapperName, 9043 /// Look up any declaration with any name. 9044 LookupAnyName 9045 }; 9046 9047 /// The possible outcomes of name lookup for a literal operator. 9048 enum LiteralOperatorLookupResult { 9049 /// The lookup resulted in an error. 9050 LOLR_Error, 9051 /// The lookup found no match but no diagnostic was issued. 9052 LOLR_ErrorNoDiagnostic, 9053 /// The lookup found a single 'cooked' literal operator, which 9054 /// expects a normal literal to be built and passed to it. 9055 LOLR_Cooked, 9056 /// The lookup found a single 'raw' literal operator, which expects 9057 /// a string literal containing the spelling of the literal token. 9058 LOLR_Raw, 9059 /// The lookup found an overload set of literal operator templates, 9060 /// which expect the characters of the spelling of the literal token to be 9061 /// passed as a non-type template argument pack. 9062 LOLR_Template, 9063 /// The lookup found an overload set of literal operator templates, 9064 /// which expect the character type and characters of the spelling of the 9065 /// string literal token to be passed as template arguments. 9066 LOLR_StringTemplatePack, 9067 }; 9068 9069 SpecialMemberOverloadResult 9070 LookupSpecialMember(CXXRecordDecl *D, CXXSpecialMemberKind SM, bool ConstArg, 9071 bool VolatileArg, bool RValueThis, bool ConstThis, 9072 bool VolatileThis); 9073 9074 typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator; 9075 typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)> 9076 TypoRecoveryCallback; 9077 9078 RedeclarationKind forRedeclarationInCurContext() const; 9079 9080 /// Look up a name, looking for a single declaration. Return 9081 /// null if the results were absent, ambiguous, or overloaded. 9082 /// 9083 /// It is preferable to use the elaborated form and explicitly handle 9084 /// ambiguity and overloaded. 9085 NamedDecl *LookupSingleName( 9086 Scope *S, DeclarationName Name, SourceLocation Loc, 9087 LookupNameKind NameKind, 9088 RedeclarationKind Redecl = RedeclarationKind::NotForRedeclaration); 9089 9090 /// Lookup a builtin function, when name lookup would otherwise 9091 /// fail. 9092 bool LookupBuiltin(LookupResult &R); 9093 void LookupNecessaryTypesForBuiltin(Scope *S, unsigned ID); 9094 9095 /// Perform unqualified name lookup starting from a given 9096 /// scope. 9097 /// 9098 /// Unqualified name lookup (C++ [basic.lookup.unqual], C99 6.2.1) is 9099 /// used to find names within the current scope. For example, 'x' in 9100 /// @code 9101 /// int x; 9102 /// int f() { 9103 /// return x; // unqualified name look finds 'x' in the global scope 9104 /// } 9105 /// @endcode 9106 /// 9107 /// Different lookup criteria can find different names. For example, a 9108 /// particular scope can have both a struct and a function of the same 9109 /// name, and each can be found by certain lookup criteria. For more 9110 /// information about lookup criteria, see the documentation for the 9111 /// class LookupCriteria. 9112 /// 9113 /// @param S The scope from which unqualified name lookup will 9114 /// begin. If the lookup criteria permits, name lookup may also search 9115 /// in the parent scopes. 9116 /// 9117 /// @param [in,out] R Specifies the lookup to perform (e.g., the name to 9118 /// look up and the lookup kind), and is updated with the results of lookup 9119 /// including zero or more declarations and possibly additional information 9120 /// used to diagnose ambiguities. 9121 /// 9122 /// @returns \c true if lookup succeeded and false otherwise. 9123 bool LookupName(LookupResult &R, Scope *S, bool AllowBuiltinCreation = false, 9124 bool ForceNoCPlusPlus = false); 9125 9126 /// Perform qualified name lookup into a given context. 9127 /// 9128 /// Qualified name lookup (C++ [basic.lookup.qual]) is used to find 9129 /// names when the context of those names is explicit specified, e.g., 9130 /// "std::vector" or "x->member", or as part of unqualified name lookup. 9131 /// 9132 /// Different lookup criteria can find different names. For example, a 9133 /// particular scope can have both a struct and a function of the same 9134 /// name, and each can be found by certain lookup criteria. For more 9135 /// information about lookup criteria, see the documentation for the 9136 /// class LookupCriteria. 9137 /// 9138 /// \param R captures both the lookup criteria and any lookup results found. 9139 /// 9140 /// \param LookupCtx The context in which qualified name lookup will 9141 /// search. If the lookup criteria permits, name lookup may also search 9142 /// in the parent contexts or (for C++ classes) base classes. 9143 /// 9144 /// \param InUnqualifiedLookup true if this is qualified name lookup that 9145 /// occurs as part of unqualified name lookup. 9146 /// 9147 /// \returns true if lookup succeeded, false if it failed. 9148 bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, 9149 bool InUnqualifiedLookup = false); 9150 9151 /// Performs qualified name lookup or special type of lookup for 9152 /// "__super::" scope specifier. 9153 /// 9154 /// This routine is a convenience overload meant to be called from contexts 9155 /// that need to perform a qualified name lookup with an optional C++ scope 9156 /// specifier that might require special kind of lookup. 9157 /// 9158 /// \param R captures both the lookup criteria and any lookup results found. 9159 /// 9160 /// \param LookupCtx The context in which qualified name lookup will 9161 /// search. 9162 /// 9163 /// \param SS An optional C++ scope-specifier. 9164 /// 9165 /// \returns true if lookup succeeded, false if it failed. 9166 bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, 9167 CXXScopeSpec &SS); 9168 9169 /// Performs name lookup for a name that was parsed in the 9170 /// source code, and may contain a C++ scope specifier. 9171 /// 9172 /// This routine is a convenience routine meant to be called from 9173 /// contexts that receive a name and an optional C++ scope specifier 9174 /// (e.g., "N::M::x"). It will then perform either qualified or 9175 /// unqualified name lookup (with LookupQualifiedName or LookupName, 9176 /// respectively) on the given name and return those results. It will 9177 /// perform a special type of lookup for "__super::" scope specifier. 9178 /// 9179 /// @param S The scope from which unqualified name lookup will 9180 /// begin. 9181 /// 9182 /// @param SS An optional C++ scope-specifier, e.g., "::N::M". 9183 /// 9184 /// @param EnteringContext Indicates whether we are going to enter the 9185 /// context of the scope-specifier SS (if present). 9186 /// 9187 /// @returns True if any decls were found (but possibly ambiguous) 9188 bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS, 9189 QualType ObjectType, bool AllowBuiltinCreation = false, 9190 bool EnteringContext = false); 9191 9192 /// Perform qualified name lookup into all base classes of the given 9193 /// class. 9194 /// 9195 /// \param R captures both the lookup criteria and any lookup results found. 9196 /// 9197 /// \param Class The context in which qualified name lookup will 9198 /// search. Name lookup will search in all base classes merging the results. 9199 /// 9200 /// @returns True if any decls were found (but possibly ambiguous) 9201 bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class); 9202 9203 void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S, 9204 UnresolvedSetImpl &Functions); 9205 9206 /// LookupOrCreateLabel - Do a name lookup of a label with the specified name. 9207 /// If GnuLabelLoc is a valid source location, then this is a definition 9208 /// of an __label__ label name, otherwise it is a normal label definition 9209 /// or use. 9210 LabelDecl *LookupOrCreateLabel(IdentifierInfo *II, SourceLocation IdentLoc, 9211 SourceLocation GnuLabelLoc = SourceLocation()); 9212 9213 /// Look up the constructors for the given class. 9214 DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class); 9215 9216 /// Look up the default constructor for the given class. 9217 CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class); 9218 9219 /// Look up the copying constructor for the given class. 9220 CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class, 9221 unsigned Quals); 9222 9223 /// Look up the copying assignment operator for the given class. 9224 CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals, 9225 bool RValueThis, unsigned ThisQuals); 9226 9227 /// Look up the moving constructor for the given class. 9228 CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class, 9229 unsigned Quals); 9230 9231 /// Look up the moving assignment operator for the given class. 9232 CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, unsigned Quals, 9233 bool RValueThis, unsigned ThisQuals); 9234 9235 /// Look for the destructor of the given class. 9236 /// 9237 /// During semantic analysis, this routine should be used in lieu of 9238 /// CXXRecordDecl::getDestructor(). 9239 /// 9240 /// \returns The destructor for this class. 9241 CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class); 9242 9243 /// Force the declaration of any implicitly-declared members of this 9244 /// class. 9245 void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class); 9246 9247 /// Make a merged definition of an existing hidden definition \p ND 9248 /// visible at the specified location. 9249 void makeMergedDefinitionVisible(NamedDecl *ND); 9250 9251 /// Check ODR hashes for C/ObjC when merging types from modules. 9252 /// Differently from C++, actually parse the body and reject in case 9253 /// of a mismatch. 9254 template <typename T, 9255 typename = std::enable_if_t<std::is_base_of<NamedDecl, T>::value>> ActOnDuplicateODRHashDefinition(T * Duplicate,T * Previous)9256 bool ActOnDuplicateODRHashDefinition(T *Duplicate, T *Previous) { 9257 if (Duplicate->getODRHash() != Previous->getODRHash()) 9258 return false; 9259 9260 // Make the previous decl visible. 9261 makeMergedDefinitionVisible(Previous); 9262 return true; 9263 } 9264 9265 /// Get the set of additional modules that should be checked during 9266 /// name lookup. A module and its imports become visible when instanting a 9267 /// template defined within it. 9268 llvm::DenseSet<Module *> &getLookupModules(); 9269 9270 bool hasVisibleMergedDefinition(const NamedDecl *Def); 9271 bool hasMergedDefinitionInCurrentModule(const NamedDecl *Def); 9272 9273 /// Determine if the template parameter \p D has a visible default argument. 9274 bool 9275 hasVisibleDefaultArgument(const NamedDecl *D, 9276 llvm::SmallVectorImpl<Module *> *Modules = nullptr); 9277 /// Determine if the template parameter \p D has a reachable default argument. 9278 bool hasReachableDefaultArgument( 9279 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr); 9280 /// Determine if the template parameter \p D has a reachable default argument. 9281 bool hasAcceptableDefaultArgument(const NamedDecl *D, 9282 llvm::SmallVectorImpl<Module *> *Modules, 9283 Sema::AcceptableKind Kind); 9284 9285 /// Determine if there is a visible declaration of \p D that is an explicit 9286 /// specialization declaration for a specialization of a template. (For a 9287 /// member specialization, use hasVisibleMemberSpecialization.) 9288 bool hasVisibleExplicitSpecialization( 9289 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr); 9290 /// Determine if there is a reachable declaration of \p D that is an explicit 9291 /// specialization declaration for a specialization of a template. (For a 9292 /// member specialization, use hasReachableMemberSpecialization.) 9293 bool hasReachableExplicitSpecialization( 9294 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr); 9295 9296 /// Determine if there is a visible declaration of \p D that is a member 9297 /// specialization declaration (as opposed to an instantiated declaration). 9298 bool hasVisibleMemberSpecialization( 9299 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr); 9300 /// Determine if there is a reachable declaration of \p D that is a member 9301 /// specialization declaration (as opposed to an instantiated declaration). 9302 bool hasReachableMemberSpecialization( 9303 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr); 9304 9305 bool isModuleVisible(const Module *M, bool ModulePrivate = false); 9306 9307 /// Determine whether any declaration of an entity is visible. 9308 bool 9309 hasVisibleDeclaration(const NamedDecl *D, 9310 llvm::SmallVectorImpl<Module *> *Modules = nullptr) { 9311 return isVisible(D) || hasVisibleDeclarationSlow(D, Modules); 9312 } 9313 9314 bool hasVisibleDeclarationSlow(const NamedDecl *D, 9315 llvm::SmallVectorImpl<Module *> *Modules); 9316 /// Determine whether any declaration of an entity is reachable. 9317 bool 9318 hasReachableDeclaration(const NamedDecl *D, 9319 llvm::SmallVectorImpl<Module *> *Modules = nullptr) { 9320 return isReachable(D) || hasReachableDeclarationSlow(D, Modules); 9321 } 9322 bool hasReachableDeclarationSlow( 9323 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr); 9324 9325 void diagnoseTypo(const TypoCorrection &Correction, 9326 const PartialDiagnostic &TypoDiag, 9327 bool ErrorRecovery = true); 9328 9329 /// Diagnose a successfully-corrected typo. Separated from the correction 9330 /// itself to allow external validation of the result, etc. 9331 /// 9332 /// \param Correction The result of performing typo correction. 9333 /// \param TypoDiag The diagnostic to produce. This will have the corrected 9334 /// string added to it (and usually also a fixit). 9335 /// \param PrevNote A note to use when indicating the location of the entity 9336 /// to which we are correcting. Will have the correction string added 9337 /// to it. 9338 /// \param ErrorRecovery If \c true (the default), the caller is going to 9339 /// recover from the typo as if the corrected string had been typed. 9340 /// In this case, \c PDiag must be an error, and we will attach a fixit 9341 /// to it. 9342 void diagnoseTypo(const TypoCorrection &Correction, 9343 const PartialDiagnostic &TypoDiag, 9344 const PartialDiagnostic &PrevNote, 9345 bool ErrorRecovery = true); 9346 9347 /// Find the associated classes and namespaces for 9348 /// argument-dependent lookup for a call with the given set of 9349 /// arguments. 9350 /// 9351 /// This routine computes the sets of associated classes and associated 9352 /// namespaces searched by argument-dependent lookup 9353 /// (C++ [basic.lookup.argdep]) for a given set of arguments. 9354 void FindAssociatedClassesAndNamespaces( 9355 SourceLocation InstantiationLoc, ArrayRef<Expr *> Args, 9356 AssociatedNamespaceSet &AssociatedNamespaces, 9357 AssociatedClassSet &AssociatedClasses); 9358 9359 /// Produce a diagnostic describing the ambiguity that resulted 9360 /// from name lookup. 9361 /// 9362 /// \param Result The result of the ambiguous lookup to be diagnosed. 9363 void DiagnoseAmbiguousLookup(LookupResult &Result); 9364 9365 /// LookupLiteralOperator - Determine which literal operator should be used 9366 /// for a user-defined literal, per C++11 [lex.ext]. 9367 /// 9368 /// Normal overload resolution is not used to select which literal operator to 9369 /// call for a user-defined literal. Look up the provided literal operator 9370 /// name, and filter the results to the appropriate set for the given argument 9371 /// types. 9372 LiteralOperatorLookupResult 9373 LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys, 9374 bool AllowRaw, bool AllowTemplate, 9375 bool AllowStringTemplate, bool DiagnoseMissing, 9376 StringLiteral *StringLit = nullptr); 9377 9378 void ArgumentDependentLookup(DeclarationName Name, SourceLocation Loc, 9379 ArrayRef<Expr *> Args, ADLResult &Functions); 9380 9381 void LookupVisibleDecls(Scope *S, LookupNameKind Kind, 9382 VisibleDeclConsumer &Consumer, 9383 bool IncludeGlobalScope = true, 9384 bool LoadExternal = true); 9385 void LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind, 9386 VisibleDeclConsumer &Consumer, 9387 bool IncludeGlobalScope = true, 9388 bool IncludeDependentBases = false, 9389 bool LoadExternal = true); 9390 9391 enum CorrectTypoKind { 9392 CTK_NonError, // CorrectTypo used in a non error recovery situation. 9393 CTK_ErrorRecovery // CorrectTypo used in normal error recovery. 9394 }; 9395 9396 /// Try to "correct" a typo in the source code by finding 9397 /// visible declarations whose names are similar to the name that was 9398 /// present in the source code. 9399 /// 9400 /// \param TypoName the \c DeclarationNameInfo structure that contains 9401 /// the name that was present in the source code along with its location. 9402 /// 9403 /// \param LookupKind the name-lookup criteria used to search for the name. 9404 /// 9405 /// \param S the scope in which name lookup occurs. 9406 /// 9407 /// \param SS the nested-name-specifier that precedes the name we're 9408 /// looking for, if present. 9409 /// 9410 /// \param CCC A CorrectionCandidateCallback object that provides further 9411 /// validation of typo correction candidates. It also provides flags for 9412 /// determining the set of keywords permitted. 9413 /// 9414 /// \param MemberContext if non-NULL, the context in which to look for 9415 /// a member access expression. 9416 /// 9417 /// \param EnteringContext whether we're entering the context described by 9418 /// the nested-name-specifier SS. 9419 /// 9420 /// \param OPT when non-NULL, the search for visible declarations will 9421 /// also walk the protocols in the qualified interfaces of \p OPT. 9422 /// 9423 /// \returns a \c TypoCorrection containing the corrected name if the typo 9424 /// along with information such as the \c NamedDecl where the corrected name 9425 /// was declared, and any additional \c NestedNameSpecifier needed to access 9426 /// it (C++ only). The \c TypoCorrection is empty if there is no correction. 9427 TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo, 9428 Sema::LookupNameKind LookupKind, Scope *S, 9429 CXXScopeSpec *SS, CorrectionCandidateCallback &CCC, 9430 CorrectTypoKind Mode, 9431 DeclContext *MemberContext = nullptr, 9432 bool EnteringContext = false, 9433 const ObjCObjectPointerType *OPT = nullptr, 9434 bool RecordFailure = true); 9435 9436 /// Try to "correct" a typo in the source code by finding 9437 /// visible declarations whose names are similar to the name that was 9438 /// present in the source code. 9439 /// 9440 /// \param TypoName the \c DeclarationNameInfo structure that contains 9441 /// the name that was present in the source code along with its location. 9442 /// 9443 /// \param LookupKind the name-lookup criteria used to search for the name. 9444 /// 9445 /// \param S the scope in which name lookup occurs. 9446 /// 9447 /// \param SS the nested-name-specifier that precedes the name we're 9448 /// looking for, if present. 9449 /// 9450 /// \param CCC A CorrectionCandidateCallback object that provides further 9451 /// validation of typo correction candidates. It also provides flags for 9452 /// determining the set of keywords permitted. 9453 /// 9454 /// \param TDG A TypoDiagnosticGenerator functor that will be used to print 9455 /// diagnostics when the actual typo correction is attempted. 9456 /// 9457 /// \param TRC A TypoRecoveryCallback functor that will be used to build an 9458 /// Expr from a typo correction candidate. 9459 /// 9460 /// \param MemberContext if non-NULL, the context in which to look for 9461 /// a member access expression. 9462 /// 9463 /// \param EnteringContext whether we're entering the context described by 9464 /// the nested-name-specifier SS. 9465 /// 9466 /// \param OPT when non-NULL, the search for visible declarations will 9467 /// also walk the protocols in the qualified interfaces of \p OPT. 9468 /// 9469 /// \returns a new \c TypoExpr that will later be replaced in the AST with an 9470 /// Expr representing the result of performing typo correction, or nullptr if 9471 /// typo correction is not possible. If nullptr is returned, no diagnostics 9472 /// will be emitted and it is the responsibility of the caller to emit any 9473 /// that are needed. 9474 TypoExpr *CorrectTypoDelayed( 9475 const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind, 9476 Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC, 9477 TypoDiagnosticGenerator TDG, TypoRecoveryCallback TRC, 9478 CorrectTypoKind Mode, DeclContext *MemberContext = nullptr, 9479 bool EnteringContext = false, const ObjCObjectPointerType *OPT = nullptr); 9480 9481 /// Kinds of missing import. Note, the values of these enumerators correspond 9482 /// to %select values in diagnostics. 9483 enum class MissingImportKind { 9484 Declaration, 9485 Definition, 9486 DefaultArgument, 9487 ExplicitSpecialization, 9488 PartialSpecialization 9489 }; 9490 9491 /// Diagnose that the specified declaration needs to be visible but 9492 /// isn't, and suggest a module import that would resolve the problem. 9493 void diagnoseMissingImport(SourceLocation Loc, const NamedDecl *Decl, 9494 MissingImportKind MIK, bool Recover = true); 9495 void diagnoseMissingImport(SourceLocation Loc, const NamedDecl *Decl, 9496 SourceLocation DeclLoc, ArrayRef<Module *> Modules, 9497 MissingImportKind MIK, bool Recover); 9498 9499 struct TypoExprState { 9500 std::unique_ptr<TypoCorrectionConsumer> Consumer; 9501 TypoDiagnosticGenerator DiagHandler; 9502 TypoRecoveryCallback RecoveryHandler; 9503 TypoExprState(); 9504 TypoExprState(TypoExprState &&other) noexcept; 9505 TypoExprState &operator=(TypoExprState &&other) noexcept; 9506 }; 9507 9508 const TypoExprState &getTypoExprState(TypoExpr *TE) const; 9509 9510 /// Clears the state of the given TypoExpr. 9511 void clearDelayedTypo(TypoExpr *TE); 9512 9513 /// Called on #pragma clang __debug dump II 9514 void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II); 9515 9516 /// Called on #pragma clang __debug dump E 9517 void ActOnPragmaDump(Expr *E); 9518 9519 private: 9520 // The set of known/encountered (unique, canonicalized) NamespaceDecls. 9521 // 9522 // The boolean value will be true to indicate that the namespace was loaded 9523 // from an AST/PCH file, or false otherwise. 9524 llvm::MapVector<NamespaceDecl *, bool> KnownNamespaces; 9525 9526 /// Whether we have already loaded known namespaces from an extenal 9527 /// source. 9528 bool LoadedExternalKnownNamespaces; 9529 9530 bool CppLookupName(LookupResult &R, Scope *S); 9531 9532 /// Determine if we could use all the declarations in the module. 9533 bool isUsableModule(const Module *M); 9534 9535 /// Helper for CorrectTypo and CorrectTypoDelayed used to create and 9536 /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction 9537 /// should be skipped entirely. 9538 std::unique_ptr<TypoCorrectionConsumer> makeTypoCorrectionConsumer( 9539 const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind, 9540 Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC, 9541 DeclContext *MemberContext, bool EnteringContext, 9542 const ObjCObjectPointerType *OPT, bool ErrorRecovery); 9543 9544 /// The set of unhandled TypoExprs and their associated state. 9545 llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos; 9546 9547 /// Creates a new TypoExpr AST node. 9548 TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC, 9549 TypoDiagnosticGenerator TDG, 9550 TypoRecoveryCallback TRC, SourceLocation TypoLoc); 9551 9552 /// Cache for module units which is usable for current module. 9553 llvm::DenseSet<const Module *> UsableModuleUnitsCache; 9554 9555 /// Record the typo correction failure and return an empty correction. 9556 TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc, 9557 bool RecordFailure = true) { 9558 if (RecordFailure) 9559 TypoCorrectionFailures[Typo].insert(TypoLoc); 9560 return TypoCorrection(); 9561 } 9562 9563 bool isAcceptableSlow(const NamedDecl *D, AcceptableKind Kind); 9564 9565 /// Determine whether two declarations should be linked together, given that 9566 /// the old declaration might not be visible and the new declaration might 9567 /// not have external linkage. shouldLinkPossiblyHiddenDecl(const NamedDecl * Old,const NamedDecl * New)9568 bool shouldLinkPossiblyHiddenDecl(const NamedDecl *Old, 9569 const NamedDecl *New) { 9570 if (isVisible(Old)) 9571 return true; 9572 // See comment in below overload for why it's safe to compute the linkage 9573 // of the new declaration here. 9574 if (New->isExternallyDeclarable()) { 9575 assert(Old->isExternallyDeclarable() && 9576 "should not have found a non-externally-declarable previous decl"); 9577 return true; 9578 } 9579 return false; 9580 } 9581 bool shouldLinkPossiblyHiddenDecl(LookupResult &Old, const NamedDecl *New); 9582 9583 ///@} 9584 9585 // 9586 // 9587 // ------------------------------------------------------------------------- 9588 // 9589 // 9590 9591 /// \name Modules 9592 /// Implementations are in SemaModule.cpp 9593 ///@{ 9594 9595 public: 9596 /// Get the module unit whose scope we are currently within. getCurrentModule()9597 Module *getCurrentModule() const { 9598 return ModuleScopes.empty() ? nullptr : ModuleScopes.back().Module; 9599 } 9600 9601 /// Is the module scope we are an implementation unit? currentModuleIsImplementation()9602 bool currentModuleIsImplementation() const { 9603 return ModuleScopes.empty() 9604 ? false 9605 : ModuleScopes.back().Module->isModuleImplementation(); 9606 } 9607 9608 // When loading a non-modular PCH files, this is used to restore module 9609 // visibility. makeModuleVisible(Module * Mod,SourceLocation ImportLoc)9610 void makeModuleVisible(Module *Mod, SourceLocation ImportLoc) { 9611 VisibleModules.setVisible(Mod, ImportLoc); 9612 } 9613 9614 enum class ModuleDeclKind { 9615 Interface, ///< 'export module X;' 9616 Implementation, ///< 'module X;' 9617 PartitionInterface, ///< 'export module X:Y;' 9618 PartitionImplementation, ///< 'module X:Y;' 9619 }; 9620 9621 /// An enumeration to represent the transition of states in parsing module 9622 /// fragments and imports. If we are not parsing a C++20 TU, or we find 9623 /// an error in state transition, the state is set to NotACXX20Module. 9624 enum class ModuleImportState { 9625 FirstDecl, ///< Parsing the first decl in a TU. 9626 GlobalFragment, ///< after 'module;' but before 'module X;' 9627 ImportAllowed, ///< after 'module X;' but before any non-import decl. 9628 ImportFinished, ///< after any non-import decl. 9629 PrivateFragmentImportAllowed, ///< after 'module :private;' but before any 9630 ///< non-import decl. 9631 PrivateFragmentImportFinished, ///< after 'module :private;' but a 9632 ///< non-import decl has already been seen. 9633 NotACXX20Module ///< Not a C++20 TU, or an invalid state was found. 9634 }; 9635 9636 /// The parser has processed a module-declaration that begins the definition 9637 /// of a module interface or implementation. 9638 DeclGroupPtrTy ActOnModuleDecl(SourceLocation StartLoc, 9639 SourceLocation ModuleLoc, ModuleDeclKind MDK, 9640 ModuleIdPath Path, ModuleIdPath Partition, 9641 ModuleImportState &ImportState); 9642 9643 /// The parser has processed a global-module-fragment declaration that begins 9644 /// the definition of the global module fragment of the current module unit. 9645 /// \param ModuleLoc The location of the 'module' keyword. 9646 DeclGroupPtrTy ActOnGlobalModuleFragmentDecl(SourceLocation ModuleLoc); 9647 9648 /// The parser has processed a private-module-fragment declaration that begins 9649 /// the definition of the private module fragment of the current module unit. 9650 /// \param ModuleLoc The location of the 'module' keyword. 9651 /// \param PrivateLoc The location of the 'private' keyword. 9652 DeclGroupPtrTy ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, 9653 SourceLocation PrivateLoc); 9654 9655 /// The parser has processed a module import declaration. 9656 /// 9657 /// \param StartLoc The location of the first token in the declaration. This 9658 /// could be the location of an '@', 'export', or 'import'. 9659 /// \param ExportLoc The location of the 'export' keyword, if any. 9660 /// \param ImportLoc The location of the 'import' keyword. 9661 /// \param Path The module toplevel name as an access path. 9662 /// \param IsPartition If the name is for a partition. 9663 DeclResult ActOnModuleImport(SourceLocation StartLoc, 9664 SourceLocation ExportLoc, 9665 SourceLocation ImportLoc, ModuleIdPath Path, 9666 bool IsPartition = false); 9667 DeclResult ActOnModuleImport(SourceLocation StartLoc, 9668 SourceLocation ExportLoc, 9669 SourceLocation ImportLoc, Module *M, 9670 ModuleIdPath Path = {}); 9671 9672 /// The parser has processed a module import translated from a 9673 /// #include or similar preprocessing directive. 9674 void ActOnAnnotModuleInclude(SourceLocation DirectiveLoc, Module *Mod); 9675 void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod); 9676 9677 /// The parsed has entered a submodule. 9678 void ActOnAnnotModuleBegin(SourceLocation DirectiveLoc, Module *Mod); 9679 /// The parser has left a submodule. 9680 void ActOnAnnotModuleEnd(SourceLocation DirectiveLoc, Module *Mod); 9681 9682 /// Create an implicit import of the given module at the given 9683 /// source location, for error recovery, if possible. 9684 /// 9685 /// This routine is typically used when an entity found by name lookup 9686 /// is actually hidden within a module that we know about but the user 9687 /// has forgotten to import. 9688 void createImplicitModuleImportForErrorRecovery(SourceLocation Loc, 9689 Module *Mod); 9690 9691 /// We have parsed the start of an export declaration, including the '{' 9692 /// (if present). 9693 Decl *ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, 9694 SourceLocation LBraceLoc); 9695 9696 /// Complete the definition of an export declaration. 9697 Decl *ActOnFinishExportDecl(Scope *S, Decl *ExportDecl, 9698 SourceLocation RBraceLoc); 9699 9700 private: 9701 /// The parser has begun a translation unit to be compiled as a C++20 9702 /// Header Unit, helper for ActOnStartOfTranslationUnit() only. 9703 void HandleStartOfHeaderUnit(); 9704 9705 struct ModuleScope { 9706 SourceLocation BeginLoc; 9707 clang::Module *Module = nullptr; 9708 VisibleModuleSet OuterVisibleModules; 9709 }; 9710 /// The modules we're currently parsing. 9711 llvm::SmallVector<ModuleScope, 16> ModuleScopes; 9712 9713 /// For an interface unit, this is the implicitly imported interface unit. 9714 clang::Module *ThePrimaryInterface = nullptr; 9715 9716 /// The explicit global module fragment of the current translation unit. 9717 /// The explicit Global Module Fragment, as specified in C++ 9718 /// [module.global.frag]. 9719 clang::Module *TheGlobalModuleFragment = nullptr; 9720 9721 /// The implicit global module fragments of the current translation unit. 9722 /// 9723 /// The contents in the implicit global module fragment can't be discarded. 9724 clang::Module *TheImplicitGlobalModuleFragment = nullptr; 9725 9726 /// Namespace definitions that we will export when they finish. 9727 llvm::SmallPtrSet<const NamespaceDecl *, 8> DeferredExportedNamespaces; 9728 9729 /// In a C++ standard module, inline declarations require a definition to be 9730 /// present at the end of a definition domain. This set holds the decls to 9731 /// be checked at the end of the TU. 9732 llvm::SmallPtrSet<const FunctionDecl *, 8> PendingInlineFuncDecls; 9733 9734 /// Helper function to judge if we are in module purview. 9735 /// Return false if we are not in a module. 9736 bool isCurrentModulePurview() const; 9737 9738 /// Enter the scope of the explicit global module fragment. 9739 Module *PushGlobalModuleFragment(SourceLocation BeginLoc); 9740 /// Leave the scope of the explicit global module fragment. 9741 void PopGlobalModuleFragment(); 9742 9743 /// Enter the scope of an implicit global module fragment. 9744 Module *PushImplicitGlobalModuleFragment(SourceLocation BeginLoc); 9745 /// Leave the scope of an implicit global module fragment. 9746 void PopImplicitGlobalModuleFragment(); 9747 9748 VisibleModuleSet VisibleModules; 9749 9750 ///@} 9751 9752 // 9753 // 9754 // ------------------------------------------------------------------------- 9755 // 9756 // 9757 9758 /// \name C++ Overloading 9759 /// Implementations are in SemaOverload.cpp 9760 ///@{ 9761 9762 public: 9763 /// Whether deferrable diagnostics should be deferred. 9764 bool DeferDiags = false; 9765 9766 /// RAII class to control scope of DeferDiags. 9767 class DeferDiagsRAII { 9768 Sema &S; 9769 bool SavedDeferDiags = false; 9770 9771 public: DeferDiagsRAII(Sema & S,bool DeferDiags)9772 DeferDiagsRAII(Sema &S, bool DeferDiags) 9773 : S(S), SavedDeferDiags(S.DeferDiags) { 9774 S.DeferDiags = DeferDiags; 9775 } ~DeferDiagsRAII()9776 ~DeferDiagsRAII() { S.DeferDiags = SavedDeferDiags; } 9777 }; 9778 9779 /// Flag indicating if Sema is building a recovery call expression. 9780 /// 9781 /// This flag is used to avoid building recovery call expressions 9782 /// if Sema is already doing so, which would cause infinite recursions. 9783 bool IsBuildingRecoveryCallExpr; 9784 9785 enum OverloadKind { 9786 /// This is a legitimate overload: the existing declarations are 9787 /// functions or function templates with different signatures. 9788 Ovl_Overload, 9789 9790 /// This is not an overload because the signature exactly matches 9791 /// an existing declaration. 9792 Ovl_Match, 9793 9794 /// This is not an overload because the lookup results contain a 9795 /// non-function. 9796 Ovl_NonFunction 9797 }; 9798 9799 /// Determine whether the given New declaration is an overload of the 9800 /// declarations in Old. This routine returns Ovl_Match or Ovl_NonFunction if 9801 /// New and Old cannot be overloaded, e.g., if New has the same signature as 9802 /// some function in Old (C++ 1.3.10) or if the Old declarations aren't 9803 /// functions (or function templates) at all. When it does return Ovl_Match or 9804 /// Ovl_NonFunction, MatchedDecl will point to the decl that New cannot be 9805 /// overloaded with. This decl may be a UsingShadowDecl on top of the 9806 /// underlying declaration. 9807 /// 9808 /// Example: Given the following input: 9809 /// 9810 /// void f(int, float); // #1 9811 /// void f(int, int); // #2 9812 /// int f(int, int); // #3 9813 /// 9814 /// When we process #1, there is no previous declaration of "f", so IsOverload 9815 /// will not be used. 9816 /// 9817 /// When we process #2, Old contains only the FunctionDecl for #1. By 9818 /// comparing the parameter types, we see that #1 and #2 are overloaded (since 9819 /// they have different signatures), so this routine returns Ovl_Overload; 9820 /// MatchedDecl is unchanged. 9821 /// 9822 /// When we process #3, Old is an overload set containing #1 and #2. We 9823 /// compare the signatures of #3 to #1 (they're overloaded, so we do nothing) 9824 /// and then #3 to #2. Since the signatures of #3 and #2 are identical (return 9825 /// types of functions are not part of the signature), IsOverload returns 9826 /// Ovl_Match and MatchedDecl will be set to point to the FunctionDecl for #2. 9827 /// 9828 /// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced into a 9829 /// class by a using declaration. The rules for whether to hide shadow 9830 /// declarations ignore some properties which otherwise figure into a function 9831 /// template's signature. 9832 OverloadKind CheckOverload(Scope *S, FunctionDecl *New, 9833 const LookupResult &OldDecls, NamedDecl *&OldDecl, 9834 bool UseMemberUsingDeclRules); 9835 bool IsOverload(FunctionDecl *New, FunctionDecl *Old, 9836 bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs = true); 9837 9838 // Checks whether MD constitutes an override the base class method BaseMD. 9839 // When checking for overrides, the object object members are ignored. 9840 bool IsOverride(FunctionDecl *MD, FunctionDecl *BaseMD, 9841 bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs = true); 9842 9843 enum class AllowedExplicit { 9844 /// Allow no explicit functions to be used. 9845 None, 9846 /// Allow explicit conversion functions but not explicit constructors. 9847 Conversions, 9848 /// Allow both explicit conversion functions and explicit constructors. 9849 All 9850 }; 9851 9852 ImplicitConversionSequence TryImplicitConversion( 9853 Expr *From, QualType ToType, bool SuppressUserConversions, 9854 AllowedExplicit AllowExplicit, bool InOverloadResolution, bool CStyle, 9855 bool AllowObjCWritebackConversion); 9856 9857 /// PerformImplicitConversion - Perform an implicit conversion of the 9858 /// expression From to the type ToType. Returns the 9859 /// converted expression. Flavor is the kind of conversion we're 9860 /// performing, used in the error message. If @p AllowExplicit, 9861 /// explicit user-defined conversions are permitted. 9862 ExprResult PerformImplicitConversion(Expr *From, QualType ToType, 9863 AssignmentAction Action, 9864 bool AllowExplicit = false); 9865 9866 /// IsIntegralPromotion - Determines whether the conversion from the 9867 /// expression From (whose potentially-adjusted type is FromType) to 9868 /// ToType is an integral promotion (C++ 4.5). If so, returns true and 9869 /// sets PromotedType to the promoted type. 9870 bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType); 9871 9872 /// IsFloatingPointPromotion - Determines whether the conversion from 9873 /// FromType to ToType is a floating point promotion (C++ 4.6). If so, 9874 /// returns true and sets PromotedType to the promoted type. 9875 bool IsFloatingPointPromotion(QualType FromType, QualType ToType); 9876 9877 /// Determine if a conversion is a complex promotion. 9878 /// 9879 /// A complex promotion is defined as a complex -> complex conversion 9880 /// where the conversion between the underlying real types is a 9881 /// floating-point or integral promotion. 9882 bool IsComplexPromotion(QualType FromType, QualType ToType); 9883 9884 /// IsPointerConversion - Determines whether the conversion of the 9885 /// expression From, which has the (possibly adjusted) type FromType, 9886 /// can be converted to the type ToType via a pointer conversion (C++ 9887 /// 4.10). If so, returns true and places the converted type (that 9888 /// might differ from ToType in its cv-qualifiers at some level) into 9889 /// ConvertedType. 9890 /// 9891 /// This routine also supports conversions to and from block pointers 9892 /// and conversions with Objective-C's 'id', 'id<protocols...>', and 9893 /// pointers to interfaces. FIXME: Once we've determined the 9894 /// appropriate overloading rules for Objective-C, we may want to 9895 /// split the Objective-C checks into a different routine; however, 9896 /// GCC seems to consider all of these conversions to be pointer 9897 /// conversions, so for now they live here. IncompatibleObjC will be 9898 /// set if the conversion is an allowed Objective-C conversion that 9899 /// should result in a warning. 9900 bool IsPointerConversion(Expr *From, QualType FromType, QualType ToType, 9901 bool InOverloadResolution, QualType &ConvertedType, 9902 bool &IncompatibleObjC); 9903 9904 /// isObjCPointerConversion - Determines whether this is an 9905 /// Objective-C pointer conversion. Subroutine of IsPointerConversion, 9906 /// with the same arguments and return values. 9907 bool isObjCPointerConversion(QualType FromType, QualType ToType, 9908 QualType &ConvertedType, bool &IncompatibleObjC); 9909 bool IsBlockPointerConversion(QualType FromType, QualType ToType, 9910 QualType &ConvertedType); 9911 9912 /// FunctionParamTypesAreEqual - This routine checks two function proto types 9913 /// for equality of their parameter types. Caller has already checked that 9914 /// they have same number of parameters. If the parameters are different, 9915 /// ArgPos will have the parameter index of the first different parameter. 9916 /// If `Reversed` is true, the parameters of `NewType` will be compared in 9917 /// reverse order. That's useful if one of the functions is being used as a 9918 /// C++20 synthesized operator overload with a reversed parameter order. 9919 bool FunctionParamTypesAreEqual(ArrayRef<QualType> Old, 9920 ArrayRef<QualType> New, 9921 unsigned *ArgPos = nullptr, 9922 bool Reversed = false); 9923 9924 bool FunctionParamTypesAreEqual(const FunctionProtoType *OldType, 9925 const FunctionProtoType *NewType, 9926 unsigned *ArgPos = nullptr, 9927 bool Reversed = false); 9928 9929 bool FunctionNonObjectParamTypesAreEqual(const FunctionDecl *OldFunction, 9930 const FunctionDecl *NewFunction, 9931 unsigned *ArgPos = nullptr, 9932 bool Reversed = false); 9933 9934 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing 9935 /// function types. Catches different number of parameter, mismatch in 9936 /// parameter types, and different return types. 9937 void HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, QualType FromType, 9938 QualType ToType); 9939 9940 /// CheckPointerConversion - Check the pointer conversion from the 9941 /// expression From to the type ToType. This routine checks for 9942 /// ambiguous or inaccessible derived-to-base pointer 9943 /// conversions for which IsPointerConversion has already returned 9944 /// true. It returns true and produces a diagnostic if there was an 9945 /// error, or returns false otherwise. 9946 bool CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, 9947 CXXCastPath &BasePath, bool IgnoreBaseAccess, 9948 bool Diagnose = true); 9949 9950 /// IsMemberPointerConversion - Determines whether the conversion of the 9951 /// expression From, which has the (possibly adjusted) type FromType, can be 9952 /// converted to the type ToType via a member pointer conversion (C++ 4.11). 9953 /// If so, returns true and places the converted type (that might differ from 9954 /// ToType in its cv-qualifiers at some level) into ConvertedType. 9955 bool IsMemberPointerConversion(Expr *From, QualType FromType, QualType ToType, 9956 bool InOverloadResolution, 9957 QualType &ConvertedType); 9958 9959 /// CheckMemberPointerConversion - Check the member pointer conversion from 9960 /// the expression From to the type ToType. This routine checks for ambiguous 9961 /// or virtual or inaccessible base-to-derived member pointer conversions for 9962 /// which IsMemberPointerConversion has already returned true. It returns true 9963 /// and produces a diagnostic if there was an error, or returns false 9964 /// otherwise. 9965 bool CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, 9966 CXXCastPath &BasePath, 9967 bool IgnoreBaseAccess); 9968 9969 /// IsQualificationConversion - Determines whether the conversion from 9970 /// an rvalue of type FromType to ToType is a qualification conversion 9971 /// (C++ 4.4). 9972 /// 9973 /// \param ObjCLifetimeConversion Output parameter that will be set to 9974 /// indicate when the qualification conversion involves a change in the 9975 /// Objective-C object lifetime. 9976 bool IsQualificationConversion(QualType FromType, QualType ToType, 9977 bool CStyle, bool &ObjCLifetimeConversion); 9978 9979 /// Determine whether the conversion from FromType to ToType is a valid 9980 /// conversion that strips "noexcept" or "noreturn" off the nested function 9981 /// type. 9982 bool IsFunctionConversion(QualType FromType, QualType ToType, 9983 QualType &ResultTy); 9984 bool DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType); 9985 void DiagnoseUseOfDeletedFunction(SourceLocation Loc, SourceRange Range, 9986 DeclarationName Name, 9987 OverloadCandidateSet &CandidateSet, 9988 FunctionDecl *Fn, MultiExprArg Args, 9989 bool IsMember = false); 9990 9991 ExprResult InitializeExplicitObjectArgument(Sema &S, Expr *Obj, 9992 FunctionDecl *Fun); 9993 ExprResult PerformImplicitObjectArgumentInitialization( 9994 Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, 9995 CXXMethodDecl *Method); 9996 9997 /// PerformContextuallyConvertToBool - Perform a contextual conversion 9998 /// of the expression From to bool (C++0x [conv]p3). 9999 ExprResult PerformContextuallyConvertToBool(Expr *From); 10000 10001 /// PerformContextuallyConvertToObjCPointer - Perform a contextual 10002 /// conversion of the expression From to an Objective-C pointer type. 10003 /// Returns a valid but null ExprResult if no conversion sequence exists. 10004 ExprResult PerformContextuallyConvertToObjCPointer(Expr *From); 10005 10006 /// Contexts in which a converted constant expression is required. 10007 enum CCEKind { 10008 CCEK_CaseValue, ///< Expression in a case label. 10009 CCEK_Enumerator, ///< Enumerator value with fixed underlying type. 10010 CCEK_TemplateArg, ///< Value of a non-type template parameter. 10011 CCEK_ArrayBound, ///< Array bound in array declarator or new-expression. 10012 CCEK_ExplicitBool, ///< Condition in an explicit(bool) specifier. 10013 CCEK_Noexcept, ///< Condition in a noexcept(bool) specifier. 10014 CCEK_StaticAssertMessageSize, ///< Call to size() in a static assert 10015 ///< message. 10016 CCEK_StaticAssertMessageData, ///< Call to data() in a static assert 10017 ///< message. 10018 }; 10019 10020 ExprResult BuildConvertedConstantExpression(Expr *From, QualType T, 10021 CCEKind CCE, 10022 NamedDecl *Dest = nullptr); 10023 10024 ExprResult CheckConvertedConstantExpression(Expr *From, QualType T, 10025 llvm::APSInt &Value, CCEKind CCE); 10026 ExprResult CheckConvertedConstantExpression(Expr *From, QualType T, 10027 APValue &Value, CCEKind CCE, 10028 NamedDecl *Dest = nullptr); 10029 10030 /// EvaluateConvertedConstantExpression - Evaluate an Expression 10031 /// That is a converted constant expression 10032 /// (which was built with BuildConvertedConstantExpression) 10033 ExprResult 10034 EvaluateConvertedConstantExpression(Expr *E, QualType T, APValue &Value, 10035 CCEKind CCE, bool RequireInt, 10036 const APValue &PreNarrowingValue); 10037 10038 /// Abstract base class used to perform a contextual implicit 10039 /// conversion from an expression to any type passing a filter. 10040 class ContextualImplicitConverter { 10041 public: 10042 bool Suppress; 10043 bool SuppressConversion; 10044 10045 ContextualImplicitConverter(bool Suppress = false, 10046 bool SuppressConversion = false) Suppress(Suppress)10047 : Suppress(Suppress), SuppressConversion(SuppressConversion) {} 10048 10049 /// Determine whether the specified type is a valid destination type 10050 /// for this conversion. 10051 virtual bool match(QualType T) = 0; 10052 10053 /// Emits a diagnostic complaining that the expression does not have 10054 /// integral or enumeration type. 10055 virtual SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc, 10056 QualType T) = 0; 10057 10058 /// Emits a diagnostic when the expression has incomplete class type. 10059 virtual SemaDiagnosticBuilder 10060 diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0; 10061 10062 /// Emits a diagnostic when the only matching conversion function 10063 /// is explicit. 10064 virtual SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, 10065 SourceLocation Loc, 10066 QualType T, 10067 QualType ConvTy) = 0; 10068 10069 /// Emits a note for the explicit conversion function. 10070 virtual SemaDiagnosticBuilder 10071 noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0; 10072 10073 /// Emits a diagnostic when there are multiple possible conversion 10074 /// functions. 10075 virtual SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, 10076 QualType T) = 0; 10077 10078 /// Emits a note for one of the candidate conversions. 10079 virtual SemaDiagnosticBuilder 10080 noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0; 10081 10082 /// Emits a diagnostic when we picked a conversion function 10083 /// (for cases when we are not allowed to pick a conversion function). 10084 virtual SemaDiagnosticBuilder diagnoseConversion(Sema &S, 10085 SourceLocation Loc, 10086 QualType T, 10087 QualType ConvTy) = 0; 10088 ~ContextualImplicitConverter()10089 virtual ~ContextualImplicitConverter() {} 10090 }; 10091 10092 class ICEConvertDiagnoser : public ContextualImplicitConverter { 10093 bool AllowScopedEnumerations; 10094 10095 public: ICEConvertDiagnoser(bool AllowScopedEnumerations,bool Suppress,bool SuppressConversion)10096 ICEConvertDiagnoser(bool AllowScopedEnumerations, bool Suppress, 10097 bool SuppressConversion) 10098 : ContextualImplicitConverter(Suppress, SuppressConversion), 10099 AllowScopedEnumerations(AllowScopedEnumerations) {} 10100 10101 /// Match an integral or (possibly scoped) enumeration type. 10102 bool match(QualType T) override; 10103 diagnoseNoMatch(Sema & S,SourceLocation Loc,QualType T)10104 SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc, 10105 QualType T) override { 10106 return diagnoseNotInt(S, Loc, T); 10107 } 10108 10109 /// Emits a diagnostic complaining that the expression does not have 10110 /// integral or enumeration type. 10111 virtual SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, 10112 QualType T) = 0; 10113 }; 10114 10115 /// Perform a contextual implicit conversion. 10116 ExprResult 10117 PerformContextualImplicitConversion(SourceLocation Loc, Expr *FromE, 10118 ContextualImplicitConverter &Converter); 10119 10120 /// ReferenceCompareResult - Expresses the result of comparing two 10121 /// types (cv1 T1 and cv2 T2) to determine their compatibility for the 10122 /// purposes of initialization by reference (C++ [dcl.init.ref]p4). 10123 enum ReferenceCompareResult { 10124 /// Ref_Incompatible - The two types are incompatible, so direct 10125 /// reference binding is not possible. 10126 Ref_Incompatible = 0, 10127 /// Ref_Related - The two types are reference-related, which means 10128 /// that their unqualified forms (T1 and T2) are either the same 10129 /// or T1 is a base class of T2. 10130 Ref_Related, 10131 /// Ref_Compatible - The two types are reference-compatible. 10132 Ref_Compatible 10133 }; 10134 10135 // Fake up a scoped enumeration that still contextually converts to bool. 10136 struct ReferenceConversionsScope { 10137 /// The conversions that would be performed on an lvalue of type T2 when 10138 /// binding a reference of type T1 to it, as determined when evaluating 10139 /// whether T1 is reference-compatible with T2. 10140 enum ReferenceConversions { 10141 Qualification = 0x1, 10142 NestedQualification = 0x2, 10143 Function = 0x4, 10144 DerivedToBase = 0x8, 10145 ObjC = 0x10, 10146 ObjCLifetime = 0x20, 10147 10148 LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/ObjCLifetime) 10149 }; 10150 }; 10151 using ReferenceConversions = ReferenceConversionsScope::ReferenceConversions; 10152 10153 /// CompareReferenceRelationship - Compare the two types T1 and T2 to 10154 /// determine whether they are reference-compatible, 10155 /// reference-related, or incompatible, for use in C++ initialization by 10156 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference 10157 /// type, and the first type (T1) is the pointee type of the reference 10158 /// type being initialized. 10159 ReferenceCompareResult 10160 CompareReferenceRelationship(SourceLocation Loc, QualType T1, QualType T2, 10161 ReferenceConversions *Conv = nullptr); 10162 10163 /// AddOverloadCandidate - Adds the given function to the set of 10164 /// candidate functions, using the given function call arguments. If 10165 /// @p SuppressUserConversions, then don't allow user-defined 10166 /// conversions via constructors or conversion operators. 10167 /// 10168 /// \param PartialOverloading true if we are performing "partial" overloading 10169 /// based on an incomplete set of function arguments. This feature is used by 10170 /// code completion. 10171 void AddOverloadCandidate( 10172 FunctionDecl *Function, DeclAccessPair FoundDecl, ArrayRef<Expr *> Args, 10173 OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false, 10174 bool PartialOverloading = false, bool AllowExplicit = true, 10175 bool AllowExplicitConversion = false, 10176 ADLCallKind IsADLCandidate = ADLCallKind::NotADL, 10177 ConversionSequenceList EarlyConversions = std::nullopt, 10178 OverloadCandidateParamOrder PO = {}, 10179 bool AggregateCandidateDeduction = false); 10180 10181 /// Add all of the function declarations in the given function set to 10182 /// the overload candidate set. 10183 void AddFunctionCandidates( 10184 const UnresolvedSetImpl &Functions, ArrayRef<Expr *> Args, 10185 OverloadCandidateSet &CandidateSet, 10186 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr, 10187 bool SuppressUserConversions = false, bool PartialOverloading = false, 10188 bool FirstArgumentIsBase = false); 10189 10190 /// AddMethodCandidate - Adds a named decl (which is some kind of 10191 /// method) as a method candidate to the given overload set. 10192 void AddMethodCandidate(DeclAccessPair FoundDecl, QualType ObjectType, 10193 Expr::Classification ObjectClassification, 10194 ArrayRef<Expr *> Args, 10195 OverloadCandidateSet &CandidateSet, 10196 bool SuppressUserConversion = false, 10197 OverloadCandidateParamOrder PO = {}); 10198 10199 /// AddMethodCandidate - Adds the given C++ member function to the set 10200 /// of candidate functions, using the given function call arguments 10201 /// and the object argument (@c Object). For example, in a call 10202 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain 10203 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't 10204 /// allow user-defined conversions via constructors or conversion 10205 /// operators. 10206 void 10207 AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl, 10208 CXXRecordDecl *ActingContext, QualType ObjectType, 10209 Expr::Classification ObjectClassification, 10210 ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet, 10211 bool SuppressUserConversions = false, 10212 bool PartialOverloading = false, 10213 ConversionSequenceList EarlyConversions = std::nullopt, 10214 OverloadCandidateParamOrder PO = {}); 10215 10216 /// Add a C++ member function template as a candidate to the candidate 10217 /// set, using template argument deduction to produce an appropriate member 10218 /// function template specialization. 10219 void AddMethodTemplateCandidate( 10220 FunctionTemplateDecl *MethodTmpl, DeclAccessPair FoundDecl, 10221 CXXRecordDecl *ActingContext, 10222 TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ObjectType, 10223 Expr::Classification ObjectClassification, ArrayRef<Expr *> Args, 10224 OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false, 10225 bool PartialOverloading = false, OverloadCandidateParamOrder PO = {}); 10226 10227 /// Add a C++ function template specialization as a candidate 10228 /// in the candidate set, using template argument deduction to produce 10229 /// an appropriate function template specialization. 10230 void AddTemplateOverloadCandidate( 10231 FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl, 10232 TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, 10233 OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false, 10234 bool PartialOverloading = false, bool AllowExplicit = true, 10235 ADLCallKind IsADLCandidate = ADLCallKind::NotADL, 10236 OverloadCandidateParamOrder PO = {}, 10237 bool AggregateCandidateDeduction = false); 10238 10239 /// Check that implicit conversion sequences can be formed for each argument 10240 /// whose corresponding parameter has a non-dependent type, per DR1391's 10241 /// [temp.deduct.call]p10. 10242 bool CheckNonDependentConversions( 10243 FunctionTemplateDecl *FunctionTemplate, ArrayRef<QualType> ParamTypes, 10244 ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet, 10245 ConversionSequenceList &Conversions, bool SuppressUserConversions, 10246 CXXRecordDecl *ActingContext = nullptr, QualType ObjectType = QualType(), 10247 Expr::Classification ObjectClassification = {}, 10248 OverloadCandidateParamOrder PO = {}); 10249 10250 /// AddConversionCandidate - Add a C++ conversion function as a 10251 /// candidate in the candidate set (C++ [over.match.conv], 10252 /// C++ [over.match.copy]). From is the expression we're converting from, 10253 /// and ToType is the type that we're eventually trying to convert to 10254 /// (which may or may not be the same type as the type that the 10255 /// conversion function produces). 10256 void AddConversionCandidate( 10257 CXXConversionDecl *Conversion, DeclAccessPair FoundDecl, 10258 CXXRecordDecl *ActingContext, Expr *From, QualType ToType, 10259 OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit, 10260 bool AllowExplicit, bool AllowResultConversion = true); 10261 10262 /// Adds a conversion function template specialization 10263 /// candidate to the overload set, using template argument deduction 10264 /// to deduce the template arguments of the conversion function 10265 /// template from the type that we are converting to (C++ 10266 /// [temp.deduct.conv]). 10267 void AddTemplateConversionCandidate( 10268 FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl, 10269 CXXRecordDecl *ActingContext, Expr *From, QualType ToType, 10270 OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit, 10271 bool AllowExplicit, bool AllowResultConversion = true); 10272 10273 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that 10274 /// converts the given @c Object to a function pointer via the 10275 /// conversion function @c Conversion, and then attempts to call it 10276 /// with the given arguments (C++ [over.call.object]p2-4). Proto is 10277 /// the type of function that we'll eventually be calling. 10278 void AddSurrogateCandidate(CXXConversionDecl *Conversion, 10279 DeclAccessPair FoundDecl, 10280 CXXRecordDecl *ActingContext, 10281 const FunctionProtoType *Proto, Expr *Object, 10282 ArrayRef<Expr *> Args, 10283 OverloadCandidateSet &CandidateSet); 10284 10285 /// Add all of the non-member operator function declarations in the given 10286 /// function set to the overload candidate set. 10287 void AddNonMemberOperatorCandidates( 10288 const UnresolvedSetImpl &Functions, ArrayRef<Expr *> Args, 10289 OverloadCandidateSet &CandidateSet, 10290 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr); 10291 10292 /// Add overload candidates for overloaded operators that are 10293 /// member functions. 10294 /// 10295 /// Add the overloaded operator candidates that are member functions 10296 /// for the operator Op that was used in an operator expression such 10297 /// as "x Op y". , Args/NumArgs provides the operator arguments, and 10298 /// CandidateSet will store the added overload candidates. (C++ 10299 /// [over.match.oper]). 10300 void AddMemberOperatorCandidates(OverloadedOperatorKind Op, 10301 SourceLocation OpLoc, ArrayRef<Expr *> Args, 10302 OverloadCandidateSet &CandidateSet, 10303 OverloadCandidateParamOrder PO = {}); 10304 10305 /// AddBuiltinCandidate - Add a candidate for a built-in 10306 /// operator. ResultTy and ParamTys are the result and parameter types 10307 /// of the built-in candidate, respectively. Args and NumArgs are the 10308 /// arguments being passed to the candidate. IsAssignmentOperator 10309 /// should be true when this built-in candidate is an assignment 10310 /// operator. NumContextualBoolArguments is the number of arguments 10311 /// (at the beginning of the argument list) that will be contextually 10312 /// converted to bool. 10313 void AddBuiltinCandidate(QualType *ParamTys, ArrayRef<Expr *> Args, 10314 OverloadCandidateSet &CandidateSet, 10315 bool IsAssignmentOperator = false, 10316 unsigned NumContextualBoolArguments = 0); 10317 10318 /// AddBuiltinOperatorCandidates - Add the appropriate built-in 10319 /// operator overloads to the candidate set (C++ [over.built]), based 10320 /// on the operator @p Op and the arguments given. For example, if the 10321 /// operator is a binary '+', this routine might add "int 10322 /// operator+(int, int)" to cover integer addition. 10323 void AddBuiltinOperatorCandidates(OverloadedOperatorKind Op, 10324 SourceLocation OpLoc, ArrayRef<Expr *> Args, 10325 OverloadCandidateSet &CandidateSet); 10326 10327 /// Add function candidates found via argument-dependent lookup 10328 /// to the set of overloading candidates. 10329 /// 10330 /// This routine performs argument-dependent name lookup based on the 10331 /// given function name (which may also be an operator name) and adds 10332 /// all of the overload candidates found by ADL to the overload 10333 /// candidate set (C++ [basic.lookup.argdep]). 10334 void AddArgumentDependentLookupCandidates( 10335 DeclarationName Name, SourceLocation Loc, ArrayRef<Expr *> Args, 10336 TemplateArgumentListInfo *ExplicitTemplateArgs, 10337 OverloadCandidateSet &CandidateSet, bool PartialOverloading = false); 10338 10339 /// Check the enable_if expressions on the given function. Returns the first 10340 /// failing attribute, or NULL if they were all successful. 10341 EnableIfAttr *CheckEnableIf(FunctionDecl *Function, SourceLocation CallLoc, 10342 ArrayRef<Expr *> Args, 10343 bool MissingImplicitThis = false); 10344 10345 /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any 10346 /// non-ArgDependent DiagnoseIfAttrs. 10347 /// 10348 /// Argument-dependent diagnose_if attributes should be checked each time a 10349 /// function is used as a direct callee of a function call. 10350 /// 10351 /// Returns true if any errors were emitted. 10352 bool diagnoseArgDependentDiagnoseIfAttrs(const FunctionDecl *Function, 10353 const Expr *ThisArg, 10354 ArrayRef<const Expr *> Args, 10355 SourceLocation Loc); 10356 10357 /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any 10358 /// ArgDependent DiagnoseIfAttrs. 10359 /// 10360 /// Argument-independent diagnose_if attributes should be checked on every use 10361 /// of a function. 10362 /// 10363 /// Returns true if any errors were emitted. 10364 bool diagnoseArgIndependentDiagnoseIfAttrs(const NamedDecl *ND, 10365 SourceLocation Loc); 10366 10367 /// Determine if \p A and \p B are equivalent internal linkage declarations 10368 /// from different modules, and thus an ambiguity error can be downgraded to 10369 /// an extension warning. 10370 bool isEquivalentInternalLinkageDeclaration(const NamedDecl *A, 10371 const NamedDecl *B); 10372 void diagnoseEquivalentInternalLinkageDeclarations( 10373 SourceLocation Loc, const NamedDecl *D, 10374 ArrayRef<const NamedDecl *> Equiv); 10375 10376 // Emit as a 'note' the specific overload candidate 10377 void NoteOverloadCandidate( 10378 const NamedDecl *Found, const FunctionDecl *Fn, 10379 OverloadCandidateRewriteKind RewriteKind = OverloadCandidateRewriteKind(), 10380 QualType DestType = QualType(), bool TakingAddress = false); 10381 10382 // Emit as a series of 'note's all template and non-templates identified by 10383 // the expression Expr 10384 void NoteAllOverloadCandidates(Expr *E, QualType DestType = QualType(), 10385 bool TakingAddress = false); 10386 10387 /// Returns whether the given function's address can be taken or not, 10388 /// optionally emitting a diagnostic if the address can't be taken. 10389 /// 10390 /// Returns false if taking the address of the function is illegal. 10391 bool checkAddressOfFunctionIsAvailable(const FunctionDecl *Function, 10392 bool Complain = false, 10393 SourceLocation Loc = SourceLocation()); 10394 10395 // [PossiblyAFunctionType] --> [Return] 10396 // NonFunctionType --> NonFunctionType 10397 // R (A) --> R(A) 10398 // R (*)(A) --> R (A) 10399 // R (&)(A) --> R (A) 10400 // R (S::*)(A) --> R (A) 10401 QualType ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType); 10402 10403 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of 10404 /// an overloaded function (C++ [over.over]), where @p From is an 10405 /// expression with overloaded function type and @p ToType is the type 10406 /// we're trying to resolve to. For example: 10407 /// 10408 /// @code 10409 /// int f(double); 10410 /// int f(int); 10411 /// 10412 /// int (*pfd)(double) = f; // selects f(double) 10413 /// @endcode 10414 /// 10415 /// This routine returns the resulting FunctionDecl if it could be 10416 /// resolved, and NULL otherwise. When @p Complain is true, this 10417 /// routine will emit diagnostics if there is an error. 10418 FunctionDecl * 10419 ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, QualType TargetType, 10420 bool Complain, DeclAccessPair &Found, 10421 bool *pHadMultipleCandidates = nullptr); 10422 10423 /// Given an expression that refers to an overloaded function, try to 10424 /// resolve that function to a single function that can have its address 10425 /// taken. This will modify `Pair` iff it returns non-null. 10426 /// 10427 /// This routine can only succeed if from all of the candidates in the 10428 /// overload set for SrcExpr that can have their addresses taken, there is one 10429 /// candidate that is more constrained than the rest. 10430 FunctionDecl * 10431 resolveAddressOfSingleOverloadCandidate(Expr *E, DeclAccessPair &FoundResult); 10432 10433 /// Given an overloaded function, tries to turn it into a non-overloaded 10434 /// function reference using resolveAddressOfSingleOverloadCandidate. This 10435 /// will perform access checks, diagnose the use of the resultant decl, and, 10436 /// if requested, potentially perform a function-to-pointer decay. 10437 /// 10438 /// Returns false if resolveAddressOfSingleOverloadCandidate fails. 10439 /// Otherwise, returns true. This may emit diagnostics and return true. 10440 bool resolveAndFixAddressOfSingleOverloadCandidate( 10441 ExprResult &SrcExpr, bool DoFunctionPointerConversion = false); 10442 10443 /// Given an expression that refers to an overloaded function, try to 10444 /// resolve that overloaded function expression down to a single function. 10445 /// 10446 /// This routine can only resolve template-ids that refer to a single function 10447 /// template, where that template-id refers to a single template whose 10448 /// template arguments are either provided by the template-id or have 10449 /// defaults, as described in C++0x [temp.arg.explicit]p3. 10450 /// 10451 /// If no template-ids are found, no diagnostics are emitted and NULL is 10452 /// returned. 10453 FunctionDecl *ResolveSingleFunctionTemplateSpecialization( 10454 OverloadExpr *ovl, bool Complain = false, DeclAccessPair *Found = nullptr, 10455 TemplateSpecCandidateSet *FailedTSC = nullptr); 10456 10457 // Resolve and fix an overloaded expression that can be resolved 10458 // because it identifies a single function template specialization. 10459 // 10460 // Last three arguments should only be supplied if Complain = true 10461 // 10462 // Return true if it was logically possible to so resolve the 10463 // expression, regardless of whether or not it succeeded. Always 10464 // returns true if 'complain' is set. 10465 bool ResolveAndFixSingleFunctionTemplateSpecialization( 10466 ExprResult &SrcExpr, bool DoFunctionPointerConversion = false, 10467 bool Complain = false, SourceRange OpRangeForComplaining = SourceRange(), 10468 QualType DestTypeForComplaining = QualType(), 10469 unsigned DiagIDForComplaining = 0); 10470 10471 /// Add the overload candidates named by callee and/or found by argument 10472 /// dependent lookup to the given overload set. 10473 void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE, 10474 ArrayRef<Expr *> Args, 10475 OverloadCandidateSet &CandidateSet, 10476 bool PartialOverloading = false); 10477 10478 /// Add the call candidates from the given set of lookup results to the given 10479 /// overload set. Non-function lookup results are ignored. 10480 void AddOverloadedCallCandidates( 10481 LookupResult &R, TemplateArgumentListInfo *ExplicitTemplateArgs, 10482 ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet); 10483 10484 // An enum used to represent the different possible results of building a 10485 // range-based for loop. 10486 enum ForRangeStatus { 10487 FRS_Success, 10488 FRS_NoViableFunction, 10489 FRS_DiagnosticIssued 10490 }; 10491 10492 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the 10493 /// given LookupResult is non-empty, it is assumed to describe a member which 10494 /// will be invoked. Otherwise, the function will be found via argument 10495 /// dependent lookup. 10496 /// CallExpr is set to a valid expression and FRS_Success returned on success, 10497 /// otherwise CallExpr is set to ExprError() and some non-success value 10498 /// is returned. 10499 ForRangeStatus BuildForRangeBeginEndCall(SourceLocation Loc, 10500 SourceLocation RangeLoc, 10501 const DeclarationNameInfo &NameInfo, 10502 LookupResult &MemberLookup, 10503 OverloadCandidateSet *CandidateSet, 10504 Expr *Range, ExprResult *CallExpr); 10505 10506 /// BuildOverloadedCallExpr - Given the call expression that calls Fn 10507 /// (which eventually refers to the declaration Func) and the call 10508 /// arguments Args/NumArgs, attempt to resolve the function call down 10509 /// to a specific function. If overload resolution succeeds, returns 10510 /// the call expression produced by overload resolution. 10511 /// Otherwise, emits diagnostics and returns ExprError. 10512 ExprResult BuildOverloadedCallExpr( 10513 Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, 10514 MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, 10515 bool AllowTypoCorrection = true, bool CalleesAddressIsTaken = false); 10516 10517 /// Constructs and populates an OverloadedCandidateSet from 10518 /// the given function. 10519 /// \returns true when an the ExprResult output parameter has been set. 10520 bool buildOverloadedCallSet(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, 10521 MultiExprArg Args, SourceLocation RParenLoc, 10522 OverloadCandidateSet *CandidateSet, 10523 ExprResult *Result); 10524 10525 ExprResult CreateUnresolvedLookupExpr(CXXRecordDecl *NamingClass, 10526 NestedNameSpecifierLoc NNSLoc, 10527 DeclarationNameInfo DNI, 10528 const UnresolvedSetImpl &Fns, 10529 bool PerformADL = true); 10530 10531 /// Create a unary operation that may resolve to an overloaded 10532 /// operator. 10533 /// 10534 /// \param OpLoc The location of the operator itself (e.g., '*'). 10535 /// 10536 /// \param Opc The UnaryOperatorKind that describes this operator. 10537 /// 10538 /// \param Fns The set of non-member functions that will be 10539 /// considered by overload resolution. The caller needs to build this 10540 /// set based on the context using, e.g., 10541 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 10542 /// set should not contain any member functions; those will be added 10543 /// by CreateOverloadedUnaryOp(). 10544 /// 10545 /// \param Input The input argument. 10546 ExprResult CreateOverloadedUnaryOp(SourceLocation OpLoc, 10547 UnaryOperatorKind Opc, 10548 const UnresolvedSetImpl &Fns, Expr *input, 10549 bool RequiresADL = true); 10550 10551 /// Perform lookup for an overloaded binary operator. 10552 void LookupOverloadedBinOp(OverloadCandidateSet &CandidateSet, 10553 OverloadedOperatorKind Op, 10554 const UnresolvedSetImpl &Fns, 10555 ArrayRef<Expr *> Args, bool RequiresADL = true); 10556 10557 /// Create a binary operation that may resolve to an overloaded 10558 /// operator. 10559 /// 10560 /// \param OpLoc The location of the operator itself (e.g., '+'). 10561 /// 10562 /// \param Opc The BinaryOperatorKind that describes this operator. 10563 /// 10564 /// \param Fns The set of non-member functions that will be 10565 /// considered by overload resolution. The caller needs to build this 10566 /// set based on the context using, e.g., 10567 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 10568 /// set should not contain any member functions; those will be added 10569 /// by CreateOverloadedBinOp(). 10570 /// 10571 /// \param LHS Left-hand argument. 10572 /// \param RHS Right-hand argument. 10573 /// \param PerformADL Whether to consider operator candidates found by ADL. 10574 /// \param AllowRewrittenCandidates Whether to consider candidates found by 10575 /// C++20 operator rewrites. 10576 /// \param DefaultedFn If we are synthesizing a defaulted operator function, 10577 /// the function in question. Such a function is never a candidate in 10578 /// our overload resolution. This also enables synthesizing a three-way 10579 /// comparison from < and == as described in C++20 [class.spaceship]p1. 10580 ExprResult CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, 10581 const UnresolvedSetImpl &Fns, Expr *LHS, 10582 Expr *RHS, bool RequiresADL = true, 10583 bool AllowRewrittenCandidates = true, 10584 FunctionDecl *DefaultedFn = nullptr); 10585 ExprResult BuildSynthesizedThreeWayComparison(SourceLocation OpLoc, 10586 const UnresolvedSetImpl &Fns, 10587 Expr *LHS, Expr *RHS, 10588 FunctionDecl *DefaultedFn); 10589 10590 ExprResult CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, 10591 SourceLocation RLoc, Expr *Base, 10592 MultiExprArg Args); 10593 10594 /// BuildCallToMemberFunction - Build a call to a member 10595 /// function. MemExpr is the expression that refers to the member 10596 /// function (and includes the object parameter), Args/NumArgs are the 10597 /// arguments to the function call (not including the object 10598 /// parameter). The caller needs to validate that the member 10599 /// expression refers to a non-static member function or an overloaded 10600 /// member function. 10601 ExprResult BuildCallToMemberFunction( 10602 Scope *S, Expr *MemExpr, SourceLocation LParenLoc, MultiExprArg Args, 10603 SourceLocation RParenLoc, Expr *ExecConfig = nullptr, 10604 bool IsExecConfig = false, bool AllowRecovery = false); 10605 10606 /// BuildCallToObjectOfClassType - Build a call to an object of class 10607 /// type (C++ [over.call.object]), which can end up invoking an 10608 /// overloaded function call operator (@c operator()) or performing a 10609 /// user-defined conversion on the object argument. 10610 ExprResult BuildCallToObjectOfClassType(Scope *S, Expr *Object, 10611 SourceLocation LParenLoc, 10612 MultiExprArg Args, 10613 SourceLocation RParenLoc); 10614 10615 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator-> 10616 /// (if one exists), where @c Base is an expression of class type and 10617 /// @c Member is the name of the member we're trying to find. 10618 ExprResult BuildOverloadedArrowExpr(Scope *S, Expr *Base, 10619 SourceLocation OpLoc, 10620 bool *NoArrowOperatorFound = nullptr); 10621 10622 ExprResult BuildCXXMemberCallExpr(Expr *Exp, NamedDecl *FoundDecl, 10623 CXXConversionDecl *Method, 10624 bool HadMultipleCandidates); 10625 10626 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call 10627 /// to a literal operator described by the provided lookup results. 10628 ExprResult BuildLiteralOperatorCall( 10629 LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args, 10630 SourceLocation LitEndLoc, 10631 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr); 10632 10633 /// FixOverloadedFunctionReference - E is an expression that refers to 10634 /// a C++ overloaded function (possibly with some parentheses and 10635 /// perhaps a '&' around it). We have resolved the overloaded function 10636 /// to the function declaration Fn, so patch up the expression E to 10637 /// refer (possibly indirectly) to Fn. Returns the new expr. 10638 ExprResult FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl, 10639 FunctionDecl *Fn); 10640 ExprResult FixOverloadedFunctionReference(ExprResult, 10641 DeclAccessPair FoundDecl, 10642 FunctionDecl *Fn); 10643 10644 /// - Returns a selector which best matches given argument list or 10645 /// nullptr if none could be found 10646 ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args, 10647 bool IsInstance, 10648 SmallVectorImpl<ObjCMethodDecl *> &Methods); 10649 10650 ///@} 10651 10652 // 10653 // 10654 // ------------------------------------------------------------------------- 10655 // 10656 // 10657 10658 /// \name Statements 10659 /// Implementations are in SemaStmt.cpp 10660 ///@{ 10661 10662 public: 10663 /// Stack of active SEH __finally scopes. Can be empty. 10664 SmallVector<Scope *, 2> CurrentSEHFinally; 10665 10666 StmtResult ActOnExprStmt(ExprResult Arg, bool DiscardedValue = true); 10667 StmtResult ActOnExprStmtError(); 10668 10669 StmtResult ActOnNullStmt(SourceLocation SemiLoc, 10670 bool HasLeadingEmptyMacro = false); 10671 10672 StmtResult ActOnDeclStmt(DeclGroupPtrTy Decl, SourceLocation StartLoc, 10673 SourceLocation EndLoc); 10674 void ActOnForEachDeclStmt(DeclGroupPtrTy Decl); 10675 10676 /// DiagnoseUnusedExprResult - If the statement passed in is an expression 10677 /// whose result is unused, warn. 10678 void DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID); 10679 10680 void ActOnStartOfCompoundStmt(bool IsStmtExpr); 10681 void ActOnAfterCompoundStatementLeadingPragmas(); 10682 void ActOnFinishOfCompoundStmt(); 10683 StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R, 10684 ArrayRef<Stmt *> Elts, bool isStmtExpr); 10685 10686 sema::CompoundScopeInfo &getCurCompoundScope() const; 10687 10688 ExprResult ActOnCaseExpr(SourceLocation CaseLoc, ExprResult Val); 10689 StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHS, 10690 SourceLocation DotDotDotLoc, ExprResult RHS, 10691 SourceLocation ColonLoc); 10692 10693 /// ActOnCaseStmtBody - This installs a statement as the body of a case. 10694 void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt); 10695 10696 StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc, 10697 SourceLocation ColonLoc, Stmt *SubStmt, 10698 Scope *CurScope); 10699 StmtResult ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, 10700 SourceLocation ColonLoc, Stmt *SubStmt); 10701 10702 StmtResult BuildAttributedStmt(SourceLocation AttrsLoc, 10703 ArrayRef<const Attr *> Attrs, Stmt *SubStmt); 10704 StmtResult ActOnAttributedStmt(const ParsedAttributes &AttrList, 10705 Stmt *SubStmt); 10706 10707 /// Check whether the given statement can have musttail applied to it, 10708 /// issuing a diagnostic and returning false if not. In the success case, 10709 /// the statement is rewritten to remove implicit nodes from the return 10710 /// value. 10711 bool checkAndRewriteMustTailAttr(Stmt *St, const Attr &MTA); 10712 10713 StmtResult ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, 10714 SourceLocation LParenLoc, Stmt *InitStmt, 10715 ConditionResult Cond, SourceLocation RParenLoc, 10716 Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal); 10717 StmtResult BuildIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, 10718 SourceLocation LParenLoc, Stmt *InitStmt, 10719 ConditionResult Cond, SourceLocation RParenLoc, 10720 Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal); 10721 10722 ExprResult CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond); 10723 10724 StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, 10725 SourceLocation LParenLoc, Stmt *InitStmt, 10726 ConditionResult Cond, 10727 SourceLocation RParenLoc); 10728 StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, 10729 Stmt *Body); 10730 10731 /// DiagnoseAssignmentEnum - Warn if assignment to enum is a constant 10732 /// integer not in the range of enum values. 10733 void DiagnoseAssignmentEnum(QualType DstType, QualType SrcType, 10734 Expr *SrcExpr); 10735 10736 StmtResult ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc, 10737 ConditionResult Cond, SourceLocation RParenLoc, 10738 Stmt *Body); 10739 StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, 10740 SourceLocation WhileLoc, SourceLocation CondLParen, 10741 Expr *Cond, SourceLocation CondRParen); 10742 10743 StmtResult ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, 10744 Stmt *First, ConditionResult Second, 10745 FullExprArg Third, SourceLocation RParenLoc, 10746 Stmt *Body); 10747 10748 /// In an Objective C collection iteration statement: 10749 /// for (x in y) 10750 /// x can be an arbitrary l-value expression. Bind it up as a 10751 /// full-expression. 10752 StmtResult ActOnForEachLValueExpr(Expr *E); 10753 10754 enum BuildForRangeKind { 10755 /// Initial building of a for-range statement. 10756 BFRK_Build, 10757 /// Instantiation or recovery rebuild of a for-range statement. Don't 10758 /// attempt any typo-correction. 10759 BFRK_Rebuild, 10760 /// Determining whether a for-range statement could be built. Avoid any 10761 /// unnecessary or irreversible actions. 10762 BFRK_Check 10763 }; 10764 10765 /// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement. 10766 /// 10767 /// C++11 [stmt.ranged]: 10768 /// A range-based for statement is equivalent to 10769 /// 10770 /// { 10771 /// auto && __range = range-init; 10772 /// for ( auto __begin = begin-expr, 10773 /// __end = end-expr; 10774 /// __begin != __end; 10775 /// ++__begin ) { 10776 /// for-range-declaration = *__begin; 10777 /// statement 10778 /// } 10779 /// } 10780 /// 10781 /// The body of the loop is not available yet, since it cannot be analysed 10782 /// until we have determined the type of the for-range-declaration. 10783 StmtResult ActOnCXXForRangeStmt( 10784 Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, 10785 Stmt *InitStmt, Stmt *LoopVar, SourceLocation ColonLoc, Expr *Collection, 10786 SourceLocation RParenLoc, BuildForRangeKind Kind, 10787 ArrayRef<MaterializeTemporaryExpr *> LifetimeExtendTemps = {}); 10788 10789 /// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement. 10790 StmtResult BuildCXXForRangeStmt( 10791 SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, 10792 SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, 10793 Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, 10794 BuildForRangeKind Kind, 10795 ArrayRef<MaterializeTemporaryExpr *> LifetimeExtendTemps = {}); 10796 10797 /// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement. 10798 /// This is a separate step from ActOnCXXForRangeStmt because analysis of the 10799 /// body cannot be performed until after the type of the range variable is 10800 /// determined. 10801 StmtResult FinishCXXForRangeStmt(Stmt *ForRange, Stmt *Body); 10802 10803 StmtResult ActOnGotoStmt(SourceLocation GotoLoc, SourceLocation LabelLoc, 10804 LabelDecl *TheDecl); 10805 StmtResult ActOnIndirectGotoStmt(SourceLocation GotoLoc, 10806 SourceLocation StarLoc, Expr *DestExp); 10807 StmtResult ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope); 10808 StmtResult ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope); 10809 10810 struct NamedReturnInfo { 10811 const VarDecl *Candidate; 10812 10813 enum Status : uint8_t { None, MoveEligible, MoveEligibleAndCopyElidable }; 10814 Status S; 10815 isMoveEligibleNamedReturnInfo10816 bool isMoveEligible() const { return S != None; }; isCopyElidableNamedReturnInfo10817 bool isCopyElidable() const { return S == MoveEligibleAndCopyElidable; } 10818 }; 10819 enum class SimplerImplicitMoveMode { ForceOff, Normal, ForceOn }; 10820 10821 /// Determine whether the given expression might be move-eligible or 10822 /// copy-elidable in either a (co_)return statement or throw expression, 10823 /// without considering function return type, if applicable. 10824 /// 10825 /// \param E The expression being returned from the function or block, 10826 /// being thrown, or being co_returned from a coroutine. This expression 10827 /// might be modified by the implementation. 10828 /// 10829 /// \param Mode Overrides detection of current language mode 10830 /// and uses the rules for C++23. 10831 /// 10832 /// \returns An aggregate which contains the Candidate and isMoveEligible 10833 /// and isCopyElidable methods. If Candidate is non-null, it means 10834 /// isMoveEligible() would be true under the most permissive language 10835 /// standard. 10836 NamedReturnInfo getNamedReturnInfo( 10837 Expr *&E, SimplerImplicitMoveMode Mode = SimplerImplicitMoveMode::Normal); 10838 10839 /// Determine whether the given NRVO candidate variable is move-eligible or 10840 /// copy-elidable, without considering function return type. 10841 /// 10842 /// \param VD The NRVO candidate variable. 10843 /// 10844 /// \returns An aggregate which contains the Candidate and isMoveEligible 10845 /// and isCopyElidable methods. If Candidate is non-null, it means 10846 /// isMoveEligible() would be true under the most permissive language 10847 /// standard. 10848 NamedReturnInfo getNamedReturnInfo(const VarDecl *VD); 10849 10850 /// Updates given NamedReturnInfo's move-eligible and 10851 /// copy-elidable statuses, considering the function 10852 /// return type criteria as applicable to return statements. 10853 /// 10854 /// \param Info The NamedReturnInfo object to update. 10855 /// 10856 /// \param ReturnType This is the return type of the function. 10857 /// \returns The copy elision candidate, in case the initial return expression 10858 /// was copy elidable, or nullptr otherwise. 10859 const VarDecl *getCopyElisionCandidate(NamedReturnInfo &Info, 10860 QualType ReturnType); 10861 10862 /// Perform the initialization of a potentially-movable value, which 10863 /// is the result of return value. 10864 /// 10865 /// This routine implements C++20 [class.copy.elision]p3, which attempts to 10866 /// treat returned lvalues as rvalues in certain cases (to prefer move 10867 /// construction), then falls back to treating them as lvalues if that failed. 10868 ExprResult 10869 PerformMoveOrCopyInitialization(const InitializedEntity &Entity, 10870 const NamedReturnInfo &NRInfo, Expr *Value, 10871 bool SupressSimplerImplicitMoves = false); 10872 10873 TypeLoc getReturnTypeLoc(FunctionDecl *FD) const; 10874 10875 /// Deduce the return type for a function from a returned expression, per 10876 /// C++1y [dcl.spec.auto]p6. 10877 bool DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, 10878 SourceLocation ReturnLoc, Expr *RetExpr, 10879 const AutoType *AT); 10880 10881 StmtResult ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, 10882 Scope *CurScope); 10883 StmtResult BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, 10884 bool AllowRecovery = false); 10885 10886 /// ActOnCapScopeReturnStmt - Utility routine to type-check return statements 10887 /// for capturing scopes. 10888 StmtResult ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, 10889 NamedReturnInfo &NRInfo, 10890 bool SupressSimplerImplicitMoves); 10891 10892 /// ActOnCXXCatchBlock - Takes an exception declaration and a handler block 10893 /// and creates a proper catch handler from them. 10894 StmtResult ActOnCXXCatchBlock(SourceLocation CatchLoc, Decl *ExDecl, 10895 Stmt *HandlerBlock); 10896 10897 /// ActOnCXXTryBlock - Takes a try compound-statement and a number of 10898 /// handlers and creates a try statement from them. 10899 StmtResult ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, 10900 ArrayRef<Stmt *> Handlers); 10901 10902 StmtResult ActOnSEHTryBlock(bool IsCXXTry, // try (true) or __try (false) ? 10903 SourceLocation TryLoc, Stmt *TryBlock, 10904 Stmt *Handler); 10905 StmtResult ActOnSEHExceptBlock(SourceLocation Loc, Expr *FilterExpr, 10906 Stmt *Block); 10907 void ActOnStartSEHFinallyBlock(); 10908 void ActOnAbortSEHFinallyBlock(); 10909 StmtResult ActOnFinishSEHFinallyBlock(SourceLocation Loc, Stmt *Block); 10910 StmtResult ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope); 10911 10912 StmtResult BuildMSDependentExistsStmt(SourceLocation KeywordLoc, 10913 bool IsIfExists, 10914 NestedNameSpecifierLoc QualifierLoc, 10915 DeclarationNameInfo NameInfo, 10916 Stmt *Nested); 10917 StmtResult ActOnMSDependentExistsStmt(SourceLocation KeywordLoc, 10918 bool IsIfExists, CXXScopeSpec &SS, 10919 UnqualifiedId &Name, Stmt *Nested); 10920 10921 void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope, 10922 CapturedRegionKind Kind, unsigned NumParams); 10923 typedef std::pair<StringRef, QualType> CapturedParamNameType; 10924 void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope, 10925 CapturedRegionKind Kind, 10926 ArrayRef<CapturedParamNameType> Params, 10927 unsigned OpenMPCaptureLevel = 0); 10928 StmtResult ActOnCapturedRegionEnd(Stmt *S); 10929 void ActOnCapturedRegionError(); 10930 RecordDecl *CreateCapturedStmtRecordDecl(CapturedDecl *&CD, 10931 SourceLocation Loc, 10932 unsigned NumParams); 10933 10934 private: 10935 /// Check whether the given statement can have musttail applied to it, 10936 /// issuing a diagnostic and returning false if not. 10937 bool checkMustTailAttr(const Stmt *St, const Attr &MTA); 10938 10939 /// Check if the given expression contains 'break' or 'continue' 10940 /// statement that produces control flow different from GCC. 10941 void CheckBreakContinueBinding(Expr *E); 10942 10943 ///@} 10944 10945 // 10946 // 10947 // ------------------------------------------------------------------------- 10948 // 10949 // 10950 10951 /// \name `inline asm` Statement 10952 /// Implementations are in SemaStmtAsm.cpp 10953 ///@{ 10954 10955 public: 10956 StmtResult ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, 10957 bool IsVolatile, unsigned NumOutputs, 10958 unsigned NumInputs, IdentifierInfo **Names, 10959 MultiExprArg Constraints, MultiExprArg Exprs, 10960 Expr *AsmString, MultiExprArg Clobbers, 10961 unsigned NumLabels, SourceLocation RParenLoc); 10962 10963 void FillInlineAsmIdentifierInfo(Expr *Res, 10964 llvm::InlineAsmIdentifierInfo &Info); 10965 ExprResult LookupInlineAsmIdentifier(CXXScopeSpec &SS, 10966 SourceLocation TemplateKWLoc, 10967 UnqualifiedId &Id, 10968 bool IsUnevaluatedContext); 10969 bool LookupInlineAsmField(StringRef Base, StringRef Member, unsigned &Offset, 10970 SourceLocation AsmLoc); 10971 ExprResult LookupInlineAsmVarDeclField(Expr *RefExpr, StringRef Member, 10972 SourceLocation AsmLoc); 10973 StmtResult ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, 10974 ArrayRef<Token> AsmToks, StringRef AsmString, 10975 unsigned NumOutputs, unsigned NumInputs, 10976 ArrayRef<StringRef> Constraints, 10977 ArrayRef<StringRef> Clobbers, 10978 ArrayRef<Expr *> Exprs, SourceLocation EndLoc); 10979 LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName, 10980 SourceLocation Location, bool AlwaysCreate); 10981 10982 ///@} 10983 10984 // 10985 // 10986 // ------------------------------------------------------------------------- 10987 // 10988 // 10989 10990 /// \name Statement Attribute Handling 10991 /// Implementations are in SemaStmtAttr.cpp 10992 ///@{ 10993 10994 public: 10995 bool CheckNoInlineAttr(const Stmt *OrigSt, const Stmt *CurSt, 10996 const AttributeCommonInfo &A); 10997 bool CheckAlwaysInlineAttr(const Stmt *OrigSt, const Stmt *CurSt, 10998 const AttributeCommonInfo &A); 10999 11000 CodeAlignAttr *BuildCodeAlignAttr(const AttributeCommonInfo &CI, Expr *E); 11001 bool CheckRebuiltStmtAttributes(ArrayRef<const Attr *> Attrs); 11002 11003 /// Process the attributes before creating an attributed statement. Returns 11004 /// the semantic attributes that have been processed. 11005 void ProcessStmtAttributes(Stmt *Stmt, const ParsedAttributes &InAttrs, 11006 SmallVectorImpl<const Attr *> &OutAttrs); 11007 11008 ExprResult ActOnCXXAssumeAttr(Stmt *St, const ParsedAttr &A, 11009 SourceRange Range); 11010 ExprResult BuildCXXAssumeExpr(Expr *Assumption, 11011 const IdentifierInfo *AttrName, 11012 SourceRange Range); 11013 11014 ///@} 11015 11016 // 11017 // 11018 // ------------------------------------------------------------------------- 11019 // 11020 // 11021 11022 /// \name C++ Templates 11023 /// Implementations are in SemaTemplate.cpp 11024 ///@{ 11025 11026 public: 11027 // Saves the current floating-point pragma stack and clear it in this Sema. 11028 class FpPragmaStackSaveRAII { 11029 public: FpPragmaStackSaveRAII(Sema & S)11030 FpPragmaStackSaveRAII(Sema &S) 11031 : S(S), SavedStack(std::move(S.FpPragmaStack)) { 11032 S.FpPragmaStack.Stack.clear(); 11033 } ~FpPragmaStackSaveRAII()11034 ~FpPragmaStackSaveRAII() { S.FpPragmaStack = std::move(SavedStack); } 11035 11036 private: 11037 Sema &S; 11038 PragmaStack<FPOptionsOverride> SavedStack; 11039 }; 11040 resetFPOptions(FPOptions FPO)11041 void resetFPOptions(FPOptions FPO) { 11042 CurFPFeatures = FPO; 11043 FpPragmaStack.CurrentValue = FPO.getChangesFrom(FPOptions(LangOpts)); 11044 } 11045 getInventedParameterInfos()11046 ArrayRef<InventedTemplateParameterInfo> getInventedParameterInfos() const { 11047 return llvm::ArrayRef(InventedParameterInfos.begin() + 11048 InventedParameterInfosStart, 11049 InventedParameterInfos.end()); 11050 } 11051 11052 /// The number of SFINAE diagnostics that have been trapped. 11053 unsigned NumSFINAEErrors; 11054 getFunctionScopes()11055 ArrayRef<sema::FunctionScopeInfo *> getFunctionScopes() const { 11056 return llvm::ArrayRef(FunctionScopes.begin() + FunctionScopesStart, 11057 FunctionScopes.end()); 11058 } 11059 11060 typedef llvm::MapVector<const FunctionDecl *, 11061 std::unique_ptr<LateParsedTemplate>> 11062 LateParsedTemplateMapT; 11063 LateParsedTemplateMapT LateParsedTemplateMap; 11064 11065 /// Determine the number of levels of enclosing template parameters. This is 11066 /// only usable while parsing. Note that this does not include dependent 11067 /// contexts in which no template parameters have yet been declared, such as 11068 /// in a terse function template or generic lambda before the first 'auto' is 11069 /// encountered. 11070 unsigned getTemplateDepth(Scope *S) const; 11071 11072 void FilterAcceptableTemplateNames(LookupResult &R, 11073 bool AllowFunctionTemplates = true, 11074 bool AllowDependent = true); 11075 bool hasAnyAcceptableTemplateNames(LookupResult &R, 11076 bool AllowFunctionTemplates = true, 11077 bool AllowDependent = true, 11078 bool AllowNonTemplateFunctions = false); 11079 /// Try to interpret the lookup result D as a template-name. 11080 /// 11081 /// \param D A declaration found by name lookup. 11082 /// \param AllowFunctionTemplates Whether function templates should be 11083 /// considered valid results. 11084 /// \param AllowDependent Whether unresolved using declarations (that might 11085 /// name templates) should be considered valid results. 11086 static NamedDecl *getAsTemplateNameDecl(NamedDecl *D, 11087 bool AllowFunctionTemplates = true, 11088 bool AllowDependent = true); 11089 11090 enum TemplateNameIsRequiredTag { TemplateNameIsRequired }; 11091 /// Whether and why a template name is required in this lookup. 11092 class RequiredTemplateKind { 11093 public: 11094 /// Template name is required if TemplateKWLoc is valid. 11095 RequiredTemplateKind(SourceLocation TemplateKWLoc = SourceLocation()) TemplateKW(TemplateKWLoc)11096 : TemplateKW(TemplateKWLoc) {} 11097 /// Template name is unconditionally required. RequiredTemplateKind(TemplateNameIsRequiredTag)11098 RequiredTemplateKind(TemplateNameIsRequiredTag) {} 11099 getTemplateKeywordLoc()11100 SourceLocation getTemplateKeywordLoc() const { 11101 return TemplateKW.value_or(SourceLocation()); 11102 } hasTemplateKeyword()11103 bool hasTemplateKeyword() const { 11104 return getTemplateKeywordLoc().isValid(); 11105 } isRequired()11106 bool isRequired() const { return TemplateKW != SourceLocation(); } 11107 explicit operator bool() const { return isRequired(); } 11108 11109 private: 11110 std::optional<SourceLocation> TemplateKW; 11111 }; 11112 11113 enum class AssumedTemplateKind { 11114 /// This is not assumed to be a template name. 11115 None, 11116 /// This is assumed to be a template name because lookup found nothing. 11117 FoundNothing, 11118 /// This is assumed to be a template name because lookup found one or more 11119 /// functions (but no function templates). 11120 FoundFunctions, 11121 }; 11122 11123 bool 11124 LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS, 11125 QualType ObjectType, bool EnteringContext, 11126 RequiredTemplateKind RequiredTemplate = SourceLocation(), 11127 AssumedTemplateKind *ATK = nullptr, 11128 bool AllowTypoCorrection = true); 11129 11130 TemplateNameKind isTemplateName(Scope *S, CXXScopeSpec &SS, 11131 bool hasTemplateKeyword, 11132 const UnqualifiedId &Name, 11133 ParsedType ObjectType, bool EnteringContext, 11134 TemplateTy &Template, 11135 bool &MemberOfUnknownSpecialization, 11136 bool Disambiguation = false); 11137 11138 /// Try to resolve an undeclared template name as a type template. 11139 /// 11140 /// Sets II to the identifier corresponding to the template name, and updates 11141 /// Name to a corresponding (typo-corrected) type template name and TNK to 11142 /// the corresponding kind, if possible. 11143 void ActOnUndeclaredTypeTemplateName(Scope *S, TemplateTy &Name, 11144 TemplateNameKind &TNK, 11145 SourceLocation NameLoc, 11146 IdentifierInfo *&II); 11147 11148 bool resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, 11149 SourceLocation NameLoc, 11150 bool Diagnose = true); 11151 11152 /// Determine whether a particular identifier might be the name in a C++1z 11153 /// deduction-guide declaration. 11154 bool isDeductionGuideName(Scope *S, const IdentifierInfo &Name, 11155 SourceLocation NameLoc, CXXScopeSpec &SS, 11156 ParsedTemplateTy *Template = nullptr); 11157 11158 bool DiagnoseUnknownTemplateName(const IdentifierInfo &II, 11159 SourceLocation IILoc, Scope *S, 11160 const CXXScopeSpec *SS, 11161 TemplateTy &SuggestedTemplate, 11162 TemplateNameKind &SuggestedKind); 11163 11164 /// Determine whether we would be unable to instantiate this template (because 11165 /// it either has no definition, or is in the process of being instantiated). 11166 bool DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, 11167 NamedDecl *Instantiation, 11168 bool InstantiatedFromMember, 11169 const NamedDecl *Pattern, 11170 const NamedDecl *PatternDef, 11171 TemplateSpecializationKind TSK, 11172 bool Complain = true); 11173 11174 /// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining 11175 /// that the template parameter 'PrevDecl' is being shadowed by a new 11176 /// declaration at location Loc. Returns true to indicate that this is 11177 /// an error, and false otherwise. 11178 /// 11179 /// \param Loc The location of the declaration that shadows a template 11180 /// parameter. 11181 /// 11182 /// \param PrevDecl The template parameter that the declaration shadows. 11183 /// 11184 /// \param SupportedForCompatibility Whether to issue the diagnostic as 11185 /// a warning for compatibility with older versions of clang. 11186 /// Ignored when MSVC compatibility is enabled. 11187 void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl, 11188 bool SupportedForCompatibility = false); 11189 11190 /// AdjustDeclIfTemplate - If the given decl happens to be a template, reset 11191 /// the parameter D to reference the templated declaration and return a 11192 /// pointer to the template declaration. Otherwise, do nothing to D and return 11193 /// null. 11194 TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl); 11195 11196 /// ActOnTypeParameter - Called when a C++ template type parameter 11197 /// (e.g., "typename T") has been parsed. Typename specifies whether 11198 /// the keyword "typename" was used to declare the type parameter 11199 /// (otherwise, "class" was used), and KeyLoc is the location of the 11200 /// "class" or "typename" keyword. ParamName is the name of the 11201 /// parameter (NULL indicates an unnamed template parameter) and 11202 /// ParamNameLoc is the location of the parameter name (if any). 11203 /// If the type parameter has a default argument, it will be added 11204 /// later via ActOnTypeParameterDefault. 11205 NamedDecl *ActOnTypeParameter(Scope *S, bool Typename, 11206 SourceLocation EllipsisLoc, 11207 SourceLocation KeyLoc, 11208 IdentifierInfo *ParamName, 11209 SourceLocation ParamNameLoc, unsigned Depth, 11210 unsigned Position, SourceLocation EqualLoc, 11211 ParsedType DefaultArg, bool HasTypeConstraint); 11212 11213 bool CheckTypeConstraint(TemplateIdAnnotation *TypeConstraint); 11214 11215 bool ActOnTypeConstraint(const CXXScopeSpec &SS, 11216 TemplateIdAnnotation *TypeConstraint, 11217 TemplateTypeParmDecl *ConstrainedParameter, 11218 SourceLocation EllipsisLoc); 11219 bool BuildTypeConstraint(const CXXScopeSpec &SS, 11220 TemplateIdAnnotation *TypeConstraint, 11221 TemplateTypeParmDecl *ConstrainedParameter, 11222 SourceLocation EllipsisLoc, 11223 bool AllowUnexpandedPack); 11224 11225 /// Attach a type-constraint to a template parameter. 11226 /// \returns true if an error occurred. This can happen if the 11227 /// immediately-declared constraint could not be formed (e.g. incorrect number 11228 /// of arguments for the named concept). 11229 bool AttachTypeConstraint(NestedNameSpecifierLoc NS, 11230 DeclarationNameInfo NameInfo, 11231 ConceptDecl *NamedConcept, NamedDecl *FoundDecl, 11232 const TemplateArgumentListInfo *TemplateArgs, 11233 TemplateTypeParmDecl *ConstrainedParameter, 11234 SourceLocation EllipsisLoc); 11235 11236 bool AttachTypeConstraint(AutoTypeLoc TL, 11237 NonTypeTemplateParmDecl *NewConstrainedParm, 11238 NonTypeTemplateParmDecl *OrigConstrainedParm, 11239 SourceLocation EllipsisLoc); 11240 11241 /// Require the given type to be a structural type, and diagnose if it is not. 11242 /// 11243 /// \return \c true if an error was produced. 11244 bool RequireStructuralType(QualType T, SourceLocation Loc); 11245 11246 /// Check that the type of a non-type template parameter is 11247 /// well-formed. 11248 /// 11249 /// \returns the (possibly-promoted) parameter type if valid; 11250 /// otherwise, produces a diagnostic and returns a NULL type. 11251 QualType CheckNonTypeTemplateParameterType(TypeSourceInfo *&TSI, 11252 SourceLocation Loc); 11253 QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc); 11254 11255 NamedDecl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, 11256 unsigned Depth, unsigned Position, 11257 SourceLocation EqualLoc, 11258 Expr *DefaultArg); 11259 11260 /// ActOnTemplateTemplateParameter - Called when a C++ template template 11261 /// parameter (e.g. T in template <template \<typename> class T> class array) 11262 /// has been parsed. S is the current scope. 11263 NamedDecl *ActOnTemplateTemplateParameter( 11264 Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, 11265 bool Typename, SourceLocation EllipsisLoc, IdentifierInfo *ParamName, 11266 SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, 11267 SourceLocation EqualLoc, ParsedTemplateArgument DefaultArg); 11268 11269 /// ActOnTemplateParameterList - Builds a TemplateParameterList, optionally 11270 /// constrained by RequiresClause, that contains the template parameters in 11271 /// Params. 11272 TemplateParameterList *ActOnTemplateParameterList( 11273 unsigned Depth, SourceLocation ExportLoc, SourceLocation TemplateLoc, 11274 SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params, 11275 SourceLocation RAngleLoc, Expr *RequiresClause); 11276 11277 /// The context in which we are checking a template parameter list. 11278 enum TemplateParamListContext { 11279 TPC_ClassTemplate, 11280 TPC_VarTemplate, 11281 TPC_FunctionTemplate, 11282 TPC_ClassTemplateMember, 11283 TPC_FriendClassTemplate, 11284 TPC_FriendFunctionTemplate, 11285 TPC_FriendFunctionTemplateDefinition, 11286 TPC_TypeAliasTemplate 11287 }; 11288 11289 /// Checks the validity of a template parameter list, possibly 11290 /// considering the template parameter list from a previous 11291 /// declaration. 11292 /// 11293 /// If an "old" template parameter list is provided, it must be 11294 /// equivalent (per TemplateParameterListsAreEqual) to the "new" 11295 /// template parameter list. 11296 /// 11297 /// \param NewParams Template parameter list for a new template 11298 /// declaration. This template parameter list will be updated with any 11299 /// default arguments that are carried through from the previous 11300 /// template parameter list. 11301 /// 11302 /// \param OldParams If provided, template parameter list from a 11303 /// previous declaration of the same template. Default template 11304 /// arguments will be merged from the old template parameter list to 11305 /// the new template parameter list. 11306 /// 11307 /// \param TPC Describes the context in which we are checking the given 11308 /// template parameter list. 11309 /// 11310 /// \param SkipBody If we might have already made a prior merged definition 11311 /// of this template visible, the corresponding body-skipping information. 11312 /// Default argument redefinition is not an error when skipping such a body, 11313 /// because (under the ODR) we can assume the default arguments are the same 11314 /// as the prior merged definition. 11315 /// 11316 /// \returns true if an error occurred, false otherwise. 11317 bool CheckTemplateParameterList(TemplateParameterList *NewParams, 11318 TemplateParameterList *OldParams, 11319 TemplateParamListContext TPC, 11320 SkipBodyInfo *SkipBody = nullptr); 11321 11322 /// Match the given template parameter lists to the given scope 11323 /// specifier, returning the template parameter list that applies to the 11324 /// name. 11325 /// 11326 /// \param DeclStartLoc the start of the declaration that has a scope 11327 /// specifier or a template parameter list. 11328 /// 11329 /// \param DeclLoc The location of the declaration itself. 11330 /// 11331 /// \param SS the scope specifier that will be matched to the given template 11332 /// parameter lists. This scope specifier precedes a qualified name that is 11333 /// being declared. 11334 /// 11335 /// \param TemplateId The template-id following the scope specifier, if there 11336 /// is one. Used to check for a missing 'template<>'. 11337 /// 11338 /// \param ParamLists the template parameter lists, from the outermost to the 11339 /// innermost template parameter lists. 11340 /// 11341 /// \param IsFriend Whether to apply the slightly different rules for 11342 /// matching template parameters to scope specifiers in friend 11343 /// declarations. 11344 /// 11345 /// \param IsMemberSpecialization will be set true if the scope specifier 11346 /// denotes a fully-specialized type, and therefore this is a declaration of 11347 /// a member specialization. 11348 /// 11349 /// \returns the template parameter list, if any, that corresponds to the 11350 /// name that is preceded by the scope specifier @p SS. This template 11351 /// parameter list may have template parameters (if we're declaring a 11352 /// template) or may have no template parameters (if we're declaring a 11353 /// template specialization), or may be NULL (if what we're declaring isn't 11354 /// itself a template). 11355 TemplateParameterList *MatchTemplateParametersToScopeSpecifier( 11356 SourceLocation DeclStartLoc, SourceLocation DeclLoc, 11357 const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, 11358 ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, 11359 bool &IsMemberSpecialization, bool &Invalid, 11360 bool SuppressDiagnostic = false); 11361 11362 /// Returns the template parameter list with all default template argument 11363 /// information. 11364 TemplateParameterList *GetTemplateParameterList(TemplateDecl *TD); 11365 11366 DeclResult CheckClassTemplate( 11367 Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, 11368 CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, 11369 const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, 11370 AccessSpecifier AS, SourceLocation ModulePrivateLoc, 11371 SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, 11372 TemplateParameterList **OuterTemplateParamLists, 11373 SkipBodyInfo *SkipBody = nullptr); 11374 11375 /// Translates template arguments as provided by the parser 11376 /// into template arguments used by semantic analysis. 11377 void translateTemplateArguments(const ASTTemplateArgsPtr &In, 11378 TemplateArgumentListInfo &Out); 11379 11380 /// Convert a parsed type into a parsed template argument. This is mostly 11381 /// trivial, except that we may have parsed a C++17 deduced class template 11382 /// specialization type, in which case we should form a template template 11383 /// argument instead of a type template argument. 11384 ParsedTemplateArgument ActOnTemplateTypeArgument(TypeResult ParsedType); 11385 11386 void NoteAllFoundTemplates(TemplateName Name); 11387 11388 QualType CheckTemplateIdType(TemplateName Template, 11389 SourceLocation TemplateLoc, 11390 TemplateArgumentListInfo &TemplateArgs); 11391 11392 TypeResult 11393 ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 11394 TemplateTy Template, const IdentifierInfo *TemplateII, 11395 SourceLocation TemplateIILoc, SourceLocation LAngleLoc, 11396 ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc, 11397 bool IsCtorOrDtorName = false, bool IsClassName = false, 11398 ImplicitTypenameContext AllowImplicitTypename = 11399 ImplicitTypenameContext::No); 11400 11401 /// Parsed an elaborated-type-specifier that refers to a template-id, 11402 /// such as \c class T::template apply<U>. 11403 TypeResult ActOnTagTemplateIdType( 11404 TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, 11405 CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, 11406 SourceLocation TemplateLoc, SourceLocation LAngleLoc, 11407 ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc); 11408 11409 DeclResult ActOnVarTemplateSpecialization( 11410 Scope *S, Declarator &D, TypeSourceInfo *DI, LookupResult &Previous, 11411 SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, 11412 StorageClass SC, bool IsPartialSpecialization); 11413 11414 /// Get the specialization of the given variable template corresponding to 11415 /// the specified argument list, or a null-but-valid result if the arguments 11416 /// are dependent. 11417 DeclResult CheckVarTemplateId(VarTemplateDecl *Template, 11418 SourceLocation TemplateLoc, 11419 SourceLocation TemplateNameLoc, 11420 const TemplateArgumentListInfo &TemplateArgs); 11421 11422 /// Form a reference to the specialization of the given variable template 11423 /// corresponding to the specified argument list, or a null-but-valid result 11424 /// if the arguments are dependent. 11425 ExprResult CheckVarTemplateId(const CXXScopeSpec &SS, 11426 const DeclarationNameInfo &NameInfo, 11427 VarTemplateDecl *Template, NamedDecl *FoundD, 11428 SourceLocation TemplateLoc, 11429 const TemplateArgumentListInfo *TemplateArgs); 11430 11431 ExprResult 11432 CheckConceptTemplateId(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 11433 const DeclarationNameInfo &ConceptNameInfo, 11434 NamedDecl *FoundDecl, ConceptDecl *NamedConcept, 11435 const TemplateArgumentListInfo *TemplateArgs); 11436 11437 void diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc); 11438 void diagnoseMissingTemplateArguments(const CXXScopeSpec &SS, 11439 bool TemplateKeyword, TemplateDecl *TD, 11440 SourceLocation Loc); 11441 11442 ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS, 11443 SourceLocation TemplateKWLoc, LookupResult &R, 11444 bool RequiresADL, 11445 const TemplateArgumentListInfo *TemplateArgs); 11446 11447 // We actually only call this from template instantiation. 11448 ExprResult 11449 BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 11450 const DeclarationNameInfo &NameInfo, 11451 const TemplateArgumentListInfo *TemplateArgs, 11452 bool IsAddressOfOperand); 11453 11454 /// Form a template name from a name that is syntactically required to name a 11455 /// template, either due to use of the 'template' keyword or because a name in 11456 /// this syntactic context is assumed to name a template (C++ 11457 /// [temp.names]p2-4). 11458 /// 11459 /// This action forms a template name given the name of the template and its 11460 /// optional scope specifier. This is used when the 'template' keyword is used 11461 /// or when the parsing context unambiguously treats a following '<' as 11462 /// introducing a template argument list. Note that this may produce a 11463 /// non-dependent template name if we can perform the lookup now and identify 11464 /// the named template. 11465 /// 11466 /// For example, given "x.MetaFun::template apply", the scope specifier 11467 /// \p SS will be "MetaFun::", \p TemplateKWLoc contains the location 11468 /// of the "template" keyword, and "apply" is the \p Name. 11469 TemplateNameKind ActOnTemplateName(Scope *S, CXXScopeSpec &SS, 11470 SourceLocation TemplateKWLoc, 11471 const UnqualifiedId &Name, 11472 ParsedType ObjectType, 11473 bool EnteringContext, TemplateTy &Template, 11474 bool AllowInjectedClassName = false); 11475 11476 DeclResult ActOnClassTemplateSpecialization( 11477 Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, 11478 SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, 11479 TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, 11480 MultiTemplateParamsArg TemplateParameterLists, 11481 SkipBodyInfo *SkipBody = nullptr); 11482 11483 /// Check the non-type template arguments of a class template 11484 /// partial specialization according to C++ [temp.class.spec]p9. 11485 /// 11486 /// \param TemplateNameLoc the location of the template name. 11487 /// \param PrimaryTemplate the template parameters of the primary class 11488 /// template. 11489 /// \param NumExplicit the number of explicitly-specified template arguments. 11490 /// \param TemplateArgs the template arguments of the class template 11491 /// partial specialization. 11492 /// 11493 /// \returns \c true if there was an error, \c false otherwise. 11494 bool CheckTemplatePartialSpecializationArgs(SourceLocation Loc, 11495 TemplateDecl *PrimaryTemplate, 11496 unsigned NumExplicitArgs, 11497 ArrayRef<TemplateArgument> Args); 11498 void CheckTemplatePartialSpecialization( 11499 ClassTemplatePartialSpecializationDecl *Partial); 11500 void CheckTemplatePartialSpecialization( 11501 VarTemplatePartialSpecializationDecl *Partial); 11502 11503 Decl *ActOnTemplateDeclarator(Scope *S, 11504 MultiTemplateParamsArg TemplateParameterLists, 11505 Declarator &D); 11506 11507 /// Diagnose cases where we have an explicit template specialization 11508 /// before/after an explicit template instantiation, producing diagnostics 11509 /// for those cases where they are required and determining whether the 11510 /// new specialization/instantiation will have any effect. 11511 /// 11512 /// \param NewLoc the location of the new explicit specialization or 11513 /// instantiation. 11514 /// 11515 /// \param NewTSK the kind of the new explicit specialization or 11516 /// instantiation. 11517 /// 11518 /// \param PrevDecl the previous declaration of the entity. 11519 /// 11520 /// \param PrevTSK the kind of the old explicit specialization or 11521 /// instantiatin. 11522 /// 11523 /// \param PrevPointOfInstantiation if valid, indicates where the previous 11524 /// declaration was instantiated (either implicitly or explicitly). 11525 /// 11526 /// \param HasNoEffect will be set to true to indicate that the new 11527 /// specialization or instantiation has no effect and should be ignored. 11528 /// 11529 /// \returns true if there was an error that should prevent the introduction 11530 /// of the new declaration into the AST, false otherwise. 11531 bool CheckSpecializationInstantiationRedecl( 11532 SourceLocation NewLoc, 11533 TemplateSpecializationKind ActOnExplicitInstantiationNewTSK, 11534 NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, 11535 SourceLocation PrevPtOfInstantiation, bool &SuppressNew); 11536 11537 /// Perform semantic analysis for the given dependent function 11538 /// template specialization. 11539 /// 11540 /// The only possible way to get a dependent function template specialization 11541 /// is with a friend declaration, like so: 11542 /// 11543 /// \code 11544 /// template \<class T> void foo(T); 11545 /// template \<class T> class A { 11546 /// friend void foo<>(T); 11547 /// }; 11548 /// \endcode 11549 /// 11550 /// There really isn't any useful analysis we can do here, so we 11551 /// just store the information. 11552 bool CheckDependentFunctionTemplateSpecialization( 11553 FunctionDecl *FD, const TemplateArgumentListInfo *ExplicitTemplateArgs, 11554 LookupResult &Previous); 11555 11556 /// Perform semantic analysis for the given function template 11557 /// specialization. 11558 /// 11559 /// This routine performs all of the semantic analysis required for an 11560 /// explicit function template specialization. On successful completion, 11561 /// the function declaration \p FD will become a function template 11562 /// specialization. 11563 /// 11564 /// \param FD the function declaration, which will be updated to become a 11565 /// function template specialization. 11566 /// 11567 /// \param ExplicitTemplateArgs the explicitly-provided template arguments, 11568 /// if any. Note that this may be valid info even when 0 arguments are 11569 /// explicitly provided as in, e.g., \c void sort<>(char*, char*); 11570 /// as it anyway contains info on the angle brackets locations. 11571 /// 11572 /// \param Previous the set of declarations that may be specialized by 11573 /// this function specialization. 11574 /// 11575 /// \param QualifiedFriend whether this is a lookup for a qualified friend 11576 /// declaration with no explicit template argument list that might be 11577 /// befriending a function template specialization. 11578 bool CheckFunctionTemplateSpecialization( 11579 FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, 11580 LookupResult &Previous, bool QualifiedFriend = false); 11581 11582 /// Perform semantic analysis for the given non-template member 11583 /// specialization. 11584 /// 11585 /// This routine performs all of the semantic analysis required for an 11586 /// explicit member function specialization. On successful completion, 11587 /// the function declaration \p FD will become a member function 11588 /// specialization. 11589 /// 11590 /// \param Member the member declaration, which will be updated to become a 11591 /// specialization. 11592 /// 11593 /// \param Previous the set of declarations, one of which may be specialized 11594 /// by this function specialization; the set will be modified to contain the 11595 /// redeclared member. 11596 bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous); 11597 void CompleteMemberSpecialization(NamedDecl *Member, LookupResult &Previous); 11598 11599 // Explicit instantiation of a class template specialization 11600 DeclResult ActOnExplicitInstantiation( 11601 Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, 11602 unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, 11603 TemplateTy Template, SourceLocation TemplateNameLoc, 11604 SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs, 11605 SourceLocation RAngleLoc, const ParsedAttributesView &Attr); 11606 11607 // Explicit instantiation of a member class of a class template. 11608 DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, 11609 SourceLocation TemplateLoc, 11610 unsigned TagSpec, SourceLocation KWLoc, 11611 CXXScopeSpec &SS, IdentifierInfo *Name, 11612 SourceLocation NameLoc, 11613 const ParsedAttributesView &Attr); 11614 11615 DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, 11616 SourceLocation TemplateLoc, 11617 Declarator &D); 11618 11619 /// If the given template parameter has a default template 11620 /// argument, substitute into that default template argument and 11621 /// return the corresponding template argument. 11622 TemplateArgumentLoc SubstDefaultTemplateArgumentIfAvailable( 11623 TemplateDecl *Template, SourceLocation TemplateLoc, 11624 SourceLocation RAngleLoc, Decl *Param, 11625 ArrayRef<TemplateArgument> SugaredConverted, 11626 ArrayRef<TemplateArgument> CanonicalConverted, bool &HasDefaultArg); 11627 11628 /// Returns the top most location responsible for the definition of \p N. 11629 /// If \p N is a a template specialization, this is the location 11630 /// of the top of the instantiation stack. 11631 /// Otherwise, the location of \p N is returned. 11632 SourceLocation getTopMostPointOfInstantiation(const NamedDecl *) const; 11633 11634 /// Specifies the context in which a particular template 11635 /// argument is being checked. 11636 enum CheckTemplateArgumentKind { 11637 /// The template argument was specified in the code or was 11638 /// instantiated with some deduced template arguments. 11639 CTAK_Specified, 11640 11641 /// The template argument was deduced via template argument 11642 /// deduction. 11643 CTAK_Deduced, 11644 11645 /// The template argument was deduced from an array bound 11646 /// via template argument deduction. 11647 CTAK_DeducedFromArrayBound 11648 }; 11649 11650 /// Check that the given template argument corresponds to the given 11651 /// template parameter. 11652 /// 11653 /// \param Param The template parameter against which the argument will be 11654 /// checked. 11655 /// 11656 /// \param Arg The template argument, which may be updated due to conversions. 11657 /// 11658 /// \param Template The template in which the template argument resides. 11659 /// 11660 /// \param TemplateLoc The location of the template name for the template 11661 /// whose argument list we're matching. 11662 /// 11663 /// \param RAngleLoc The location of the right angle bracket ('>') that closes 11664 /// the template argument list. 11665 /// 11666 /// \param ArgumentPackIndex The index into the argument pack where this 11667 /// argument will be placed. Only valid if the parameter is a parameter pack. 11668 /// 11669 /// \param Converted The checked, converted argument will be added to the 11670 /// end of this small vector. 11671 /// 11672 /// \param CTAK Describes how we arrived at this particular template argument: 11673 /// explicitly written, deduced, etc. 11674 /// 11675 /// \returns true on error, false otherwise. 11676 bool 11677 CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, 11678 NamedDecl *Template, SourceLocation TemplateLoc, 11679 SourceLocation RAngleLoc, unsigned ArgumentPackIndex, 11680 SmallVectorImpl<TemplateArgument> &SugaredConverted, 11681 SmallVectorImpl<TemplateArgument> &CanonicalConverted, 11682 CheckTemplateArgumentKind CTAK); 11683 11684 /// Check that the given template arguments can be provided to 11685 /// the given template, converting the arguments along the way. 11686 /// 11687 /// \param Template The template to which the template arguments are being 11688 /// provided. 11689 /// 11690 /// \param TemplateLoc The location of the template name in the source. 11691 /// 11692 /// \param TemplateArgs The list of template arguments. If the template is 11693 /// a template template parameter, this function may extend the set of 11694 /// template arguments to also include substituted, defaulted template 11695 /// arguments. 11696 /// 11697 /// \param PartialTemplateArgs True if the list of template arguments is 11698 /// intentionally partial, e.g., because we're checking just the initial 11699 /// set of template arguments. 11700 /// 11701 /// \param Converted Will receive the converted, canonicalized template 11702 /// arguments. 11703 /// 11704 /// \param UpdateArgsWithConversions If \c true, update \p TemplateArgs to 11705 /// contain the converted forms of the template arguments as written. 11706 /// Otherwise, \p TemplateArgs will not be modified. 11707 /// 11708 /// \param ConstraintsNotSatisfied If provided, and an error occurred, will 11709 /// receive true if the cause for the error is the associated constraints of 11710 /// the template not being satisfied by the template arguments. 11711 /// 11712 /// \param PartialOrderingTTP If true, assume these template arguments are 11713 /// the injected template arguments for a template template parameter. 11714 /// This will relax the requirement that all its possible uses are valid: 11715 /// TTP checking is loose, and assumes that invalid uses will be diagnosed 11716 /// during instantiation. 11717 /// 11718 /// \returns true if an error occurred, false otherwise. 11719 bool CheckTemplateArgumentList( 11720 TemplateDecl *Template, SourceLocation TemplateLoc, 11721 TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, 11722 SmallVectorImpl<TemplateArgument> &SugaredConverted, 11723 SmallVectorImpl<TemplateArgument> &CanonicalConverted, 11724 bool UpdateArgsWithConversions = true, 11725 bool *ConstraintsNotSatisfied = nullptr, bool PartialOrderingTTP = false); 11726 11727 bool CheckTemplateTypeArgument( 11728 TemplateTypeParmDecl *Param, TemplateArgumentLoc &Arg, 11729 SmallVectorImpl<TemplateArgument> &SugaredConverted, 11730 SmallVectorImpl<TemplateArgument> &CanonicalConverted); 11731 11732 /// Check a template argument against its corresponding 11733 /// template type parameter. 11734 /// 11735 /// This routine implements the semantics of C++ [temp.arg.type]. It 11736 /// returns true if an error occurred, and false otherwise. 11737 bool CheckTemplateArgument(TypeSourceInfo *Arg); 11738 11739 /// Check a template argument against its corresponding 11740 /// non-type template parameter. 11741 /// 11742 /// This routine implements the semantics of C++ [temp.arg.nontype]. 11743 /// If an error occurred, it returns ExprError(); otherwise, it 11744 /// returns the converted template argument. \p ParamType is the 11745 /// type of the non-type template parameter after it has been instantiated. 11746 ExprResult CheckTemplateArgument(NonTypeTemplateParmDecl *Param, 11747 QualType InstantiatedParamType, Expr *Arg, 11748 TemplateArgument &SugaredConverted, 11749 TemplateArgument &CanonicalConverted, 11750 CheckTemplateArgumentKind CTAK); 11751 11752 /// Check a template argument against its corresponding 11753 /// template template parameter. 11754 /// 11755 /// This routine implements the semantics of C++ [temp.arg.template]. 11756 /// It returns true if an error occurred, and false otherwise. 11757 bool CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, 11758 TemplateParameterList *Params, 11759 TemplateArgumentLoc &Arg, bool IsDeduced); 11760 11761 void NoteTemplateLocation(const NamedDecl &Decl, 11762 std::optional<SourceRange> ParamRange = {}); 11763 void NoteTemplateParameterLocation(const NamedDecl &Decl); 11764 11765 /// Given a non-type template argument that refers to a 11766 /// declaration and the type of its corresponding non-type template 11767 /// parameter, produce an expression that properly refers to that 11768 /// declaration. 11769 ExprResult BuildExpressionFromDeclTemplateArgument( 11770 const TemplateArgument &Arg, QualType ParamType, SourceLocation Loc, 11771 NamedDecl *TemplateParam = nullptr); 11772 ExprResult 11773 BuildExpressionFromNonTypeTemplateArgument(const TemplateArgument &Arg, 11774 SourceLocation Loc); 11775 11776 /// Enumeration describing how template parameter lists are compared 11777 /// for equality. 11778 enum TemplateParameterListEqualKind { 11779 /// We are matching the template parameter lists of two templates 11780 /// that might be redeclarations. 11781 /// 11782 /// \code 11783 /// template<typename T> struct X; 11784 /// template<typename T> struct X; 11785 /// \endcode 11786 TPL_TemplateMatch, 11787 11788 /// We are matching the template parameter lists of two template 11789 /// template parameters as part of matching the template parameter lists 11790 /// of two templates that might be redeclarations. 11791 /// 11792 /// \code 11793 /// template<template<int I> class TT> struct X; 11794 /// template<template<int Value> class Other> struct X; 11795 /// \endcode 11796 TPL_TemplateTemplateParmMatch, 11797 11798 /// We are matching the template parameter lists of a template 11799 /// template argument against the template parameter lists of a template 11800 /// template parameter. 11801 /// 11802 /// \code 11803 /// template<template<int Value> class Metafun> struct X; 11804 /// template<int Value> struct integer_c; 11805 /// X<integer_c> xic; 11806 /// \endcode 11807 TPL_TemplateTemplateArgumentMatch, 11808 11809 /// We are determining whether the template-parameters are equivalent 11810 /// according to C++ [temp.over.link]/6. This comparison does not consider 11811 /// constraints. 11812 /// 11813 /// \code 11814 /// template<C1 T> void f(T); 11815 /// template<C2 T> void f(T); 11816 /// \endcode 11817 TPL_TemplateParamsEquivalent, 11818 }; 11819 11820 // A struct to represent the 'new' declaration, which is either itself just 11821 // the named decl, or the important information we need about it in order to 11822 // do constraint comparisons. 11823 class TemplateCompareNewDeclInfo { 11824 const NamedDecl *ND = nullptr; 11825 const DeclContext *DC = nullptr; 11826 const DeclContext *LexicalDC = nullptr; 11827 SourceLocation Loc; 11828 11829 public: TemplateCompareNewDeclInfo(const NamedDecl * ND)11830 TemplateCompareNewDeclInfo(const NamedDecl *ND) : ND(ND) {} TemplateCompareNewDeclInfo(const DeclContext * DeclCtx,const DeclContext * LexicalDeclCtx,SourceLocation Loc)11831 TemplateCompareNewDeclInfo(const DeclContext *DeclCtx, 11832 const DeclContext *LexicalDeclCtx, 11833 SourceLocation Loc) 11834 11835 : DC(DeclCtx), LexicalDC(LexicalDeclCtx), Loc(Loc) { 11836 assert(DC && LexicalDC && 11837 "Constructor only for cases where we have the information to put " 11838 "in here"); 11839 } 11840 11841 // If this was constructed with no information, we cannot do substitution 11842 // for constraint comparison, so make sure we can check that. isInvalid()11843 bool isInvalid() const { return !ND && !DC; } 11844 getDecl()11845 const NamedDecl *getDecl() const { return ND; } 11846 ContainsDecl(const NamedDecl * ND)11847 bool ContainsDecl(const NamedDecl *ND) const { return this->ND == ND; } 11848 getLexicalDeclContext()11849 const DeclContext *getLexicalDeclContext() const { 11850 return ND ? ND->getLexicalDeclContext() : LexicalDC; 11851 } 11852 getDeclContext()11853 const DeclContext *getDeclContext() const { 11854 return ND ? ND->getDeclContext() : DC; 11855 } 11856 getLocation()11857 SourceLocation getLocation() const { return ND ? ND->getLocation() : Loc; } 11858 }; 11859 11860 /// Determine whether the given template parameter lists are 11861 /// equivalent. 11862 /// 11863 /// \param New The new template parameter list, typically written in the 11864 /// source code as part of a new template declaration. 11865 /// 11866 /// \param Old The old template parameter list, typically found via 11867 /// name lookup of the template declared with this template parameter 11868 /// list. 11869 /// 11870 /// \param Complain If true, this routine will produce a diagnostic if 11871 /// the template parameter lists are not equivalent. 11872 /// 11873 /// \param Kind describes how we are to match the template parameter lists. 11874 /// 11875 /// \param TemplateArgLoc If this source location is valid, then we 11876 /// are actually checking the template parameter list of a template 11877 /// argument (New) against the template parameter list of its 11878 /// corresponding template template parameter (Old). We produce 11879 /// slightly different diagnostics in this scenario. 11880 /// 11881 /// \returns True if the template parameter lists are equal, false 11882 /// otherwise. 11883 bool TemplateParameterListsAreEqual( 11884 const TemplateCompareNewDeclInfo &NewInstFrom, TemplateParameterList *New, 11885 const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, 11886 TemplateParameterListEqualKind Kind, 11887 SourceLocation TemplateArgLoc = SourceLocation()); 11888 11889 bool TemplateParameterListsAreEqual( 11890 TemplateParameterList *New, TemplateParameterList *Old, bool Complain, 11891 TemplateParameterListEqualKind Kind, 11892 SourceLocation TemplateArgLoc = SourceLocation()) { 11893 return TemplateParameterListsAreEqual(nullptr, New, nullptr, Old, Complain, 11894 Kind, TemplateArgLoc); 11895 } 11896 11897 /// Check whether a template can be declared within this scope. 11898 /// 11899 /// If the template declaration is valid in this scope, returns 11900 /// false. Otherwise, issues a diagnostic and returns true. 11901 bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams); 11902 11903 /// Called when the parser has parsed a C++ typename 11904 /// specifier, e.g., "typename T::type". 11905 /// 11906 /// \param S The scope in which this typename type occurs. 11907 /// \param TypenameLoc the location of the 'typename' keyword 11908 /// \param SS the nested-name-specifier following the typename (e.g., 'T::'). 11909 /// \param II the identifier we're retrieving (e.g., 'type' in the example). 11910 /// \param IdLoc the location of the identifier. 11911 /// \param IsImplicitTypename context where T::type refers to a type. 11912 TypeResult ActOnTypenameType( 11913 Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, 11914 const IdentifierInfo &II, SourceLocation IdLoc, 11915 ImplicitTypenameContext IsImplicitTypename = ImplicitTypenameContext::No); 11916 11917 /// Called when the parser has parsed a C++ typename 11918 /// specifier that ends in a template-id, e.g., 11919 /// "typename MetaFun::template apply<T1, T2>". 11920 /// 11921 /// \param S The scope in which this typename type occurs. 11922 /// \param TypenameLoc the location of the 'typename' keyword 11923 /// \param SS the nested-name-specifier following the typename (e.g., 'T::'). 11924 /// \param TemplateLoc the location of the 'template' keyword, if any. 11925 /// \param TemplateName The template name. 11926 /// \param TemplateII The identifier used to name the template. 11927 /// \param TemplateIILoc The location of the template name. 11928 /// \param LAngleLoc The location of the opening angle bracket ('<'). 11929 /// \param TemplateArgs The template arguments. 11930 /// \param RAngleLoc The location of the closing angle bracket ('>'). 11931 TypeResult 11932 ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, 11933 const CXXScopeSpec &SS, SourceLocation TemplateLoc, 11934 TemplateTy TemplateName, const IdentifierInfo *TemplateII, 11935 SourceLocation TemplateIILoc, SourceLocation LAngleLoc, 11936 ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc); 11937 11938 QualType CheckTypenameType(ElaboratedTypeKeyword Keyword, 11939 SourceLocation KeywordLoc, 11940 NestedNameSpecifierLoc QualifierLoc, 11941 const IdentifierInfo &II, SourceLocation IILoc, 11942 TypeSourceInfo **TSI, bool DeducedTSTContext); 11943 11944 QualType CheckTypenameType(ElaboratedTypeKeyword Keyword, 11945 SourceLocation KeywordLoc, 11946 NestedNameSpecifierLoc QualifierLoc, 11947 const IdentifierInfo &II, SourceLocation IILoc, 11948 bool DeducedTSTContext = true); 11949 11950 /// Rebuilds a type within the context of the current instantiation. 11951 /// 11952 /// The type \p T is part of the type of an out-of-line member definition of 11953 /// a class template (or class template partial specialization) that was 11954 /// parsed and constructed before we entered the scope of the class template 11955 /// (or partial specialization thereof). This routine will rebuild that type 11956 /// now that we have entered the declarator's scope, which may produce 11957 /// different canonical types, e.g., 11958 /// 11959 /// \code 11960 /// template<typename T> 11961 /// struct X { 11962 /// typedef T* pointer; 11963 /// pointer data(); 11964 /// }; 11965 /// 11966 /// template<typename T> 11967 /// typename X<T>::pointer X<T>::data() { ... } 11968 /// \endcode 11969 /// 11970 /// Here, the type "typename X<T>::pointer" will be created as a 11971 /// DependentNameType, since we do not know that we can look into X<T> when we 11972 /// parsed the type. This function will rebuild the type, performing the 11973 /// lookup of "pointer" in X<T> and returning an ElaboratedType whose 11974 /// canonical type is the same as the canonical type of T*, allowing the 11975 /// return types of the out-of-line definition and the declaration to match. 11976 TypeSourceInfo *RebuildTypeInCurrentInstantiation(TypeSourceInfo *T, 11977 SourceLocation Loc, 11978 DeclarationName Name); 11979 bool RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS); 11980 11981 ExprResult RebuildExprInCurrentInstantiation(Expr *E); 11982 11983 /// Rebuild the template parameters now that we know we're in a current 11984 /// instantiation. 11985 bool 11986 RebuildTemplateParamsInCurrentInstantiation(TemplateParameterList *Params); 11987 11988 /// Produces a formatted string that describes the binding of 11989 /// template parameters to template arguments. 11990 std::string 11991 getTemplateArgumentBindingsText(const TemplateParameterList *Params, 11992 const TemplateArgumentList &Args); 11993 11994 std::string 11995 getTemplateArgumentBindingsText(const TemplateParameterList *Params, 11996 const TemplateArgument *Args, 11997 unsigned NumArgs); 11998 11999 void diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, 12000 SourceLocation Less, 12001 SourceLocation Greater); 12002 12003 /// ActOnDependentIdExpression - Handle a dependent id-expression that 12004 /// was just parsed. This is only possible with an explicit scope 12005 /// specifier naming a dependent type. 12006 ExprResult ActOnDependentIdExpression( 12007 const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, 12008 const DeclarationNameInfo &NameInfo, bool isAddressOfOperand, 12009 const TemplateArgumentListInfo *TemplateArgs); 12010 12011 ExprResult 12012 BuildDependentDeclRefExpr(const CXXScopeSpec &SS, 12013 SourceLocation TemplateKWLoc, 12014 const DeclarationNameInfo &NameInfo, 12015 const TemplateArgumentListInfo *TemplateArgs); 12016 12017 // Calculates whether the expression Constraint depends on an enclosing 12018 // template, for the purposes of [temp.friend] p9. 12019 // TemplateDepth is the 'depth' of the friend function, which is used to 12020 // compare whether a declaration reference is referring to a containing 12021 // template, or just the current friend function. A 'lower' TemplateDepth in 12022 // the AST refers to a 'containing' template. As the constraint is 12023 // uninstantiated, this is relative to the 'top' of the TU. 12024 bool 12025 ConstraintExpressionDependsOnEnclosingTemplate(const FunctionDecl *Friend, 12026 unsigned TemplateDepth, 12027 const Expr *Constraint); 12028 12029 /// Find the failed Boolean condition within a given Boolean 12030 /// constant expression, and describe it with a string. 12031 std::pair<Expr *, std::string> findFailedBooleanCondition(Expr *Cond); 12032 12033 void CheckDeductionGuideTemplate(FunctionTemplateDecl *TD); 12034 12035 Decl *ActOnConceptDefinition(Scope *S, 12036 MultiTemplateParamsArg TemplateParameterLists, 12037 const IdentifierInfo *Name, 12038 SourceLocation NameLoc, Expr *ConstraintExpr, 12039 const ParsedAttributesView &Attrs); 12040 12041 void CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, 12042 bool &AddToScope); 12043 12044 TypeResult ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK, 12045 const CXXScopeSpec &SS, 12046 const IdentifierInfo *Name, 12047 SourceLocation TagLoc, SourceLocation NameLoc); 12048 12049 void MarkAsLateParsedTemplate(FunctionDecl *FD, Decl *FnD, 12050 CachedTokens &Toks); 12051 void UnmarkAsLateParsedTemplate(FunctionDecl *FD); 12052 bool IsInsideALocalClassWithinATemplateFunction(); 12053 12054 /// We've found a use of a templated declaration that would trigger an 12055 /// implicit instantiation. Check that any relevant explicit specializations 12056 /// and partial specializations are visible/reachable, and diagnose if not. 12057 void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec); 12058 void checkSpecializationReachability(SourceLocation Loc, NamedDecl *Spec); 12059 12060 ///@} 12061 12062 // 12063 // 12064 // ------------------------------------------------------------------------- 12065 // 12066 // 12067 12068 /// \name C++ Template Argument Deduction 12069 /// Implementations are in SemaTemplateDeduction.cpp 12070 ///@{ 12071 12072 public: 12073 /// When true, access checking violations are treated as SFINAE 12074 /// failures rather than hard errors. 12075 bool AccessCheckingSFINAE; 12076 12077 /// RAII class used to determine whether SFINAE has 12078 /// trapped any errors that occur during template argument 12079 /// deduction. 12080 class SFINAETrap { 12081 Sema &SemaRef; 12082 unsigned PrevSFINAEErrors; 12083 bool PrevInNonInstantiationSFINAEContext; 12084 bool PrevAccessCheckingSFINAE; 12085 bool PrevLastDiagnosticIgnored; 12086 12087 public: 12088 explicit SFINAETrap(Sema &SemaRef, bool AccessCheckingSFINAE = false) SemaRef(SemaRef)12089 : SemaRef(SemaRef), PrevSFINAEErrors(SemaRef.NumSFINAEErrors), 12090 PrevInNonInstantiationSFINAEContext( 12091 SemaRef.InNonInstantiationSFINAEContext), 12092 PrevAccessCheckingSFINAE(SemaRef.AccessCheckingSFINAE), 12093 PrevLastDiagnosticIgnored( 12094 SemaRef.getDiagnostics().isLastDiagnosticIgnored()) { 12095 if (!SemaRef.isSFINAEContext()) 12096 SemaRef.InNonInstantiationSFINAEContext = true; 12097 SemaRef.AccessCheckingSFINAE = AccessCheckingSFINAE; 12098 } 12099 ~SFINAETrap()12100 ~SFINAETrap() { 12101 SemaRef.NumSFINAEErrors = PrevSFINAEErrors; 12102 SemaRef.InNonInstantiationSFINAEContext = 12103 PrevInNonInstantiationSFINAEContext; 12104 SemaRef.AccessCheckingSFINAE = PrevAccessCheckingSFINAE; 12105 SemaRef.getDiagnostics().setLastDiagnosticIgnored( 12106 PrevLastDiagnosticIgnored); 12107 } 12108 12109 /// Determine whether any SFINAE errors have been trapped. hasErrorOccurred()12110 bool hasErrorOccurred() const { 12111 return SemaRef.NumSFINAEErrors > PrevSFINAEErrors; 12112 } 12113 }; 12114 12115 /// RAII class used to indicate that we are performing provisional 12116 /// semantic analysis to determine the validity of a construct, so 12117 /// typo-correction and diagnostics in the immediate context (not within 12118 /// implicitly-instantiated templates) should be suppressed. 12119 class TentativeAnalysisScope { 12120 Sema &SemaRef; 12121 // FIXME: Using a SFINAETrap for this is a hack. 12122 SFINAETrap Trap; 12123 bool PrevDisableTypoCorrection; 12124 12125 public: TentativeAnalysisScope(Sema & SemaRef)12126 explicit TentativeAnalysisScope(Sema &SemaRef) 12127 : SemaRef(SemaRef), Trap(SemaRef, true), 12128 PrevDisableTypoCorrection(SemaRef.DisableTypoCorrection) { 12129 SemaRef.DisableTypoCorrection = true; 12130 } ~TentativeAnalysisScope()12131 ~TentativeAnalysisScope() { 12132 SemaRef.DisableTypoCorrection = PrevDisableTypoCorrection; 12133 } 12134 }; 12135 12136 /// For each declaration that involved template argument deduction, the 12137 /// set of diagnostics that were suppressed during that template argument 12138 /// deduction. 12139 /// 12140 /// FIXME: Serialize this structure to the AST file. 12141 typedef llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1>> 12142 SuppressedDiagnosticsMap; 12143 SuppressedDiagnosticsMap SuppressedDiagnostics; 12144 12145 /// Compare types for equality with respect to possibly compatible 12146 /// function types (noreturn adjustment, implicit calling conventions). If any 12147 /// of parameter and argument is not a function, just perform type comparison. 12148 /// 12149 /// \param P the template parameter type. 12150 /// 12151 /// \param A the argument type. 12152 bool isSameOrCompatibleFunctionType(QualType Param, QualType Arg); 12153 12154 /// Allocate a TemplateArgumentLoc where all locations have 12155 /// been initialized to the given location. 12156 /// 12157 /// \param Arg The template argument we are producing template argument 12158 /// location information for. 12159 /// 12160 /// \param NTTPType For a declaration template argument, the type of 12161 /// the non-type template parameter that corresponds to this template 12162 /// argument. Can be null if no type sugar is available to add to the 12163 /// type from the template argument. 12164 /// 12165 /// \param Loc The source location to use for the resulting template 12166 /// argument. 12167 TemplateArgumentLoc 12168 getTrivialTemplateArgumentLoc(const TemplateArgument &Arg, QualType NTTPType, 12169 SourceLocation Loc, 12170 NamedDecl *TemplateParam = nullptr); 12171 12172 /// Get a template argument mapping the given template parameter to itself, 12173 /// e.g. for X in \c template<int X>, this would return an expression template 12174 /// argument referencing X. 12175 TemplateArgumentLoc getIdentityTemplateArgumentLoc(NamedDecl *Param, 12176 SourceLocation Location); 12177 12178 /// Adjust the type \p ArgFunctionType to match the calling convention, 12179 /// noreturn, and optionally the exception specification of \p FunctionType. 12180 /// Deduction often wants to ignore these properties when matching function 12181 /// types. 12182 QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType, 12183 bool AdjustExceptionSpec = false); 12184 12185 TemplateDeductionResult 12186 DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial, 12187 ArrayRef<TemplateArgument> TemplateArgs, 12188 sema::TemplateDeductionInfo &Info); 12189 12190 TemplateDeductionResult 12191 DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial, 12192 ArrayRef<TemplateArgument> TemplateArgs, 12193 sema::TemplateDeductionInfo &Info); 12194 12195 /// Deduce the template arguments of the given template from \p FromType. 12196 /// Used to implement the IsDeducible constraint for alias CTAD per C++ 12197 /// [over.match.class.deduct]p4. 12198 /// 12199 /// It only supports class or type alias templates. 12200 TemplateDeductionResult 12201 DeduceTemplateArgumentsFromType(TemplateDecl *TD, QualType FromType, 12202 sema::TemplateDeductionInfo &Info); 12203 12204 TemplateDeductionResult DeduceTemplateArguments( 12205 TemplateParameterList *TemplateParams, ArrayRef<TemplateArgument> Ps, 12206 ArrayRef<TemplateArgument> As, sema::TemplateDeductionInfo &Info, 12207 SmallVectorImpl<DeducedTemplateArgument> &Deduced, 12208 bool NumberOfArgumentsMustMatch); 12209 12210 /// Substitute the explicitly-provided template arguments into the 12211 /// given function template according to C++ [temp.arg.explicit]. 12212 /// 12213 /// \param FunctionTemplate the function template into which the explicit 12214 /// template arguments will be substituted. 12215 /// 12216 /// \param ExplicitTemplateArgs the explicitly-specified template 12217 /// arguments. 12218 /// 12219 /// \param Deduced the deduced template arguments, which will be populated 12220 /// with the converted and checked explicit template arguments. 12221 /// 12222 /// \param ParamTypes will be populated with the instantiated function 12223 /// parameters. 12224 /// 12225 /// \param FunctionType if non-NULL, the result type of the function template 12226 /// will also be instantiated and the pointed-to value will be updated with 12227 /// the instantiated function type. 12228 /// 12229 /// \param Info if substitution fails for any reason, this object will be 12230 /// populated with more information about the failure. 12231 /// 12232 /// \returns TemplateDeductionResult::Success if substitution was successful, 12233 /// or some failure condition. 12234 TemplateDeductionResult SubstituteExplicitTemplateArguments( 12235 FunctionTemplateDecl *FunctionTemplate, 12236 TemplateArgumentListInfo &ExplicitTemplateArgs, 12237 SmallVectorImpl<DeducedTemplateArgument> &Deduced, 12238 SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType, 12239 sema::TemplateDeductionInfo &Info); 12240 12241 /// brief A function argument from which we performed template argument 12242 // deduction for a call. 12243 struct OriginalCallArg { OriginalCallArgOriginalCallArg12244 OriginalCallArg(QualType OriginalParamType, bool DecomposedParam, 12245 unsigned ArgIdx, QualType OriginalArgType) 12246 : OriginalParamType(OriginalParamType), 12247 DecomposedParam(DecomposedParam), ArgIdx(ArgIdx), 12248 OriginalArgType(OriginalArgType) {} 12249 12250 QualType OriginalParamType; 12251 bool DecomposedParam; 12252 unsigned ArgIdx; 12253 QualType OriginalArgType; 12254 }; 12255 12256 /// Finish template argument deduction for a function template, 12257 /// checking the deduced template arguments for completeness and forming 12258 /// the function template specialization. 12259 /// 12260 /// \param OriginalCallArgs If non-NULL, the original call arguments against 12261 /// which the deduced argument types should be compared. 12262 TemplateDeductionResult FinishTemplateArgumentDeduction( 12263 FunctionTemplateDecl *FunctionTemplate, 12264 SmallVectorImpl<DeducedTemplateArgument> &Deduced, 12265 unsigned NumExplicitlySpecified, FunctionDecl *&Specialization, 12266 sema::TemplateDeductionInfo &Info, 12267 SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs = nullptr, 12268 bool PartialOverloading = false, 12269 llvm::function_ref<bool()> CheckNonDependent = [] { return false; }); 12270 12271 /// Perform template argument deduction from a function call 12272 /// (C++ [temp.deduct.call]). 12273 /// 12274 /// \param FunctionTemplate the function template for which we are performing 12275 /// template argument deduction. 12276 /// 12277 /// \param ExplicitTemplateArgs the explicit template arguments provided 12278 /// for this call. 12279 /// 12280 /// \param Args the function call arguments 12281 /// 12282 /// \param Specialization if template argument deduction was successful, 12283 /// this will be set to the function template specialization produced by 12284 /// template argument deduction. 12285 /// 12286 /// \param Info the argument will be updated to provide additional information 12287 /// about template argument deduction. 12288 /// 12289 /// \param CheckNonDependent A callback to invoke to check conversions for 12290 /// non-dependent parameters, between deduction and substitution, per DR1391. 12291 /// If this returns true, substitution will be skipped and we return 12292 /// TemplateDeductionResult::NonDependentConversionFailure. The callback is 12293 /// passed the parameter types (after substituting explicit template 12294 /// arguments). 12295 /// 12296 /// \returns the result of template argument deduction. 12297 TemplateDeductionResult DeduceTemplateArguments( 12298 FunctionTemplateDecl *FunctionTemplate, 12299 TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, 12300 FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info, 12301 bool PartialOverloading, bool AggregateDeductionCandidate, 12302 QualType ObjectType, Expr::Classification ObjectClassification, 12303 llvm::function_ref<bool(ArrayRef<QualType>)> CheckNonDependent); 12304 12305 /// Deduce template arguments when taking the address of a function 12306 /// template (C++ [temp.deduct.funcaddr]) or matching a specialization to 12307 /// a template. 12308 /// 12309 /// \param FunctionTemplate the function template for which we are performing 12310 /// template argument deduction. 12311 /// 12312 /// \param ExplicitTemplateArgs the explicitly-specified template 12313 /// arguments. 12314 /// 12315 /// \param ArgFunctionType the function type that will be used as the 12316 /// "argument" type (A) when performing template argument deduction from the 12317 /// function template's function type. This type may be NULL, if there is no 12318 /// argument type to compare against, in C++0x [temp.arg.explicit]p3. 12319 /// 12320 /// \param Specialization if template argument deduction was successful, 12321 /// this will be set to the function template specialization produced by 12322 /// template argument deduction. 12323 /// 12324 /// \param Info the argument will be updated to provide additional information 12325 /// about template argument deduction. 12326 /// 12327 /// \param IsAddressOfFunction If \c true, we are deducing as part of taking 12328 /// the address of a function template per [temp.deduct.funcaddr] and 12329 /// [over.over]. If \c false, we are looking up a function template 12330 /// specialization based on its signature, per [temp.deduct.decl]. 12331 /// 12332 /// \returns the result of template argument deduction. 12333 TemplateDeductionResult DeduceTemplateArguments( 12334 FunctionTemplateDecl *FunctionTemplate, 12335 TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ArgFunctionType, 12336 FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info, 12337 bool IsAddressOfFunction = false); 12338 12339 /// Deduce template arguments for a templated conversion 12340 /// function (C++ [temp.deduct.conv]) and, if successful, produce a 12341 /// conversion function template specialization. 12342 TemplateDeductionResult DeduceTemplateArguments( 12343 FunctionTemplateDecl *FunctionTemplate, QualType ObjectType, 12344 Expr::Classification ObjectClassification, QualType ToType, 12345 CXXConversionDecl *&Specialization, sema::TemplateDeductionInfo &Info); 12346 12347 /// Deduce template arguments for a function template when there is 12348 /// nothing to deduce against (C++0x [temp.arg.explicit]p3). 12349 /// 12350 /// \param FunctionTemplate the function template for which we are performing 12351 /// template argument deduction. 12352 /// 12353 /// \param ExplicitTemplateArgs the explicitly-specified template 12354 /// arguments. 12355 /// 12356 /// \param Specialization if template argument deduction was successful, 12357 /// this will be set to the function template specialization produced by 12358 /// template argument deduction. 12359 /// 12360 /// \param Info the argument will be updated to provide additional information 12361 /// about template argument deduction. 12362 /// 12363 /// \param IsAddressOfFunction If \c true, we are deducing as part of taking 12364 /// the address of a function template in a context where we do not have a 12365 /// target type, per [over.over]. If \c false, we are looking up a function 12366 /// template specialization based on its signature, which only happens when 12367 /// deducing a function parameter type from an argument that is a template-id 12368 /// naming a function template specialization. 12369 /// 12370 /// \returns the result of template argument deduction. 12371 TemplateDeductionResult 12372 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate, 12373 TemplateArgumentListInfo *ExplicitTemplateArgs, 12374 FunctionDecl *&Specialization, 12375 sema::TemplateDeductionInfo &Info, 12376 bool IsAddressOfFunction = false); 12377 12378 /// Substitute Replacement for \p auto in \p TypeWithAuto 12379 QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement); 12380 /// Substitute Replacement for auto in TypeWithAuto 12381 TypeSourceInfo *SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto, 12382 QualType Replacement); 12383 12384 // Substitute auto in TypeWithAuto for a Dependent auto type 12385 QualType SubstAutoTypeDependent(QualType TypeWithAuto); 12386 12387 // Substitute auto in TypeWithAuto for a Dependent auto type 12388 TypeSourceInfo * 12389 SubstAutoTypeSourceInfoDependent(TypeSourceInfo *TypeWithAuto); 12390 12391 /// Completely replace the \c auto in \p TypeWithAuto by 12392 /// \p Replacement. This does not retain any \c auto type sugar. 12393 QualType ReplaceAutoType(QualType TypeWithAuto, QualType Replacement); 12394 TypeSourceInfo *ReplaceAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto, 12395 QualType Replacement); 12396 12397 /// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6) 12398 /// 12399 /// Note that this is done even if the initializer is dependent. (This is 12400 /// necessary to support partial ordering of templates using 'auto'.) 12401 /// A dependent type will be produced when deducing from a dependent type. 12402 /// 12403 /// \param Type the type pattern using the auto type-specifier. 12404 /// \param Init the initializer for the variable whose type is to be deduced. 12405 /// \param Result if type deduction was successful, this will be set to the 12406 /// deduced type. 12407 /// \param Info the argument will be updated to provide additional information 12408 /// about template argument deduction. 12409 /// \param DependentDeduction Set if we should permit deduction in 12410 /// dependent cases. This is necessary for template partial ordering 12411 /// with 'auto' template parameters. The template parameter depth to be 12412 /// used should be specified in the 'Info' parameter. 12413 /// \param IgnoreConstraints Set if we should not fail if the deduced type 12414 /// does not satisfy the type-constraint in the auto 12415 /// type. 12416 TemplateDeductionResult 12417 DeduceAutoType(TypeLoc AutoTypeLoc, Expr *Initializer, QualType &Result, 12418 sema::TemplateDeductionInfo &Info, 12419 bool DependentDeduction = false, 12420 bool IgnoreConstraints = false, 12421 TemplateSpecCandidateSet *FailedTSC = nullptr); 12422 void DiagnoseAutoDeductionFailure(const VarDecl *VDecl, const Expr *Init); 12423 bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, 12424 bool Diagnose = true); 12425 12426 bool CheckIfFunctionSpecializationIsImmediate(FunctionDecl *FD, 12427 SourceLocation Loc); 12428 12429 /// Returns the more specialized class template partial specialization 12430 /// according to the rules of partial ordering of class template partial 12431 /// specializations (C++ [temp.class.order]). 12432 /// 12433 /// \param PS1 the first class template partial specialization 12434 /// 12435 /// \param PS2 the second class template partial specialization 12436 /// 12437 /// \returns the more specialized class template partial specialization. If 12438 /// neither partial specialization is more specialized, returns NULL. 12439 ClassTemplatePartialSpecializationDecl * 12440 getMoreSpecializedPartialSpecialization( 12441 ClassTemplatePartialSpecializationDecl *PS1, 12442 ClassTemplatePartialSpecializationDecl *PS2, SourceLocation Loc); 12443 12444 bool isMoreSpecializedThanPrimary(ClassTemplatePartialSpecializationDecl *T, 12445 sema::TemplateDeductionInfo &Info); 12446 12447 VarTemplatePartialSpecializationDecl *getMoreSpecializedPartialSpecialization( 12448 VarTemplatePartialSpecializationDecl *PS1, 12449 VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc); 12450 12451 bool isMoreSpecializedThanPrimary(VarTemplatePartialSpecializationDecl *T, 12452 sema::TemplateDeductionInfo &Info); 12453 12454 bool isTemplateTemplateParameterAtLeastAsSpecializedAs( 12455 TemplateParameterList *PParam, TemplateDecl *AArg, SourceLocation Loc, 12456 bool IsDeduced); 12457 12458 /// Mark which template parameters are used in a given expression. 12459 /// 12460 /// \param E the expression from which template parameters will be deduced. 12461 /// 12462 /// \param Used a bit vector whose elements will be set to \c true 12463 /// to indicate when the corresponding template parameter will be 12464 /// deduced. 12465 void MarkUsedTemplateParameters(const Expr *E, bool OnlyDeduced, 12466 unsigned Depth, llvm::SmallBitVector &Used); 12467 12468 /// Mark which template parameters can be deduced from a given 12469 /// template argument list. 12470 /// 12471 /// \param TemplateArgs the template argument list from which template 12472 /// parameters will be deduced. 12473 /// 12474 /// \param Used a bit vector whose elements will be set to \c true 12475 /// to indicate when the corresponding template parameter will be 12476 /// deduced. 12477 void MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs, 12478 bool OnlyDeduced, unsigned Depth, 12479 llvm::SmallBitVector &Used); 12480 void MarkDeducedTemplateParameters(const FunctionTemplateDecl * FunctionTemplate,llvm::SmallBitVector & Deduced)12481 MarkDeducedTemplateParameters(const FunctionTemplateDecl *FunctionTemplate, 12482 llvm::SmallBitVector &Deduced) { 12483 return MarkDeducedTemplateParameters(Context, FunctionTemplate, Deduced); 12484 } 12485 12486 /// Marks all of the template parameters that will be deduced by a 12487 /// call to the given function template. 12488 static void 12489 MarkDeducedTemplateParameters(ASTContext &Ctx, 12490 const FunctionTemplateDecl *FunctionTemplate, 12491 llvm::SmallBitVector &Deduced); 12492 12493 /// Returns the more specialized function template according 12494 /// to the rules of function template partial ordering (C++ 12495 /// [temp.func.order]). 12496 /// 12497 /// \param FT1 the first function template 12498 /// 12499 /// \param FT2 the second function template 12500 /// 12501 /// \param TPOC the context in which we are performing partial ordering of 12502 /// function templates. 12503 /// 12504 /// \param NumCallArguments1 The number of arguments in the call to FT1, used 12505 /// only when \c TPOC is \c TPOC_Call. Does not include the object argument 12506 /// when calling a member function. 12507 /// 12508 /// \param RawObj1Ty The type of the object parameter of FT1 if a member 12509 /// function only used if \c TPOC is \c TPOC_Call and FT1 is a Function 12510 /// template from a member function 12511 /// 12512 /// \param RawObj2Ty The type of the object parameter of FT2 if a member 12513 /// function only used if \c TPOC is \c TPOC_Call and FT2 is a Function 12514 /// template from a member function 12515 /// 12516 /// \param Reversed If \c true, exactly one of FT1 and FT2 is an overload 12517 /// candidate with a reversed parameter order. In this case, the corresponding 12518 /// P/A pairs between FT1 and FT2 are reversed. 12519 /// 12520 /// \returns the more specialized function template. If neither 12521 /// template is more specialized, returns NULL. 12522 FunctionTemplateDecl *getMoreSpecializedTemplate( 12523 FunctionTemplateDecl *FT1, FunctionTemplateDecl *FT2, SourceLocation Loc, 12524 TemplatePartialOrderingContext TPOC, unsigned NumCallArguments1, 12525 QualType RawObj1Ty = {}, QualType RawObj2Ty = {}, bool Reversed = false); 12526 12527 /// Retrieve the most specialized of the given function template 12528 /// specializations. 12529 /// 12530 /// \param SpecBegin the start iterator of the function template 12531 /// specializations that we will be comparing. 12532 /// 12533 /// \param SpecEnd the end iterator of the function template 12534 /// specializations, paired with \p SpecBegin. 12535 /// 12536 /// \param Loc the location where the ambiguity or no-specializations 12537 /// diagnostic should occur. 12538 /// 12539 /// \param NoneDiag partial diagnostic used to diagnose cases where there are 12540 /// no matching candidates. 12541 /// 12542 /// \param AmbigDiag partial diagnostic used to diagnose an ambiguity, if one 12543 /// occurs. 12544 /// 12545 /// \param CandidateDiag partial diagnostic used for each function template 12546 /// specialization that is a candidate in the ambiguous ordering. One 12547 /// parameter in this diagnostic should be unbound, which will correspond to 12548 /// the string describing the template arguments for the function template 12549 /// specialization. 12550 /// 12551 /// \returns the most specialized function template specialization, if 12552 /// found. Otherwise, returns SpecEnd. 12553 UnresolvedSetIterator 12554 getMostSpecialized(UnresolvedSetIterator SBegin, UnresolvedSetIterator SEnd, 12555 TemplateSpecCandidateSet &FailedCandidates, 12556 SourceLocation Loc, const PartialDiagnostic &NoneDiag, 12557 const PartialDiagnostic &AmbigDiag, 12558 const PartialDiagnostic &CandidateDiag, 12559 bool Complain = true, QualType TargetType = QualType()); 12560 12561 /// Returns the more constrained function according to the rules of 12562 /// partial ordering by constraints (C++ [temp.constr.order]). 12563 /// 12564 /// \param FD1 the first function 12565 /// 12566 /// \param FD2 the second function 12567 /// 12568 /// \returns the more constrained function. If neither function is 12569 /// more constrained, returns NULL. 12570 FunctionDecl *getMoreConstrainedFunction(FunctionDecl *FD1, 12571 FunctionDecl *FD2); 12572 12573 ///@} 12574 12575 // 12576 // 12577 // ------------------------------------------------------------------------- 12578 // 12579 // 12580 12581 /// \name C++ Template Deduction Guide 12582 /// Implementations are in SemaTemplateDeductionGuide.cpp 12583 ///@{ 12584 12585 /// Declare implicit deduction guides for a class template if we've 12586 /// not already done so. 12587 void DeclareImplicitDeductionGuides(TemplateDecl *Template, 12588 SourceLocation Loc); 12589 12590 FunctionTemplateDecl *DeclareAggregateDeductionGuideFromInitList( 12591 TemplateDecl *Template, MutableArrayRef<QualType> ParamTypes, 12592 SourceLocation Loc); 12593 12594 ///@} 12595 12596 // 12597 // 12598 // ------------------------------------------------------------------------- 12599 // 12600 // 12601 12602 /// \name C++ Template Instantiation 12603 /// Implementations are in SemaTemplateInstantiate.cpp 12604 ///@{ 12605 12606 public: 12607 /// A helper class for building up ExtParameterInfos. 12608 class ExtParameterInfoBuilder { 12609 SmallVector<FunctionProtoType::ExtParameterInfo, 16> Infos; 12610 bool HasInteresting = false; 12611 12612 public: 12613 /// Set the ExtParameterInfo for the parameter at the given index, 12614 /// set(unsigned index,FunctionProtoType::ExtParameterInfo info)12615 void set(unsigned index, FunctionProtoType::ExtParameterInfo info) { 12616 assert(Infos.size() <= index); 12617 Infos.resize(index); 12618 Infos.push_back(info); 12619 12620 if (!HasInteresting) 12621 HasInteresting = (info != FunctionProtoType::ExtParameterInfo()); 12622 } 12623 12624 /// Return a pointer (suitable for setting in an ExtProtoInfo) to the 12625 /// ExtParameterInfo array we've built up. 12626 const FunctionProtoType::ExtParameterInfo * getPointerOrNull(unsigned numParams)12627 getPointerOrNull(unsigned numParams) { 12628 if (!HasInteresting) 12629 return nullptr; 12630 Infos.resize(numParams); 12631 return Infos.data(); 12632 } 12633 }; 12634 12635 /// The current instantiation scope used to store local 12636 /// variables. 12637 LocalInstantiationScope *CurrentInstantiationScope; 12638 12639 typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>> 12640 UnparsedDefaultArgInstantiationsMap; 12641 12642 /// A mapping from parameters with unparsed default arguments to the 12643 /// set of instantiations of each parameter. 12644 /// 12645 /// This mapping is a temporary data structure used when parsing 12646 /// nested class templates or nested classes of class templates, 12647 /// where we might end up instantiating an inner class before the 12648 /// default arguments of its methods have been parsed. 12649 UnparsedDefaultArgInstantiationsMap UnparsedDefaultArgInstantiations; 12650 12651 /// A context in which code is being synthesized (where a source location 12652 /// alone is not sufficient to identify the context). This covers template 12653 /// instantiation and various forms of implicitly-generated functions. 12654 struct CodeSynthesisContext { 12655 /// The kind of template instantiation we are performing 12656 enum SynthesisKind { 12657 /// We are instantiating a template declaration. The entity is 12658 /// the declaration we're instantiating (e.g., a CXXRecordDecl). 12659 TemplateInstantiation, 12660 12661 /// We are instantiating a default argument for a template 12662 /// parameter. The Entity is the template parameter whose argument is 12663 /// being instantiated, the Template is the template, and the 12664 /// TemplateArgs/NumTemplateArguments provide the template arguments as 12665 /// specified. 12666 DefaultTemplateArgumentInstantiation, 12667 12668 /// We are instantiating a default argument for a function. 12669 /// The Entity is the ParmVarDecl, and TemplateArgs/NumTemplateArgs 12670 /// provides the template arguments as specified. 12671 DefaultFunctionArgumentInstantiation, 12672 12673 /// We are substituting explicit template arguments provided for 12674 /// a function template. The entity is a FunctionTemplateDecl. 12675 ExplicitTemplateArgumentSubstitution, 12676 12677 /// We are substituting template argument determined as part of 12678 /// template argument deduction for either a class template 12679 /// partial specialization or a function template. The 12680 /// Entity is either a {Class|Var}TemplatePartialSpecializationDecl or 12681 /// a TemplateDecl. 12682 DeducedTemplateArgumentSubstitution, 12683 12684 /// We are substituting into a lambda expression. 12685 LambdaExpressionSubstitution, 12686 12687 /// We are substituting prior template arguments into a new 12688 /// template parameter. The template parameter itself is either a 12689 /// NonTypeTemplateParmDecl or a TemplateTemplateParmDecl. 12690 PriorTemplateArgumentSubstitution, 12691 12692 /// We are checking the validity of a default template argument that 12693 /// has been used when naming a template-id. 12694 DefaultTemplateArgumentChecking, 12695 12696 /// We are computing the exception specification for a defaulted special 12697 /// member function. 12698 ExceptionSpecEvaluation, 12699 12700 /// We are instantiating the exception specification for a function 12701 /// template which was deferred until it was needed. 12702 ExceptionSpecInstantiation, 12703 12704 /// We are instantiating a requirement of a requires expression. 12705 RequirementInstantiation, 12706 12707 /// We are checking the satisfaction of a nested requirement of a requires 12708 /// expression. 12709 NestedRequirementConstraintsCheck, 12710 12711 /// We are declaring an implicit special member function. 12712 DeclaringSpecialMember, 12713 12714 /// We are declaring an implicit 'operator==' for a defaulted 12715 /// 'operator<=>'. 12716 DeclaringImplicitEqualityComparison, 12717 12718 /// We are defining a synthesized function (such as a defaulted special 12719 /// member). 12720 DefiningSynthesizedFunction, 12721 12722 // We are checking the constraints associated with a constrained entity or 12723 // the constraint expression of a concept. This includes the checks that 12724 // atomic constraints have the type 'bool' and that they can be constant 12725 // evaluated. 12726 ConstraintsCheck, 12727 12728 // We are substituting template arguments into a constraint expression. 12729 ConstraintSubstitution, 12730 12731 // We are normalizing a constraint expression. 12732 ConstraintNormalization, 12733 12734 // Instantiating a Requires Expression parameter clause. 12735 RequirementParameterInstantiation, 12736 12737 // We are substituting into the parameter mapping of an atomic constraint 12738 // during normalization. 12739 ParameterMappingSubstitution, 12740 12741 /// We are rewriting a comparison operator in terms of an operator<=>. 12742 RewritingOperatorAsSpaceship, 12743 12744 /// We are initializing a structured binding. 12745 InitializingStructuredBinding, 12746 12747 /// We are marking a class as __dllexport. 12748 MarkingClassDllexported, 12749 12750 /// We are building an implied call from __builtin_dump_struct. The 12751 /// arguments are in CallArgs. 12752 BuildingBuiltinDumpStructCall, 12753 12754 /// Added for Template instantiation observation. 12755 /// Memoization means we are _not_ instantiating a template because 12756 /// it is already instantiated (but we entered a context where we 12757 /// would have had to if it was not already instantiated). 12758 Memoization, 12759 12760 /// We are building deduction guides for a class. 12761 BuildingDeductionGuides, 12762 12763 /// We are instantiating a type alias template declaration. 12764 TypeAliasTemplateInstantiation, 12765 } Kind; 12766 12767 /// Was the enclosing context a non-instantiation SFINAE context? 12768 bool SavedInNonInstantiationSFINAEContext; 12769 12770 /// The point of instantiation or synthesis within the source code. 12771 SourceLocation PointOfInstantiation; 12772 12773 /// The entity that is being synthesized. 12774 Decl *Entity; 12775 12776 /// The template (or partial specialization) in which we are 12777 /// performing the instantiation, for substitutions of prior template 12778 /// arguments. 12779 NamedDecl *Template; 12780 12781 union { 12782 /// The list of template arguments we are substituting, if they 12783 /// are not part of the entity. 12784 const TemplateArgument *TemplateArgs; 12785 12786 /// The list of argument expressions in a synthesized call. 12787 const Expr *const *CallArgs; 12788 }; 12789 12790 // FIXME: Wrap this union around more members, or perhaps store the 12791 // kind-specific members in the RAII object owning the context. 12792 union { 12793 /// The number of template arguments in TemplateArgs. 12794 unsigned NumTemplateArgs; 12795 12796 /// The number of expressions in CallArgs. 12797 unsigned NumCallArgs; 12798 12799 /// The special member being declared or defined. 12800 CXXSpecialMemberKind SpecialMember; 12801 }; 12802 template_argumentsCodeSynthesisContext12803 ArrayRef<TemplateArgument> template_arguments() const { 12804 assert(Kind != DeclaringSpecialMember); 12805 return {TemplateArgs, NumTemplateArgs}; 12806 } 12807 12808 /// The template deduction info object associated with the 12809 /// substitution or checking of explicit or deduced template arguments. 12810 sema::TemplateDeductionInfo *DeductionInfo; 12811 12812 /// The source range that covers the construct that cause 12813 /// the instantiation, e.g., the template-id that causes a class 12814 /// template instantiation. 12815 SourceRange InstantiationRange; 12816 CodeSynthesisContextCodeSynthesisContext12817 CodeSynthesisContext() 12818 : Kind(TemplateInstantiation), 12819 SavedInNonInstantiationSFINAEContext(false), Entity(nullptr), 12820 Template(nullptr), TemplateArgs(nullptr), NumTemplateArgs(0), 12821 DeductionInfo(nullptr) {} 12822 12823 /// Determines whether this template is an actual instantiation 12824 /// that should be counted toward the maximum instantiation depth. 12825 bool isInstantiationRecord() const; 12826 }; 12827 12828 /// A stack object to be created when performing template 12829 /// instantiation. 12830 /// 12831 /// Construction of an object of type \c InstantiatingTemplate 12832 /// pushes the current instantiation onto the stack of active 12833 /// instantiations. If the size of this stack exceeds the maximum 12834 /// number of recursive template instantiations, construction 12835 /// produces an error and evaluates true. 12836 /// 12837 /// Destruction of this object will pop the named instantiation off 12838 /// the stack. 12839 struct InstantiatingTemplate { 12840 /// Note that we are instantiating a class template, 12841 /// function template, variable template, alias template, 12842 /// or a member thereof. 12843 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12844 Decl *Entity, 12845 SourceRange InstantiationRange = SourceRange()); 12846 12847 struct ExceptionSpecification {}; 12848 /// Note that we are instantiating an exception specification 12849 /// of a function template. 12850 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12851 FunctionDecl *Entity, ExceptionSpecification, 12852 SourceRange InstantiationRange = SourceRange()); 12853 12854 /// Note that we are instantiating a type alias template declaration. 12855 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12856 TypeAliasTemplateDecl *Entity, 12857 ArrayRef<TemplateArgument> TemplateArgs, 12858 SourceRange InstantiationRange = SourceRange()); 12859 12860 /// Note that we are instantiating a default argument in a 12861 /// template-id. 12862 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12863 TemplateParameter Param, TemplateDecl *Template, 12864 ArrayRef<TemplateArgument> TemplateArgs, 12865 SourceRange InstantiationRange = SourceRange()); 12866 12867 /// Note that we are substituting either explicitly-specified or 12868 /// deduced template arguments during function template argument deduction. 12869 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12870 FunctionTemplateDecl *FunctionTemplate, 12871 ArrayRef<TemplateArgument> TemplateArgs, 12872 CodeSynthesisContext::SynthesisKind Kind, 12873 sema::TemplateDeductionInfo &DeductionInfo, 12874 SourceRange InstantiationRange = SourceRange()); 12875 12876 /// Note that we are instantiating as part of template 12877 /// argument deduction for a class template declaration. 12878 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12879 TemplateDecl *Template, 12880 ArrayRef<TemplateArgument> TemplateArgs, 12881 sema::TemplateDeductionInfo &DeductionInfo, 12882 SourceRange InstantiationRange = SourceRange()); 12883 12884 /// Note that we are instantiating as part of template 12885 /// argument deduction for a class template partial 12886 /// specialization. 12887 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12888 ClassTemplatePartialSpecializationDecl *PartialSpec, 12889 ArrayRef<TemplateArgument> TemplateArgs, 12890 sema::TemplateDeductionInfo &DeductionInfo, 12891 SourceRange InstantiationRange = SourceRange()); 12892 12893 /// Note that we are instantiating as part of template 12894 /// argument deduction for a variable template partial 12895 /// specialization. 12896 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12897 VarTemplatePartialSpecializationDecl *PartialSpec, 12898 ArrayRef<TemplateArgument> TemplateArgs, 12899 sema::TemplateDeductionInfo &DeductionInfo, 12900 SourceRange InstantiationRange = SourceRange()); 12901 12902 /// Note that we are instantiating a default argument for a function 12903 /// parameter. 12904 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12905 ParmVarDecl *Param, 12906 ArrayRef<TemplateArgument> TemplateArgs, 12907 SourceRange InstantiationRange = SourceRange()); 12908 12909 /// Note that we are substituting prior template arguments into a 12910 /// non-type parameter. 12911 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12912 NamedDecl *Template, NonTypeTemplateParmDecl *Param, 12913 ArrayRef<TemplateArgument> TemplateArgs, 12914 SourceRange InstantiationRange); 12915 12916 /// Note that we are substituting prior template arguments into a 12917 /// template template parameter. 12918 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12919 NamedDecl *Template, TemplateTemplateParmDecl *Param, 12920 ArrayRef<TemplateArgument> TemplateArgs, 12921 SourceRange InstantiationRange); 12922 12923 /// Note that we are checking the default template argument 12924 /// against the template parameter for a given template-id. 12925 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12926 TemplateDecl *Template, NamedDecl *Param, 12927 ArrayRef<TemplateArgument> TemplateArgs, 12928 SourceRange InstantiationRange); 12929 12930 struct ConstraintsCheck {}; 12931 /// \brief Note that we are checking the constraints associated with some 12932 /// constrained entity (a concept declaration or a template with associated 12933 /// constraints). 12934 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12935 ConstraintsCheck, NamedDecl *Template, 12936 ArrayRef<TemplateArgument> TemplateArgs, 12937 SourceRange InstantiationRange); 12938 12939 struct ConstraintSubstitution {}; 12940 /// \brief Note that we are checking a constraint expression associated 12941 /// with a template declaration or as part of the satisfaction check of a 12942 /// concept. 12943 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12944 ConstraintSubstitution, NamedDecl *Template, 12945 sema::TemplateDeductionInfo &DeductionInfo, 12946 SourceRange InstantiationRange); 12947 12948 struct ConstraintNormalization {}; 12949 /// \brief Note that we are normalizing a constraint expression. 12950 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12951 ConstraintNormalization, NamedDecl *Template, 12952 SourceRange InstantiationRange); 12953 12954 struct ParameterMappingSubstitution {}; 12955 /// \brief Note that we are subtituting into the parameter mapping of an 12956 /// atomic constraint during constraint normalization. 12957 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12958 ParameterMappingSubstitution, NamedDecl *Template, 12959 SourceRange InstantiationRange); 12960 12961 /// \brief Note that we are substituting template arguments into a part of 12962 /// a requirement of a requires expression. 12963 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12964 concepts::Requirement *Req, 12965 sema::TemplateDeductionInfo &DeductionInfo, 12966 SourceRange InstantiationRange = SourceRange()); 12967 12968 /// \brief Note that we are checking the satisfaction of the constraint 12969 /// expression inside of a nested requirement. 12970 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12971 concepts::NestedRequirement *Req, ConstraintsCheck, 12972 SourceRange InstantiationRange = SourceRange()); 12973 12974 /// \brief Note that we are checking a requires clause. 12975 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12976 const RequiresExpr *E, 12977 sema::TemplateDeductionInfo &DeductionInfo, 12978 SourceRange InstantiationRange); 12979 12980 struct BuildingDeductionGuidesTag {}; 12981 /// \brief Note that we are building deduction guides. 12982 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 12983 TemplateDecl *Entity, BuildingDeductionGuidesTag, 12984 SourceRange InstantiationRange = SourceRange()); 12985 12986 /// Note that we have finished instantiating this template. 12987 void Clear(); 12988 ~InstantiatingTemplateInstantiatingTemplate12989 ~InstantiatingTemplate() { Clear(); } 12990 12991 /// Determines whether we have exceeded the maximum 12992 /// recursive template instantiations. isInvalidInstantiatingTemplate12993 bool isInvalid() const { return Invalid; } 12994 12995 /// Determine whether we are already instantiating this 12996 /// specialization in some surrounding active instantiation. isAlreadyInstantiatingInstantiatingTemplate12997 bool isAlreadyInstantiating() const { return AlreadyInstantiating; } 12998 12999 private: 13000 Sema &SemaRef; 13001 bool Invalid; 13002 bool AlreadyInstantiating; 13003 bool CheckInstantiationDepth(SourceLocation PointOfInstantiation, 13004 SourceRange InstantiationRange); 13005 13006 InstantiatingTemplate( 13007 Sema &SemaRef, CodeSynthesisContext::SynthesisKind Kind, 13008 SourceLocation PointOfInstantiation, SourceRange InstantiationRange, 13009 Decl *Entity, NamedDecl *Template = nullptr, 13010 ArrayRef<TemplateArgument> TemplateArgs = std::nullopt, 13011 sema::TemplateDeductionInfo *DeductionInfo = nullptr); 13012 13013 InstantiatingTemplate(const InstantiatingTemplate &) = delete; 13014 13015 InstantiatingTemplate &operator=(const InstantiatingTemplate &) = delete; 13016 }; 13017 13018 bool SubstTemplateArgument(const TemplateArgumentLoc &Input, 13019 const MultiLevelTemplateArgumentList &TemplateArgs, 13020 TemplateArgumentLoc &Output, 13021 SourceLocation Loc = {}, 13022 const DeclarationName &Entity = {}); 13023 bool 13024 SubstTemplateArguments(ArrayRef<TemplateArgumentLoc> Args, 13025 const MultiLevelTemplateArgumentList &TemplateArgs, 13026 TemplateArgumentListInfo &Outputs); 13027 13028 /// Retrieve the template argument list(s) that should be used to 13029 /// instantiate the definition of the given declaration. 13030 /// 13031 /// \param ND the declaration for which we are computing template 13032 /// instantiation arguments. 13033 /// 13034 /// \param DC In the event we don't HAVE a declaration yet, we instead provide 13035 /// the decl context where it will be created. In this case, the `Innermost` 13036 /// should likely be provided. If ND is non-null, this is ignored. 13037 /// 13038 /// \param Innermost if non-NULL, specifies a template argument list for the 13039 /// template declaration passed as ND. 13040 /// 13041 /// \param RelativeToPrimary true if we should get the template 13042 /// arguments relative to the primary template, even when we're 13043 /// dealing with a specialization. This is only relevant for function 13044 /// template specializations. 13045 /// 13046 /// \param Pattern If non-NULL, indicates the pattern from which we will be 13047 /// instantiating the definition of the given declaration, \p ND. This is 13048 /// used to determine the proper set of template instantiation arguments for 13049 /// friend function template specializations. 13050 /// 13051 /// \param ForConstraintInstantiation when collecting arguments, 13052 /// ForConstraintInstantiation indicates we should continue looking when 13053 /// encountering a lambda generic call operator, and continue looking for 13054 /// arguments on an enclosing class template. 13055 MultiLevelTemplateArgumentList getTemplateInstantiationArgs( 13056 const NamedDecl *D, const DeclContext *DC = nullptr, bool Final = false, 13057 std::optional<ArrayRef<TemplateArgument>> Innermost = std::nullopt, 13058 bool RelativeToPrimary = false, const FunctionDecl *Pattern = nullptr, 13059 bool ForConstraintInstantiation = false, 13060 bool SkipForSpecialization = false); 13061 13062 /// RAII object to handle the state changes required to synthesize 13063 /// a function body. 13064 class SynthesizedFunctionScope { 13065 Sema &S; 13066 Sema::ContextRAII SavedContext; 13067 bool PushedCodeSynthesisContext = false; 13068 13069 public: SynthesizedFunctionScope(Sema & S,DeclContext * DC)13070 SynthesizedFunctionScope(Sema &S, DeclContext *DC) 13071 : S(S), SavedContext(S, DC) { 13072 auto *FD = dyn_cast<FunctionDecl>(DC); 13073 S.PushFunctionScope(); 13074 S.PushExpressionEvaluationContext( 13075 (FD && FD->isConsteval()) 13076 ? ExpressionEvaluationContext::ImmediateFunctionContext 13077 : ExpressionEvaluationContext::PotentiallyEvaluated); 13078 if (FD) { 13079 FD->setWillHaveBody(true); 13080 S.ExprEvalContexts.back().InImmediateFunctionContext = 13081 FD->isImmediateFunction() || 13082 S.ExprEvalContexts[S.ExprEvalContexts.size() - 2] 13083 .isConstantEvaluated() || 13084 S.ExprEvalContexts[S.ExprEvalContexts.size() - 2] 13085 .isImmediateFunctionContext(); 13086 S.ExprEvalContexts.back().InImmediateEscalatingFunctionContext = 13087 S.getLangOpts().CPlusPlus20 && FD->isImmediateEscalating(); 13088 } else 13089 assert(isa<ObjCMethodDecl>(DC)); 13090 } 13091 addContextNote(SourceLocation UseLoc)13092 void addContextNote(SourceLocation UseLoc) { 13093 assert(!PushedCodeSynthesisContext); 13094 13095 Sema::CodeSynthesisContext Ctx; 13096 Ctx.Kind = Sema::CodeSynthesisContext::DefiningSynthesizedFunction; 13097 Ctx.PointOfInstantiation = UseLoc; 13098 Ctx.Entity = cast<Decl>(S.CurContext); 13099 S.pushCodeSynthesisContext(Ctx); 13100 13101 PushedCodeSynthesisContext = true; 13102 } 13103 ~SynthesizedFunctionScope()13104 ~SynthesizedFunctionScope() { 13105 if (PushedCodeSynthesisContext) 13106 S.popCodeSynthesisContext(); 13107 if (auto *FD = dyn_cast<FunctionDecl>(S.CurContext)) { 13108 FD->setWillHaveBody(false); 13109 S.CheckImmediateEscalatingFunctionDefinition(FD, S.getCurFunction()); 13110 } 13111 S.PopExpressionEvaluationContext(); 13112 S.PopFunctionScopeInfo(); 13113 } 13114 }; 13115 13116 /// List of active code synthesis contexts. 13117 /// 13118 /// This vector is treated as a stack. As synthesis of one entity requires 13119 /// synthesis of another, additional contexts are pushed onto the stack. 13120 SmallVector<CodeSynthesisContext, 16> CodeSynthesisContexts; 13121 13122 /// Specializations whose definitions are currently being instantiated. 13123 llvm::DenseSet<std::pair<Decl *, unsigned>> InstantiatingSpecializations; 13124 13125 /// Non-dependent types used in templates that have already been instantiated 13126 /// by some template instantiation. 13127 llvm::DenseSet<QualType> InstantiatedNonDependentTypes; 13128 13129 /// Extra modules inspected when performing a lookup during a template 13130 /// instantiation. Computed lazily. 13131 SmallVector<Module *, 16> CodeSynthesisContextLookupModules; 13132 13133 /// Cache of additional modules that should be used for name lookup 13134 /// within the current template instantiation. Computed lazily; use 13135 /// getLookupModules() to get a complete set. 13136 llvm::DenseSet<Module *> LookupModulesCache; 13137 13138 /// Map from the most recent declaration of a namespace to the most 13139 /// recent visible declaration of that namespace. 13140 llvm::DenseMap<NamedDecl *, NamedDecl *> VisibleNamespaceCache; 13141 13142 /// Whether we are in a SFINAE context that is not associated with 13143 /// template instantiation. 13144 /// 13145 /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside 13146 /// of a template instantiation or template argument deduction. 13147 bool InNonInstantiationSFINAEContext; 13148 13149 /// The number of \p CodeSynthesisContexts that are not template 13150 /// instantiations and, therefore, should not be counted as part of the 13151 /// instantiation depth. 13152 /// 13153 /// When the instantiation depth reaches the user-configurable limit 13154 /// \p LangOptions::InstantiationDepth we will abort instantiation. 13155 // FIXME: Should we have a similar limit for other forms of synthesis? 13156 unsigned NonInstantiationEntries; 13157 13158 /// The depth of the context stack at the point when the most recent 13159 /// error or warning was produced. 13160 /// 13161 /// This value is used to suppress printing of redundant context stacks 13162 /// when there are multiple errors or warnings in the same instantiation. 13163 // FIXME: Does this belong in Sema? It's tough to implement it anywhere else. 13164 unsigned LastEmittedCodeSynthesisContextDepth = 0; 13165 13166 /// The template instantiation callbacks to trace or track 13167 /// instantiations (objects can be chained). 13168 /// 13169 /// This callbacks is used to print, trace or track template 13170 /// instantiations as they are being constructed. 13171 std::vector<std::unique_ptr<TemplateInstantiationCallback>> 13172 TemplateInstCallbacks; 13173 13174 /// The current index into pack expansion arguments that will be 13175 /// used for substitution of parameter packs. 13176 /// 13177 /// The pack expansion index will be -1 to indicate that parameter packs 13178 /// should be instantiated as themselves. Otherwise, the index specifies 13179 /// which argument within the parameter pack will be used for substitution. 13180 int ArgumentPackSubstitutionIndex; 13181 13182 /// RAII object used to change the argument pack substitution index 13183 /// within a \c Sema object. 13184 /// 13185 /// See \c ArgumentPackSubstitutionIndex for more information. 13186 class ArgumentPackSubstitutionIndexRAII { 13187 Sema &Self; 13188 int OldSubstitutionIndex; 13189 13190 public: ArgumentPackSubstitutionIndexRAII(Sema & Self,int NewSubstitutionIndex)13191 ArgumentPackSubstitutionIndexRAII(Sema &Self, int NewSubstitutionIndex) 13192 : Self(Self), OldSubstitutionIndex(Self.ArgumentPackSubstitutionIndex) { 13193 Self.ArgumentPackSubstitutionIndex = NewSubstitutionIndex; 13194 } 13195 ~ArgumentPackSubstitutionIndexRAII()13196 ~ArgumentPackSubstitutionIndexRAII() { 13197 Self.ArgumentPackSubstitutionIndex = OldSubstitutionIndex; 13198 } 13199 }; 13200 13201 friend class ArgumentPackSubstitutionRAII; 13202 13203 void pushCodeSynthesisContext(CodeSynthesisContext Ctx); 13204 void popCodeSynthesisContext(); 13205 PrintContextStack()13206 void PrintContextStack() { 13207 if (!CodeSynthesisContexts.empty() && 13208 CodeSynthesisContexts.size() != LastEmittedCodeSynthesisContextDepth) { 13209 PrintInstantiationStack(); 13210 LastEmittedCodeSynthesisContextDepth = CodeSynthesisContexts.size(); 13211 } 13212 if (PragmaAttributeCurrentTargetDecl) 13213 PrintPragmaAttributeInstantiationPoint(); 13214 } 13215 /// Prints the current instantiation stack through a series of 13216 /// notes. 13217 void PrintInstantiationStack(); 13218 13219 /// Determines whether we are currently in a context where 13220 /// template argument substitution failures are not considered 13221 /// errors. 13222 /// 13223 /// \returns An empty \c Optional if we're not in a SFINAE context. 13224 /// Otherwise, contains a pointer that, if non-NULL, contains the nearest 13225 /// template-deduction context object, which can be used to capture 13226 /// diagnostics that will be suppressed. 13227 std::optional<sema::TemplateDeductionInfo *> isSFINAEContext() const; 13228 13229 /// Perform substitution on the type T with a given set of template 13230 /// arguments. 13231 /// 13232 /// This routine substitutes the given template arguments into the 13233 /// type T and produces the instantiated type. 13234 /// 13235 /// \param T the type into which the template arguments will be 13236 /// substituted. If this type is not dependent, it will be returned 13237 /// immediately. 13238 /// 13239 /// \param Args the template arguments that will be 13240 /// substituted for the top-level template parameters within T. 13241 /// 13242 /// \param Loc the location in the source code where this substitution 13243 /// is being performed. It will typically be the location of the 13244 /// declarator (if we're instantiating the type of some declaration) 13245 /// or the location of the type in the source code (if, e.g., we're 13246 /// instantiating the type of a cast expression). 13247 /// 13248 /// \param Entity the name of the entity associated with a declaration 13249 /// being instantiated (if any). May be empty to indicate that there 13250 /// is no such entity (if, e.g., this is a type that occurs as part of 13251 /// a cast expression) or that the entity has no name (e.g., an 13252 /// unnamed function parameter). 13253 /// 13254 /// \param AllowDeducedTST Whether a DeducedTemplateSpecializationType is 13255 /// acceptable as the top level type of the result. 13256 /// 13257 /// \returns If the instantiation succeeds, the instantiated 13258 /// type. Otherwise, produces diagnostics and returns a NULL type. 13259 TypeSourceInfo *SubstType(TypeSourceInfo *T, 13260 const MultiLevelTemplateArgumentList &TemplateArgs, 13261 SourceLocation Loc, DeclarationName Entity, 13262 bool AllowDeducedTST = false); 13263 13264 QualType SubstType(QualType T, 13265 const MultiLevelTemplateArgumentList &TemplateArgs, 13266 SourceLocation Loc, DeclarationName Entity); 13267 13268 TypeSourceInfo *SubstType(TypeLoc TL, 13269 const MultiLevelTemplateArgumentList &TemplateArgs, 13270 SourceLocation Loc, DeclarationName Entity); 13271 13272 /// A form of SubstType intended specifically for instantiating the 13273 /// type of a FunctionDecl. Its purpose is solely to force the 13274 /// instantiation of default-argument expressions and to avoid 13275 /// instantiating an exception-specification. 13276 TypeSourceInfo *SubstFunctionDeclType( 13277 TypeSourceInfo *T, const MultiLevelTemplateArgumentList &TemplateArgs, 13278 SourceLocation Loc, DeclarationName Entity, CXXRecordDecl *ThisContext, 13279 Qualifiers ThisTypeQuals, bool EvaluateConstraints = true); 13280 void SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto, 13281 const MultiLevelTemplateArgumentList &Args); 13282 bool SubstExceptionSpec(SourceLocation Loc, 13283 FunctionProtoType::ExceptionSpecInfo &ESI, 13284 SmallVectorImpl<QualType> &ExceptionStorage, 13285 const MultiLevelTemplateArgumentList &Args); 13286 ParmVarDecl * 13287 SubstParmVarDecl(ParmVarDecl *D, 13288 const MultiLevelTemplateArgumentList &TemplateArgs, 13289 int indexAdjustment, std::optional<unsigned> NumExpansions, 13290 bool ExpectParameterPack, bool EvaluateConstraints = true); 13291 13292 /// Substitute the given template arguments into the given set of 13293 /// parameters, producing the set of parameter types that would be generated 13294 /// from such a substitution. 13295 bool SubstParmTypes(SourceLocation Loc, ArrayRef<ParmVarDecl *> Params, 13296 const FunctionProtoType::ExtParameterInfo *ExtParamInfos, 13297 const MultiLevelTemplateArgumentList &TemplateArgs, 13298 SmallVectorImpl<QualType> &ParamTypes, 13299 SmallVectorImpl<ParmVarDecl *> *OutParams, 13300 ExtParameterInfoBuilder &ParamInfos); 13301 13302 /// Substitute the given template arguments into the default argument. 13303 bool SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, 13304 const MultiLevelTemplateArgumentList &TemplateArgs, 13305 bool ForCallExpr = false); 13306 ExprResult SubstExpr(Expr *E, 13307 const MultiLevelTemplateArgumentList &TemplateArgs); 13308 13309 // A RAII type used by the TemplateDeclInstantiator and TemplateInstantiator 13310 // to disable constraint evaluation, then restore the state. 13311 template <typename InstTy> struct ConstraintEvalRAII { 13312 InstTy &TI; 13313 bool OldValue; 13314 ConstraintEvalRAIIConstraintEvalRAII13315 ConstraintEvalRAII(InstTy &TI) 13316 : TI(TI), OldValue(TI.getEvaluateConstraints()) { 13317 TI.setEvaluateConstraints(false); 13318 } ~ConstraintEvalRAIIConstraintEvalRAII13319 ~ConstraintEvalRAII() { TI.setEvaluateConstraints(OldValue); } 13320 }; 13321 13322 // Must be used instead of SubstExpr at 'constraint checking' time. 13323 ExprResult 13324 SubstConstraintExpr(Expr *E, 13325 const MultiLevelTemplateArgumentList &TemplateArgs); 13326 // Unlike the above, this does not evaluates constraints. 13327 ExprResult SubstConstraintExprWithoutSatisfaction( 13328 Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs); 13329 13330 /// Substitute the given template arguments into a list of 13331 /// expressions, expanding pack expansions if required. 13332 /// 13333 /// \param Exprs The list of expressions to substitute into. 13334 /// 13335 /// \param IsCall Whether this is some form of call, in which case 13336 /// default arguments will be dropped. 13337 /// 13338 /// \param TemplateArgs The set of template arguments to substitute. 13339 /// 13340 /// \param Outputs Will receive all of the substituted arguments. 13341 /// 13342 /// \returns true if an error occurred, false otherwise. 13343 bool SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall, 13344 const MultiLevelTemplateArgumentList &TemplateArgs, 13345 SmallVectorImpl<Expr *> &Outputs); 13346 13347 StmtResult SubstStmt(Stmt *S, 13348 const MultiLevelTemplateArgumentList &TemplateArgs); 13349 13350 ExprResult 13351 SubstInitializer(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs, 13352 bool CXXDirectInit); 13353 13354 /// Perform substitution on the base class specifiers of the 13355 /// given class template specialization. 13356 /// 13357 /// Produces a diagnostic and returns true on error, returns false and 13358 /// attaches the instantiated base classes to the class template 13359 /// specialization if successful. 13360 bool SubstBaseSpecifiers(CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern, 13361 const MultiLevelTemplateArgumentList &TemplateArgs); 13362 13363 /// Instantiate the definition of a class from a given pattern. 13364 /// 13365 /// \param PointOfInstantiation The point of instantiation within the 13366 /// source code. 13367 /// 13368 /// \param Instantiation is the declaration whose definition is being 13369 /// instantiated. This will be either a class template specialization 13370 /// or a member class of a class template specialization. 13371 /// 13372 /// \param Pattern is the pattern from which the instantiation 13373 /// occurs. This will be either the declaration of a class template or 13374 /// the declaration of a member class of a class template. 13375 /// 13376 /// \param TemplateArgs The template arguments to be substituted into 13377 /// the pattern. 13378 /// 13379 /// \param TSK the kind of implicit or explicit instantiation to perform. 13380 /// 13381 /// \param Complain whether to complain if the class cannot be instantiated 13382 /// due to the lack of a definition. 13383 /// 13384 /// \returns true if an error occurred, false otherwise. 13385 bool InstantiateClass(SourceLocation PointOfInstantiation, 13386 CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern, 13387 const MultiLevelTemplateArgumentList &TemplateArgs, 13388 TemplateSpecializationKind TSK, bool Complain = true); 13389 13390 /// Instantiate the definition of an enum from a given pattern. 13391 /// 13392 /// \param PointOfInstantiation The point of instantiation within the 13393 /// source code. 13394 /// \param Instantiation is the declaration whose definition is being 13395 /// instantiated. This will be a member enumeration of a class 13396 /// temploid specialization, or a local enumeration within a 13397 /// function temploid specialization. 13398 /// \param Pattern The templated declaration from which the instantiation 13399 /// occurs. 13400 /// \param TemplateArgs The template arguments to be substituted into 13401 /// the pattern. 13402 /// \param TSK The kind of implicit or explicit instantiation to perform. 13403 /// 13404 /// \return \c true if an error occurred, \c false otherwise. 13405 bool InstantiateEnum(SourceLocation PointOfInstantiation, 13406 EnumDecl *Instantiation, EnumDecl *Pattern, 13407 const MultiLevelTemplateArgumentList &TemplateArgs, 13408 TemplateSpecializationKind TSK); 13409 13410 /// Instantiate the definition of a field from the given pattern. 13411 /// 13412 /// \param PointOfInstantiation The point of instantiation within the 13413 /// source code. 13414 /// \param Instantiation is the declaration whose definition is being 13415 /// instantiated. This will be a class of a class temploid 13416 /// specialization, or a local enumeration within a function temploid 13417 /// specialization. 13418 /// \param Pattern The templated declaration from which the instantiation 13419 /// occurs. 13420 /// \param TemplateArgs The template arguments to be substituted into 13421 /// the pattern. 13422 /// 13423 /// \return \c true if an error occurred, \c false otherwise. 13424 bool InstantiateInClassInitializer( 13425 SourceLocation PointOfInstantiation, FieldDecl *Instantiation, 13426 FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs); 13427 13428 bool usesPartialOrExplicitSpecialization( 13429 SourceLocation Loc, ClassTemplateSpecializationDecl *ClassTemplateSpec); 13430 13431 bool InstantiateClassTemplateSpecialization( 13432 SourceLocation PointOfInstantiation, 13433 ClassTemplateSpecializationDecl *ClassTemplateSpec, 13434 TemplateSpecializationKind TSK, bool Complain = true); 13435 13436 /// Instantiates the definitions of all of the member 13437 /// of the given class, which is an instantiation of a class template 13438 /// or a member class of a template. 13439 void 13440 InstantiateClassMembers(SourceLocation PointOfInstantiation, 13441 CXXRecordDecl *Instantiation, 13442 const MultiLevelTemplateArgumentList &TemplateArgs, 13443 TemplateSpecializationKind TSK); 13444 13445 /// Instantiate the definitions of all of the members of the 13446 /// given class template specialization, which was named as part of an 13447 /// explicit instantiation. 13448 void InstantiateClassTemplateSpecializationMembers( 13449 SourceLocation PointOfInstantiation, 13450 ClassTemplateSpecializationDecl *ClassTemplateSpec, 13451 TemplateSpecializationKind TSK); 13452 13453 NestedNameSpecifierLoc SubstNestedNameSpecifierLoc( 13454 NestedNameSpecifierLoc NNS, 13455 const MultiLevelTemplateArgumentList &TemplateArgs); 13456 13457 /// Do template substitution on declaration name info. 13458 DeclarationNameInfo 13459 SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo, 13460 const MultiLevelTemplateArgumentList &TemplateArgs); 13461 TemplateName 13462 SubstTemplateName(NestedNameSpecifierLoc QualifierLoc, TemplateName Name, 13463 SourceLocation Loc, 13464 const MultiLevelTemplateArgumentList &TemplateArgs); 13465 13466 bool SubstTypeConstraint(TemplateTypeParmDecl *Inst, const TypeConstraint *TC, 13467 const MultiLevelTemplateArgumentList &TemplateArgs, 13468 bool EvaluateConstraint); 13469 13470 /// Determine whether we are currently performing template instantiation. inTemplateInstantiation()13471 bool inTemplateInstantiation() const { 13472 return CodeSynthesisContexts.size() > NonInstantiationEntries; 13473 } 13474 13475 ///@} 13476 13477 // 13478 // 13479 // ------------------------------------------------------------------------- 13480 // 13481 // 13482 13483 /// \name C++ Template Declaration Instantiation 13484 /// Implementations are in SemaTemplateInstantiateDecl.cpp 13485 ///@{ 13486 13487 public: 13488 /// An entity for which implicit template instantiation is required. 13489 /// 13490 /// The source location associated with the declaration is the first place in 13491 /// the source code where the declaration was "used". It is not necessarily 13492 /// the point of instantiation (which will be either before or after the 13493 /// namespace-scope declaration that triggered this implicit instantiation), 13494 /// However, it is the location that diagnostics should generally refer to, 13495 /// because users will need to know what code triggered the instantiation. 13496 typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation; 13497 13498 /// The queue of implicit template instantiations that are required 13499 /// but have not yet been performed. 13500 std::deque<PendingImplicitInstantiation> PendingInstantiations; 13501 13502 /// Queue of implicit template instantiations that cannot be performed 13503 /// eagerly. 13504 SmallVector<PendingImplicitInstantiation, 1> LateParsedInstantiations; 13505 13506 SmallVector<SmallVector<VTableUse, 16>, 8> SavedVTableUses; 13507 SmallVector<std::deque<PendingImplicitInstantiation>, 8> 13508 SavedPendingInstantiations; 13509 13510 /// The queue of implicit template instantiations that are required 13511 /// and must be performed within the current local scope. 13512 /// 13513 /// This queue is only used for member functions of local classes in 13514 /// templates, which must be instantiated in the same scope as their 13515 /// enclosing function, so that they can reference function-local 13516 /// types, static variables, enumerators, etc. 13517 std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations; 13518 13519 class LocalEagerInstantiationScope { 13520 public: LocalEagerInstantiationScope(Sema & S)13521 LocalEagerInstantiationScope(Sema &S) : S(S) { 13522 SavedPendingLocalImplicitInstantiations.swap( 13523 S.PendingLocalImplicitInstantiations); 13524 } 13525 perform()13526 void perform() { S.PerformPendingInstantiations(/*LocalOnly=*/true); } 13527 ~LocalEagerInstantiationScope()13528 ~LocalEagerInstantiationScope() { 13529 assert(S.PendingLocalImplicitInstantiations.empty() && 13530 "there shouldn't be any pending local implicit instantiations"); 13531 SavedPendingLocalImplicitInstantiations.swap( 13532 S.PendingLocalImplicitInstantiations); 13533 } 13534 13535 private: 13536 Sema &S; 13537 std::deque<PendingImplicitInstantiation> 13538 SavedPendingLocalImplicitInstantiations; 13539 }; 13540 13541 /// Records and restores the CurFPFeatures state on entry/exit of compound 13542 /// statements. 13543 class FPFeaturesStateRAII { 13544 public: 13545 FPFeaturesStateRAII(Sema &S); 13546 ~FPFeaturesStateRAII(); getOverrides()13547 FPOptionsOverride getOverrides() { return OldOverrides; } 13548 13549 private: 13550 Sema &S; 13551 FPOptions OldFPFeaturesState; 13552 FPOptionsOverride OldOverrides; 13553 LangOptions::FPEvalMethodKind OldEvalMethod; 13554 SourceLocation OldFPPragmaLocation; 13555 }; 13556 13557 class GlobalEagerInstantiationScope { 13558 public: GlobalEagerInstantiationScope(Sema & S,bool Enabled)13559 GlobalEagerInstantiationScope(Sema &S, bool Enabled) 13560 : S(S), Enabled(Enabled) { 13561 if (!Enabled) 13562 return; 13563 13564 S.SavedPendingInstantiations.emplace_back(); 13565 S.SavedPendingInstantiations.back().swap(S.PendingInstantiations); 13566 13567 S.SavedVTableUses.emplace_back(); 13568 S.SavedVTableUses.back().swap(S.VTableUses); 13569 } 13570 perform()13571 void perform() { 13572 if (Enabled) { 13573 S.DefineUsedVTables(); 13574 S.PerformPendingInstantiations(); 13575 } 13576 } 13577 ~GlobalEagerInstantiationScope()13578 ~GlobalEagerInstantiationScope() { 13579 if (!Enabled) 13580 return; 13581 13582 // Restore the set of pending vtables. 13583 assert(S.VTableUses.empty() && 13584 "VTableUses should be empty before it is discarded."); 13585 S.VTableUses.swap(S.SavedVTableUses.back()); 13586 S.SavedVTableUses.pop_back(); 13587 13588 // Restore the set of pending implicit instantiations. 13589 if (S.TUKind != TU_Prefix || !S.LangOpts.PCHInstantiateTemplates) { 13590 assert(S.PendingInstantiations.empty() && 13591 "PendingInstantiations should be empty before it is discarded."); 13592 S.PendingInstantiations.swap(S.SavedPendingInstantiations.back()); 13593 S.SavedPendingInstantiations.pop_back(); 13594 } else { 13595 // Template instantiations in the PCH may be delayed until the TU. 13596 S.PendingInstantiations.swap(S.SavedPendingInstantiations.back()); 13597 S.PendingInstantiations.insert( 13598 S.PendingInstantiations.end(), 13599 S.SavedPendingInstantiations.back().begin(), 13600 S.SavedPendingInstantiations.back().end()); 13601 S.SavedPendingInstantiations.pop_back(); 13602 } 13603 } 13604 13605 private: 13606 Sema &S; 13607 bool Enabled; 13608 }; 13609 13610 ExplicitSpecifier instantiateExplicitSpecifier( 13611 const MultiLevelTemplateArgumentList &TemplateArgs, ExplicitSpecifier ES); 13612 13613 struct LateInstantiatedAttribute { 13614 const Attr *TmplAttr; 13615 LocalInstantiationScope *Scope; 13616 Decl *NewDecl; 13617 LateInstantiatedAttributeLateInstantiatedAttribute13618 LateInstantiatedAttribute(const Attr *A, LocalInstantiationScope *S, 13619 Decl *D) 13620 : TmplAttr(A), Scope(S), NewDecl(D) {} 13621 }; 13622 typedef SmallVector<LateInstantiatedAttribute, 16> LateInstantiatedAttrVec; 13623 13624 void InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs, 13625 const Decl *Pattern, Decl *Inst, 13626 LateInstantiatedAttrVec *LateAttrs = nullptr, 13627 LocalInstantiationScope *OuterMostScope = nullptr); 13628 13629 /// Update instantiation attributes after template was late parsed. 13630 /// 13631 /// Some attributes are evaluated based on the body of template. If it is 13632 /// late parsed, such attributes cannot be evaluated when declaration is 13633 /// instantiated. This function is used to update instantiation attributes 13634 /// when template definition is ready. 13635 void updateAttrsForLateParsedTemplate(const Decl *Pattern, Decl *Inst); 13636 13637 void 13638 InstantiateAttrsForDecl(const MultiLevelTemplateArgumentList &TemplateArgs, 13639 const Decl *Pattern, Decl *Inst, 13640 LateInstantiatedAttrVec *LateAttrs = nullptr, 13641 LocalInstantiationScope *OuterMostScope = nullptr); 13642 13643 /// In the MS ABI, we need to instantiate default arguments of dllexported 13644 /// default constructors along with the constructor definition. This allows IR 13645 /// gen to emit a constructor closure which calls the default constructor with 13646 /// its default arguments. 13647 void InstantiateDefaultCtorDefaultArgs(CXXConstructorDecl *Ctor); 13648 13649 bool InstantiateDefaultArgument(SourceLocation CallLoc, FunctionDecl *FD, 13650 ParmVarDecl *Param); 13651 void InstantiateExceptionSpec(SourceLocation PointOfInstantiation, 13652 FunctionDecl *Function); 13653 13654 /// Instantiate (or find existing instantiation of) a function template with a 13655 /// given set of template arguments. 13656 /// 13657 /// Usually this should not be used, and template argument deduction should be 13658 /// used in its place. 13659 FunctionDecl *InstantiateFunctionDeclaration( 13660 FunctionTemplateDecl *FTD, const TemplateArgumentList *Args, 13661 SourceLocation Loc, 13662 CodeSynthesisContext::SynthesisKind CSC = 13663 CodeSynthesisContext::ExplicitTemplateArgumentSubstitution); 13664 13665 /// Instantiate the definition of the given function from its 13666 /// template. 13667 /// 13668 /// \param PointOfInstantiation the point at which the instantiation was 13669 /// required. Note that this is not precisely a "point of instantiation" 13670 /// for the function, but it's close. 13671 /// 13672 /// \param Function the already-instantiated declaration of a 13673 /// function template specialization or member function of a class template 13674 /// specialization. 13675 /// 13676 /// \param Recursive if true, recursively instantiates any functions that 13677 /// are required by this instantiation. 13678 /// 13679 /// \param DefinitionRequired if true, then we are performing an explicit 13680 /// instantiation where the body of the function is required. Complain if 13681 /// there is no such body. 13682 void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, 13683 FunctionDecl *Function, 13684 bool Recursive = false, 13685 bool DefinitionRequired = false, 13686 bool AtEndOfTU = false); 13687 VarTemplateSpecializationDecl *BuildVarTemplateInstantiation( 13688 VarTemplateDecl *VarTemplate, VarDecl *FromVar, 13689 const TemplateArgumentList *PartialSpecArgs, 13690 const TemplateArgumentListInfo &TemplateArgsInfo, 13691 SmallVectorImpl<TemplateArgument> &Converted, 13692 SourceLocation PointOfInstantiation, 13693 LateInstantiatedAttrVec *LateAttrs = nullptr, 13694 LocalInstantiationScope *StartingScope = nullptr); 13695 13696 /// Instantiates a variable template specialization by completing it 13697 /// with appropriate type information and initializer. 13698 VarTemplateSpecializationDecl *CompleteVarTemplateSpecializationDecl( 13699 VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl, 13700 const MultiLevelTemplateArgumentList &TemplateArgs); 13701 13702 /// BuildVariableInstantiation - Used after a new variable has been created. 13703 /// Sets basic variable data and decides whether to postpone the 13704 /// variable instantiation. 13705 void 13706 BuildVariableInstantiation(VarDecl *NewVar, VarDecl *OldVar, 13707 const MultiLevelTemplateArgumentList &TemplateArgs, 13708 LateInstantiatedAttrVec *LateAttrs, 13709 DeclContext *Owner, 13710 LocalInstantiationScope *StartingScope, 13711 bool InstantiatingVarTemplate = false, 13712 VarTemplateSpecializationDecl *PrevVTSD = nullptr); 13713 13714 /// Instantiate the initializer of a variable. 13715 void InstantiateVariableInitializer( 13716 VarDecl *Var, VarDecl *OldVar, 13717 const MultiLevelTemplateArgumentList &TemplateArgs); 13718 13719 /// Instantiate the definition of the given variable from its 13720 /// template. 13721 /// 13722 /// \param PointOfInstantiation the point at which the instantiation was 13723 /// required. Note that this is not precisely a "point of instantiation" 13724 /// for the variable, but it's close. 13725 /// 13726 /// \param Var the already-instantiated declaration of a templated variable. 13727 /// 13728 /// \param Recursive if true, recursively instantiates any functions that 13729 /// are required by this instantiation. 13730 /// 13731 /// \param DefinitionRequired if true, then we are performing an explicit 13732 /// instantiation where a definition of the variable is required. Complain 13733 /// if there is no such definition. 13734 void InstantiateVariableDefinition(SourceLocation PointOfInstantiation, 13735 VarDecl *Var, bool Recursive = false, 13736 bool DefinitionRequired = false, 13737 bool AtEndOfTU = false); 13738 13739 void InstantiateMemInitializers( 13740 CXXConstructorDecl *New, const CXXConstructorDecl *Tmpl, 13741 const MultiLevelTemplateArgumentList &TemplateArgs); 13742 13743 /// Find the instantiation of the given declaration within the 13744 /// current instantiation. 13745 /// 13746 /// This routine is intended to be used when \p D is a declaration 13747 /// referenced from within a template, that needs to mapped into the 13748 /// corresponding declaration within an instantiation. For example, 13749 /// given: 13750 /// 13751 /// \code 13752 /// template<typename T> 13753 /// struct X { 13754 /// enum Kind { 13755 /// KnownValue = sizeof(T) 13756 /// }; 13757 /// 13758 /// bool getKind() const { return KnownValue; } 13759 /// }; 13760 /// 13761 /// template struct X<int>; 13762 /// \endcode 13763 /// 13764 /// In the instantiation of X<int>::getKind(), we need to map the \p 13765 /// EnumConstantDecl for \p KnownValue (which refers to 13766 /// X<T>::<Kind>::KnownValue) to its instantiation 13767 /// (X<int>::<Kind>::KnownValue). 13768 /// \p FindInstantiatedDecl performs this mapping from within the 13769 /// instantiation of X<int>. 13770 NamedDecl * 13771 FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, 13772 const MultiLevelTemplateArgumentList &TemplateArgs, 13773 bool FindingInstantiatedContext = false); 13774 13775 /// Finds the instantiation of the given declaration context 13776 /// within the current instantiation. 13777 /// 13778 /// \returns NULL if there was an error 13779 DeclContext * 13780 FindInstantiatedContext(SourceLocation Loc, DeclContext *DC, 13781 const MultiLevelTemplateArgumentList &TemplateArgs); 13782 13783 Decl *SubstDecl(Decl *D, DeclContext *Owner, 13784 const MultiLevelTemplateArgumentList &TemplateArgs); 13785 13786 /// Substitute the name and return type of a defaulted 'operator<=>' to form 13787 /// an implicit 'operator=='. 13788 FunctionDecl *SubstSpaceshipAsEqualEqual(CXXRecordDecl *RD, 13789 FunctionDecl *Spaceship); 13790 13791 /// Performs template instantiation for all implicit template 13792 /// instantiations we have seen until this point. 13793 void PerformPendingInstantiations(bool LocalOnly = false); 13794 13795 TemplateParameterList * 13796 SubstTemplateParams(TemplateParameterList *Params, DeclContext *Owner, 13797 const MultiLevelTemplateArgumentList &TemplateArgs, 13798 bool EvaluateConstraints = true); 13799 13800 void PerformDependentDiagnostics( 13801 const DeclContext *Pattern, 13802 const MultiLevelTemplateArgumentList &TemplateArgs); 13803 13804 private: 13805 /// Introduce the instantiated local variables into the local 13806 /// instantiation scope. 13807 void addInstantiatedLocalVarsToScope(FunctionDecl *Function, 13808 const FunctionDecl *PatternDecl, 13809 LocalInstantiationScope &Scope); 13810 /// Introduce the instantiated function parameters into the local 13811 /// instantiation scope, and set the parameter names to those used 13812 /// in the template. 13813 bool addInstantiatedParametersToScope( 13814 FunctionDecl *Function, const FunctionDecl *PatternDecl, 13815 LocalInstantiationScope &Scope, 13816 const MultiLevelTemplateArgumentList &TemplateArgs); 13817 13818 int ParsingClassDepth = 0; 13819 13820 class SavePendingParsedClassStateRAII { 13821 public: SavePendingParsedClassStateRAII(Sema & S)13822 SavePendingParsedClassStateRAII(Sema &S) : S(S) { swapSavedState(); } 13823 ~SavePendingParsedClassStateRAII()13824 ~SavePendingParsedClassStateRAII() { 13825 assert(S.DelayedOverridingExceptionSpecChecks.empty() && 13826 "there shouldn't be any pending delayed exception spec checks"); 13827 assert(S.DelayedEquivalentExceptionSpecChecks.empty() && 13828 "there shouldn't be any pending delayed exception spec checks"); 13829 swapSavedState(); 13830 } 13831 13832 private: 13833 Sema &S; 13834 decltype(DelayedOverridingExceptionSpecChecks) 13835 SavedOverridingExceptionSpecChecks; 13836 decltype(DelayedEquivalentExceptionSpecChecks) 13837 SavedEquivalentExceptionSpecChecks; 13838 swapSavedState()13839 void swapSavedState() { 13840 SavedOverridingExceptionSpecChecks.swap( 13841 S.DelayedOverridingExceptionSpecChecks); 13842 SavedEquivalentExceptionSpecChecks.swap( 13843 S.DelayedEquivalentExceptionSpecChecks); 13844 } 13845 }; 13846 13847 ///@} 13848 13849 // 13850 // 13851 // ------------------------------------------------------------------------- 13852 // 13853 // 13854 13855 /// \name C++ Variadic Templates 13856 /// Implementations are in SemaTemplateVariadic.cpp 13857 ///@{ 13858 13859 public: 13860 /// Determine whether an unexpanded parameter pack might be permitted in this 13861 /// location. Useful for error recovery. 13862 bool isUnexpandedParameterPackPermitted(); 13863 13864 /// The context in which an unexpanded parameter pack is 13865 /// being diagnosed. 13866 /// 13867 /// Note that the values of this enumeration line up with the first 13868 /// argument to the \c err_unexpanded_parameter_pack diagnostic. 13869 enum UnexpandedParameterPackContext { 13870 /// An arbitrary expression. 13871 UPPC_Expression = 0, 13872 13873 /// The base type of a class type. 13874 UPPC_BaseType, 13875 13876 /// The type of an arbitrary declaration. 13877 UPPC_DeclarationType, 13878 13879 /// The type of a data member. 13880 UPPC_DataMemberType, 13881 13882 /// The size of a bit-field. 13883 UPPC_BitFieldWidth, 13884 13885 /// The expression in a static assertion. 13886 UPPC_StaticAssertExpression, 13887 13888 /// The fixed underlying type of an enumeration. 13889 UPPC_FixedUnderlyingType, 13890 13891 /// The enumerator value. 13892 UPPC_EnumeratorValue, 13893 13894 /// A using declaration. 13895 UPPC_UsingDeclaration, 13896 13897 /// A friend declaration. 13898 UPPC_FriendDeclaration, 13899 13900 /// A declaration qualifier. 13901 UPPC_DeclarationQualifier, 13902 13903 /// An initializer. 13904 UPPC_Initializer, 13905 13906 /// A default argument. 13907 UPPC_DefaultArgument, 13908 13909 /// The type of a non-type template parameter. 13910 UPPC_NonTypeTemplateParameterType, 13911 13912 /// The type of an exception. 13913 UPPC_ExceptionType, 13914 13915 /// Explicit specialization. 13916 UPPC_ExplicitSpecialization, 13917 13918 /// Partial specialization. 13919 UPPC_PartialSpecialization, 13920 13921 /// Microsoft __if_exists. 13922 UPPC_IfExists, 13923 13924 /// Microsoft __if_not_exists. 13925 UPPC_IfNotExists, 13926 13927 /// Lambda expression. 13928 UPPC_Lambda, 13929 13930 /// Block expression. 13931 UPPC_Block, 13932 13933 /// A type constraint. 13934 UPPC_TypeConstraint, 13935 13936 // A requirement in a requires-expression. 13937 UPPC_Requirement, 13938 13939 // A requires-clause. 13940 UPPC_RequiresClause, 13941 }; 13942 13943 /// Diagnose unexpanded parameter packs. 13944 /// 13945 /// \param Loc The location at which we should emit the diagnostic. 13946 /// 13947 /// \param UPPC The context in which we are diagnosing unexpanded 13948 /// parameter packs. 13949 /// 13950 /// \param Unexpanded the set of unexpanded parameter packs. 13951 /// 13952 /// \returns true if an error occurred, false otherwise. 13953 bool DiagnoseUnexpandedParameterPacks( 13954 SourceLocation Loc, UnexpandedParameterPackContext UPPC, 13955 ArrayRef<UnexpandedParameterPack> Unexpanded); 13956 13957 /// If the given type contains an unexpanded parameter pack, 13958 /// diagnose the error. 13959 /// 13960 /// \param Loc The source location where a diagnostc should be emitted. 13961 /// 13962 /// \param T The type that is being checked for unexpanded parameter 13963 /// packs. 13964 /// 13965 /// \returns true if an error occurred, false otherwise. 13966 bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T, 13967 UnexpandedParameterPackContext UPPC); 13968 13969 /// If the given expression contains an unexpanded parameter 13970 /// pack, diagnose the error. 13971 /// 13972 /// \param E The expression that is being checked for unexpanded 13973 /// parameter packs. 13974 /// 13975 /// \returns true if an error occurred, false otherwise. 13976 bool DiagnoseUnexpandedParameterPack( 13977 Expr *E, UnexpandedParameterPackContext UPPC = UPPC_Expression); 13978 13979 /// If the given requirees-expression contains an unexpanded reference to one 13980 /// of its own parameter packs, diagnose the error. 13981 /// 13982 /// \param RE The requiress-expression that is being checked for unexpanded 13983 /// parameter packs. 13984 /// 13985 /// \returns true if an error occurred, false otherwise. 13986 bool DiagnoseUnexpandedParameterPackInRequiresExpr(RequiresExpr *RE); 13987 13988 /// If the given nested-name-specifier contains an unexpanded 13989 /// parameter pack, diagnose the error. 13990 /// 13991 /// \param SS The nested-name-specifier that is being checked for 13992 /// unexpanded parameter packs. 13993 /// 13994 /// \returns true if an error occurred, false otherwise. 13995 bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS, 13996 UnexpandedParameterPackContext UPPC); 13997 13998 /// If the given name contains an unexpanded parameter pack, 13999 /// diagnose the error. 14000 /// 14001 /// \param NameInfo The name (with source location information) that 14002 /// is being checked for unexpanded parameter packs. 14003 /// 14004 /// \returns true if an error occurred, false otherwise. 14005 bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo, 14006 UnexpandedParameterPackContext UPPC); 14007 14008 /// If the given template name contains an unexpanded parameter pack, 14009 /// diagnose the error. 14010 /// 14011 /// \param Loc The location of the template name. 14012 /// 14013 /// \param Template The template name that is being checked for unexpanded 14014 /// parameter packs. 14015 /// 14016 /// \returns true if an error occurred, false otherwise. 14017 bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, 14018 TemplateName Template, 14019 UnexpandedParameterPackContext UPPC); 14020 14021 /// If the given template argument contains an unexpanded parameter 14022 /// pack, diagnose the error. 14023 /// 14024 /// \param Arg The template argument that is being checked for unexpanded 14025 /// parameter packs. 14026 /// 14027 /// \returns true if an error occurred, false otherwise. 14028 bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg, 14029 UnexpandedParameterPackContext UPPC); 14030 14031 /// Collect the set of unexpanded parameter packs within the given 14032 /// template argument. 14033 /// 14034 /// \param Arg The template argument that will be traversed to find 14035 /// unexpanded parameter packs. 14036 void collectUnexpandedParameterPacks( 14037 TemplateArgument Arg, 14038 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 14039 14040 /// Collect the set of unexpanded parameter packs within the given 14041 /// template argument. 14042 /// 14043 /// \param Arg The template argument that will be traversed to find 14044 /// unexpanded parameter packs. 14045 void collectUnexpandedParameterPacks( 14046 TemplateArgumentLoc Arg, 14047 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 14048 14049 /// Collect the set of unexpanded parameter packs within the given 14050 /// type. 14051 /// 14052 /// \param T The type that will be traversed to find 14053 /// unexpanded parameter packs. 14054 void collectUnexpandedParameterPacks( 14055 QualType T, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 14056 14057 /// Collect the set of unexpanded parameter packs within the given 14058 /// type. 14059 /// 14060 /// \param TL The type that will be traversed to find 14061 /// unexpanded parameter packs. 14062 void collectUnexpandedParameterPacks( 14063 TypeLoc TL, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 14064 14065 /// Collect the set of unexpanded parameter packs within the given 14066 /// nested-name-specifier. 14067 /// 14068 /// \param NNS The nested-name-specifier that will be traversed to find 14069 /// unexpanded parameter packs. 14070 void collectUnexpandedParameterPacks( 14071 NestedNameSpecifierLoc NNS, 14072 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 14073 14074 /// Collect the set of unexpanded parameter packs within the given 14075 /// name. 14076 /// 14077 /// \param NameInfo The name that will be traversed to find 14078 /// unexpanded parameter packs. 14079 void collectUnexpandedParameterPacks( 14080 const DeclarationNameInfo &NameInfo, 14081 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 14082 14083 /// Collect the set of unexpanded parameter packs within the given 14084 /// expression. 14085 static void collectUnexpandedParameterPacks( 14086 Expr *E, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded); 14087 14088 /// Invoked when parsing a template argument followed by an 14089 /// ellipsis, which creates a pack expansion. 14090 /// 14091 /// \param Arg The template argument preceding the ellipsis, which 14092 /// may already be invalid. 14093 /// 14094 /// \param EllipsisLoc The location of the ellipsis. 14095 ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg, 14096 SourceLocation EllipsisLoc); 14097 14098 /// Invoked when parsing a type followed by an ellipsis, which 14099 /// creates a pack expansion. 14100 /// 14101 /// \param Type The type preceding the ellipsis, which will become 14102 /// the pattern of the pack expansion. 14103 /// 14104 /// \param EllipsisLoc The location of the ellipsis. 14105 TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc); 14106 14107 /// Construct a pack expansion type from the pattern of the pack 14108 /// expansion. 14109 TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern, 14110 SourceLocation EllipsisLoc, 14111 std::optional<unsigned> NumExpansions); 14112 14113 /// Construct a pack expansion type from the pattern of the pack 14114 /// expansion. 14115 QualType CheckPackExpansion(QualType Pattern, SourceRange PatternRange, 14116 SourceLocation EllipsisLoc, 14117 std::optional<unsigned> NumExpansions); 14118 14119 /// Invoked when parsing an expression followed by an ellipsis, which 14120 /// creates a pack expansion. 14121 /// 14122 /// \param Pattern The expression preceding the ellipsis, which will become 14123 /// the pattern of the pack expansion. 14124 /// 14125 /// \param EllipsisLoc The location of the ellipsis. 14126 ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc); 14127 14128 /// Invoked when parsing an expression followed by an ellipsis, which 14129 /// creates a pack expansion. 14130 /// 14131 /// \param Pattern The expression preceding the ellipsis, which will become 14132 /// the pattern of the pack expansion. 14133 /// 14134 /// \param EllipsisLoc The location of the ellipsis. 14135 ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc, 14136 std::optional<unsigned> NumExpansions); 14137 14138 /// Determine whether we could expand a pack expansion with the 14139 /// given set of parameter packs into separate arguments by repeatedly 14140 /// transforming the pattern. 14141 /// 14142 /// \param EllipsisLoc The location of the ellipsis that identifies the 14143 /// pack expansion. 14144 /// 14145 /// \param PatternRange The source range that covers the entire pattern of 14146 /// the pack expansion. 14147 /// 14148 /// \param Unexpanded The set of unexpanded parameter packs within the 14149 /// pattern. 14150 /// 14151 /// \param ShouldExpand Will be set to \c true if the transformer should 14152 /// expand the corresponding pack expansions into separate arguments. When 14153 /// set, \c NumExpansions must also be set. 14154 /// 14155 /// \param RetainExpansion Whether the caller should add an unexpanded 14156 /// pack expansion after all of the expanded arguments. This is used 14157 /// when extending explicitly-specified template argument packs per 14158 /// C++0x [temp.arg.explicit]p9. 14159 /// 14160 /// \param NumExpansions The number of separate arguments that will be in 14161 /// the expanded form of the corresponding pack expansion. This is both an 14162 /// input and an output parameter, which can be set by the caller if the 14163 /// number of expansions is known a priori (e.g., due to a prior substitution) 14164 /// and will be set by the callee when the number of expansions is known. 14165 /// The callee must set this value when \c ShouldExpand is \c true; it may 14166 /// set this value in other cases. 14167 /// 14168 /// \returns true if an error occurred (e.g., because the parameter packs 14169 /// are to be instantiated with arguments of different lengths), false 14170 /// otherwise. If false, \c ShouldExpand (and possibly \c NumExpansions) 14171 /// must be set. 14172 bool CheckParameterPacksForExpansion( 14173 SourceLocation EllipsisLoc, SourceRange PatternRange, 14174 ArrayRef<UnexpandedParameterPack> Unexpanded, 14175 const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, 14176 bool &RetainExpansion, std::optional<unsigned> &NumExpansions); 14177 14178 /// Determine the number of arguments in the given pack expansion 14179 /// type. 14180 /// 14181 /// This routine assumes that the number of arguments in the expansion is 14182 /// consistent across all of the unexpanded parameter packs in its pattern. 14183 /// 14184 /// Returns an empty Optional if the type can't be expanded. 14185 std::optional<unsigned> getNumArgumentsInExpansion( 14186 QualType T, const MultiLevelTemplateArgumentList &TemplateArgs); 14187 14188 /// Determine whether the given declarator contains any unexpanded 14189 /// parameter packs. 14190 /// 14191 /// This routine is used by the parser to disambiguate function declarators 14192 /// with an ellipsis prior to the ')', e.g., 14193 /// 14194 /// \code 14195 /// void f(T...); 14196 /// \endcode 14197 /// 14198 /// To determine whether we have an (unnamed) function parameter pack or 14199 /// a variadic function. 14200 /// 14201 /// \returns true if the declarator contains any unexpanded parameter packs, 14202 /// false otherwise. 14203 bool containsUnexpandedParameterPacks(Declarator &D); 14204 14205 /// Returns the pattern of the pack expansion for a template argument. 14206 /// 14207 /// \param OrigLoc The template argument to expand. 14208 /// 14209 /// \param Ellipsis Will be set to the location of the ellipsis. 14210 /// 14211 /// \param NumExpansions Will be set to the number of expansions that will 14212 /// be generated from this pack expansion, if known a priori. 14213 TemplateArgumentLoc getTemplateArgumentPackExpansionPattern( 14214 TemplateArgumentLoc OrigLoc, SourceLocation &Ellipsis, 14215 std::optional<unsigned> &NumExpansions) const; 14216 14217 /// Given a template argument that contains an unexpanded parameter pack, but 14218 /// which has already been substituted, attempt to determine the number of 14219 /// elements that will be produced once this argument is fully-expanded. 14220 /// 14221 /// This is intended for use when transforming 'sizeof...(Arg)' in order to 14222 /// avoid actually expanding the pack where possible. 14223 std::optional<unsigned> getFullyPackExpandedSize(TemplateArgument Arg); 14224 14225 /// Called when an expression computing the size of a parameter pack 14226 /// is parsed. 14227 /// 14228 /// \code 14229 /// template<typename ...Types> struct count { 14230 /// static const unsigned value = sizeof...(Types); 14231 /// }; 14232 /// \endcode 14233 /// 14234 // 14235 /// \param OpLoc The location of the "sizeof" keyword. 14236 /// \param Name The name of the parameter pack whose size will be determined. 14237 /// \param NameLoc The source location of the name of the parameter pack. 14238 /// \param RParenLoc The location of the closing parentheses. 14239 ExprResult ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, 14240 IdentifierInfo &Name, 14241 SourceLocation NameLoc, 14242 SourceLocation RParenLoc); 14243 14244 ExprResult ActOnPackIndexingExpr(Scope *S, Expr *PackExpression, 14245 SourceLocation EllipsisLoc, 14246 SourceLocation LSquareLoc, Expr *IndexExpr, 14247 SourceLocation RSquareLoc); 14248 14249 ExprResult BuildPackIndexingExpr(Expr *PackExpression, 14250 SourceLocation EllipsisLoc, Expr *IndexExpr, 14251 SourceLocation RSquareLoc, 14252 ArrayRef<Expr *> ExpandedExprs = {}, 14253 bool EmptyPack = false); 14254 14255 /// Handle a C++1z fold-expression: ( expr op ... op expr ). 14256 ExprResult ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, 14257 tok::TokenKind Operator, 14258 SourceLocation EllipsisLoc, Expr *RHS, 14259 SourceLocation RParenLoc); 14260 ExprResult BuildCXXFoldExpr(UnresolvedLookupExpr *Callee, 14261 SourceLocation LParenLoc, Expr *LHS, 14262 BinaryOperatorKind Operator, 14263 SourceLocation EllipsisLoc, Expr *RHS, 14264 SourceLocation RParenLoc, 14265 std::optional<unsigned> NumExpansions); 14266 ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc, 14267 BinaryOperatorKind Operator); 14268 14269 ///@} 14270 14271 // 14272 // 14273 // ------------------------------------------------------------------------- 14274 // 14275 // 14276 14277 /// \name Constraints and Concepts 14278 /// Implementations are in SemaConcept.cpp 14279 ///@{ 14280 14281 public: PushSatisfactionStackEntry(const NamedDecl * D,const llvm::FoldingSetNodeID & ID)14282 void PushSatisfactionStackEntry(const NamedDecl *D, 14283 const llvm::FoldingSetNodeID &ID) { 14284 const NamedDecl *Can = cast<NamedDecl>(D->getCanonicalDecl()); 14285 SatisfactionStack.emplace_back(Can, ID); 14286 } 14287 PopSatisfactionStackEntry()14288 void PopSatisfactionStackEntry() { SatisfactionStack.pop_back(); } 14289 SatisfactionStackContains(const NamedDecl * D,const llvm::FoldingSetNodeID & ID)14290 bool SatisfactionStackContains(const NamedDecl *D, 14291 const llvm::FoldingSetNodeID &ID) const { 14292 const NamedDecl *Can = cast<NamedDecl>(D->getCanonicalDecl()); 14293 return llvm::find(SatisfactionStack, SatisfactionStackEntryTy{Can, ID}) != 14294 SatisfactionStack.end(); 14295 } 14296 14297 using SatisfactionStackEntryTy = 14298 std::pair<const NamedDecl *, llvm::FoldingSetNodeID>; 14299 14300 // Resets the current SatisfactionStack for cases where we are instantiating 14301 // constraints as a 'side effect' of normal instantiation in a way that is not 14302 // indicative of recursive definition. 14303 class SatisfactionStackResetRAII { 14304 llvm::SmallVector<SatisfactionStackEntryTy, 10> BackupSatisfactionStack; 14305 Sema &SemaRef; 14306 14307 public: SatisfactionStackResetRAII(Sema & S)14308 SatisfactionStackResetRAII(Sema &S) : SemaRef(S) { 14309 SemaRef.SwapSatisfactionStack(BackupSatisfactionStack); 14310 } 14311 ~SatisfactionStackResetRAII()14312 ~SatisfactionStackResetRAII() { 14313 SemaRef.SwapSatisfactionStack(BackupSatisfactionStack); 14314 } 14315 }; 14316 SwapSatisfactionStack(llvm::SmallVectorImpl<SatisfactionStackEntryTy> & NewSS)14317 void SwapSatisfactionStack( 14318 llvm::SmallVectorImpl<SatisfactionStackEntryTy> &NewSS) { 14319 SatisfactionStack.swap(NewSS); 14320 } 14321 14322 /// Check whether the given expression is a valid constraint expression. 14323 /// A diagnostic is emitted if it is not, false is returned, and 14324 /// PossibleNonPrimary will be set to true if the failure might be due to a 14325 /// non-primary expression being used as an atomic constraint. 14326 bool CheckConstraintExpression(const Expr *CE, Token NextToken = Token(), 14327 bool *PossibleNonPrimary = nullptr, 14328 bool IsTrailingRequiresClause = false); 14329 14330 /// \brief Check whether the given list of constraint expressions are 14331 /// satisfied (as if in a 'conjunction') given template arguments. 14332 /// \param Template the template-like entity that triggered the constraints 14333 /// check (either a concept or a constrained entity). 14334 /// \param ConstraintExprs a list of constraint expressions, treated as if 14335 /// they were 'AND'ed together. 14336 /// \param TemplateArgLists the list of template arguments to substitute into 14337 /// the constraint expression. 14338 /// \param TemplateIDRange The source range of the template id that 14339 /// caused the constraints check. 14340 /// \param Satisfaction if true is returned, will contain details of the 14341 /// satisfaction, with enough information to diagnose an unsatisfied 14342 /// expression. 14343 /// \returns true if an error occurred and satisfaction could not be checked, 14344 /// false otherwise. CheckConstraintSatisfaction(const NamedDecl * Template,ArrayRef<const Expr * > ConstraintExprs,const MultiLevelTemplateArgumentList & TemplateArgLists,SourceRange TemplateIDRange,ConstraintSatisfaction & Satisfaction)14345 bool CheckConstraintSatisfaction( 14346 const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs, 14347 const MultiLevelTemplateArgumentList &TemplateArgLists, 14348 SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction) { 14349 llvm::SmallVector<Expr *, 4> Converted; 14350 return CheckConstraintSatisfaction(Template, ConstraintExprs, Converted, 14351 TemplateArgLists, TemplateIDRange, 14352 Satisfaction); 14353 } 14354 14355 /// \brief Check whether the given list of constraint expressions are 14356 /// satisfied (as if in a 'conjunction') given template arguments. 14357 /// Additionally, takes an empty list of Expressions which is populated with 14358 /// the instantiated versions of the ConstraintExprs. 14359 /// \param Template the template-like entity that triggered the constraints 14360 /// check (either a concept or a constrained entity). 14361 /// \param ConstraintExprs a list of constraint expressions, treated as if 14362 /// they were 'AND'ed together. 14363 /// \param ConvertedConstraints a out parameter that will get populated with 14364 /// the instantiated version of the ConstraintExprs if we successfully checked 14365 /// satisfaction. 14366 /// \param TemplateArgList the multi-level list of template arguments to 14367 /// substitute into the constraint expression. This should be relative to the 14368 /// top-level (hence multi-level), since we need to instantiate fully at the 14369 /// time of checking. 14370 /// \param TemplateIDRange The source range of the template id that 14371 /// caused the constraints check. 14372 /// \param Satisfaction if true is returned, will contain details of the 14373 /// satisfaction, with enough information to diagnose an unsatisfied 14374 /// expression. 14375 /// \returns true if an error occurred and satisfaction could not be checked, 14376 /// false otherwise. 14377 bool CheckConstraintSatisfaction( 14378 const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs, 14379 llvm::SmallVectorImpl<Expr *> &ConvertedConstraints, 14380 const MultiLevelTemplateArgumentList &TemplateArgList, 14381 SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction); 14382 14383 /// \brief Check whether the given non-dependent constraint expression is 14384 /// satisfied. Returns false and updates Satisfaction with the satisfaction 14385 /// verdict if successful, emits a diagnostic and returns true if an error 14386 /// occurred and satisfaction could not be determined. 14387 /// 14388 /// \returns true if an error occurred, false otherwise. 14389 bool CheckConstraintSatisfaction(const Expr *ConstraintExpr, 14390 ConstraintSatisfaction &Satisfaction); 14391 14392 /// Check whether the given function decl's trailing requires clause is 14393 /// satisfied, if any. Returns false and updates Satisfaction with the 14394 /// satisfaction verdict if successful, emits a diagnostic and returns true if 14395 /// an error occurred and satisfaction could not be determined. 14396 /// 14397 /// \returns true if an error occurred, false otherwise. 14398 bool CheckFunctionConstraints(const FunctionDecl *FD, 14399 ConstraintSatisfaction &Satisfaction, 14400 SourceLocation UsageLoc = SourceLocation(), 14401 bool ForOverloadResolution = false); 14402 14403 // Calculates whether two constraint expressions are equal irrespective of a 14404 // difference in 'depth'. This takes a pair of optional 'NamedDecl's 'Old' and 14405 // 'New', which are the "source" of the constraint, since this is necessary 14406 // for figuring out the relative 'depth' of the constraint. The depth of the 14407 // 'primary template' and the 'instantiated from' templates aren't necessarily 14408 // the same, such as a case when one is a 'friend' defined in a class. 14409 bool AreConstraintExpressionsEqual(const NamedDecl *Old, 14410 const Expr *OldConstr, 14411 const TemplateCompareNewDeclInfo &New, 14412 const Expr *NewConstr); 14413 14414 // Calculates whether the friend function depends on an enclosing template for 14415 // the purposes of [temp.friend] p9. 14416 bool FriendConstraintsDependOnEnclosingTemplate(const FunctionDecl *FD); 14417 14418 /// \brief Ensure that the given template arguments satisfy the constraints 14419 /// associated with the given template, emitting a diagnostic if they do not. 14420 /// 14421 /// \param Template The template to which the template arguments are being 14422 /// provided. 14423 /// 14424 /// \param TemplateArgs The converted, canonicalized template arguments. 14425 /// 14426 /// \param TemplateIDRange The source range of the template id that 14427 /// caused the constraints check. 14428 /// 14429 /// \returns true if the constrains are not satisfied or could not be checked 14430 /// for satisfaction, false if the constraints are satisfied. 14431 bool EnsureTemplateArgumentListConstraints( 14432 TemplateDecl *Template, 14433 const MultiLevelTemplateArgumentList &TemplateArgs, 14434 SourceRange TemplateIDRange); 14435 14436 bool CheckInstantiatedFunctionTemplateConstraints( 14437 SourceLocation PointOfInstantiation, FunctionDecl *Decl, 14438 ArrayRef<TemplateArgument> TemplateArgs, 14439 ConstraintSatisfaction &Satisfaction); 14440 14441 /// \brief Emit diagnostics explaining why a constraint expression was deemed 14442 /// unsatisfied. 14443 /// \param First whether this is the first time an unsatisfied constraint is 14444 /// diagnosed for this error. 14445 void DiagnoseUnsatisfiedConstraint(const ConstraintSatisfaction &Satisfaction, 14446 bool First = true); 14447 14448 /// \brief Emit diagnostics explaining why a constraint expression was deemed 14449 /// unsatisfied. 14450 void 14451 DiagnoseUnsatisfiedConstraint(const ASTConstraintSatisfaction &Satisfaction, 14452 bool First = true); 14453 14454 const NormalizedConstraint *getNormalizedAssociatedConstraints( 14455 NamedDecl *ConstrainedDecl, ArrayRef<const Expr *> AssociatedConstraints); 14456 14457 /// \brief Check whether the given declaration's associated constraints are 14458 /// at least as constrained than another declaration's according to the 14459 /// partial ordering of constraints. 14460 /// 14461 /// \param Result If no error occurred, receives the result of true if D1 is 14462 /// at least constrained than D2, and false otherwise. 14463 /// 14464 /// \returns true if an error occurred, false otherwise. 14465 bool IsAtLeastAsConstrained(NamedDecl *D1, MutableArrayRef<const Expr *> AC1, 14466 NamedDecl *D2, MutableArrayRef<const Expr *> AC2, 14467 bool &Result); 14468 14469 /// If D1 was not at least as constrained as D2, but would've been if a pair 14470 /// of atomic constraints involved had been declared in a concept and not 14471 /// repeated in two separate places in code. 14472 /// \returns true if such a diagnostic was emitted, false otherwise. 14473 bool MaybeEmitAmbiguousAtomicConstraintsDiagnostic( 14474 NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2, 14475 ArrayRef<const Expr *> AC2); 14476 14477 private: 14478 /// Caches pairs of template-like decls whose associated constraints were 14479 /// checked for subsumption and whether or not the first's constraints did in 14480 /// fact subsume the second's. 14481 llvm::DenseMap<std::pair<NamedDecl *, NamedDecl *>, bool> SubsumptionCache; 14482 /// Caches the normalized associated constraints of declarations (concepts or 14483 /// constrained declarations). If an error occurred while normalizing the 14484 /// associated constraints of the template or concept, nullptr will be cached 14485 /// here. 14486 llvm::DenseMap<NamedDecl *, NormalizedConstraint *> NormalizationCache; 14487 14488 llvm::ContextualFoldingSet<ConstraintSatisfaction, const ASTContext &> 14489 SatisfactionCache; 14490 14491 // The current stack of constraint satisfactions, so we can exit-early. 14492 llvm::SmallVector<SatisfactionStackEntryTy, 10> SatisfactionStack; 14493 14494 /// Introduce the instantiated captures of the lambda into the local 14495 /// instantiation scope. 14496 bool addInstantiatedCapturesToScope( 14497 FunctionDecl *Function, const FunctionDecl *PatternDecl, 14498 LocalInstantiationScope &Scope, 14499 const MultiLevelTemplateArgumentList &TemplateArgs); 14500 14501 /// Used by SetupConstraintCheckingTemplateArgumentsAndScope to recursively(in 14502 /// the case of lambdas) set up the LocalInstantiationScope of the current 14503 /// function. 14504 bool 14505 SetupConstraintScope(FunctionDecl *FD, 14506 std::optional<ArrayRef<TemplateArgument>> TemplateArgs, 14507 const MultiLevelTemplateArgumentList &MLTAL, 14508 LocalInstantiationScope &Scope); 14509 14510 /// Used during constraint checking, sets up the constraint template argument 14511 /// lists, and calls SetupConstraintScope to set up the 14512 /// LocalInstantiationScope to have the proper set of ParVarDecls configured. 14513 std::optional<MultiLevelTemplateArgumentList> 14514 SetupConstraintCheckingTemplateArgumentsAndScope( 14515 FunctionDecl *FD, std::optional<ArrayRef<TemplateArgument>> TemplateArgs, 14516 LocalInstantiationScope &Scope); 14517 14518 ///@} 14519 14520 // 14521 // 14522 // ------------------------------------------------------------------------- 14523 // 14524 // 14525 14526 /// \name Types 14527 /// Implementations are in SemaType.cpp 14528 ///@{ 14529 14530 public: 14531 /// A mapping that describes the nullability we've seen in each header file. 14532 FileNullabilityMap NullabilityMap; 14533 getPrintable(int I)14534 static int getPrintable(int I) { return I; } getPrintable(unsigned I)14535 static unsigned getPrintable(unsigned I) { return I; } getPrintable(bool B)14536 static bool getPrintable(bool B) { return B; } getPrintable(const char * S)14537 static const char *getPrintable(const char *S) { return S; } getPrintable(StringRef S)14538 static StringRef getPrintable(StringRef S) { return S; } getPrintable(const std::string & S)14539 static const std::string &getPrintable(const std::string &S) { return S; } getPrintable(const IdentifierInfo * II)14540 static const IdentifierInfo *getPrintable(const IdentifierInfo *II) { 14541 return II; 14542 } getPrintable(DeclarationName N)14543 static DeclarationName getPrintable(DeclarationName N) { return N; } getPrintable(QualType T)14544 static QualType getPrintable(QualType T) { return T; } getPrintable(SourceRange R)14545 static SourceRange getPrintable(SourceRange R) { return R; } getPrintable(SourceLocation L)14546 static SourceRange getPrintable(SourceLocation L) { return L; } getPrintable(const Expr * E)14547 static SourceRange getPrintable(const Expr *E) { return E->getSourceRange(); } getPrintable(TypeLoc TL)14548 static SourceRange getPrintable(TypeLoc TL) { return TL.getSourceRange(); } 14549 14550 enum class CompleteTypeKind { 14551 /// Apply the normal rules for complete types. In particular, 14552 /// treat all sizeless types as incomplete. 14553 Normal, 14554 14555 /// Relax the normal rules for complete types so that they include 14556 /// sizeless built-in types. 14557 AcceptSizeless, 14558 14559 // FIXME: Eventually we should flip the default to Normal and opt in 14560 // to AcceptSizeless rather than opt out of it. 14561 Default = AcceptSizeless 14562 }; 14563 14564 QualType BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, 14565 const DeclSpec *DS = nullptr); 14566 QualType BuildQualifiedType(QualType T, SourceLocation Loc, unsigned CVRA, 14567 const DeclSpec *DS = nullptr); 14568 14569 /// Build a pointer type. 14570 /// 14571 /// \param T The type to which we'll be building a pointer. 14572 /// 14573 /// \param Loc The location of the entity whose type involves this 14574 /// pointer type or, if there is no such entity, the location of the 14575 /// type that will have pointer type. 14576 /// 14577 /// \param Entity The name of the entity that involves the pointer 14578 /// type, if known. 14579 /// 14580 /// \returns A suitable pointer type, if there are no 14581 /// errors. Otherwise, returns a NULL type. 14582 QualType BuildPointerType(QualType T, SourceLocation Loc, 14583 DeclarationName Entity); 14584 14585 /// Build a reference type. 14586 /// 14587 /// \param T The type to which we'll be building a reference. 14588 /// 14589 /// \param Loc The location of the entity whose type involves this 14590 /// reference type or, if there is no such entity, the location of the 14591 /// type that will have reference type. 14592 /// 14593 /// \param Entity The name of the entity that involves the reference 14594 /// type, if known. 14595 /// 14596 /// \returns A suitable reference type, if there are no 14597 /// errors. Otherwise, returns a NULL type. 14598 QualType BuildReferenceType(QualType T, bool LValueRef, SourceLocation Loc, 14599 DeclarationName Entity); 14600 14601 /// Build an array type. 14602 /// 14603 /// \param T The type of each element in the array. 14604 /// 14605 /// \param ASM C99 array size modifier (e.g., '*', 'static'). 14606 /// 14607 /// \param ArraySize Expression describing the size of the array. 14608 /// 14609 /// \param Brackets The range from the opening '[' to the closing ']'. 14610 /// 14611 /// \param Entity The name of the entity that involves the array 14612 /// type, if known. 14613 /// 14614 /// \returns A suitable array type, if there are no errors. Otherwise, 14615 /// returns a NULL type. 14616 QualType BuildArrayType(QualType T, ArraySizeModifier ASM, Expr *ArraySize, 14617 unsigned Quals, SourceRange Brackets, 14618 DeclarationName Entity); 14619 QualType BuildVectorType(QualType T, Expr *VecSize, SourceLocation AttrLoc); 14620 14621 /// Build an ext-vector type. 14622 /// 14623 /// Run the required checks for the extended vector type. 14624 QualType BuildExtVectorType(QualType T, Expr *ArraySize, 14625 SourceLocation AttrLoc); 14626 QualType BuildMatrixType(QualType T, Expr *NumRows, Expr *NumColumns, 14627 SourceLocation AttrLoc); 14628 14629 QualType BuildCountAttributedArrayOrPointerType(QualType WrappedTy, 14630 Expr *CountExpr, 14631 bool CountInBytes, 14632 bool OrNull); 14633 14634 /// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an 14635 /// expression is uninstantiated. If instantiated it will apply the 14636 /// appropriate address space to the type. This function allows dependent 14637 /// template variables to be used in conjunction with the address_space 14638 /// attribute 14639 QualType BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace, 14640 SourceLocation AttrLoc); 14641 14642 /// Same as above, but constructs the AddressSpace index if not provided. 14643 QualType BuildAddressSpaceAttr(QualType &T, Expr *AddrSpace, 14644 SourceLocation AttrLoc); 14645 14646 bool CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc); 14647 14648 bool CheckFunctionReturnType(QualType T, SourceLocation Loc); 14649 14650 /// Build a function type. 14651 /// 14652 /// This routine checks the function type according to C++ rules and 14653 /// under the assumption that the result type and parameter types have 14654 /// just been instantiated from a template. It therefore duplicates 14655 /// some of the behavior of GetTypeForDeclarator, but in a much 14656 /// simpler form that is only suitable for this narrow use case. 14657 /// 14658 /// \param T The return type of the function. 14659 /// 14660 /// \param ParamTypes The parameter types of the function. This array 14661 /// will be modified to account for adjustments to the types of the 14662 /// function parameters. 14663 /// 14664 /// \param Loc The location of the entity whose type involves this 14665 /// function type or, if there is no such entity, the location of the 14666 /// type that will have function type. 14667 /// 14668 /// \param Entity The name of the entity that involves the function 14669 /// type, if known. 14670 /// 14671 /// \param EPI Extra information about the function type. Usually this will 14672 /// be taken from an existing function with the same prototype. 14673 /// 14674 /// \returns A suitable function type, if there are no errors. The 14675 /// unqualified type will always be a FunctionProtoType. 14676 /// Otherwise, returns a NULL type. 14677 QualType BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, 14678 SourceLocation Loc, DeclarationName Entity, 14679 const FunctionProtoType::ExtProtoInfo &EPI); 14680 14681 /// Build a member pointer type \c T Class::*. 14682 /// 14683 /// \param T the type to which the member pointer refers. 14684 /// \param Class the class type into which the member pointer points. 14685 /// \param Loc the location where this type begins 14686 /// \param Entity the name of the entity that will have this member pointer 14687 /// type 14688 /// 14689 /// \returns a member pointer type, if successful, or a NULL type if there was 14690 /// an error. 14691 QualType BuildMemberPointerType(QualType T, QualType Class, 14692 SourceLocation Loc, DeclarationName Entity); 14693 14694 /// Build a block pointer type. 14695 /// 14696 /// \param T The type to which we'll be building a block pointer. 14697 /// 14698 /// \param Loc The source location, used for diagnostics. 14699 /// 14700 /// \param Entity The name of the entity that involves the block pointer 14701 /// type, if known. 14702 /// 14703 /// \returns A suitable block pointer type, if there are no 14704 /// errors. Otherwise, returns a NULL type. 14705 QualType BuildBlockPointerType(QualType T, SourceLocation Loc, 14706 DeclarationName Entity); 14707 14708 /// Build a paren type including \p T. 14709 QualType BuildParenType(QualType T); 14710 QualType BuildAtomicType(QualType T, SourceLocation Loc); 14711 14712 /// Build a Read-only Pipe type. 14713 /// 14714 /// \param T The type to which we'll be building a Pipe. 14715 /// 14716 /// \param Loc We do not use it for now. 14717 /// 14718 /// \returns A suitable pipe type, if there are no errors. Otherwise, returns 14719 /// a NULL type. 14720 QualType BuildReadPipeType(QualType T, SourceLocation Loc); 14721 14722 /// Build a Write-only Pipe type. 14723 /// 14724 /// \param T The type to which we'll be building a Pipe. 14725 /// 14726 /// \param Loc We do not use it for now. 14727 /// 14728 /// \returns A suitable pipe type, if there are no errors. Otherwise, returns 14729 /// a NULL type. 14730 QualType BuildWritePipeType(QualType T, SourceLocation Loc); 14731 14732 /// Build a bit-precise integer type. 14733 /// 14734 /// \param IsUnsigned Boolean representing the signedness of the type. 14735 /// 14736 /// \param BitWidth Size of this int type in bits, or an expression 14737 /// representing that. 14738 /// 14739 /// \param Loc Location of the keyword. 14740 QualType BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc); 14741 14742 /// GetTypeForDeclarator - Convert the type for the specified 14743 /// declarator to Type instances. 14744 /// 14745 /// The result of this call will never be null, but the associated 14746 /// type may be a null type if there's an unrecoverable error. 14747 TypeSourceInfo *GetTypeForDeclarator(Declarator &D); 14748 TypeSourceInfo *GetTypeForDeclaratorCast(Declarator &D, QualType FromTy); 14749 14750 /// Package the given type and TSI into a ParsedType. 14751 ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo); 14752 static QualType GetTypeFromParser(ParsedType Ty, 14753 TypeSourceInfo **TInfo = nullptr); 14754 14755 TypeResult ActOnTypeName(Declarator &D); 14756 14757 // Check whether the size of array element of type \p EltTy is a multiple of 14758 // its alignment and return false if it isn't. 14759 bool checkArrayElementAlignment(QualType EltTy, SourceLocation Loc); 14760 14761 void 14762 diagnoseIgnoredQualifiers(unsigned DiagID, unsigned Quals, 14763 SourceLocation FallbackLoc, 14764 SourceLocation ConstQualLoc = SourceLocation(), 14765 SourceLocation VolatileQualLoc = SourceLocation(), 14766 SourceLocation RestrictQualLoc = SourceLocation(), 14767 SourceLocation AtomicQualLoc = SourceLocation(), 14768 SourceLocation UnalignedQualLoc = SourceLocation()); 14769 14770 /// Retrieve the keyword associated 14771 IdentifierInfo *getNullabilityKeyword(NullabilityKind nullability); 14772 14773 /// Adjust the calling convention of a method to be the ABI default if it 14774 /// wasn't specified explicitly. This handles method types formed from 14775 /// function type typedefs and typename template arguments. 14776 void adjustMemberFunctionCC(QualType &T, bool HasThisPointer, 14777 bool IsCtorOrDtor, SourceLocation Loc); 14778 14779 // Check if there is an explicit attribute, but only look through parens. 14780 // The intent is to look for an attribute on the current declarator, but not 14781 // one that came from a typedef. 14782 bool hasExplicitCallingConv(QualType T); 14783 14784 /// Check whether a nullability type specifier can be added to the given 14785 /// type through some means not written in source (e.g. API notes). 14786 /// 14787 /// \param Type The type to which the nullability specifier will be 14788 /// added. On success, this type will be updated appropriately. 14789 /// 14790 /// \param Nullability The nullability specifier to add. 14791 /// 14792 /// \param DiagLoc The location to use for diagnostics. 14793 /// 14794 /// \param AllowArrayTypes Whether to accept nullability specifiers on an 14795 /// array type (e.g., because it will decay to a pointer). 14796 /// 14797 /// \param OverrideExisting Whether to override an existing, locally-specified 14798 /// nullability specifier rather than complaining about the conflict. 14799 /// 14800 /// \returns true if nullability cannot be applied, false otherwise. 14801 bool CheckImplicitNullabilityTypeSpecifier(QualType &Type, 14802 NullabilityKind Nullability, 14803 SourceLocation DiagLoc, 14804 bool AllowArrayTypes, 14805 bool OverrideExisting); 14806 14807 /// Get the type of expression E, triggering instantiation to complete the 14808 /// type if necessary -- that is, if the expression refers to a templated 14809 /// static data member of incomplete array type. 14810 /// 14811 /// May still return an incomplete type if instantiation was not possible or 14812 /// if the type is incomplete for a different reason. Use 14813 /// RequireCompleteExprType instead if a diagnostic is expected for an 14814 /// incomplete expression type. 14815 QualType getCompletedType(Expr *E); 14816 14817 void completeExprArrayBound(Expr *E); 14818 14819 /// Ensure that the type of the given expression is complete. 14820 /// 14821 /// This routine checks whether the expression \p E has a complete type. If 14822 /// the expression refers to an instantiable construct, that instantiation is 14823 /// performed as needed to complete its type. Furthermore 14824 /// Sema::RequireCompleteType is called for the expression's type (or in the 14825 /// case of a reference type, the referred-to type). 14826 /// 14827 /// \param E The expression whose type is required to be complete. 14828 /// \param Kind Selects which completeness rules should be applied. 14829 /// \param Diagnoser The object that will emit a diagnostic if the type is 14830 /// incomplete. 14831 /// 14832 /// \returns \c true if the type of \p E is incomplete and diagnosed, \c false 14833 /// otherwise. 14834 bool RequireCompleteExprType(Expr *E, CompleteTypeKind Kind, 14835 TypeDiagnoser &Diagnoser); 14836 bool RequireCompleteExprType(Expr *E, unsigned DiagID); 14837 14838 template <typename... Ts> RequireCompleteExprType(Expr * E,unsigned DiagID,const Ts &...Args)14839 bool RequireCompleteExprType(Expr *E, unsigned DiagID, const Ts &...Args) { 14840 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 14841 return RequireCompleteExprType(E, CompleteTypeKind::Default, Diagnoser); 14842 } 14843 14844 /// Retrieve a version of the type 'T' that is elaborated by Keyword, 14845 /// qualified by the nested-name-specifier contained in SS, and that is 14846 /// (re)declared by OwnedTagDecl, which is nullptr if this is not a 14847 /// (re)declaration. 14848 QualType getElaboratedType(ElaboratedTypeKeyword Keyword, 14849 const CXXScopeSpec &SS, QualType T, 14850 TagDecl *OwnedTagDecl = nullptr); 14851 14852 // Returns the underlying type of a decltype with the given expression. 14853 QualType getDecltypeForExpr(Expr *E); 14854 14855 QualType BuildTypeofExprType(Expr *E, TypeOfKind Kind); 14856 /// If AsUnevaluated is false, E is treated as though it were an evaluated 14857 /// context, such as when building a type for decltype(auto). 14858 QualType BuildDecltypeType(Expr *E, bool AsUnevaluated = true); 14859 14860 QualType ActOnPackIndexingType(QualType Pattern, Expr *IndexExpr, 14861 SourceLocation Loc, 14862 SourceLocation EllipsisLoc); 14863 QualType BuildPackIndexingType(QualType Pattern, Expr *IndexExpr, 14864 SourceLocation Loc, SourceLocation EllipsisLoc, 14865 bool FullySubstituted = false, 14866 ArrayRef<QualType> Expansions = {}); 14867 14868 using UTTKind = UnaryTransformType::UTTKind; 14869 QualType BuildUnaryTransformType(QualType BaseType, UTTKind UKind, 14870 SourceLocation Loc); 14871 QualType BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc); 14872 QualType BuiltinAddPointer(QualType BaseType, SourceLocation Loc); 14873 QualType BuiltinRemovePointer(QualType BaseType, SourceLocation Loc); 14874 QualType BuiltinDecay(QualType BaseType, SourceLocation Loc); 14875 QualType BuiltinAddReference(QualType BaseType, UTTKind UKind, 14876 SourceLocation Loc); 14877 QualType BuiltinRemoveExtent(QualType BaseType, UTTKind UKind, 14878 SourceLocation Loc); 14879 QualType BuiltinRemoveReference(QualType BaseType, UTTKind UKind, 14880 SourceLocation Loc); 14881 QualType BuiltinChangeCVRQualifiers(QualType BaseType, UTTKind UKind, 14882 SourceLocation Loc); 14883 QualType BuiltinChangeSignedness(QualType BaseType, UTTKind UKind, 14884 SourceLocation Loc); 14885 14886 /// Ensure that the type T is a literal type. 14887 /// 14888 /// This routine checks whether the type @p T is a literal type. If @p T is an 14889 /// incomplete type, an attempt is made to complete it. If @p T is a literal 14890 /// type, or @p AllowIncompleteType is true and @p T is an incomplete type, 14891 /// returns false. Otherwise, this routine issues the diagnostic @p PD (giving 14892 /// it the type @p T), along with notes explaining why the type is not a 14893 /// literal type, and returns true. 14894 /// 14895 /// @param Loc The location in the source that the non-literal type 14896 /// diagnostic should refer to. 14897 /// 14898 /// @param T The type that this routine is examining for literalness. 14899 /// 14900 /// @param Diagnoser Emits a diagnostic if T is not a literal type. 14901 /// 14902 /// @returns @c true if @p T is not a literal type and a diagnostic was 14903 /// emitted, @c false otherwise. 14904 bool RequireLiteralType(SourceLocation Loc, QualType T, 14905 TypeDiagnoser &Diagnoser); 14906 bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID); 14907 14908 template <typename... Ts> RequireLiteralType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)14909 bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID, 14910 const Ts &...Args) { 14911 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 14912 return RequireLiteralType(Loc, T, Diagnoser); 14913 } 14914 14915 bool isCompleteType(SourceLocation Loc, QualType T, 14916 CompleteTypeKind Kind = CompleteTypeKind::Default) { 14917 return !RequireCompleteTypeImpl(Loc, T, Kind, nullptr); 14918 } 14919 14920 /// Ensure that the type T is a complete type. 14921 /// 14922 /// This routine checks whether the type @p T is complete in any 14923 /// context where a complete type is required. If @p T is a complete 14924 /// type, returns false. If @p T is a class template specialization, 14925 /// this routine then attempts to perform class template 14926 /// instantiation. If instantiation fails, or if @p T is incomplete 14927 /// and cannot be completed, issues the diagnostic @p diag (giving it 14928 /// the type @p T) and returns true. 14929 /// 14930 /// @param Loc The location in the source that the incomplete type 14931 /// diagnostic should refer to. 14932 /// 14933 /// @param T The type that this routine is examining for completeness. 14934 /// 14935 /// @param Kind Selects which completeness rules should be applied. 14936 /// 14937 /// @returns @c true if @p T is incomplete and a diagnostic was emitted, 14938 /// @c false otherwise. 14939 bool RequireCompleteType(SourceLocation Loc, QualType T, 14940 CompleteTypeKind Kind, TypeDiagnoser &Diagnoser); 14941 bool RequireCompleteType(SourceLocation Loc, QualType T, 14942 CompleteTypeKind Kind, unsigned DiagID); 14943 RequireCompleteType(SourceLocation Loc,QualType T,TypeDiagnoser & Diagnoser)14944 bool RequireCompleteType(SourceLocation Loc, QualType T, 14945 TypeDiagnoser &Diagnoser) { 14946 return RequireCompleteType(Loc, T, CompleteTypeKind::Default, Diagnoser); 14947 } RequireCompleteType(SourceLocation Loc,QualType T,unsigned DiagID)14948 bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID) { 14949 return RequireCompleteType(Loc, T, CompleteTypeKind::Default, DiagID); 14950 } 14951 14952 template <typename... Ts> RequireCompleteType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)14953 bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID, 14954 const Ts &...Args) { 14955 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...); 14956 return RequireCompleteType(Loc, T, Diagnoser); 14957 } 14958 14959 /// Determine whether a declaration is visible to name lookup. isVisible(const NamedDecl * D)14960 bool isVisible(const NamedDecl *D) { 14961 return D->isUnconditionallyVisible() || 14962 isAcceptableSlow(D, AcceptableKind::Visible); 14963 } 14964 14965 /// Determine whether a declaration is reachable. isReachable(const NamedDecl * D)14966 bool isReachable(const NamedDecl *D) { 14967 // All visible declarations are reachable. 14968 return D->isUnconditionallyVisible() || 14969 isAcceptableSlow(D, AcceptableKind::Reachable); 14970 } 14971 14972 /// Determine whether a declaration is acceptable (visible/reachable). isAcceptable(const NamedDecl * D,AcceptableKind Kind)14973 bool isAcceptable(const NamedDecl *D, AcceptableKind Kind) { 14974 return Kind == AcceptableKind::Visible ? isVisible(D) : isReachable(D); 14975 } 14976 14977 /// Determine if \p D and \p Suggested have a structurally compatible 14978 /// layout as described in C11 6.2.7/1. 14979 bool hasStructuralCompatLayout(Decl *D, Decl *Suggested); 14980 14981 /// Determine if \p D has a visible definition. If not, suggest a declaration 14982 /// that should be made visible to expose the definition. 14983 bool hasVisibleDefinition(NamedDecl *D, NamedDecl **Suggested, 14984 bool OnlyNeedComplete = false); hasVisibleDefinition(const NamedDecl * D)14985 bool hasVisibleDefinition(const NamedDecl *D) { 14986 NamedDecl *Hidden; 14987 return hasVisibleDefinition(const_cast<NamedDecl *>(D), &Hidden); 14988 } 14989 14990 /// Determine if \p D has a reachable definition. If not, suggest a 14991 /// declaration that should be made reachable to expose the definition. 14992 bool hasReachableDefinition(NamedDecl *D, NamedDecl **Suggested, 14993 bool OnlyNeedComplete = false); hasReachableDefinition(NamedDecl * D)14994 bool hasReachableDefinition(NamedDecl *D) { 14995 NamedDecl *Hidden; 14996 return hasReachableDefinition(D, &Hidden); 14997 } 14998 14999 bool hasAcceptableDefinition(NamedDecl *D, NamedDecl **Suggested, 15000 AcceptableKind Kind, 15001 bool OnlyNeedComplete = false); hasAcceptableDefinition(NamedDecl * D,AcceptableKind Kind)15002 bool hasAcceptableDefinition(NamedDecl *D, AcceptableKind Kind) { 15003 NamedDecl *Hidden; 15004 return hasAcceptableDefinition(D, &Hidden, Kind); 15005 } 15006 15007 private: 15008 /// The implementation of RequireCompleteType 15009 bool RequireCompleteTypeImpl(SourceLocation Loc, QualType T, 15010 CompleteTypeKind Kind, TypeDiagnoser *Diagnoser); 15011 15012 /// Nullability type specifiers. 15013 IdentifierInfo *Ident__Nonnull = nullptr; 15014 IdentifierInfo *Ident__Nullable = nullptr; 15015 IdentifierInfo *Ident__Nullable_result = nullptr; 15016 IdentifierInfo *Ident__Null_unspecified = nullptr; 15017 15018 ///@} 15019 15020 // 15021 // 15022 // ------------------------------------------------------------------------- 15023 // 15024 // 15025 15026 /// \name FixIt Helpers 15027 /// Implementations are in SemaFixItUtils.cpp 15028 ///@{ 15029 15030 public: 15031 /// Get a string to suggest for zero-initialization of a type. 15032 std::string getFixItZeroInitializerForType(QualType T, 15033 SourceLocation Loc) const; 15034 std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const; 15035 15036 ///@} 15037 15038 // 15039 // 15040 // ------------------------------------------------------------------------- 15041 // 15042 // 15043 15044 /// \name API Notes 15045 /// Implementations are in SemaAPINotes.cpp 15046 ///@{ 15047 15048 public: 15049 /// Map any API notes provided for this declaration to attributes on the 15050 /// declaration. 15051 /// 15052 /// Triggered by declaration-attribute processing. 15053 void ProcessAPINotes(Decl *D); 15054 15055 ///@} 15056 15057 // 15058 // 15059 // ------------------------------------------------------------------------- 15060 // 15061 // 15062 15063 /// \name Bounds Safety 15064 /// Implementations are in SemaBoundsSafety.cpp 15065 ///@{ 15066 public: 15067 /// Check if applying the specified attribute variant from the "counted by" 15068 /// family of attributes to FieldDecl \p FD is semantically valid. If 15069 /// semantically invalid diagnostics will be emitted explaining the problems. 15070 /// 15071 /// \param FD The FieldDecl to apply the attribute to 15072 /// \param E The count expression on the attribute 15073 /// \param[out] Decls If the attribute is semantically valid \p Decls 15074 /// is populated with TypeCoupledDeclRefInfo objects, each 15075 /// describing Decls referred to in \p E. 15076 /// \param CountInBytes If true the attribute is from the "sized_by" family of 15077 /// attributes. If the false the attribute is from 15078 /// "counted_by" family of attributes. 15079 /// \param OrNull If true the attribute is from the "_or_null" suffixed family 15080 /// of attributes. If false the attribute does not have the 15081 /// suffix. 15082 /// 15083 /// Together \p CountInBytes and \p OrNull decide the attribute variant. E.g. 15084 /// \p CountInBytes and \p OrNull both being true indicates the 15085 /// `counted_by_or_null` attribute. 15086 /// 15087 /// \returns false iff semantically valid. 15088 bool CheckCountedByAttrOnField( 15089 FieldDecl *FD, Expr *E, 15090 llvm::SmallVectorImpl<TypeCoupledDeclRefInfo> &Decls, bool CountInBytes, 15091 bool OrNull); 15092 15093 ///@} 15094 }; 15095 15096 DeductionFailureInfo 15097 MakeDeductionFailureInfo(ASTContext &Context, TemplateDeductionResult TDK, 15098 sema::TemplateDeductionInfo &Info); 15099 15100 /// Contains a late templated function. 15101 /// Will be parsed at the end of the translation unit, used by Sema & Parser. 15102 struct LateParsedTemplate { 15103 CachedTokens Toks; 15104 /// The template function declaration to be late parsed. 15105 Decl *D; 15106 /// Floating-point options in the point of definition. 15107 FPOptions FPO; 15108 }; 15109 15110 template <> 15111 void Sema::PragmaStack<Sema::AlignPackInfo>::Act(SourceLocation PragmaLocation, 15112 PragmaMsStackAction Action, 15113 llvm::StringRef StackSlotLabel, 15114 AlignPackInfo Value); 15115 } // end namespace clang 15116 15117 #endif 15118