Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:37:04

0001 //===--- Sema.h - Semantic Analysis & AST Building --------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file defines the Sema class, which performs semantic analysis and
0010 // builds ASTs.
0011 //
0012 //===----------------------------------------------------------------------===//
0013 
0014 #ifndef LLVM_CLANG_SEMA_SEMA_H
0015 #define LLVM_CLANG_SEMA_SEMA_H
0016 
0017 #include "clang/APINotes/APINotesManager.h"
0018 #include "clang/AST/ASTFwd.h"
0019 #include "clang/AST/ASTLambda.h"
0020 #include "clang/AST/Attr.h"
0021 #include "clang/AST/AttrIterator.h"
0022 #include "clang/AST/CharUnits.h"
0023 #include "clang/AST/DeclBase.h"
0024 #include "clang/AST/DeclCXX.h"
0025 #include "clang/AST/DeclTemplate.h"
0026 #include "clang/AST/DeclarationName.h"
0027 #include "clang/AST/Expr.h"
0028 #include "clang/AST/ExprCXX.h"
0029 #include "clang/AST/ExprConcepts.h"
0030 #include "clang/AST/ExternalASTSource.h"
0031 #include "clang/AST/NestedNameSpecifier.h"
0032 #include "clang/AST/OperationKinds.h"
0033 #include "clang/AST/StmtCXX.h"
0034 #include "clang/AST/Type.h"
0035 #include "clang/AST/TypeLoc.h"
0036 #include "clang/Basic/AttrSubjectMatchRules.h"
0037 #include "clang/Basic/Builtins.h"
0038 #include "clang/Basic/CapturedStmt.h"
0039 #include "clang/Basic/Cuda.h"
0040 #include "clang/Basic/DiagnosticSema.h"
0041 #include "clang/Basic/ExceptionSpecificationType.h"
0042 #include "clang/Basic/ExpressionTraits.h"
0043 #include "clang/Basic/LLVM.h"
0044 #include "clang/Basic/Lambda.h"
0045 #include "clang/Basic/LangOptions.h"
0046 #include "clang/Basic/Module.h"
0047 #include "clang/Basic/OpenCLOptions.h"
0048 #include "clang/Basic/OperatorKinds.h"
0049 #include "clang/Basic/PartialDiagnostic.h"
0050 #include "clang/Basic/PragmaKinds.h"
0051 #include "clang/Basic/SourceLocation.h"
0052 #include "clang/Basic/Specifiers.h"
0053 #include "clang/Basic/StackExhaustionHandler.h"
0054 #include "clang/Basic/TemplateKinds.h"
0055 #include "clang/Basic/TokenKinds.h"
0056 #include "clang/Basic/TypeTraits.h"
0057 #include "clang/Sema/AnalysisBasedWarnings.h"
0058 #include "clang/Sema/Attr.h"
0059 #include "clang/Sema/CleanupInfo.h"
0060 #include "clang/Sema/DeclSpec.h"
0061 #include "clang/Sema/ExternalSemaSource.h"
0062 #include "clang/Sema/IdentifierResolver.h"
0063 #include "clang/Sema/Ownership.h"
0064 #include "clang/Sema/ParsedAttr.h"
0065 #include "clang/Sema/Redeclaration.h"
0066 #include "clang/Sema/Scope.h"
0067 #include "clang/Sema/SemaBase.h"
0068 #include "clang/Sema/TypoCorrection.h"
0069 #include "clang/Sema/Weak.h"
0070 #include "llvm/ADT/APInt.h"
0071 #include "llvm/ADT/ArrayRef.h"
0072 #include "llvm/ADT/BitmaskEnum.h"
0073 #include "llvm/ADT/DenseMap.h"
0074 #include "llvm/ADT/DenseSet.h"
0075 #include "llvm/ADT/FloatingPointMode.h"
0076 #include "llvm/ADT/FoldingSet.h"
0077 #include "llvm/ADT/MapVector.h"
0078 #include "llvm/ADT/PointerIntPair.h"
0079 #include "llvm/ADT/PointerUnion.h"
0080 #include "llvm/ADT/STLExtras.h"
0081 #include "llvm/ADT/STLForwardCompat.h"
0082 #include "llvm/ADT/STLFunctionalExtras.h"
0083 #include "llvm/ADT/SetVector.h"
0084 #include "llvm/ADT/SmallBitVector.h"
0085 #include "llvm/ADT/SmallPtrSet.h"
0086 #include "llvm/ADT/SmallSet.h"
0087 #include "llvm/ADT/SmallVector.h"
0088 #include "llvm/ADT/StringExtras.h"
0089 #include "llvm/ADT/StringMap.h"
0090 #include "llvm/ADT/TinyPtrVector.h"
0091 #include "llvm/Support/Allocator.h"
0092 #include "llvm/Support/Compiler.h"
0093 #include "llvm/Support/Error.h"
0094 #include "llvm/Support/ErrorHandling.h"
0095 #include <cassert>
0096 #include <climits>
0097 #include <cstddef>
0098 #include <cstdint>
0099 #include <deque>
0100 #include <functional>
0101 #include <iterator>
0102 #include <memory>
0103 #include <optional>
0104 #include <string>
0105 #include <tuple>
0106 #include <type_traits>
0107 #include <utility>
0108 #include <vector>
0109 
0110 namespace llvm {
0111 struct InlineAsmIdentifierInfo;
0112 } // namespace llvm
0113 
0114 namespace clang {
0115 class ADLResult;
0116 class APValue;
0117 struct ASTConstraintSatisfaction;
0118 class ASTConsumer;
0119 class ASTContext;
0120 class ASTDeclReader;
0121 class ASTMutationListener;
0122 class ASTReader;
0123 class ASTWriter;
0124 class CXXBasePath;
0125 class CXXBasePaths;
0126 class CXXFieldCollector;
0127 class CodeCompleteConsumer;
0128 enum class ComparisonCategoryType : unsigned char;
0129 class ConstraintSatisfaction;
0130 class DarwinSDKInfo;
0131 class DeclGroupRef;
0132 class DeducedTemplateArgument;
0133 struct DeductionFailureInfo;
0134 class DependentDiagnostic;
0135 class Designation;
0136 class IdentifierInfo;
0137 class ImplicitConversionSequence;
0138 typedef MutableArrayRef<ImplicitConversionSequence> ConversionSequenceList;
0139 class InitializationKind;
0140 class InitializationSequence;
0141 class InitializedEntity;
0142 enum class LangAS : unsigned int;
0143 class LocalInstantiationScope;
0144 class LookupResult;
0145 class MangleNumberingContext;
0146 typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath;
0147 class ModuleLoader;
0148 class MultiLevelTemplateArgumentList;
0149 struct NormalizedConstraint;
0150 class ObjCInterfaceDecl;
0151 class ObjCMethodDecl;
0152 struct OverloadCandidate;
0153 enum class OverloadCandidateParamOrder : char;
0154 enum OverloadCandidateRewriteKind : unsigned;
0155 class OverloadCandidateSet;
0156 class Preprocessor;
0157 class SemaAMDGPU;
0158 class SemaARM;
0159 class SemaAVR;
0160 class SemaBPF;
0161 class SemaCodeCompletion;
0162 class SemaCUDA;
0163 class SemaHLSL;
0164 class SemaHexagon;
0165 class SemaLoongArch;
0166 class SemaM68k;
0167 class SemaMIPS;
0168 class SemaMSP430;
0169 class SemaNVPTX;
0170 class SemaObjC;
0171 class SemaOpenACC;
0172 class SemaOpenCL;
0173 class SemaOpenMP;
0174 class SemaPPC;
0175 class SemaPseudoObject;
0176 class SemaRISCV;
0177 class SemaSPIRV;
0178 class SemaSYCL;
0179 class SemaSwift;
0180 class SemaSystemZ;
0181 class SemaWasm;
0182 class SemaX86;
0183 class StandardConversionSequence;
0184 class TemplateArgument;
0185 class TemplateArgumentLoc;
0186 class TemplateInstantiationCallback;
0187 class TemplatePartialOrderingContext;
0188 class TemplateSpecCandidateSet;
0189 class Token;
0190 class TypeConstraint;
0191 class TypoCorrectionConsumer;
0192 class UnresolvedSetImpl;
0193 class UnresolvedSetIterator;
0194 class VisibleDeclConsumer;
0195 
0196 namespace sema {
0197 class BlockScopeInfo;
0198 class Capture;
0199 class CapturedRegionScopeInfo;
0200 class CapturingScopeInfo;
0201 class CompoundScopeInfo;
0202 class DelayedDiagnostic;
0203 class DelayedDiagnosticPool;
0204 class FunctionScopeInfo;
0205 class LambdaScopeInfo;
0206 class SemaPPCallbacks;
0207 class TemplateDeductionInfo;
0208 } // namespace sema
0209 
0210 // AssignmentAction - This is used by all the assignment diagnostic functions
0211 // to represent what is actually causing the operation
0212 enum class AssignmentAction {
0213   Assigning,
0214   Passing,
0215   Returning,
0216   Converting,
0217   Initializing,
0218   Sending,
0219   Casting,
0220   Passing_CFAudited
0221 };
0222 inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB,
0223                                              const AssignmentAction &AA) {
0224   DB << llvm::to_underlying(AA);
0225   return DB;
0226 }
0227 
0228 namespace threadSafety {
0229 class BeforeSet;
0230 void threadSafetyCleanup(BeforeSet *Cache);
0231 } // namespace threadSafety
0232 
0233 // FIXME: No way to easily map from TemplateTypeParmTypes to
0234 // TemplateTypeParmDecls, so we have this horrible PointerUnion.
0235 typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType *, NamedDecl *>,
0236                   SourceLocation>
0237     UnexpandedParameterPack;
0238 
0239 /// Describes whether we've seen any nullability information for the given
0240 /// file.
0241 struct FileNullability {
0242   /// The first pointer declarator (of any pointer kind) in the file that does
0243   /// not have a corresponding nullability annotation.
0244   SourceLocation PointerLoc;
0245 
0246   /// The end location for the first pointer declarator in the file. Used for
0247   /// placing fix-its.
0248   SourceLocation PointerEndLoc;
0249 
0250   /// Which kind of pointer declarator we saw.
0251   uint8_t PointerKind;
0252 
0253   /// Whether we saw any type nullability annotations in the given file.
0254   bool SawTypeNullability = false;
0255 };
0256 
0257 /// A mapping from file IDs to a record of whether we've seen nullability
0258 /// information in that file.
0259 class FileNullabilityMap {
0260   /// A mapping from file IDs to the nullability information for each file ID.
0261   llvm::DenseMap<FileID, FileNullability> Map;
0262 
0263   /// A single-element cache based on the file ID.
0264   struct {
0265     FileID File;
0266     FileNullability Nullability;
0267   } Cache;
0268 
0269 public:
0270   FileNullability &operator[](FileID file) {
0271     // Check the single-element cache.
0272     if (file == Cache.File)
0273       return Cache.Nullability;
0274 
0275     // It's not in the single-element cache; flush the cache if we have one.
0276     if (!Cache.File.isInvalid()) {
0277       Map[Cache.File] = Cache.Nullability;
0278     }
0279 
0280     // Pull this entry into the cache.
0281     Cache.File = file;
0282     Cache.Nullability = Map[file];
0283     return Cache.Nullability;
0284   }
0285 };
0286 
0287 /// Tracks expected type during expression parsing, for use in code completion.
0288 /// The type is tied to a particular token, all functions that update or consume
0289 /// the type take a start location of the token they are looking at as a
0290 /// parameter. This avoids updating the type on hot paths in the parser.
0291 class PreferredTypeBuilder {
0292 public:
0293   PreferredTypeBuilder(bool Enabled) : Enabled(Enabled) {}
0294 
0295   void enterCondition(Sema &S, SourceLocation Tok);
0296   void enterReturn(Sema &S, SourceLocation Tok);
0297   void enterVariableInit(SourceLocation Tok, Decl *D);
0298   /// Handles e.g. BaseType{ .D = Tok...
0299   void enterDesignatedInitializer(SourceLocation Tok, QualType BaseType,
0300                                   const Designation &D);
0301   /// Computing a type for the function argument may require running
0302   /// overloading, so we postpone its computation until it is actually needed.
0303   ///
0304   /// Clients should be very careful when using this function, as it stores a
0305   /// function_ref, clients should make sure all calls to get() with the same
0306   /// location happen while function_ref is alive.
0307   ///
0308   /// The callback should also emit signature help as a side-effect, but only
0309   /// if the completion point has been reached.
0310   void enterFunctionArgument(SourceLocation Tok,
0311                              llvm::function_ref<QualType()> ComputeType);
0312 
0313   void enterParenExpr(SourceLocation Tok, SourceLocation LParLoc);
0314   void enterUnary(Sema &S, SourceLocation Tok, tok::TokenKind OpKind,
0315                   SourceLocation OpLoc);
0316   void enterBinary(Sema &S, SourceLocation Tok, Expr *LHS, tok::TokenKind Op);
0317   void enterMemAccess(Sema &S, SourceLocation Tok, Expr *Base);
0318   void enterSubscript(Sema &S, SourceLocation Tok, Expr *LHS);
0319   /// Handles all type casts, including C-style cast, C++ casts, etc.
0320   void enterTypeCast(SourceLocation Tok, QualType CastType);
0321 
0322   /// Get the expected type associated with this location, if any.
0323   ///
0324   /// If the location is a function argument, determining the expected type
0325   /// involves considering all function overloads and the arguments so far.
0326   /// In this case, signature help for these function overloads will be reported
0327   /// as a side-effect (only if the completion point has been reached).
0328   QualType get(SourceLocation Tok) const {
0329     if (!Enabled || Tok != ExpectedLoc)
0330       return QualType();
0331     if (!Type.isNull())
0332       return Type;
0333     if (ComputeType)
0334       return ComputeType();
0335     return QualType();
0336   }
0337 
0338 private:
0339   bool Enabled;
0340   /// Start position of a token for which we store expected type.
0341   SourceLocation ExpectedLoc;
0342   /// Expected type for a token starting at ExpectedLoc.
0343   QualType Type;
0344   /// A function to compute expected type at ExpectedLoc. It is only considered
0345   /// if Type is null.
0346   llvm::function_ref<QualType()> ComputeType;
0347 };
0348 
0349 struct SkipBodyInfo {
0350   SkipBodyInfo() = default;
0351   bool ShouldSkip = false;
0352   bool CheckSameAsPrevious = false;
0353   NamedDecl *Previous = nullptr;
0354   NamedDecl *New = nullptr;
0355 };
0356 
0357 /// Describes the result of template argument deduction.
0358 ///
0359 /// The TemplateDeductionResult enumeration describes the result of
0360 /// template argument deduction, as returned from
0361 /// DeduceTemplateArguments(). The separate TemplateDeductionInfo
0362 /// structure provides additional information about the results of
0363 /// template argument deduction, e.g., the deduced template argument
0364 /// list (if successful) or the specific template parameters or
0365 /// deduced arguments that were involved in the failure.
0366 enum class TemplateDeductionResult {
0367   /// Template argument deduction was successful.
0368   Success = 0,
0369   /// The declaration was invalid; do nothing.
0370   Invalid,
0371   /// Template argument deduction exceeded the maximum template
0372   /// instantiation depth (which has already been diagnosed).
0373   InstantiationDepth,
0374   /// Template argument deduction did not deduce a value
0375   /// for every template parameter.
0376   Incomplete,
0377   /// Template argument deduction did not deduce a value for every
0378   /// expansion of an expanded template parameter pack.
0379   IncompletePack,
0380   /// Template argument deduction produced inconsistent
0381   /// deduced values for the given template parameter.
0382   Inconsistent,
0383   /// Template argument deduction failed due to inconsistent
0384   /// cv-qualifiers on a template parameter type that would
0385   /// otherwise be deduced, e.g., we tried to deduce T in "const T"
0386   /// but were given a non-const "X".
0387   Underqualified,
0388   /// Substitution of the deduced template argument values
0389   /// resulted in an error.
0390   SubstitutionFailure,
0391   /// After substituting deduced template arguments, a dependent
0392   /// parameter type did not match the corresponding argument.
0393   DeducedMismatch,
0394   /// After substituting deduced template arguments, an element of
0395   /// a dependent parameter type did not match the corresponding element
0396   /// of the corresponding argument (when deducing from an initializer list).
0397   DeducedMismatchNested,
0398   /// A non-depnedent component of the parameter did not match the
0399   /// corresponding component of the argument.
0400   NonDeducedMismatch,
0401   /// When performing template argument deduction for a function
0402   /// template, there were too many call arguments.
0403   TooManyArguments,
0404   /// When performing template argument deduction for a function
0405   /// template, there were too few call arguments.
0406   TooFewArguments,
0407   /// The explicitly-specified template arguments were not valid
0408   /// template arguments for the given template.
0409   InvalidExplicitArguments,
0410   /// Checking non-dependent argument conversions failed.
0411   NonDependentConversionFailure,
0412   /// The deduced arguments did not satisfy the constraints associated
0413   /// with the template.
0414   ConstraintsNotSatisfied,
0415   /// Deduction failed; that's all we know.
0416   MiscellaneousDeductionFailure,
0417   /// CUDA Target attributes do not match.
0418   CUDATargetMismatch,
0419   /// Some error which was already diagnosed.
0420   AlreadyDiagnosed
0421 };
0422 
0423 /// Kinds of C++ special members.
0424 enum class CXXSpecialMemberKind {
0425   DefaultConstructor,
0426   CopyConstructor,
0427   MoveConstructor,
0428   CopyAssignment,
0429   MoveAssignment,
0430   Destructor,
0431   Invalid
0432 };
0433 
0434 /// The kind of conversion being performed.
0435 enum class CheckedConversionKind {
0436   /// An implicit conversion.
0437   Implicit,
0438   /// A C-style cast.
0439   CStyleCast,
0440   /// A functional-style cast.
0441   FunctionalCast,
0442   /// A cast other than a C-style cast.
0443   OtherCast,
0444   /// A conversion for an operand of a builtin overloaded operator.
0445   ForBuiltinOverloadedOp
0446 };
0447 
0448 enum class TagUseKind {
0449   Reference,   // Reference to a tag:  'struct foo *X;'
0450   Declaration, // Fwd decl of a tag:   'struct foo;'
0451   Definition,  // Definition of a tag: 'struct foo { int X; } Y;'
0452   Friend       // Friend declaration:  'friend struct foo;'
0453 };
0454 
0455 /// Used with attributes/effects with a boolean condition, e.g. `nonblocking`.
0456 enum class FunctionEffectMode : uint8_t {
0457   None,     // effect is not present.
0458   False,    // effect(false).
0459   True,     // effect(true).
0460   Dependent // effect(expr) where expr is dependent.
0461 };
0462 
0463 /// Sema - This implements semantic analysis and AST building for C.
0464 /// \nosubgrouping
0465 class Sema final : public SemaBase {
0466   // Table of Contents
0467   // -----------------
0468   // 1. Semantic Analysis (Sema.cpp)
0469   // 2. API Notes (SemaAPINotes.cpp)
0470   // 3. C++ Access Control (SemaAccess.cpp)
0471   // 4. Attributes (SemaAttr.cpp)
0472   // 5. Availability Attribute Handling (SemaAvailability.cpp)
0473   // 6. Bounds Safety (SemaBoundsSafety.cpp)
0474   // 7. Casts (SemaCast.cpp)
0475   // 8. Extra Semantic Checking (SemaChecking.cpp)
0476   // 9. C++ Coroutines (SemaCoroutine.cpp)
0477   // 10. C++ Scope Specifiers (SemaCXXScopeSpec.cpp)
0478   // 11. Declarations (SemaDecl.cpp)
0479   // 12. Declaration Attribute Handling (SemaDeclAttr.cpp)
0480   // 13. C++ Declarations (SemaDeclCXX.cpp)
0481   // 14. C++ Exception Specifications (SemaExceptionSpec.cpp)
0482   // 15. Expressions (SemaExpr.cpp)
0483   // 16. C++ Expressions (SemaExprCXX.cpp)
0484   // 17. Member Access Expressions (SemaExprMember.cpp)
0485   // 18. Initializers (SemaInit.cpp)
0486   // 19. C++ Lambda Expressions (SemaLambda.cpp)
0487   // 20. Name Lookup (SemaLookup.cpp)
0488   // 21. Modules (SemaModule.cpp)
0489   // 22. C++ Overloading (SemaOverload.cpp)
0490   // 23. Statements (SemaStmt.cpp)
0491   // 24. `inline asm` Statement (SemaStmtAsm.cpp)
0492   // 25. Statement Attribute Handling (SemaStmtAttr.cpp)
0493   // 26. C++ Templates (SemaTemplate.cpp)
0494   // 27. C++ Template Argument Deduction (SemaTemplateDeduction.cpp)
0495   // 28. C++ Template Deduction Guide (SemaTemplateDeductionGuide.cpp)
0496   // 29. C++ Template Instantiation (SemaTemplateInstantiate.cpp)
0497   // 30. C++ Template Declaration Instantiation
0498   //     (SemaTemplateInstantiateDecl.cpp)
0499   // 31. C++ Variadic Templates (SemaTemplateVariadic.cpp)
0500   // 32. Constraints and Concepts (SemaConcept.cpp)
0501   // 33. Types (SemaType.cpp)
0502   // 34. FixIt Helpers (SemaFixItUtils.cpp)
0503   // 35. Function Effects (SemaFunctionEffects.cpp)
0504 
0505   /// \name Semantic Analysis
0506   /// Implementations are in Sema.cpp
0507   ///@{
0508 
0509 public:
0510   Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
0511        TranslationUnitKind TUKind = TU_Complete,
0512        CodeCompleteConsumer *CompletionConsumer = nullptr);
0513   ~Sema();
0514 
0515   /// Perform initialization that occurs after the parser has been
0516   /// initialized but before it parses anything.
0517   void Initialize();
0518 
0519   /// This virtual key function only exists to limit the emission of debug info
0520   /// describing the Sema class. GCC and Clang only emit debug info for a class
0521   /// with a vtable when the vtable is emitted. Sema is final and not
0522   /// polymorphic, but the debug info size savings are so significant that it is
0523   /// worth adding a vtable just to take advantage of this optimization.
0524   virtual void anchor();
0525 
0526   const LangOptions &getLangOpts() const { return LangOpts; }
0527   OpenCLOptions &getOpenCLOptions() { return OpenCLFeatures; }
0528   FPOptions &getCurFPFeatures() { return CurFPFeatures; }
0529 
0530   DiagnosticsEngine &getDiagnostics() const { return Diags; }
0531   SourceManager &getSourceManager() const { return SourceMgr; }
0532   Preprocessor &getPreprocessor() const { return PP; }
0533   ASTContext &getASTContext() const { return Context; }
0534   ASTConsumer &getASTConsumer() const { return Consumer; }
0535   ASTMutationListener *getASTMutationListener() const;
0536   ExternalSemaSource *getExternalSource() const { return ExternalSource.get(); }
0537 
0538   DarwinSDKInfo *getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc,
0539                                                          StringRef Platform);
0540   DarwinSDKInfo *getDarwinSDKInfoForAvailabilityChecking();
0541 
0542   /// Registers an external source. If an external source already exists,
0543   ///  creates a multiplex external source and appends to it.
0544   ///
0545   ///\param[in] E - A non-null external sema source.
0546   ///
0547   void addExternalSource(ExternalSemaSource *E);
0548 
0549   /// Print out statistics about the semantic analysis.
0550   void PrintStats() const;
0551 
0552   /// Run some code with "sufficient" stack space. (Currently, at least 256K is
0553   /// guaranteed). Produces a warning if we're low on stack space and allocates
0554   /// more in that case. Use this in code that may recurse deeply (for example,
0555   /// in template instantiation) to avoid stack overflow.
0556   void runWithSufficientStackSpace(SourceLocation Loc,
0557                                    llvm::function_ref<void()> Fn);
0558 
0559   /// Returns default addr space for method qualifiers.
0560   LangAS getDefaultCXXMethodAddrSpace() const;
0561 
0562   /// Load weak undeclared identifiers from the external source.
0563   void LoadExternalWeakUndeclaredIdentifiers();
0564 
0565   /// Determine if VD, which must be a variable or function, is an external
0566   /// symbol that nonetheless can't be referenced from outside this translation
0567   /// unit because its type has no linkage and it's not extern "C".
0568   bool isExternalWithNoLinkageType(const ValueDecl *VD) const;
0569 
0570   /// Obtain a sorted list of functions that are undefined but ODR-used.
0571   void getUndefinedButUsed(
0572       SmallVectorImpl<std::pair<NamedDecl *, SourceLocation>> &Undefined);
0573 
0574   typedef std::pair<SourceLocation, bool> DeleteExprLoc;
0575   typedef llvm::SmallVector<DeleteExprLoc, 4> DeleteLocs;
0576   /// Retrieves list of suspicious delete-expressions that will be checked at
0577   /// the end of translation unit.
0578   const llvm::MapVector<FieldDecl *, DeleteLocs> &
0579   getMismatchingDeleteExpressions() const;
0580 
0581   /// Cause the built diagnostic to be emitted on the DiagosticsEngine.
0582   /// This is closely coupled to the SemaDiagnosticBuilder class and
0583   /// should not be used elsewhere.
0584   void EmitDiagnostic(unsigned DiagID, const DiagnosticBuilder &DB);
0585 
0586   void addImplicitTypedef(StringRef Name, QualType T);
0587 
0588   /// Whether uncompilable error has occurred. This includes error happens
0589   /// in deferred diagnostics.
0590   bool hasUncompilableErrorOccurred() const;
0591 
0592   /// Looks through the macro-expansion chain for the given
0593   /// location, looking for a macro expansion with the given name.
0594   /// If one is found, returns true and sets the location to that
0595   /// expansion loc.
0596   bool findMacroSpelling(SourceLocation &loc, StringRef name);
0597 
0598   /// Calls \c Lexer::getLocForEndOfToken()
0599   SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0);
0600 
0601   /// Retrieve the module loader associated with the preprocessor.
0602   ModuleLoader &getModuleLoader() const;
0603 
0604   /// Invent a new identifier for parameters of abbreviated templates.
0605   IdentifierInfo *
0606   InventAbbreviatedTemplateParameterTypeName(const IdentifierInfo *ParamName,
0607                                              unsigned Index);
0608 
0609   void emitAndClearUnusedLocalTypedefWarnings();
0610 
0611   // Emit all deferred diagnostics.
0612   void emitDeferredDiags();
0613 
0614   enum TUFragmentKind {
0615     /// The global module fragment, between 'module;' and a module-declaration.
0616     Global,
0617     /// A normal translation unit fragment. For a non-module unit, this is the
0618     /// entire translation unit. Otherwise, it runs from the module-declaration
0619     /// to the private-module-fragment (if any) or the end of the TU (if not).
0620     Normal,
0621     /// The private module fragment, between 'module :private;' and the end of
0622     /// the translation unit.
0623     Private
0624   };
0625 
0626   /// This is called before the very first declaration in the translation unit
0627   /// is parsed. Note that the ASTContext may have already injected some
0628   /// declarations.
0629   void ActOnStartOfTranslationUnit();
0630   /// ActOnEndOfTranslationUnit - This is called at the very end of the
0631   /// translation unit when EOF is reached and all but the top-level scope is
0632   /// popped.
0633   void ActOnEndOfTranslationUnit();
0634   void ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind);
0635 
0636   /// Determines the active Scope associated with the given declaration
0637   /// context.
0638   ///
0639   /// This routine maps a declaration context to the active Scope object that
0640   /// represents that declaration context in the parser. It is typically used
0641   /// from "scope-less" code (e.g., template instantiation, lazy creation of
0642   /// declarations) that injects a name for name-lookup purposes and, therefore,
0643   /// must update the Scope.
0644   ///
0645   /// \returns The scope corresponding to the given declaraion context, or NULL
0646   /// if no such scope is open.
0647   Scope *getScopeForContext(DeclContext *Ctx);
0648 
0649   void PushFunctionScope();
0650   void PushBlockScope(Scope *BlockScope, BlockDecl *Block);
0651   sema::LambdaScopeInfo *PushLambdaScope();
0652 
0653   /// This is used to inform Sema what the current TemplateParameterDepth
0654   /// is during Parsing.  Currently it is used to pass on the depth
0655   /// when parsing generic lambda 'auto' parameters.
0656   void RecordParsingTemplateParameterDepth(unsigned Depth);
0657 
0658   void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD,
0659                                RecordDecl *RD, CapturedRegionKind K,
0660                                unsigned OpenMPCaptureLevel = 0);
0661 
0662   /// Custom deleter to allow FunctionScopeInfos to be kept alive for a short
0663   /// time after they've been popped.
0664   class PoppedFunctionScopeDeleter {
0665     Sema *Self;
0666 
0667   public:
0668     explicit PoppedFunctionScopeDeleter(Sema *Self) : Self(Self) {}
0669     void operator()(sema::FunctionScopeInfo *Scope) const;
0670   };
0671 
0672   using PoppedFunctionScopePtr =
0673       std::unique_ptr<sema::FunctionScopeInfo, PoppedFunctionScopeDeleter>;
0674 
0675   /// Pop a function (or block or lambda or captured region) scope from the
0676   /// stack.
0677   ///
0678   /// \param WP The warning policy to use for CFG-based warnings, or null if
0679   ///        such warnings should not be produced.
0680   /// \param D The declaration corresponding to this function scope, if
0681   ///        producing CFG-based warnings.
0682   /// \param BlockType The type of the block expression, if D is a BlockDecl.
0683   PoppedFunctionScopePtr
0684   PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr,
0685                        const Decl *D = nullptr,
0686                        QualType BlockType = QualType());
0687 
0688   sema::FunctionScopeInfo *getEnclosingFunction() const;
0689 
0690   void setFunctionHasBranchIntoScope();
0691   void setFunctionHasBranchProtectedScope();
0692   void setFunctionHasIndirectGoto();
0693   void setFunctionHasMustTail();
0694 
0695   void PushCompoundScope(bool IsStmtExpr);
0696   void PopCompoundScope();
0697 
0698   /// Determine whether any errors occurred within this function/method/
0699   /// block.
0700   bool hasAnyUnrecoverableErrorsInThisFunction() const;
0701 
0702   /// Retrieve the current block, if any.
0703   sema::BlockScopeInfo *getCurBlock();
0704 
0705   /// Get the innermost lambda or block enclosing the current location, if any.
0706   /// This looks through intervening non-lambda, non-block scopes such as local
0707   /// functions.
0708   sema::CapturingScopeInfo *getEnclosingLambdaOrBlock() const;
0709 
0710   /// Retrieve the current lambda scope info, if any.
0711   /// \param IgnoreNonLambdaCapturingScope true if should find the top-most
0712   /// lambda scope info ignoring all inner capturing scopes that are not
0713   /// lambda scopes.
0714   sema::LambdaScopeInfo *
0715   getCurLambda(bool IgnoreNonLambdaCapturingScope = false);
0716 
0717   /// Retrieve the current generic lambda info, if any.
0718   sema::LambdaScopeInfo *getCurGenericLambda();
0719 
0720   /// Retrieve the current captured region, if any.
0721   sema::CapturedRegionScopeInfo *getCurCapturedRegion();
0722 
0723   void ActOnComment(SourceRange Comment);
0724 
0725   /// Retrieve the parser's current scope.
0726   ///
0727   /// This routine must only be used when it is certain that semantic analysis
0728   /// and the parser are in precisely the same context, which is not the case
0729   /// when, e.g., we are performing any kind of template instantiation.
0730   /// Therefore, the only safe places to use this scope are in the parser
0731   /// itself and in routines directly invoked from the parser and *never* from
0732   /// template substitution or instantiation.
0733   Scope *getCurScope() const { return CurScope; }
0734 
0735   IdentifierInfo *getSuperIdentifier() const;
0736 
0737   DeclContext *getCurLexicalContext() const {
0738     return OriginalLexicalContext ? OriginalLexicalContext : CurContext;
0739   }
0740 
0741   SemaDiagnosticBuilder targetDiag(SourceLocation Loc, unsigned DiagID,
0742                                    const FunctionDecl *FD = nullptr);
0743   SemaDiagnosticBuilder targetDiag(SourceLocation Loc,
0744                                    const PartialDiagnostic &PD,
0745                                    const FunctionDecl *FD = nullptr) {
0746     return targetDiag(Loc, PD.getDiagID(), FD) << PD;
0747   }
0748 
0749   /// Check if the type is allowed to be used for the current target.
0750   void checkTypeSupport(QualType Ty, SourceLocation Loc,
0751                         ValueDecl *D = nullptr);
0752 
0753   // /// The kind of conversion being performed.
0754   // enum CheckedConversionKind {
0755   //   /// An implicit conversion.
0756   //   CCK_ImplicitConversion,
0757   //   /// A C-style cast.
0758   //   CCK_CStyleCast,
0759   //   /// A functional-style cast.
0760   //   CCK_FunctionalCast,
0761   //   /// A cast other than a C-style cast.
0762   //   CCK_OtherCast,
0763   //   /// A conversion for an operand of a builtin overloaded operator.
0764   //   CCK_ForBuiltinOverloadedOp
0765   // };
0766 
0767   /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit
0768   /// cast.  If there is already an implicit cast, merge into the existing one.
0769   /// If isLvalue, the result of the cast is an lvalue.
0770   ExprResult ImpCastExprToType(
0771       Expr *E, QualType Type, CastKind CK, ExprValueKind VK = VK_PRValue,
0772       const CXXCastPath *BasePath = nullptr,
0773       CheckedConversionKind CCK = CheckedConversionKind::Implicit);
0774 
0775   /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
0776   /// to the conversion from scalar type ScalarTy to the Boolean type.
0777   static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy);
0778 
0779   /// If \p AllowLambda is true, treat lambda as function.
0780   DeclContext *getFunctionLevelDeclContext(bool AllowLambda = false) const;
0781 
0782   /// Returns a pointer to the innermost enclosing function, or nullptr if the
0783   /// current context is not inside a function. If \p AllowLambda is true,
0784   /// this can return the call operator of an enclosing lambda, otherwise
0785   /// lambdas are skipped when looking for an enclosing function.
0786   FunctionDecl *getCurFunctionDecl(bool AllowLambda = false) const;
0787 
0788   /// getCurMethodDecl - If inside of a method body, this returns a pointer to
0789   /// the method decl for the method being parsed.  If we're currently
0790   /// in a 'block', this returns the containing context.
0791   ObjCMethodDecl *getCurMethodDecl();
0792 
0793   /// getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method
0794   /// or C function we're in, otherwise return null.  If we're currently
0795   /// in a 'block', this returns the containing context.
0796   NamedDecl *getCurFunctionOrMethodDecl() const;
0797 
0798   /// Warn if we're implicitly casting from a _Nullable pointer type to a
0799   /// _Nonnull one.
0800   void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType,
0801                                            SourceLocation Loc);
0802 
0803   /// Warn when implicitly casting 0 to nullptr.
0804   void diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E);
0805 
0806   /// Warn when implicitly changing function effects.
0807   void diagnoseFunctionEffectConversion(QualType DstType, QualType SrcType,
0808                                         SourceLocation Loc);
0809 
0810   /// makeUnavailableInSystemHeader - There is an error in the current
0811   /// context.  If we're still in a system header, and we can plausibly
0812   /// make the relevant declaration unavailable instead of erroring, do
0813   /// so and return true.
0814   bool makeUnavailableInSystemHeader(SourceLocation loc,
0815                                      UnavailableAttr::ImplicitReason reason);
0816 
0817   /// Retrieve a suitable printing policy for diagnostics.
0818   PrintingPolicy getPrintingPolicy() const {
0819     return getPrintingPolicy(Context, PP);
0820   }
0821 
0822   /// Retrieve a suitable printing policy for diagnostics.
0823   static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx,
0824                                           const Preprocessor &PP);
0825 
0826   /// Scope actions.
0827   void ActOnTranslationUnitScope(Scope *S);
0828 
0829   /// Determine whether \param D is function like (function or function
0830   /// template) for parsing.
0831   bool isDeclaratorFunctionLike(Declarator &D);
0832 
0833   /// The maximum alignment, same as in llvm::Value. We duplicate them here
0834   /// because that allows us not to duplicate the constants in clang code,
0835   /// which we must to since we can't directly use the llvm constants.
0836   /// The value is verified against llvm here: lib/CodeGen/CGDecl.cpp
0837   ///
0838   /// This is the greatest alignment value supported by load, store, and alloca
0839   /// instructions, and global values.
0840   static const unsigned MaxAlignmentExponent = 32;
0841   static const uint64_t MaximumAlignment = 1ull << MaxAlignmentExponent;
0842 
0843   /// Flag indicating whether or not to collect detailed statistics.
0844   bool CollectStats;
0845 
0846   std::unique_ptr<sema::FunctionScopeInfo> CachedFunctionScope;
0847 
0848   /// Stack containing information about each of the nested
0849   /// function, block, and method scopes that are currently active.
0850   SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes;
0851 
0852   /// The index of the first FunctionScope that corresponds to the current
0853   /// context.
0854   unsigned FunctionScopesStart = 0;
0855 
0856   /// Track the number of currently active capturing scopes.
0857   unsigned CapturingFunctionScopes = 0;
0858 
0859   llvm::BumpPtrAllocator BumpAlloc;
0860 
0861   /// The kind of translation unit we are processing.
0862   ///
0863   /// When we're processing a complete translation unit, Sema will perform
0864   /// end-of-translation-unit semantic tasks (such as creating
0865   /// initializers for tentative definitions in C) once parsing has
0866   /// completed. Modules and precompiled headers perform different kinds of
0867   /// checks.
0868   const TranslationUnitKind TUKind;
0869 
0870   /// Translation Unit Scope - useful to Objective-C actions that need
0871   /// to lookup file scope declarations in the "ordinary" C decl namespace.
0872   /// For example, user-defined classes, built-in "id" type, etc.
0873   Scope *TUScope;
0874 
0875   void incrementMSManglingNumber() const {
0876     return CurScope->incrementMSManglingNumber();
0877   }
0878 
0879   /// Try to recover by turning the given expression into a
0880   /// call.  Returns true if recovery was attempted or an error was
0881   /// emitted; this may also leave the ExprResult invalid.
0882   bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
0883                             bool ForceComplain = false,
0884                             bool (*IsPlausibleResult)(QualType) = nullptr);
0885 
0886   /// Figure out if an expression could be turned into a call.
0887   ///
0888   /// Use this when trying to recover from an error where the programmer may
0889   /// have written just the name of a function instead of actually calling it.
0890   ///
0891   /// \param E - The expression to examine.
0892   /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
0893   ///  with no arguments, this parameter is set to the type returned by such a
0894   ///  call; otherwise, it is set to an empty QualType.
0895   /// \param OverloadSet - If the expression is an overloaded function
0896   ///  name, this parameter is populated with the decls of the various
0897   ///  overloads.
0898   bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
0899                      UnresolvedSetImpl &NonTemplateOverloads);
0900 
0901   typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
0902   typedef OpaquePtr<TemplateName> TemplateTy;
0903   typedef OpaquePtr<QualType> TypeTy;
0904 
0905   OpenCLOptions OpenCLFeatures;
0906   FPOptions CurFPFeatures;
0907 
0908   const LangOptions &LangOpts;
0909   Preprocessor &PP;
0910   ASTContext &Context;
0911   ASTConsumer &Consumer;
0912   DiagnosticsEngine &Diags;
0913   SourceManager &SourceMgr;
0914   api_notes::APINotesManager APINotes;
0915 
0916   /// A RAII object to enter scope of a compound statement.
0917   class CompoundScopeRAII {
0918   public:
0919     CompoundScopeRAII(Sema &S, bool IsStmtExpr = false) : S(S) {
0920       S.ActOnStartOfCompoundStmt(IsStmtExpr);
0921     }
0922 
0923     ~CompoundScopeRAII() { S.ActOnFinishOfCompoundStmt(); }
0924 
0925   private:
0926     Sema &S;
0927   };
0928 
0929   /// An RAII helper that pops function a function scope on exit.
0930   struct FunctionScopeRAII {
0931     Sema &S;
0932     bool Active;
0933     FunctionScopeRAII(Sema &S) : S(S), Active(true) {}
0934     ~FunctionScopeRAII() {
0935       if (Active)
0936         S.PopFunctionScopeInfo();
0937     }
0938     void disable() { Active = false; }
0939   };
0940 
0941   sema::FunctionScopeInfo *getCurFunction() const {
0942     return FunctionScopes.empty() ? nullptr : FunctionScopes.back();
0943   }
0944 
0945   /// Worker object for performing CFG-based warnings.
0946   sema::AnalysisBasedWarnings AnalysisWarnings;
0947   threadSafety::BeforeSet *ThreadSafetyDeclCache;
0948 
0949   /// Callback to the parser to parse templated functions when needed.
0950   typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT);
0951   typedef void LateTemplateParserCleanupCB(void *P);
0952   LateTemplateParserCB *LateTemplateParser;
0953   LateTemplateParserCleanupCB *LateTemplateParserCleanup;
0954   void *OpaqueParser;
0955 
0956   void SetLateTemplateParser(LateTemplateParserCB *LTP,
0957                              LateTemplateParserCleanupCB *LTPCleanup, void *P) {
0958     LateTemplateParser = LTP;
0959     LateTemplateParserCleanup = LTPCleanup;
0960     OpaqueParser = P;
0961   }
0962 
0963   /// Callback to the parser to parse a type expressed as a string.
0964   std::function<TypeResult(StringRef, StringRef, SourceLocation)>
0965       ParseTypeFromStringCallback;
0966 
0967   /// VAListTagName - The declaration name corresponding to __va_list_tag.
0968   /// This is used as part of a hack to omit that class from ADL results.
0969   DeclarationName VAListTagName;
0970 
0971   /// Is the last error level diagnostic immediate. This is used to determined
0972   /// whether the next info diagnostic should be immediate.
0973   bool IsLastErrorImmediate = true;
0974 
0975   class DelayedDiagnostics;
0976 
0977   class DelayedDiagnosticsState {
0978     sema::DelayedDiagnosticPool *SavedPool = nullptr;
0979     friend class Sema::DelayedDiagnostics;
0980   };
0981   typedef DelayedDiagnosticsState ParsingDeclState;
0982   typedef DelayedDiagnosticsState ProcessingContextState;
0983 
0984   /// A class which encapsulates the logic for delaying diagnostics
0985   /// during parsing and other processing.
0986   class DelayedDiagnostics {
0987     /// The current pool of diagnostics into which delayed
0988     /// diagnostics should go.
0989     sema::DelayedDiagnosticPool *CurPool = nullptr;
0990 
0991   public:
0992     DelayedDiagnostics() = default;
0993 
0994     /// Adds a delayed diagnostic.
0995     void add(const sema::DelayedDiagnostic &diag); // in DelayedDiagnostic.h
0996 
0997     /// Determines whether diagnostics should be delayed.
0998     bool shouldDelayDiagnostics() { return CurPool != nullptr; }
0999 
1000     /// Returns the current delayed-diagnostics pool.
1001     sema::DelayedDiagnosticPool *getCurrentPool() const { return CurPool; }
1002 
1003     /// Enter a new scope.  Access and deprecation diagnostics will be
1004     /// collected in this pool.
1005     DelayedDiagnosticsState push(sema::DelayedDiagnosticPool &pool) {
1006       DelayedDiagnosticsState state;
1007       state.SavedPool = CurPool;
1008       CurPool = &pool;
1009       return state;
1010     }
1011 
1012     /// Leave a delayed-diagnostic state that was previously pushed.
1013     /// Do not emit any of the diagnostics.  This is performed as part
1014     /// of the bookkeeping of popping a pool "properly".
1015     void popWithoutEmitting(DelayedDiagnosticsState state) {
1016       CurPool = state.SavedPool;
1017     }
1018 
1019     /// Enter a new scope where access and deprecation diagnostics are
1020     /// not delayed.
1021     DelayedDiagnosticsState pushUndelayed() {
1022       DelayedDiagnosticsState state;
1023       state.SavedPool = CurPool;
1024       CurPool = nullptr;
1025       return state;
1026     }
1027 
1028     /// Undo a previous pushUndelayed().
1029     void popUndelayed(DelayedDiagnosticsState state) {
1030       assert(CurPool == nullptr);
1031       CurPool = state.SavedPool;
1032     }
1033   } DelayedDiagnostics;
1034 
1035   ParsingDeclState PushParsingDeclaration(sema::DelayedDiagnosticPool &pool) {
1036     return DelayedDiagnostics.push(pool);
1037   }
1038 
1039   /// Diagnostics that are emitted only if we discover that the given function
1040   /// must be codegen'ed.  Because handling these correctly adds overhead to
1041   /// compilation, this is currently only enabled for CUDA compilations.
1042   SemaDiagnosticBuilder::DeferredDiagnosticsType DeviceDeferredDiags;
1043 
1044   /// CurContext - This is the current declaration context of parsing.
1045   DeclContext *CurContext;
1046 
1047   SemaAMDGPU &AMDGPU() {
1048     assert(AMDGPUPtr);
1049     return *AMDGPUPtr;
1050   }
1051 
1052   SemaARM &ARM() {
1053     assert(ARMPtr);
1054     return *ARMPtr;
1055   }
1056 
1057   SemaAVR &AVR() {
1058     assert(AVRPtr);
1059     return *AVRPtr;
1060   }
1061 
1062   SemaBPF &BPF() {
1063     assert(BPFPtr);
1064     return *BPFPtr;
1065   }
1066 
1067   SemaCodeCompletion &CodeCompletion() {
1068     assert(CodeCompletionPtr);
1069     return *CodeCompletionPtr;
1070   }
1071 
1072   SemaCUDA &CUDA() {
1073     assert(CUDAPtr);
1074     return *CUDAPtr;
1075   }
1076 
1077   SemaHLSL &HLSL() {
1078     assert(HLSLPtr);
1079     return *HLSLPtr;
1080   }
1081 
1082   SemaHexagon &Hexagon() {
1083     assert(HexagonPtr);
1084     return *HexagonPtr;
1085   }
1086 
1087   SemaLoongArch &LoongArch() {
1088     assert(LoongArchPtr);
1089     return *LoongArchPtr;
1090   }
1091 
1092   SemaM68k &M68k() {
1093     assert(M68kPtr);
1094     return *M68kPtr;
1095   }
1096 
1097   SemaMIPS &MIPS() {
1098     assert(MIPSPtr);
1099     return *MIPSPtr;
1100   }
1101 
1102   SemaMSP430 &MSP430() {
1103     assert(MSP430Ptr);
1104     return *MSP430Ptr;
1105   }
1106 
1107   SemaNVPTX &NVPTX() {
1108     assert(NVPTXPtr);
1109     return *NVPTXPtr;
1110   }
1111 
1112   SemaObjC &ObjC() {
1113     assert(ObjCPtr);
1114     return *ObjCPtr;
1115   }
1116 
1117   SemaOpenACC &OpenACC() {
1118     assert(OpenACCPtr);
1119     return *OpenACCPtr;
1120   }
1121 
1122   SemaOpenCL &OpenCL() {
1123     assert(OpenCLPtr);
1124     return *OpenCLPtr;
1125   }
1126 
1127   SemaOpenMP &OpenMP() {
1128     assert(OpenMPPtr && "SemaOpenMP is dead");
1129     return *OpenMPPtr;
1130   }
1131 
1132   SemaPPC &PPC() {
1133     assert(PPCPtr);
1134     return *PPCPtr;
1135   }
1136 
1137   SemaPseudoObject &PseudoObject() {
1138     assert(PseudoObjectPtr);
1139     return *PseudoObjectPtr;
1140   }
1141 
1142   SemaRISCV &RISCV() {
1143     assert(RISCVPtr);
1144     return *RISCVPtr;
1145   }
1146 
1147   SemaSPIRV &SPIRV() {
1148     assert(SPIRVPtr);
1149     return *SPIRVPtr;
1150   }
1151 
1152   SemaSYCL &SYCL() {
1153     assert(SYCLPtr);
1154     return *SYCLPtr;
1155   }
1156 
1157   SemaSwift &Swift() {
1158     assert(SwiftPtr);
1159     return *SwiftPtr;
1160   }
1161 
1162   SemaSystemZ &SystemZ() {
1163     assert(SystemZPtr);
1164     return *SystemZPtr;
1165   }
1166 
1167   SemaWasm &Wasm() {
1168     assert(WasmPtr);
1169     return *WasmPtr;
1170   }
1171 
1172   SemaX86 &X86() {
1173     assert(X86Ptr);
1174     return *X86Ptr;
1175   }
1176 
1177   /// Source of additional semantic information.
1178   IntrusiveRefCntPtr<ExternalSemaSource> ExternalSource;
1179 
1180 protected:
1181   friend class Parser;
1182   friend class InitializationSequence;
1183   friend class ASTReader;
1184   friend class ASTDeclReader;
1185   friend class ASTWriter;
1186 
1187 private:
1188   std::optional<std::unique_ptr<DarwinSDKInfo>> CachedDarwinSDKInfo;
1189   bool WarnedDarwinSDKInfoMissing = false;
1190 
1191   StackExhaustionHandler StackHandler;
1192 
1193   Sema(const Sema &) = delete;
1194   void operator=(const Sema &) = delete;
1195 
1196   /// The handler for the FileChanged preprocessor events.
1197   ///
1198   /// Used for diagnostics that implement custom semantic analysis for #include
1199   /// directives, like -Wpragma-pack.
1200   sema::SemaPPCallbacks *SemaPPCallbackHandler;
1201 
1202   /// The parser's current scope.
1203   ///
1204   /// The parser maintains this state here.
1205   Scope *CurScope;
1206 
1207   mutable IdentifierInfo *Ident_super;
1208 
1209   std::unique_ptr<SemaAMDGPU> AMDGPUPtr;
1210   std::unique_ptr<SemaARM> ARMPtr;
1211   std::unique_ptr<SemaAVR> AVRPtr;
1212   std::unique_ptr<SemaBPF> BPFPtr;
1213   std::unique_ptr<SemaCodeCompletion> CodeCompletionPtr;
1214   std::unique_ptr<SemaCUDA> CUDAPtr;
1215   std::unique_ptr<SemaHLSL> HLSLPtr;
1216   std::unique_ptr<SemaHexagon> HexagonPtr;
1217   std::unique_ptr<SemaLoongArch> LoongArchPtr;
1218   std::unique_ptr<SemaM68k> M68kPtr;
1219   std::unique_ptr<SemaMIPS> MIPSPtr;
1220   std::unique_ptr<SemaMSP430> MSP430Ptr;
1221   std::unique_ptr<SemaNVPTX> NVPTXPtr;
1222   std::unique_ptr<SemaObjC> ObjCPtr;
1223   std::unique_ptr<SemaOpenACC> OpenACCPtr;
1224   std::unique_ptr<SemaOpenCL> OpenCLPtr;
1225   std::unique_ptr<SemaOpenMP> OpenMPPtr;
1226   std::unique_ptr<SemaPPC> PPCPtr;
1227   std::unique_ptr<SemaPseudoObject> PseudoObjectPtr;
1228   std::unique_ptr<SemaRISCV> RISCVPtr;
1229   std::unique_ptr<SemaSPIRV> SPIRVPtr;
1230   std::unique_ptr<SemaSYCL> SYCLPtr;
1231   std::unique_ptr<SemaSwift> SwiftPtr;
1232   std::unique_ptr<SemaSystemZ> SystemZPtr;
1233   std::unique_ptr<SemaWasm> WasmPtr;
1234   std::unique_ptr<SemaX86> X86Ptr;
1235 
1236   ///@}
1237 
1238   //
1239   //
1240   // -------------------------------------------------------------------------
1241   //
1242   //
1243 
1244   /// \name API Notes
1245   /// Implementations are in SemaAPINotes.cpp
1246   ///@{
1247 
1248 public:
1249   /// Map any API notes provided for this declaration to attributes on the
1250   /// declaration.
1251   ///
1252   /// Triggered by declaration-attribute processing.
1253   void ProcessAPINotes(Decl *D);
1254 
1255   ///@}
1256 
1257   //
1258   //
1259   // -------------------------------------------------------------------------
1260   //
1261   //
1262 
1263   /// \name C++ Access Control
1264   /// Implementations are in SemaAccess.cpp
1265   ///@{
1266 
1267 public:
1268   enum AccessResult {
1269     AR_accessible,
1270     AR_inaccessible,
1271     AR_dependent,
1272     AR_delayed
1273   };
1274 
1275   /// SetMemberAccessSpecifier - Set the access specifier of a member.
1276   /// Returns true on error (when the previous member decl access specifier
1277   /// is different from the new member decl access specifier).
1278   bool SetMemberAccessSpecifier(NamedDecl *MemberDecl,
1279                                 NamedDecl *PrevMemberDecl,
1280                                 AccessSpecifier LexicalAS);
1281 
1282   /// Perform access-control checking on a previously-unresolved member
1283   /// access which has now been resolved to a member.
1284   AccessResult CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E,
1285                                            DeclAccessPair FoundDecl);
1286   AccessResult CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E,
1287                                            DeclAccessPair FoundDecl);
1288 
1289   /// Checks access to an overloaded operator new or delete.
1290   AccessResult CheckAllocationAccess(SourceLocation OperatorLoc,
1291                                      SourceRange PlacementRange,
1292                                      CXXRecordDecl *NamingClass,
1293                                      DeclAccessPair FoundDecl,
1294                                      bool Diagnose = true);
1295 
1296   /// Checks access to a constructor.
1297   AccessResult CheckConstructorAccess(SourceLocation Loc, CXXConstructorDecl *D,
1298                                       DeclAccessPair FoundDecl,
1299                                       const InitializedEntity &Entity,
1300                                       bool IsCopyBindingRefToTemp = false);
1301 
1302   /// Checks access to a constructor.
1303   AccessResult CheckConstructorAccess(SourceLocation Loc, CXXConstructorDecl *D,
1304                                       DeclAccessPair FoundDecl,
1305                                       const InitializedEntity &Entity,
1306                                       const PartialDiagnostic &PDiag);
1307   AccessResult CheckDestructorAccess(SourceLocation Loc,
1308                                      CXXDestructorDecl *Dtor,
1309                                      const PartialDiagnostic &PDiag,
1310                                      QualType objectType = QualType());
1311 
1312   /// Checks access to the target of a friend declaration.
1313   AccessResult CheckFriendAccess(NamedDecl *D);
1314 
1315   /// Checks access to a member.
1316   AccessResult CheckMemberAccess(SourceLocation UseLoc,
1317                                  CXXRecordDecl *NamingClass,
1318                                  DeclAccessPair Found);
1319 
1320   /// Checks implicit access to a member in a structured binding.
1321   AccessResult
1322   CheckStructuredBindingMemberAccess(SourceLocation UseLoc,
1323                                      CXXRecordDecl *DecomposedClass,
1324                                      DeclAccessPair Field);
1325   AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr,
1326                                          const SourceRange &,
1327                                          DeclAccessPair FoundDecl);
1328 
1329   /// Checks access to an overloaded member operator, including
1330   /// conversion operators.
1331   AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr,
1332                                          Expr *ArgExpr,
1333                                          DeclAccessPair FoundDecl);
1334   AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr,
1335                                          ArrayRef<Expr *> ArgExprs,
1336                                          DeclAccessPair FoundDecl);
1337   AccessResult CheckAddressOfMemberAccess(Expr *OvlExpr,
1338                                           DeclAccessPair FoundDecl);
1339 
1340   /// Checks access for a hierarchy conversion.
1341   ///
1342   /// \param ForceCheck true if this check should be performed even if access
1343   ///     control is disabled;  some things rely on this for semantics
1344   /// \param ForceUnprivileged true if this check should proceed as if the
1345   ///     context had no special privileges
1346   AccessResult CheckBaseClassAccess(SourceLocation AccessLoc, QualType Base,
1347                                     QualType Derived, const CXXBasePath &Path,
1348                                     unsigned DiagID, bool ForceCheck = false,
1349                                     bool ForceUnprivileged = false);
1350 
1351   /// Checks access to all the declarations in the given result set.
1352   void CheckLookupAccess(const LookupResult &R);
1353 
1354   /// Checks access to Target from the given class. The check will take access
1355   /// specifiers into account, but no member access expressions and such.
1356   ///
1357   /// \param Target the declaration to check if it can be accessed
1358   /// \param NamingClass the class in which the lookup was started.
1359   /// \param BaseType type of the left side of member access expression.
1360   ///        \p BaseType and \p NamingClass are used for C++ access control.
1361   ///        Depending on the lookup case, they should be set to the following:
1362   ///        - lhs.target (member access without a qualifier):
1363   ///          \p BaseType and \p NamingClass are both the type of 'lhs'.
1364   ///        - lhs.X::target (member access with a qualifier):
1365   ///          BaseType is the type of 'lhs', NamingClass is 'X'
1366   ///        - X::target (qualified lookup without member access):
1367   ///          BaseType is null, NamingClass is 'X'.
1368   ///        - target (unqualified lookup).
1369   ///          BaseType is null, NamingClass is the parent class of 'target'.
1370   /// \return true if the Target is accessible from the Class, false otherwise.
1371   bool IsSimplyAccessible(NamedDecl *Decl, CXXRecordDecl *NamingClass,
1372                           QualType BaseType);
1373 
1374   /// Is the given member accessible for the purposes of deciding whether to
1375   /// define a special member function as deleted?
1376   bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass,
1377                                      DeclAccessPair Found, QualType ObjectType,
1378                                      SourceLocation Loc,
1379                                      const PartialDiagnostic &Diag);
1380   bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass,
1381                                      DeclAccessPair Found,
1382                                      QualType ObjectType) {
1383     return isMemberAccessibleForDeletion(NamingClass, Found, ObjectType,
1384                                          SourceLocation(), PDiag());
1385   }
1386 
1387   void HandleDependentAccessCheck(
1388       const DependentDiagnostic &DD,
1389       const MultiLevelTemplateArgumentList &TemplateArgs);
1390   void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
1391 
1392   ///@}
1393 
1394   //
1395   //
1396   // -------------------------------------------------------------------------
1397   //
1398   //
1399 
1400   /// \name Attributes
1401   /// Implementations are in SemaAttr.cpp
1402   ///@{
1403 
1404 public:
1405   /// Controls member pointer representation format under the MS ABI.
1406   LangOptions::PragmaMSPointersToMembersKind
1407       MSPointerToMemberRepresentationMethod;
1408 
1409   bool MSStructPragmaOn; // True when \#pragma ms_struct on
1410 
1411   /// Source location for newly created implicit MSInheritanceAttrs
1412   SourceLocation ImplicitMSInheritanceAttrLoc;
1413 
1414   /// pragma clang section kind
1415   enum PragmaClangSectionKind {
1416     PCSK_Invalid = 0,
1417     PCSK_BSS = 1,
1418     PCSK_Data = 2,
1419     PCSK_Rodata = 3,
1420     PCSK_Text = 4,
1421     PCSK_Relro = 5
1422   };
1423 
1424   enum PragmaClangSectionAction { PCSA_Set = 0, PCSA_Clear = 1 };
1425 
1426   struct PragmaClangSection {
1427     std::string SectionName;
1428     bool Valid = false;
1429     SourceLocation PragmaLocation;
1430   };
1431 
1432   PragmaClangSection PragmaClangBSSSection;
1433   PragmaClangSection PragmaClangDataSection;
1434   PragmaClangSection PragmaClangRodataSection;
1435   PragmaClangSection PragmaClangRelroSection;
1436   PragmaClangSection PragmaClangTextSection;
1437 
1438   enum PragmaMsStackAction {
1439     PSK_Reset = 0x0,                   // #pragma ()
1440     PSK_Set = 0x1,                     // #pragma (value)
1441     PSK_Push = 0x2,                    // #pragma (push[, id])
1442     PSK_Pop = 0x4,                     // #pragma (pop[, id])
1443     PSK_Show = 0x8,                    // #pragma (show) -- only for "pack"!
1444     PSK_Push_Set = PSK_Push | PSK_Set, // #pragma (push[, id], value)
1445     PSK_Pop_Set = PSK_Pop | PSK_Set,   // #pragma (pop[, id], value)
1446   };
1447 
1448   struct PragmaPackInfo {
1449     PragmaMsStackAction Action;
1450     StringRef SlotLabel;
1451     Token Alignment;
1452   };
1453 
1454   // #pragma pack and align.
1455   class AlignPackInfo {
1456   public:
1457     // `Native` represents default align mode, which may vary based on the
1458     // platform.
1459     enum Mode : unsigned char { Native, Natural, Packed, Mac68k };
1460 
1461     // #pragma pack info constructor
1462     AlignPackInfo(AlignPackInfo::Mode M, unsigned Num, bool IsXL)
1463         : PackAttr(true), AlignMode(M), PackNumber(Num), XLStack(IsXL) {
1464       assert(Num == PackNumber && "The pack number has been truncated.");
1465     }
1466 
1467     // #pragma align info constructor
1468     AlignPackInfo(AlignPackInfo::Mode M, bool IsXL)
1469         : PackAttr(false), AlignMode(M),
1470           PackNumber(M == Packed ? 1 : UninitPackVal), XLStack(IsXL) {}
1471 
1472     explicit AlignPackInfo(bool IsXL) : AlignPackInfo(Native, IsXL) {}
1473 
1474     AlignPackInfo() : AlignPackInfo(Native, false) {}
1475 
1476     // When a AlignPackInfo itself cannot be used, this returns an 32-bit
1477     // integer encoding for it. This should only be passed to
1478     // AlignPackInfo::getFromRawEncoding, it should not be inspected directly.
1479     static uint32_t getRawEncoding(const AlignPackInfo &Info) {
1480       std::uint32_t Encoding{};
1481       if (Info.IsXLStack())
1482         Encoding |= IsXLMask;
1483 
1484       Encoding |= static_cast<uint32_t>(Info.getAlignMode()) << 1;
1485 
1486       if (Info.IsPackAttr())
1487         Encoding |= PackAttrMask;
1488 
1489       Encoding |= static_cast<uint32_t>(Info.getPackNumber()) << 4;
1490 
1491       return Encoding;
1492     }
1493 
1494     static AlignPackInfo getFromRawEncoding(unsigned Encoding) {
1495       bool IsXL = static_cast<bool>(Encoding & IsXLMask);
1496       AlignPackInfo::Mode M =
1497           static_cast<AlignPackInfo::Mode>((Encoding & AlignModeMask) >> 1);
1498       int PackNumber = (Encoding & PackNumMask) >> 4;
1499 
1500       if (Encoding & PackAttrMask)
1501         return AlignPackInfo(M, PackNumber, IsXL);
1502 
1503       return AlignPackInfo(M, IsXL);
1504     }
1505 
1506     bool IsPackAttr() const { return PackAttr; }
1507 
1508     bool IsAlignAttr() const { return !PackAttr; }
1509 
1510     Mode getAlignMode() const { return AlignMode; }
1511 
1512     unsigned getPackNumber() const { return PackNumber; }
1513 
1514     bool IsPackSet() const {
1515       // #pragma align, #pragma pack(), and #pragma pack(0) do not set the pack
1516       // attriute on a decl.
1517       return PackNumber != UninitPackVal && PackNumber != 0;
1518     }
1519 
1520     bool IsXLStack() const { return XLStack; }
1521 
1522     bool operator==(const AlignPackInfo &Info) const {
1523       return std::tie(AlignMode, PackNumber, PackAttr, XLStack) ==
1524              std::tie(Info.AlignMode, Info.PackNumber, Info.PackAttr,
1525                       Info.XLStack);
1526     }
1527 
1528     bool operator!=(const AlignPackInfo &Info) const {
1529       return !(*this == Info);
1530     }
1531 
1532   private:
1533     /// \brief True if this is a pragma pack attribute,
1534     ///         not a pragma align attribute.
1535     bool PackAttr;
1536 
1537     /// \brief The alignment mode that is in effect.
1538     Mode AlignMode;
1539 
1540     /// \brief The pack number of the stack.
1541     unsigned char PackNumber;
1542 
1543     /// \brief True if it is a XL #pragma align/pack stack.
1544     bool XLStack;
1545 
1546     /// \brief Uninitialized pack value.
1547     static constexpr unsigned char UninitPackVal = -1;
1548 
1549     // Masks to encode and decode an AlignPackInfo.
1550     static constexpr uint32_t IsXLMask{0x0000'0001};
1551     static constexpr uint32_t AlignModeMask{0x0000'0006};
1552     static constexpr uint32_t PackAttrMask{0x00000'0008};
1553     static constexpr uint32_t PackNumMask{0x0000'01F0};
1554   };
1555 
1556   template <typename ValueType> struct PragmaStack {
1557     struct Slot {
1558       llvm::StringRef StackSlotLabel;
1559       ValueType Value;
1560       SourceLocation PragmaLocation;
1561       SourceLocation PragmaPushLocation;
1562       Slot(llvm::StringRef StackSlotLabel, ValueType Value,
1563            SourceLocation PragmaLocation, SourceLocation PragmaPushLocation)
1564           : StackSlotLabel(StackSlotLabel), Value(Value),
1565             PragmaLocation(PragmaLocation),
1566             PragmaPushLocation(PragmaPushLocation) {}
1567     };
1568 
1569     void Act(SourceLocation PragmaLocation, PragmaMsStackAction Action,
1570              llvm::StringRef StackSlotLabel, ValueType Value) {
1571       if (Action == PSK_Reset) {
1572         CurrentValue = DefaultValue;
1573         CurrentPragmaLocation = PragmaLocation;
1574         return;
1575       }
1576       if (Action & PSK_Push)
1577         Stack.emplace_back(StackSlotLabel, CurrentValue, CurrentPragmaLocation,
1578                            PragmaLocation);
1579       else if (Action & PSK_Pop) {
1580         if (!StackSlotLabel.empty()) {
1581           // If we've got a label, try to find it and jump there.
1582           auto I = llvm::find_if(llvm::reverse(Stack), [&](const Slot &x) {
1583             return x.StackSlotLabel == StackSlotLabel;
1584           });
1585           // If we found the label so pop from there.
1586           if (I != Stack.rend()) {
1587             CurrentValue = I->Value;
1588             CurrentPragmaLocation = I->PragmaLocation;
1589             Stack.erase(std::prev(I.base()), Stack.end());
1590           }
1591         } else if (!Stack.empty()) {
1592           // We do not have a label, just pop the last entry.
1593           CurrentValue = Stack.back().Value;
1594           CurrentPragmaLocation = Stack.back().PragmaLocation;
1595           Stack.pop_back();
1596         }
1597       }
1598       if (Action & PSK_Set) {
1599         CurrentValue = Value;
1600         CurrentPragmaLocation = PragmaLocation;
1601       }
1602     }
1603 
1604     // MSVC seems to add artificial slots to #pragma stacks on entering a C++
1605     // method body to restore the stacks on exit, so it works like this:
1606     //
1607     //   struct S {
1608     //     #pragma <name>(push, InternalPragmaSlot, <current_pragma_value>)
1609     //     void Method {}
1610     //     #pragma <name>(pop, InternalPragmaSlot)
1611     //   };
1612     //
1613     // It works even with #pragma vtordisp, although MSVC doesn't support
1614     //   #pragma vtordisp(push [, id], n)
1615     // syntax.
1616     //
1617     // Push / pop a named sentinel slot.
1618     void SentinelAction(PragmaMsStackAction Action, StringRef Label) {
1619       assert((Action == PSK_Push || Action == PSK_Pop) &&
1620              "Can only push / pop #pragma stack sentinels!");
1621       Act(CurrentPragmaLocation, Action, Label, CurrentValue);
1622     }
1623 
1624     // Constructors.
1625     explicit PragmaStack(const ValueType &Default)
1626         : DefaultValue(Default), CurrentValue(Default) {}
1627 
1628     bool hasValue() const { return CurrentValue != DefaultValue; }
1629 
1630     SmallVector<Slot, 2> Stack;
1631     ValueType DefaultValue; // Value used for PSK_Reset action.
1632     ValueType CurrentValue;
1633     SourceLocation CurrentPragmaLocation;
1634   };
1635   // FIXME: We should serialize / deserialize these if they occur in a PCH (but
1636   // we shouldn't do so if they're in a module).
1637 
1638   /// Whether to insert vtordisps prior to virtual bases in the Microsoft
1639   /// C++ ABI.  Possible values are 0, 1, and 2, which mean:
1640   ///
1641   /// 0: Suppress all vtordisps
1642   /// 1: Insert vtordisps in the presence of vbase overrides and non-trivial
1643   ///    structors
1644   /// 2: Always insert vtordisps to support RTTI on partially constructed
1645   ///    objects
1646   PragmaStack<MSVtorDispMode> VtorDispStack;
1647   PragmaStack<AlignPackInfo> AlignPackStack;
1648   // The current #pragma align/pack values and locations at each #include.
1649   struct AlignPackIncludeState {
1650     AlignPackInfo CurrentValue;
1651     SourceLocation CurrentPragmaLocation;
1652     bool HasNonDefaultValue, ShouldWarnOnInclude;
1653   };
1654   SmallVector<AlignPackIncludeState, 8> AlignPackIncludeStack;
1655   // Segment #pragmas.
1656   PragmaStack<StringLiteral *> DataSegStack;
1657   PragmaStack<StringLiteral *> BSSSegStack;
1658   PragmaStack<StringLiteral *> ConstSegStack;
1659   PragmaStack<StringLiteral *> CodeSegStack;
1660 
1661   // #pragma strict_gs_check.
1662   PragmaStack<bool> StrictGuardStackCheckStack;
1663 
1664   // This stack tracks the current state of Sema.CurFPFeatures.
1665   PragmaStack<FPOptionsOverride> FpPragmaStack;
1666   FPOptionsOverride CurFPFeatureOverrides() {
1667     FPOptionsOverride result;
1668     if (!FpPragmaStack.hasValue()) {
1669       result = FPOptionsOverride();
1670     } else {
1671       result = FpPragmaStack.CurrentValue;
1672     }
1673     return result;
1674   }
1675 
1676   enum PragmaSectionKind {
1677     PSK_DataSeg,
1678     PSK_BSSSeg,
1679     PSK_ConstSeg,
1680     PSK_CodeSeg,
1681   };
1682 
1683   // RAII object to push / pop sentinel slots for all MS #pragma stacks.
1684   // Actions should be performed only if we enter / exit a C++ method body.
1685   class PragmaStackSentinelRAII {
1686   public:
1687     PragmaStackSentinelRAII(Sema &S, StringRef SlotLabel, bool ShouldAct);
1688     ~PragmaStackSentinelRAII();
1689 
1690   private:
1691     Sema &S;
1692     StringRef SlotLabel;
1693     bool ShouldAct;
1694   };
1695 
1696   /// Last section used with #pragma init_seg.
1697   StringLiteral *CurInitSeg;
1698   SourceLocation CurInitSegLoc;
1699 
1700   /// Sections used with #pragma alloc_text.
1701   llvm::StringMap<std::tuple<StringRef, SourceLocation>> FunctionToSectionMap;
1702 
1703   /// VisContext - Manages the stack for \#pragma GCC visibility.
1704   void *VisContext; // Really a "PragmaVisStack*"
1705 
1706   /// This an attribute introduced by \#pragma clang attribute.
1707   struct PragmaAttributeEntry {
1708     SourceLocation Loc;
1709     ParsedAttr *Attribute;
1710     SmallVector<attr::SubjectMatchRule, 4> MatchRules;
1711     bool IsUsed;
1712   };
1713 
1714   /// A push'd group of PragmaAttributeEntries.
1715   struct PragmaAttributeGroup {
1716     /// The location of the push attribute.
1717     SourceLocation Loc;
1718     /// The namespace of this push group.
1719     const IdentifierInfo *Namespace;
1720     SmallVector<PragmaAttributeEntry, 2> Entries;
1721   };
1722 
1723   SmallVector<PragmaAttributeGroup, 2> PragmaAttributeStack;
1724 
1725   /// The declaration that is currently receiving an attribute from the
1726   /// #pragma attribute stack.
1727   const Decl *PragmaAttributeCurrentTargetDecl;
1728 
1729   /// This represents the last location of a "#pragma clang optimize off"
1730   /// directive if such a directive has not been closed by an "on" yet. If
1731   /// optimizations are currently "on", this is set to an invalid location.
1732   SourceLocation OptimizeOffPragmaLocation;
1733 
1734   /// Get the location for the currently active "\#pragma clang optimize
1735   /// off". If this location is invalid, then the state of the pragma is "on".
1736   SourceLocation getOptimizeOffPragmaLocation() const {
1737     return OptimizeOffPragmaLocation;
1738   }
1739 
1740   /// The "on" or "off" argument passed by \#pragma optimize, that denotes
1741   /// whether the optimizations in the list passed to the pragma should be
1742   /// turned off or on. This boolean is true by default because command line
1743   /// options are honored when `#pragma optimize("", on)`.
1744   /// (i.e. `ModifyFnAttributeMSPragmaOptimze()` does nothing)
1745   bool MSPragmaOptimizeIsOn = true;
1746 
1747   /// Set of no-builtin functions listed by \#pragma function.
1748   llvm::SmallSetVector<StringRef, 4> MSFunctionNoBuiltins;
1749 
1750   /// AddAlignmentAttributesForRecord - Adds any needed alignment attributes to
1751   /// a the record decl, to handle '\#pragma pack' and '\#pragma options align'.
1752   void AddAlignmentAttributesForRecord(RecordDecl *RD);
1753 
1754   /// AddMsStructLayoutForRecord - Adds ms_struct layout attribute to record.
1755   void AddMsStructLayoutForRecord(RecordDecl *RD);
1756 
1757   /// Add gsl::Pointer attribute to std::container::iterator
1758   /// \param ND The declaration that introduces the name
1759   /// std::container::iterator. \param UnderlyingRecord The record named by ND.
1760   void inferGslPointerAttribute(NamedDecl *ND, CXXRecordDecl *UnderlyingRecord);
1761 
1762   /// Add [[gsl::Owner]] and [[gsl::Pointer]] attributes for std:: types.
1763   void inferGslOwnerPointerAttribute(CXXRecordDecl *Record);
1764 
1765   /// Add [[clang:::lifetimebound]] attr for std:: functions and methods.
1766   void inferLifetimeBoundAttribute(FunctionDecl *FD);
1767 
1768   /// Add [[clang:::lifetime_capture_by(this)]] to STL container methods.
1769   void inferLifetimeCaptureByAttribute(FunctionDecl *FD);
1770 
1771   /// Add [[gsl::Pointer]] attributes for std:: types.
1772   void inferGslPointerAttribute(TypedefNameDecl *TD);
1773 
1774   LifetimeCaptureByAttr *ParseLifetimeCaptureByAttr(const ParsedAttr &AL,
1775                                                     StringRef ParamName);
1776   // Processes the argument 'X' in [[clang::lifetime_capture_by(X)]]. Since 'X'
1777   // can be the name of a function parameter, we need to parse the function
1778   // declaration and rest of the parameters before processesing 'X'. Therefore
1779   // do this lazily instead of processing while parsing the annotation itself.
1780   void LazyProcessLifetimeCaptureByParams(FunctionDecl *FD);
1781 
1782   /// Add _Nullable attributes for std:: types.
1783   void inferNullableClassAttribute(CXXRecordDecl *CRD);
1784 
1785   enum PragmaOptionsAlignKind {
1786     POAK_Native,  // #pragma options align=native
1787     POAK_Natural, // #pragma options align=natural
1788     POAK_Packed,  // #pragma options align=packed
1789     POAK_Power,   // #pragma options align=power
1790     POAK_Mac68k,  // #pragma options align=mac68k
1791     POAK_Reset    // #pragma options align=reset
1792   };
1793 
1794   /// ActOnPragmaClangSection - Called on well formed \#pragma clang section
1795   void ActOnPragmaClangSection(SourceLocation PragmaLoc,
1796                                PragmaClangSectionAction Action,
1797                                PragmaClangSectionKind SecKind,
1798                                StringRef SecName);
1799 
1800   /// ActOnPragmaOptionsAlign - Called on well formed \#pragma options align.
1801   void ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind,
1802                                SourceLocation PragmaLoc);
1803 
1804   /// ActOnPragmaPack - Called on well formed \#pragma pack(...).
1805   void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action,
1806                        StringRef SlotLabel, Expr *Alignment);
1807 
1808   /// ConstantFoldAttrArgs - Folds attribute arguments into ConstantExprs
1809   /// (unless they are value dependent or type dependent). Returns false
1810   /// and emits a diagnostic if one or more of the arguments could not be
1811   /// folded into a constant.
1812   bool ConstantFoldAttrArgs(const AttributeCommonInfo &CI,
1813                             MutableArrayRef<Expr *> Args);
1814 
1815   enum class PragmaAlignPackDiagnoseKind {
1816     NonDefaultStateAtInclude,
1817     ChangedStateAtExit
1818   };
1819 
1820   void DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind,
1821                                          SourceLocation IncludeLoc);
1822   void DiagnoseUnterminatedPragmaAlignPack();
1823 
1824   /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off].
1825   void ActOnPragmaMSStruct(PragmaMSStructKind Kind);
1826 
1827   /// ActOnPragmaMSComment - Called on well formed
1828   /// \#pragma comment(kind, "arg").
1829   void ActOnPragmaMSComment(SourceLocation CommentLoc, PragmaMSCommentKind Kind,
1830                             StringRef Arg);
1831 
1832   /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch
1833   void ActOnPragmaDetectMismatch(SourceLocation Loc, StringRef Name,
1834                                  StringRef Value);
1835 
1836   /// Are precise floating point semantics currently enabled?
1837   bool isPreciseFPEnabled() {
1838     return !CurFPFeatures.getAllowFPReassociate() &&
1839            !CurFPFeatures.getNoSignedZero() &&
1840            !CurFPFeatures.getAllowReciprocal() &&
1841            !CurFPFeatures.getAllowApproxFunc();
1842   }
1843 
1844   void ActOnPragmaFPEvalMethod(SourceLocation Loc,
1845                                LangOptions::FPEvalMethodKind Value);
1846 
1847   /// ActOnPragmaFloatControl - Call on well-formed \#pragma float_control
1848   void ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action,
1849                                PragmaFloatControlKind Value);
1850 
1851   /// ActOnPragmaMSPointersToMembers - called on well formed \#pragma
1852   /// pointers_to_members(representation method[, general purpose
1853   /// representation]).
1854   void ActOnPragmaMSPointersToMembers(
1855       LangOptions::PragmaMSPointersToMembersKind Kind,
1856       SourceLocation PragmaLoc);
1857 
1858   /// Called on well formed \#pragma vtordisp().
1859   void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action,
1860                              SourceLocation PragmaLoc, MSVtorDispMode Value);
1861 
1862   bool UnifySection(StringRef SectionName, int SectionFlags,
1863                     NamedDecl *TheDecl);
1864   bool UnifySection(StringRef SectionName, int SectionFlags,
1865                     SourceLocation PragmaSectionLocation);
1866 
1867   /// Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg.
1868   void ActOnPragmaMSSeg(SourceLocation PragmaLocation,
1869                         PragmaMsStackAction Action,
1870                         llvm::StringRef StackSlotLabel,
1871                         StringLiteral *SegmentName, llvm::StringRef PragmaName);
1872 
1873   /// Called on well formed \#pragma section().
1874   void ActOnPragmaMSSection(SourceLocation PragmaLocation, int SectionFlags,
1875                             StringLiteral *SegmentName);
1876 
1877   /// Called on well-formed \#pragma init_seg().
1878   void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation,
1879                             StringLiteral *SegmentName);
1880 
1881   /// Called on well-formed \#pragma alloc_text().
1882   void ActOnPragmaMSAllocText(
1883       SourceLocation PragmaLocation, StringRef Section,
1884       const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>>
1885           &Functions);
1886 
1887   /// ActOnPragmaMSStrictGuardStackCheck - Called on well formed \#pragma
1888   /// strict_gs_check.
1889   void ActOnPragmaMSStrictGuardStackCheck(SourceLocation PragmaLocation,
1890                                           PragmaMsStackAction Action,
1891                                           bool Value);
1892 
1893   /// ActOnPragmaUnused - Called on well-formed '\#pragma unused'.
1894   void ActOnPragmaUnused(const Token &Identifier, Scope *curScope,
1895                          SourceLocation PragmaLoc);
1896 
1897   void ActOnPragmaAttributeAttribute(ParsedAttr &Attribute,
1898                                      SourceLocation PragmaLoc,
1899                                      attr::ParsedSubjectMatchRuleSet Rules);
1900   void ActOnPragmaAttributeEmptyPush(SourceLocation PragmaLoc,
1901                                      const IdentifierInfo *Namespace);
1902 
1903   /// Called on well-formed '\#pragma clang attribute pop'.
1904   void ActOnPragmaAttributePop(SourceLocation PragmaLoc,
1905                                const IdentifierInfo *Namespace);
1906 
1907   /// Adds the attributes that have been specified using the
1908   /// '\#pragma clang attribute push' directives to the given declaration.
1909   void AddPragmaAttributes(Scope *S, Decl *D);
1910 
1911   void PrintPragmaAttributeInstantiationPoint();
1912 
1913   void DiagnoseUnterminatedPragmaAttribute();
1914 
1915   /// Called on well formed \#pragma clang optimize.
1916   void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc);
1917 
1918   /// #pragma optimize("[optimization-list]", on | off).
1919   void ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn);
1920 
1921   /// Call on well formed \#pragma function.
1922   void
1923   ActOnPragmaMSFunction(SourceLocation Loc,
1924                         const llvm::SmallVectorImpl<StringRef> &NoBuiltins);
1925 
1926   /// Only called on function definitions; if there is a pragma in scope
1927   /// with the effect of a range-based optnone, consider marking the function
1928   /// with attribute optnone.
1929   void AddRangeBasedOptnone(FunctionDecl *FD);
1930 
1931   /// Only called on function definitions; if there is a `#pragma alloc_text`
1932   /// that decides which code section the function should be in, add
1933   /// attribute section to the function.
1934   void AddSectionMSAllocText(FunctionDecl *FD);
1935 
1936   /// Adds the 'optnone' attribute to the function declaration if there
1937   /// are no conflicts; Loc represents the location causing the 'optnone'
1938   /// attribute to be added (usually because of a pragma).
1939   void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc);
1940 
1941   /// Only called on function definitions; if there is a MSVC #pragma optimize
1942   /// in scope, consider changing the function's attributes based on the
1943   /// optimization list passed to the pragma.
1944   void ModifyFnAttributesMSPragmaOptimize(FunctionDecl *FD);
1945 
1946   /// Only called on function definitions; if there is a pragma in scope
1947   /// with the effect of a range-based no_builtin, consider marking the function
1948   /// with attribute no_builtin.
1949   void AddImplicitMSFunctionNoBuiltinAttr(FunctionDecl *FD);
1950 
1951   /// AddPushedVisibilityAttribute - If '\#pragma GCC visibility' was used,
1952   /// add an appropriate visibility attribute.
1953   void AddPushedVisibilityAttribute(Decl *RD);
1954 
1955   /// FreeVisContext - Deallocate and null out VisContext.
1956   void FreeVisContext();
1957 
1958   /// ActOnPragmaVisibility - Called on well formed \#pragma GCC visibility... .
1959   void ActOnPragmaVisibility(const IdentifierInfo *VisType,
1960                              SourceLocation PragmaLoc);
1961 
1962   /// ActOnPragmaFPContract - Called on well formed
1963   /// \#pragma {STDC,OPENCL} FP_CONTRACT and
1964   /// \#pragma clang fp contract
1965   void ActOnPragmaFPContract(SourceLocation Loc, LangOptions::FPModeKind FPC);
1966 
1967   /// Called on well formed
1968   /// \#pragma clang fp reassociate
1969   /// or
1970   /// \#pragma clang fp reciprocal
1971   void ActOnPragmaFPValueChangingOption(SourceLocation Loc, PragmaFPKind Kind,
1972                                         bool IsEnabled);
1973 
1974   /// ActOnPragmaFenvAccess - Called on well formed
1975   /// \#pragma STDC FENV_ACCESS
1976   void ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled);
1977 
1978   /// ActOnPragmaCXLimitedRange - Called on well formed
1979   /// \#pragma STDC CX_LIMITED_RANGE
1980   void ActOnPragmaCXLimitedRange(SourceLocation Loc,
1981                                  LangOptions::ComplexRangeKind Range);
1982 
1983   /// Called on well formed '\#pragma clang fp' that has option 'exceptions'.
1984   void ActOnPragmaFPExceptions(SourceLocation Loc,
1985                                LangOptions::FPExceptionModeKind);
1986 
1987   /// Called to set constant rounding mode for floating point operations.
1988   void ActOnPragmaFEnvRound(SourceLocation Loc, llvm::RoundingMode);
1989 
1990   /// Called to set exception behavior for floating point operations.
1991   void setExceptionMode(SourceLocation Loc, LangOptions::FPExceptionModeKind);
1992 
1993   /// PushNamespaceVisibilityAttr - Note that we've entered a
1994   /// namespace with a visibility attribute.
1995   void PushNamespaceVisibilityAttr(const VisibilityAttr *Attr,
1996                                    SourceLocation Loc);
1997 
1998   /// PopPragmaVisibility - Pop the top element of the visibility stack; used
1999   /// for '\#pragma GCC visibility' and visibility attributes on namespaces.
2000   void PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc);
2001 
2002   /// Handles semantic checking for features that are common to all attributes,
2003   /// such as checking whether a parameter was properly specified, or the
2004   /// correct number of arguments were passed, etc. Returns true if the
2005   /// attribute has been diagnosed.
2006   bool checkCommonAttributeFeatures(const Decl *D, const ParsedAttr &A,
2007                                     bool SkipArgCountCheck = false);
2008   bool checkCommonAttributeFeatures(const Stmt *S, const ParsedAttr &A,
2009                                     bool SkipArgCountCheck = false);
2010 
2011   ///@}
2012 
2013   //
2014   //
2015   // -------------------------------------------------------------------------
2016   //
2017   //
2018 
2019   /// \name Availability Attribute Handling
2020   /// Implementations are in SemaAvailability.cpp
2021   ///@{
2022 
2023 public:
2024   /// Issue any -Wunguarded-availability warnings in \c FD
2025   void DiagnoseUnguardedAvailabilityViolations(Decl *FD);
2026 
2027   void handleDelayedAvailabilityCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
2028 
2029   /// Retrieve the current function, if any, that should be analyzed for
2030   /// potential availability violations.
2031   sema::FunctionScopeInfo *getCurFunctionAvailabilityContext();
2032 
2033   void DiagnoseAvailabilityOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs,
2034                                   const ObjCInterfaceDecl *UnknownObjCClass,
2035                                   bool ObjCPropertyAccess,
2036                                   bool AvoidPartialAvailabilityChecks = false,
2037                                   ObjCInterfaceDecl *ClassReceiver = nullptr);
2038 
2039   ///@}
2040 
2041   //
2042   //
2043   // -------------------------------------------------------------------------
2044   //
2045   //
2046 
2047   /// \name Bounds Safety
2048   /// Implementations are in SemaBoundsSafety.cpp
2049   ///@{
2050 public:
2051   /// Check if applying the specified attribute variant from the "counted by"
2052   /// family of attributes to FieldDecl \p FD is semantically valid. If
2053   /// semantically invalid diagnostics will be emitted explaining the problems.
2054   ///
2055   /// \param FD The FieldDecl to apply the attribute to
2056   /// \param E The count expression on the attribute
2057   /// \param CountInBytes If true the attribute is from the "sized_by" family of
2058   ///                     attributes. If the false the attribute is from
2059   ///                     "counted_by" family of attributes.
2060   /// \param OrNull If true the attribute is from the "_or_null" suffixed family
2061   ///               of attributes. If false the attribute does not have the
2062   ///               suffix.
2063   ///
2064   /// Together \p CountInBytes and \p OrNull decide the attribute variant. E.g.
2065   /// \p CountInBytes and \p OrNull both being true indicates the
2066   /// `counted_by_or_null` attribute.
2067   ///
2068   /// \returns false iff semantically valid.
2069   bool CheckCountedByAttrOnField(FieldDecl *FD, Expr *E, bool CountInBytes,
2070                                  bool OrNull);
2071 
2072   ///@}
2073 
2074   //
2075   //
2076   // -------------------------------------------------------------------------
2077   //
2078   //
2079 
2080   /// \name Casts
2081   /// Implementations are in SemaCast.cpp
2082   ///@{
2083 
2084 public:
2085   static bool isCast(CheckedConversionKind CCK) {
2086     return CCK == CheckedConversionKind::CStyleCast ||
2087            CCK == CheckedConversionKind::FunctionalCast ||
2088            CCK == CheckedConversionKind::OtherCast;
2089   }
2090 
2091   /// ActOnCXXNamedCast - Parse
2092   /// {dynamic,static,reinterpret,const,addrspace}_cast's.
2093   ExprResult ActOnCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind,
2094                                SourceLocation LAngleBracketLoc, Declarator &D,
2095                                SourceLocation RAngleBracketLoc,
2096                                SourceLocation LParenLoc, Expr *E,
2097                                SourceLocation RParenLoc);
2098 
2099   ExprResult BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind,
2100                                TypeSourceInfo *Ty, Expr *E,
2101                                SourceRange AngleBrackets, SourceRange Parens);
2102 
2103   ExprResult ActOnBuiltinBitCastExpr(SourceLocation KWLoc, Declarator &Dcl,
2104                                      ExprResult Operand,
2105                                      SourceLocation RParenLoc);
2106 
2107   ExprResult BuildBuiltinBitCastExpr(SourceLocation KWLoc, TypeSourceInfo *TSI,
2108                                      Expr *Operand, SourceLocation RParenLoc);
2109 
2110   // Checks that reinterpret casts don't have undefined behavior.
2111   void CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType,
2112                                       bool IsDereference, SourceRange Range);
2113 
2114   // Checks that the vector type should be initialized from a scalar
2115   // by splatting the value rather than populating a single element.
2116   // This is the case for AltiVecVector types as well as with
2117   // AltiVecPixel and AltiVecBool when -faltivec-src-compat=xl is specified.
2118   bool ShouldSplatAltivecScalarInCast(const VectorType *VecTy);
2119 
2120   // Checks if the -faltivec-src-compat=gcc option is specified.
2121   // If so, AltiVecVector, AltiVecBool and AltiVecPixel types are
2122   // treated the same way as they are when trying to initialize
2123   // these vectors on gcc (an error is emitted).
2124   bool CheckAltivecInitFromScalar(SourceRange R, QualType VecTy,
2125                                   QualType SrcTy);
2126 
2127   ExprResult BuildCStyleCastExpr(SourceLocation LParenLoc, TypeSourceInfo *Ty,
2128                                  SourceLocation RParenLoc, Expr *Op);
2129 
2130   ExprResult BuildCXXFunctionalCastExpr(TypeSourceInfo *TInfo, QualType Type,
2131                                         SourceLocation LParenLoc,
2132                                         Expr *CastExpr,
2133                                         SourceLocation RParenLoc);
2134 
2135   ///@}
2136 
2137   //
2138   //
2139   // -------------------------------------------------------------------------
2140   //
2141   //
2142 
2143   /// \name Extra Semantic Checking
2144   /// Implementations are in SemaChecking.cpp
2145   ///@{
2146 
2147 public:
2148   /// Used to change context to isConstantEvaluated without pushing a heavy
2149   /// ExpressionEvaluationContextRecord object.
2150   bool isConstantEvaluatedOverride = false;
2151 
2152   bool isConstantEvaluatedContext() const {
2153     return currentEvaluationContext().isConstantEvaluated() ||
2154            isConstantEvaluatedOverride;
2155   }
2156 
2157   SourceLocation getLocationOfStringLiteralByte(const StringLiteral *SL,
2158                                                 unsigned ByteNo) const;
2159 
2160   enum FormatArgumentPassingKind {
2161     FAPK_Fixed,    // values to format are fixed (no C-style variadic arguments)
2162     FAPK_Variadic, // values to format are passed as variadic arguments
2163     FAPK_VAList,   // values to format are passed in a va_list
2164   };
2165 
2166   // Used to grab the relevant information from a FormatAttr and a
2167   // FunctionDeclaration.
2168   struct FormatStringInfo {
2169     unsigned FormatIdx;
2170     unsigned FirstDataArg;
2171     FormatArgumentPassingKind ArgPassingKind;
2172   };
2173 
2174   /// Given a FunctionDecl's FormatAttr, attempts to populate the
2175   /// FomatStringInfo parameter with the FormatAttr's correct format_idx and
2176   /// firstDataArg. Returns true when the format fits the function and the
2177   /// FormatStringInfo has been populated.
2178   static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember,
2179                                   bool IsVariadic, FormatStringInfo *FSI);
2180 
2181   // Used by C++ template instantiation.
2182   ExprResult BuiltinShuffleVector(CallExpr *TheCall);
2183 
2184   /// ConvertVectorExpr - Handle __builtin_convertvector
2185   ExprResult ConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo,
2186                                SourceLocation BuiltinLoc,
2187                                SourceLocation RParenLoc);
2188 
2189   enum FormatStringType {
2190     FST_Scanf,
2191     FST_Printf,
2192     FST_NSString,
2193     FST_Strftime,
2194     FST_Strfmon,
2195     FST_Kprintf,
2196     FST_FreeBSDKPrintf,
2197     FST_OSTrace,
2198     FST_OSLog,
2199     FST_Syslog,
2200     FST_Unknown
2201   };
2202   static FormatStringType GetFormatStringType(const FormatAttr *Format);
2203 
2204   bool FormatStringHasSArg(const StringLiteral *FExpr);
2205 
2206   /// Check for comparisons of floating-point values using == and !=. Issue a
2207   /// warning if the comparison is not likely to do what the programmer
2208   /// intended.
2209   void CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS,
2210                             BinaryOperatorKind Opcode);
2211 
2212   /// Register a magic integral constant to be used as a type tag.
2213   void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind,
2214                                   uint64_t MagicValue, QualType Type,
2215                                   bool LayoutCompatible, bool MustBeNull);
2216 
2217   struct TypeTagData {
2218     TypeTagData() {}
2219 
2220     TypeTagData(QualType Type, bool LayoutCompatible, bool MustBeNull)
2221         : Type(Type), LayoutCompatible(LayoutCompatible),
2222           MustBeNull(MustBeNull) {}
2223 
2224     QualType Type;
2225 
2226     /// If true, \c Type should be compared with other expression's types for
2227     /// layout-compatibility.
2228     LLVM_PREFERRED_TYPE(bool)
2229     unsigned LayoutCompatible : 1;
2230     LLVM_PREFERRED_TYPE(bool)
2231     unsigned MustBeNull : 1;
2232   };
2233 
2234   /// A pair of ArgumentKind identifier and magic value.  This uniquely
2235   /// identifies the magic value.
2236   typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue;
2237 
2238   /// Diagnoses the current set of gathered accesses. This typically
2239   /// happens at full expression level. The set is cleared after emitting the
2240   /// diagnostics.
2241   void DiagnoseMisalignedMembers();
2242 
2243   /// This function checks if the expression is in the sef of potentially
2244   /// misaligned members and it is converted to some pointer type T with lower
2245   /// or equal alignment requirements. If so it removes it. This is used when
2246   /// we do not want to diagnose such misaligned access (e.g. in conversions to
2247   /// void*).
2248   void DiscardMisalignedMemberAddress(const Type *T, Expr *E);
2249 
2250   /// This function calls Action when it determines that E designates a
2251   /// misaligned member due to the packed attribute. This is used to emit
2252   /// local diagnostics like in reference binding.
2253   void RefersToMemberWithReducedAlignment(
2254       Expr *E,
2255       llvm::function_ref<void(Expr *, RecordDecl *, FieldDecl *, CharUnits)>
2256           Action);
2257 
2258   enum class AtomicArgumentOrder { API, AST };
2259   ExprResult
2260   BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange,
2261                   SourceLocation RParenLoc, MultiExprArg Args,
2262                   AtomicExpr::AtomicOp Op,
2263                   AtomicArgumentOrder ArgOrder = AtomicArgumentOrder::API);
2264 
2265   /// Check to see if a given expression could have '.c_str()' called on it.
2266   bool hasCStrMethod(const Expr *E);
2267 
2268   /// Diagnose pointers that are always non-null.
2269   /// \param E the expression containing the pointer
2270   /// \param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is
2271   /// compared to a null pointer
2272   /// \param IsEqual True when the comparison is equal to a null pointer
2273   /// \param Range Extra SourceRange to highlight in the diagnostic
2274   void DiagnoseAlwaysNonNullPointer(Expr *E,
2275                                     Expr::NullPointerConstantKind NullType,
2276                                     bool IsEqual, SourceRange Range);
2277 
2278   /// CheckParmsForFunctionDef - Check that the parameters of the given
2279   /// function are appropriate for the definition of a function. This
2280   /// takes care of any checks that cannot be performed on the
2281   /// declaration itself, e.g., that the types of each of the function
2282   /// parameters are complete.
2283   bool CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters,
2284                                 bool CheckParameterNames);
2285 
2286   /// CheckCastAlign - Implements -Wcast-align, which warns when a
2287   /// pointer cast increases the alignment requirements.
2288   void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange);
2289 
2290   /// checkUnsafeAssigns - Check whether +1 expr is being assigned
2291   /// to weak/__unsafe_unretained type.
2292   bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS);
2293 
2294   /// checkUnsafeExprAssigns - Check whether +1 expr is being assigned
2295   /// to weak/__unsafe_unretained expression.
2296   void checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS);
2297 
2298   /// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null
2299   /// statement as a \p Body, and it is located on the same line.
2300   ///
2301   /// This helps prevent bugs due to typos, such as:
2302   ///     if (condition);
2303   ///       do_stuff();
2304   void DiagnoseEmptyStmtBody(SourceLocation StmtLoc, const Stmt *Body,
2305                              unsigned DiagID);
2306 
2307   /// Warn if a for/while loop statement \p S, which is followed by
2308   /// \p PossibleBody, has a suspicious null statement as a body.
2309   void DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody);
2310 
2311   /// DiagnoseSelfMove - Emits a warning if a value is moved to itself.
2312   void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr,
2313                         SourceLocation OpLoc);
2314 
2315   // Used for emitting the right warning by DefaultVariadicArgumentPromotion
2316   enum VariadicCallType {
2317     VariadicFunction,
2318     VariadicBlock,
2319     VariadicMethod,
2320     VariadicConstructor,
2321     VariadicDoesNotApply
2322   };
2323 
2324   bool IsLayoutCompatible(QualType T1, QualType T2) const;
2325   bool IsPointerInterconvertibleBaseOf(const TypeSourceInfo *Base,
2326                                        const TypeSourceInfo *Derived);
2327 
2328   /// CheckFunctionCall - Check a direct function call for various correctness
2329   /// and safety properties not strictly enforced by the C type system.
2330   bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,
2331                          const FunctionProtoType *Proto);
2332 
2333   /// \param FPOnly restricts the arguments to floating-point types.
2334   bool BuiltinVectorMath(CallExpr *TheCall, QualType &Res, bool FPOnly = false);
2335   bool BuiltinVectorToScalarMath(CallExpr *TheCall);
2336 
2337   void checkLifetimeCaptureBy(FunctionDecl *FDecl, bool IsMemberFunction,
2338                               const Expr *ThisArg, ArrayRef<const Expr *> Args);
2339 
2340   /// Handles the checks for format strings, non-POD arguments to vararg
2341   /// functions, NULL arguments passed to non-NULL parameters, diagnose_if
2342   /// attributes and AArch64 SME attributes.
2343   void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
2344                  const Expr *ThisArg, ArrayRef<const Expr *> Args,
2345                  bool IsMemberFunction, SourceLocation Loc, SourceRange Range,
2346                  VariadicCallType CallType);
2347 
2348   /// \brief Enforce the bounds of a TCB
2349   /// CheckTCBEnforcement - Enforces that every function in a named TCB only
2350   /// directly calls other functions in the same TCB as marked by the
2351   /// enforce_tcb and enforce_tcb_leaf attributes.
2352   void CheckTCBEnforcement(const SourceLocation CallExprLoc,
2353                            const NamedDecl *Callee);
2354 
2355   void CheckConstrainedAuto(const AutoType *AutoT, SourceLocation Loc);
2356 
2357   /// BuiltinConstantArg - Handle a check if argument ArgNum of CallExpr
2358   /// TheCall is a constant expression.
2359   bool BuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result);
2360 
2361   /// BuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr
2362   /// TheCall is a constant expression in the range [Low, High].
2363   bool BuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High,
2364                                bool RangeIsError = true);
2365 
2366   /// BuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr
2367   /// TheCall is a constant expression is a multiple of Num..
2368   bool BuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum,
2369                                   unsigned Multiple);
2370 
2371   /// BuiltinConstantArgPower2 - Check if argument ArgNum of TheCall is a
2372   /// constant expression representing a power of 2.
2373   bool BuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum);
2374 
2375   /// BuiltinConstantArgShiftedByte - Check if argument ArgNum of TheCall is
2376   /// a constant expression representing an arbitrary byte value shifted left by
2377   /// a multiple of 8 bits.
2378   bool BuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum,
2379                                      unsigned ArgBits);
2380 
2381   /// BuiltinConstantArgShiftedByteOr0xFF - Check if argument ArgNum of
2382   /// TheCall is a constant expression representing either a shifted byte value,
2383   /// or a value of the form 0x??FF (i.e. a member of the arithmetic progression
2384   /// 0x00FF, 0x01FF, ..., 0xFFFF). This strange range check is needed for some
2385   /// Arm MVE intrinsics.
2386   bool BuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum,
2387                                            unsigned ArgBits);
2388 
2389   /// Checks that a call expression's argument count is at least the desired
2390   /// number. This is useful when doing custom type-checking on a variadic
2391   /// function. Returns true on error.
2392   bool checkArgCountAtLeast(CallExpr *Call, unsigned MinArgCount);
2393 
2394   /// Checks that a call expression's argument count is at most the desired
2395   /// number. This is useful when doing custom type-checking on a variadic
2396   /// function. Returns true on error.
2397   bool checkArgCountAtMost(CallExpr *Call, unsigned MaxArgCount);
2398 
2399   /// Checks that a call expression's argument count is in the desired range.
2400   /// This is useful when doing custom type-checking on a variadic function.
2401   /// Returns true on error.
2402   bool checkArgCountRange(CallExpr *Call, unsigned MinArgCount,
2403                           unsigned MaxArgCount);
2404 
2405   /// Checks that a call expression's argument count is the desired number.
2406   /// This is useful when doing custom type-checking.  Returns true on error.
2407   bool checkArgCount(CallExpr *Call, unsigned DesiredArgCount);
2408 
2409   /// Returns true if the argument consists of one contiguous run of 1s with any
2410   /// number of 0s on either side. The 1s are allowed to wrap from LSB to MSB,
2411   /// so 0x000FFF0, 0x0000FFFF, 0xFF0000FF, 0x0 are all runs. 0x0F0F0000 is not,
2412   /// since all 1s are not contiguous.
2413   bool ValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum);
2414 
2415   void CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC,
2416                                bool *ICContext = nullptr,
2417                                bool IsListInit = false);
2418 
2419   bool BuiltinElementwiseTernaryMath(CallExpr *TheCall,
2420                                      bool CheckForFloatArgs = true);
2421   bool PrepareBuiltinElementwiseMathOneArgCall(CallExpr *TheCall);
2422 
2423 private:
2424   void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
2425                         const ArraySubscriptExpr *ASE = nullptr,
2426                         bool AllowOnePastEnd = true, bool IndexNegated = false);
2427   void CheckArrayAccess(const Expr *E);
2428 
2429   bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
2430                         const FunctionProtoType *Proto);
2431 
2432   /// Checks function calls when a FunctionDecl or a NamedDecl is not available,
2433   /// such as function pointers returned from functions.
2434   bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto);
2435 
2436   /// CheckConstructorCall - Check a constructor call for correctness and safety
2437   /// properties not enforced by the C type system.
2438   void CheckConstructorCall(FunctionDecl *FDecl, QualType ThisType,
2439                             ArrayRef<const Expr *> Args,
2440                             const FunctionProtoType *Proto, SourceLocation Loc);
2441 
2442   /// Warn if a pointer or reference argument passed to a function points to an
2443   /// object that is less aligned than the parameter. This can happen when
2444   /// creating a typedef with a lower alignment than the original type and then
2445   /// calling functions defined in terms of the original type.
2446   void CheckArgAlignment(SourceLocation Loc, NamedDecl *FDecl,
2447                          StringRef ParamName, QualType ArgTy, QualType ParamTy);
2448 
2449   ExprResult CheckOSLogFormatStringArg(Expr *Arg);
2450 
2451   ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
2452                                       CallExpr *TheCall);
2453 
2454   bool CheckTSBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
2455                                   CallExpr *TheCall);
2456 
2457   void checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall);
2458 
2459   /// Check the arguments to '__builtin_va_start' or '__builtin_ms_va_start'
2460   /// for validity.  Emit an error and return true on failure; return false
2461   /// on success.
2462   bool BuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall);
2463   bool BuiltinVAStartARMMicrosoft(CallExpr *Call);
2464 
2465   /// BuiltinUnorderedCompare - Handle functions like __builtin_isgreater and
2466   /// friends.  This is declared to take (...), so we have to check everything.
2467   bool BuiltinUnorderedCompare(CallExpr *TheCall, unsigned BuiltinID);
2468 
2469   /// BuiltinSemaBuiltinFPClassification - Handle functions like
2470   /// __builtin_isnan and friends.  This is declared to take (...), so we have
2471   /// to check everything.
2472   bool BuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs,
2473                                unsigned BuiltinID);
2474 
2475   /// Perform semantic analysis for a call to __builtin_complex.
2476   bool BuiltinComplex(CallExpr *TheCall);
2477   bool BuiltinOSLogFormat(CallExpr *TheCall);
2478 
2479   /// BuiltinPrefetch - Handle __builtin_prefetch.
2480   /// This is declared to take (const void*, ...) and can take two
2481   /// optional constant int args.
2482   bool BuiltinPrefetch(CallExpr *TheCall);
2483 
2484   /// Handle __builtin_alloca_with_align. This is declared
2485   /// as (size_t, size_t) where the second size_t must be a power of 2 greater
2486   /// than 8.
2487   bool BuiltinAllocaWithAlign(CallExpr *TheCall);
2488 
2489   /// BuiltinArithmeticFence - Handle __arithmetic_fence.
2490   bool BuiltinArithmeticFence(CallExpr *TheCall);
2491 
2492   /// BuiltinAssume - Handle __assume (MS Extension).
2493   /// __assume does not evaluate its arguments, and should warn if its argument
2494   /// has side effects.
2495   bool BuiltinAssume(CallExpr *TheCall);
2496 
2497   /// Handle __builtin_assume_aligned. This is declared
2498   /// as (const void*, size_t, ...) and can take one optional constant int arg.
2499   bool BuiltinAssumeAligned(CallExpr *TheCall);
2500 
2501   /// BuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).
2502   /// This checks that the target supports __builtin_longjmp and
2503   /// that val is a constant 1.
2504   bool BuiltinLongjmp(CallExpr *TheCall);
2505 
2506   /// BuiltinSetjmp - Handle __builtin_setjmp(void *env[5]).
2507   /// This checks that the target supports __builtin_setjmp.
2508   bool BuiltinSetjmp(CallExpr *TheCall);
2509 
2510   /// We have a call to a function like __sync_fetch_and_add, which is an
2511   /// overloaded function based on the pointer type of its first argument.
2512   /// The main BuildCallExpr routines have already promoted the types of
2513   /// arguments because all of these calls are prototyped as void(...).
2514   ///
2515   /// This function goes through and does final semantic checking for these
2516   /// builtins, as well as generating any warnings.
2517   ExprResult BuiltinAtomicOverloaded(ExprResult TheCallResult);
2518 
2519   /// BuiltinNontemporalOverloaded - We have a call to
2520   /// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an
2521   /// overloaded function based on the pointer type of its last argument.
2522   ///
2523   /// This function goes through and does final semantic checking for these
2524   /// builtins.
2525   ExprResult BuiltinNontemporalOverloaded(ExprResult TheCallResult);
2526   ExprResult AtomicOpsOverloaded(ExprResult TheCallResult,
2527                                  AtomicExpr::AtomicOp Op);
2528 
2529   /// \param FPOnly restricts the arguments to floating-point types.
2530   bool BuiltinElementwiseMath(CallExpr *TheCall, bool FPOnly = false);
2531   bool PrepareBuiltinReduceMathOneArgCall(CallExpr *TheCall);
2532 
2533   bool BuiltinNonDeterministicValue(CallExpr *TheCall);
2534 
2535   enum BuiltinCountedByRefKind {
2536     AssignmentKind,
2537     InitializerKind,
2538     FunctionArgKind,
2539     ReturnArgKind,
2540     ArraySubscriptKind,
2541     BinaryExprKind,
2542   };
2543 
2544   bool CheckInvalidBuiltinCountedByRef(const Expr *E,
2545                                        BuiltinCountedByRefKind K);
2546   bool BuiltinCountedByRef(CallExpr *TheCall);
2547 
2548   // Matrix builtin handling.
2549   ExprResult BuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult);
2550   ExprResult BuiltinMatrixColumnMajorLoad(CallExpr *TheCall,
2551                                           ExprResult CallResult);
2552   ExprResult BuiltinMatrixColumnMajorStore(CallExpr *TheCall,
2553                                            ExprResult CallResult);
2554 
2555   /// CheckFormatArguments - Check calls to printf and scanf (and similar
2556   /// functions) for correct use of format strings.
2557   /// Returns true if a format string has been fully checked.
2558   bool CheckFormatArguments(const FormatAttr *Format,
2559                             ArrayRef<const Expr *> Args, bool IsCXXMember,
2560                             VariadicCallType CallType, SourceLocation Loc,
2561                             SourceRange Range,
2562                             llvm::SmallBitVector &CheckedVarArgs);
2563   bool CheckFormatArguments(ArrayRef<const Expr *> Args,
2564                             FormatArgumentPassingKind FAPK, unsigned format_idx,
2565                             unsigned firstDataArg, FormatStringType Type,
2566                             VariadicCallType CallType, SourceLocation Loc,
2567                             SourceRange range,
2568                             llvm::SmallBitVector &CheckedVarArgs);
2569 
2570   void CheckInfNaNFunction(const CallExpr *Call, const FunctionDecl *FDecl);
2571 
2572   /// Warn when using the wrong abs() function.
2573   void CheckAbsoluteValueFunction(const CallExpr *Call,
2574                                   const FunctionDecl *FDecl);
2575 
2576   void CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl);
2577 
2578   /// Check for dangerous or invalid arguments to memset().
2579   ///
2580   /// This issues warnings on known problematic, dangerous or unspecified
2581   /// arguments to the standard 'memset', 'memcpy', 'memmove', and 'memcmp'
2582   /// function calls.
2583   ///
2584   /// \param Call The call expression to diagnose.
2585   void CheckMemaccessArguments(const CallExpr *Call, unsigned BId,
2586                                IdentifierInfo *FnName);
2587 
2588   // Warn if the user has made the 'size' argument to strlcpy or strlcat
2589   // be the size of the source, instead of the destination.
2590   void CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName);
2591 
2592   // Warn on anti-patterns as the 'size' argument to strncat.
2593   // The correct size argument should look like following:
2594   //   strncat(dst, src, sizeof(dst) - strlen(dest) - 1);
2595   void CheckStrncatArguments(const CallExpr *Call, IdentifierInfo *FnName);
2596 
2597   /// Alerts the user that they are attempting to free a non-malloc'd object.
2598   void CheckFreeArguments(const CallExpr *E);
2599 
2600   void CheckReturnValExpr(Expr *RetValExp, QualType lhsType,
2601                           SourceLocation ReturnLoc, bool isObjCMethod = false,
2602                           const AttrVec *Attrs = nullptr,
2603                           const FunctionDecl *FD = nullptr);
2604 
2605   /// Diagnoses "dangerous" implicit conversions within the given
2606   /// expression (which is a full expression).  Implements -Wconversion
2607   /// and -Wsign-compare.
2608   ///
2609   /// \param CC the "context" location of the implicit conversion, i.e.
2610   ///   the most location of the syntactic entity requiring the implicit
2611   ///   conversion
2612   void CheckImplicitConversions(Expr *E, SourceLocation CC = SourceLocation());
2613 
2614   /// CheckBoolLikeConversion - Check conversion of given expression to boolean.
2615   /// Input argument E is a logical expression.
2616   void CheckBoolLikeConversion(Expr *E, SourceLocation CC);
2617 
2618   /// Diagnose when expression is an integer constant expression and its
2619   /// evaluation results in integer overflow
2620   void CheckForIntOverflow(const Expr *E);
2621   void CheckUnsequencedOperations(const Expr *E);
2622 
2623   /// Perform semantic checks on a completed expression. This will either
2624   /// be a full-expression or a default argument expression.
2625   void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(),
2626                           bool IsConstexpr = false);
2627 
2628   void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field,
2629                                    Expr *Init);
2630 
2631   /// A map from magic value to type information.
2632   std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>>
2633       TypeTagForDatatypeMagicValues;
2634 
2635   /// Peform checks on a call of a function with argument_with_type_tag
2636   /// or pointer_with_type_tag attributes.
2637   void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr,
2638                                 const ArrayRef<const Expr *> ExprArgs,
2639                                 SourceLocation CallSiteLoc);
2640 
2641   /// Check if we are taking the address of a packed field
2642   /// as this may be a problem if the pointer value is dereferenced.
2643   void CheckAddressOfPackedMember(Expr *rhs);
2644 
2645   /// Helper class that collects misaligned member designations and
2646   /// their location info for delayed diagnostics.
2647   struct MisalignedMember {
2648     Expr *E;
2649     RecordDecl *RD;
2650     ValueDecl *MD;
2651     CharUnits Alignment;
2652 
2653     MisalignedMember() : E(), RD(), MD() {}
2654     MisalignedMember(Expr *E, RecordDecl *RD, ValueDecl *MD,
2655                      CharUnits Alignment)
2656         : E(E), RD(RD), MD(MD), Alignment(Alignment) {}
2657     explicit MisalignedMember(Expr *E)
2658         : MisalignedMember(E, nullptr, nullptr, CharUnits()) {}
2659 
2660     bool operator==(const MisalignedMember &m) { return this->E == m.E; }
2661   };
2662   /// Small set of gathered accesses to potentially misaligned members
2663   /// due to the packed attribute.
2664   SmallVector<MisalignedMember, 4> MisalignedMembers;
2665 
2666   /// Adds an expression to the set of gathered misaligned members.
2667   void AddPotentialMisalignedMembers(Expr *E, RecordDecl *RD, ValueDecl *MD,
2668                                      CharUnits Alignment);
2669   ///@}
2670 
2671   //
2672   //
2673   // -------------------------------------------------------------------------
2674   //
2675   //
2676 
2677   /// \name C++ Coroutines
2678   /// Implementations are in SemaCoroutine.cpp
2679   ///@{
2680 
2681 public:
2682   /// The C++ "std::coroutine_traits" template, which is defined in
2683   /// \<coroutine_traits>
2684   ClassTemplateDecl *StdCoroutineTraitsCache;
2685 
2686   bool ActOnCoroutineBodyStart(Scope *S, SourceLocation KwLoc,
2687                                StringRef Keyword);
2688   ExprResult ActOnCoawaitExpr(Scope *S, SourceLocation KwLoc, Expr *E);
2689   ExprResult ActOnCoyieldExpr(Scope *S, SourceLocation KwLoc, Expr *E);
2690   StmtResult ActOnCoreturnStmt(Scope *S, SourceLocation KwLoc, Expr *E);
2691 
2692   ExprResult BuildOperatorCoawaitLookupExpr(Scope *S, SourceLocation Loc);
2693   ExprResult BuildOperatorCoawaitCall(SourceLocation Loc, Expr *E,
2694                                       UnresolvedLookupExpr *Lookup);
2695   ExprResult BuildResolvedCoawaitExpr(SourceLocation KwLoc, Expr *Operand,
2696                                       Expr *Awaiter, bool IsImplicit = false);
2697   ExprResult BuildUnresolvedCoawaitExpr(SourceLocation KwLoc, Expr *Operand,
2698                                         UnresolvedLookupExpr *Lookup);
2699   ExprResult BuildCoyieldExpr(SourceLocation KwLoc, Expr *E);
2700   StmtResult BuildCoreturnStmt(SourceLocation KwLoc, Expr *E,
2701                                bool IsImplicit = false);
2702   StmtResult BuildCoroutineBodyStmt(CoroutineBodyStmt::CtorArgs);
2703   bool buildCoroutineParameterMoves(SourceLocation Loc);
2704   VarDecl *buildCoroutinePromise(SourceLocation Loc);
2705   void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body);
2706 
2707   // As a clang extension, enforces that a non-coroutine function must be marked
2708   // with [[clang::coro_wrapper]] if it returns a type marked with
2709   // [[clang::coro_return_type]].
2710   // Expects that FD is not a coroutine.
2711   void CheckCoroutineWrapper(FunctionDecl *FD);
2712   /// Lookup 'coroutine_traits' in std namespace and std::experimental
2713   /// namespace. The namespace found is recorded in Namespace.
2714   ClassTemplateDecl *lookupCoroutineTraits(SourceLocation KwLoc,
2715                                            SourceLocation FuncLoc);
2716   /// Check that the expression co_await promise.final_suspend() shall not be
2717   /// potentially-throwing.
2718   bool checkFinalSuspendNoThrow(const Stmt *FinalSuspend);
2719 
2720   ///@}
2721 
2722   //
2723   //
2724   // -------------------------------------------------------------------------
2725   //
2726   //
2727 
2728   /// \name C++ Scope Specifiers
2729   /// Implementations are in SemaCXXScopeSpec.cpp
2730   ///@{
2731 
2732 public:
2733   // Marks SS invalid if it represents an incomplete type.
2734   bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC);
2735   // Complete an enum decl, maybe without a scope spec.
2736   bool RequireCompleteEnumDecl(EnumDecl *D, SourceLocation L,
2737                                CXXScopeSpec *SS = nullptr);
2738 
2739   /// Compute the DeclContext that is associated with the given type.
2740   ///
2741   /// \param T the type for which we are attempting to find a DeclContext.
2742   ///
2743   /// \returns the declaration context represented by the type T,
2744   /// or NULL if the declaration context cannot be computed (e.g., because it is
2745   /// dependent and not the current instantiation).
2746   DeclContext *computeDeclContext(QualType T);
2747 
2748   /// Compute the DeclContext that is associated with the given
2749   /// scope specifier.
2750   ///
2751   /// \param SS the C++ scope specifier as it appears in the source
2752   ///
2753   /// \param EnteringContext when true, we will be entering the context of
2754   /// this scope specifier, so we can retrieve the declaration context of a
2755   /// class template or class template partial specialization even if it is
2756   /// not the current instantiation.
2757   ///
2758   /// \returns the declaration context represented by the scope specifier @p SS,
2759   /// or NULL if the declaration context cannot be computed (e.g., because it is
2760   /// dependent and not the current instantiation).
2761   DeclContext *computeDeclContext(const CXXScopeSpec &SS,
2762                                   bool EnteringContext = false);
2763   bool isDependentScopeSpecifier(const CXXScopeSpec &SS);
2764 
2765   /// If the given nested name specifier refers to the current
2766   /// instantiation, return the declaration that corresponds to that
2767   /// current instantiation (C++0x [temp.dep.type]p1).
2768   ///
2769   /// \param NNS a dependent nested name specifier.
2770   CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS);
2771 
2772   /// The parser has parsed a global nested-name-specifier '::'.
2773   ///
2774   /// \param CCLoc The location of the '::'.
2775   ///
2776   /// \param SS The nested-name-specifier, which will be updated in-place
2777   /// to reflect the parsed nested-name-specifier.
2778   ///
2779   /// \returns true if an error occurred, false otherwise.
2780   bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS);
2781 
2782   /// The parser has parsed a '__super' nested-name-specifier.
2783   ///
2784   /// \param SuperLoc The location of the '__super' keyword.
2785   ///
2786   /// \param ColonColonLoc The location of the '::'.
2787   ///
2788   /// \param SS The nested-name-specifier, which will be updated in-place
2789   /// to reflect the parsed nested-name-specifier.
2790   ///
2791   /// \returns true if an error occurred, false otherwise.
2792   bool ActOnSuperScopeSpecifier(SourceLocation SuperLoc,
2793                                 SourceLocation ColonColonLoc, CXXScopeSpec &SS);
2794 
2795   /// Determines whether the given declaration is an valid acceptable
2796   /// result for name lookup of a nested-name-specifier.
2797   /// \param SD Declaration checked for nested-name-specifier.
2798   /// \param IsExtension If not null and the declaration is accepted as an
2799   /// extension, the pointed variable is assigned true.
2800   bool isAcceptableNestedNameSpecifier(const NamedDecl *SD,
2801                                        bool *CanCorrect = nullptr);
2802 
2803   /// If the given nested-name-specifier begins with a bare identifier
2804   /// (e.g., Base::), perform name lookup for that identifier as a
2805   /// nested-name-specifier within the given scope, and return the result of
2806   /// that name lookup.
2807   NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS);
2808 
2809   /// Keeps information about an identifier in a nested-name-spec.
2810   ///
2811   struct NestedNameSpecInfo {
2812     /// The type of the object, if we're parsing nested-name-specifier in
2813     /// a member access expression.
2814     ParsedType ObjectType;
2815 
2816     /// The identifier preceding the '::'.
2817     IdentifierInfo *Identifier;
2818 
2819     /// The location of the identifier.
2820     SourceLocation IdentifierLoc;
2821 
2822     /// The location of the '::'.
2823     SourceLocation CCLoc;
2824 
2825     /// Creates info object for the most typical case.
2826     NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
2827                        SourceLocation ColonColonLoc,
2828                        ParsedType ObjectType = ParsedType())
2829         : ObjectType(ObjectType), Identifier(II), IdentifierLoc(IdLoc),
2830           CCLoc(ColonColonLoc) {}
2831 
2832     NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
2833                        SourceLocation ColonColonLoc, QualType ObjectType)
2834         : ObjectType(ParsedType::make(ObjectType)), Identifier(II),
2835           IdentifierLoc(IdLoc), CCLoc(ColonColonLoc) {}
2836   };
2837 
2838   /// Build a new nested-name-specifier for "identifier::", as described
2839   /// by ActOnCXXNestedNameSpecifier.
2840   ///
2841   /// \param S Scope in which the nested-name-specifier occurs.
2842   /// \param IdInfo Parser information about an identifier in the
2843   ///        nested-name-spec.
2844   /// \param EnteringContext If true, enter the context specified by the
2845   ///        nested-name-specifier.
2846   /// \param SS Optional nested name specifier preceding the identifier.
2847   /// \param ScopeLookupResult Provides the result of name lookup within the
2848   ///        scope of the nested-name-specifier that was computed at template
2849   ///        definition time.
2850   /// \param ErrorRecoveryLookup Specifies if the method is called to improve
2851   ///        error recovery and what kind of recovery is performed.
2852   /// \param IsCorrectedToColon If not null, suggestion of replace '::' -> ':'
2853   ///        are allowed.  The bool value pointed by this parameter is set to
2854   ///       'true' if the identifier is treated as if it was followed by ':',
2855   ///        not '::'.
2856   /// \param OnlyNamespace If true, only considers namespaces in lookup.
2857   ///
2858   /// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in
2859   /// that it contains an extra parameter \p ScopeLookupResult, which provides
2860   /// the result of name lookup within the scope of the nested-name-specifier
2861   /// that was computed at template definition time.
2862   ///
2863   /// If ErrorRecoveryLookup is true, then this call is used to improve error
2864   /// recovery.  This means that it should not emit diagnostics, it should
2865   /// just return true on failure.  It also means it should only return a valid
2866   /// scope if it *knows* that the result is correct.  It should not return in a
2867   /// dependent context, for example. Nor will it extend \p SS with the scope
2868   /// specifier.
2869   bool BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo,
2870                                    bool EnteringContext, CXXScopeSpec &SS,
2871                                    NamedDecl *ScopeLookupResult,
2872                                    bool ErrorRecoveryLookup,
2873                                    bool *IsCorrectedToColon = nullptr,
2874                                    bool OnlyNamespace = false);
2875 
2876   /// The parser has parsed a nested-name-specifier 'identifier::'.
2877   ///
2878   /// \param S The scope in which this nested-name-specifier occurs.
2879   ///
2880   /// \param IdInfo Parser information about an identifier in the
2881   /// nested-name-spec.
2882   ///
2883   /// \param EnteringContext Whether we're entering the context nominated by
2884   /// this nested-name-specifier.
2885   ///
2886   /// \param SS The nested-name-specifier, which is both an input
2887   /// parameter (the nested-name-specifier before this type) and an
2888   /// output parameter (containing the full nested-name-specifier,
2889   /// including this new type).
2890   ///
2891   /// \param IsCorrectedToColon If not null, suggestions to replace '::' -> ':'
2892   /// are allowed.  The bool value pointed by this parameter is set to 'true'
2893   /// if the identifier is treated as if it was followed by ':', not '::'.
2894   ///
2895   /// \param OnlyNamespace If true, only considers namespaces in lookup.
2896   ///
2897   /// \returns true if an error occurred, false otherwise.
2898   bool ActOnCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo,
2899                                    bool EnteringContext, CXXScopeSpec &SS,
2900                                    bool *IsCorrectedToColon = nullptr,
2901                                    bool OnlyNamespace = false);
2902 
2903   /// The parser has parsed a nested-name-specifier
2904   /// 'template[opt] template-name < template-args >::'.
2905   ///
2906   /// \param S The scope in which this nested-name-specifier occurs.
2907   ///
2908   /// \param SS The nested-name-specifier, which is both an input
2909   /// parameter (the nested-name-specifier before this type) and an
2910   /// output parameter (containing the full nested-name-specifier,
2911   /// including this new type).
2912   ///
2913   /// \param TemplateKWLoc the location of the 'template' keyword, if any.
2914   /// \param TemplateName the template name.
2915   /// \param TemplateNameLoc The location of the template name.
2916   /// \param LAngleLoc The location of the opening angle bracket  ('<').
2917   /// \param TemplateArgs The template arguments.
2918   /// \param RAngleLoc The location of the closing angle bracket  ('>').
2919   /// \param CCLoc The location of the '::'.
2920   ///
2921   /// \param EnteringContext Whether we're entering the context of the
2922   /// nested-name-specifier.
2923   ///
2924   ///
2925   /// \returns true if an error occurred, false otherwise.
2926   bool ActOnCXXNestedNameSpecifier(
2927       Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
2928       TemplateTy TemplateName, SourceLocation TemplateNameLoc,
2929       SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs,
2930       SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext);
2931 
2932   bool ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS, const DeclSpec &DS,
2933                                            SourceLocation ColonColonLoc);
2934 
2935   bool ActOnCXXNestedNameSpecifierIndexedPack(CXXScopeSpec &SS,
2936                                               const DeclSpec &DS,
2937                                               SourceLocation ColonColonLoc,
2938                                               QualType Type);
2939 
2940   /// IsInvalidUnlessNestedName - This method is used for error recovery
2941   /// purposes to determine whether the specified identifier is only valid as
2942   /// a nested name specifier, for example a namespace name.  It is
2943   /// conservatively correct to always return false from this method.
2944   ///
2945   /// The arguments are the same as those passed to ActOnCXXNestedNameSpecifier.
2946   bool IsInvalidUnlessNestedName(Scope *S, CXXScopeSpec &SS,
2947                                  NestedNameSpecInfo &IdInfo,
2948                                  bool EnteringContext);
2949 
2950   /// Given a C++ nested-name-specifier, produce an annotation value
2951   /// that the parser can use later to reconstruct the given
2952   /// nested-name-specifier.
2953   ///
2954   /// \param SS A nested-name-specifier.
2955   ///
2956   /// \returns A pointer containing all of the information in the
2957   /// nested-name-specifier \p SS.
2958   void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS);
2959 
2960   /// Given an annotation pointer for a nested-name-specifier, restore
2961   /// the nested-name-specifier structure.
2962   ///
2963   /// \param Annotation The annotation pointer, produced by
2964   /// \c SaveNestedNameSpecifierAnnotation().
2965   ///
2966   /// \param AnnotationRange The source range corresponding to the annotation.
2967   ///
2968   /// \param SS The nested-name-specifier that will be updated with the contents
2969   /// of the annotation pointer.
2970   void RestoreNestedNameSpecifierAnnotation(void *Annotation,
2971                                             SourceRange AnnotationRange,
2972                                             CXXScopeSpec &SS);
2973 
2974   bool ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
2975 
2976   /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global
2977   /// scope or nested-name-specifier) is parsed, part of a declarator-id.
2978   /// After this method is called, according to [C++ 3.4.3p3], names should be
2979   /// looked up in the declarator-id's scope, until the declarator is parsed and
2980   /// ActOnCXXExitDeclaratorScope is called.
2981   /// The 'SS' should be a non-empty valid CXXScopeSpec.
2982   bool ActOnCXXEnterDeclaratorScope(Scope *S, CXXScopeSpec &SS);
2983 
2984   /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously
2985   /// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same
2986   /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.
2987   /// Used to indicate that names should revert to being looked up in the
2988   /// defining scope.
2989   void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
2990 
2991   ///@}
2992 
2993   //
2994   //
2995   // -------------------------------------------------------------------------
2996   //
2997   //
2998 
2999   /// \name Declarations
3000   /// Implementations are in SemaDecl.cpp
3001   ///@{
3002 
3003 public:
3004   IdentifierResolver IdResolver;
3005 
3006   /// The index of the first InventedParameterInfo that refers to the current
3007   /// context.
3008   unsigned InventedParameterInfosStart = 0;
3009 
3010   /// A RAII object to temporarily push a declaration context.
3011   class ContextRAII {
3012   private:
3013     Sema &S;
3014     DeclContext *SavedContext;
3015     ProcessingContextState SavedContextState;
3016     QualType SavedCXXThisTypeOverride;
3017     unsigned SavedFunctionScopesStart;
3018     unsigned SavedInventedParameterInfosStart;
3019 
3020   public:
3021     ContextRAII(Sema &S, DeclContext *ContextToPush, bool NewThisContext = true)
3022         : S(S), SavedContext(S.CurContext),
3023           SavedContextState(S.DelayedDiagnostics.pushUndelayed()),
3024           SavedCXXThisTypeOverride(S.CXXThisTypeOverride),
3025           SavedFunctionScopesStart(S.FunctionScopesStart),
3026           SavedInventedParameterInfosStart(S.InventedParameterInfosStart) {
3027       assert(ContextToPush && "pushing null context");
3028       S.CurContext = ContextToPush;
3029       if (NewThisContext)
3030         S.CXXThisTypeOverride = QualType();
3031       // Any saved FunctionScopes do not refer to this context.
3032       S.FunctionScopesStart = S.FunctionScopes.size();
3033       S.InventedParameterInfosStart = S.InventedParameterInfos.size();
3034     }
3035 
3036     void pop() {
3037       if (!SavedContext)
3038         return;
3039       S.CurContext = SavedContext;
3040       S.DelayedDiagnostics.popUndelayed(SavedContextState);
3041       S.CXXThisTypeOverride = SavedCXXThisTypeOverride;
3042       S.FunctionScopesStart = SavedFunctionScopesStart;
3043       S.InventedParameterInfosStart = SavedInventedParameterInfosStart;
3044       SavedContext = nullptr;
3045     }
3046 
3047     ~ContextRAII() { pop(); }
3048   };
3049 
3050   void DiagnoseInvalidJumps(Stmt *Body);
3051 
3052   /// The function definitions which were renamed as part of typo-correction
3053   /// to match their respective declarations. We want to keep track of them
3054   /// to ensure that we don't emit a "redefinition" error if we encounter a
3055   /// correctly named definition after the renamed definition.
3056   llvm::SmallPtrSet<const NamedDecl *, 4> TypoCorrectedFunctionDefinitions;
3057 
3058   /// A cache of the flags available in enumerations with the flag_bits
3059   /// attribute.
3060   mutable llvm::DenseMap<const EnumDecl *, llvm::APInt> FlagBitsCache;
3061 
3062   /// WeakUndeclaredIdentifiers - Identifiers contained in \#pragma weak before
3063   /// declared. Rare. May alias another identifier, declared or undeclared.
3064   ///
3065   /// For aliases, the target identifier is used as a key for eventual
3066   /// processing when the target is declared. For the single-identifier form,
3067   /// the sole identifier is used as the key. Each entry is a `SetVector`
3068   /// (ordered by parse order) of aliases (identified by the alias name) in case
3069   /// of multiple aliases to the same undeclared identifier.
3070   llvm::MapVector<
3071       IdentifierInfo *,
3072       llvm::SetVector<
3073           WeakInfo, llvm::SmallVector<WeakInfo, 1u>,
3074           llvm::SmallDenseSet<WeakInfo, 2u, WeakInfo::DenseMapInfoByAliasOnly>>>
3075       WeakUndeclaredIdentifiers;
3076 
3077   /// ExtnameUndeclaredIdentifiers - Identifiers contained in
3078   /// \#pragma redefine_extname before declared.  Used in Solaris system headers
3079   /// to define functions that occur in multiple standards to call the version
3080   /// in the currently selected standard.
3081   llvm::DenseMap<IdentifierInfo *, AsmLabelAttr *> ExtnameUndeclaredIdentifiers;
3082 
3083   /// Set containing all typedefs that are likely unused.
3084   llvm::SmallSetVector<const TypedefNameDecl *, 4>
3085       UnusedLocalTypedefNameCandidates;
3086 
3087   typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource,
3088                      &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2>
3089       UnusedFileScopedDeclsType;
3090 
3091   /// The set of file scoped decls seen so far that have not been used
3092   /// and must warn if not used. Only contains the first declaration.
3093   UnusedFileScopedDeclsType UnusedFileScopedDecls;
3094 
3095   typedef LazyVector<VarDecl *, ExternalSemaSource,
3096                      &ExternalSemaSource::ReadTentativeDefinitions, 2, 2>
3097       TentativeDefinitionsType;
3098 
3099   /// All the tentative definitions encountered in the TU.
3100   TentativeDefinitionsType TentativeDefinitions;
3101 
3102   /// All the external declarations encoutered and used in the TU.
3103   SmallVector<DeclaratorDecl *, 4> ExternalDeclarations;
3104 
3105   /// Generally null except when we temporarily switch decl contexts,
3106   /// like in \see SemaObjC::ActOnObjCTemporaryExitContainerContext.
3107   DeclContext *OriginalLexicalContext;
3108 
3109   /// Is the module scope we are in a C++ Header Unit?
3110   bool currentModuleIsHeaderUnit() const {
3111     return ModuleScopes.empty() ? false
3112                                 : ModuleScopes.back().Module->isHeaderUnit();
3113   }
3114 
3115   /// Get the module owning an entity.
3116   Module *getOwningModule(const Decl *Entity) {
3117     return Entity->getOwningModule();
3118   }
3119 
3120   DeclGroupPtrTy ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType = nullptr);
3121 
3122   /// If the identifier refers to a type name within this scope,
3123   /// return the declaration of that type.
3124   ///
3125   /// This routine performs ordinary name lookup of the identifier II
3126   /// within the given scope, with optional C++ scope specifier SS, to
3127   /// determine whether the name refers to a type. If so, returns an
3128   /// opaque pointer (actually a QualType) corresponding to that
3129   /// type. Otherwise, returns NULL.
3130   ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
3131                          Scope *S, CXXScopeSpec *SS = nullptr,
3132                          bool isClassName = false, bool HasTrailingDot = false,
3133                          ParsedType ObjectType = nullptr,
3134                          bool IsCtorOrDtorName = false,
3135                          bool WantNontrivialTypeSourceInfo = false,
3136                          bool IsClassTemplateDeductionContext = true,
3137                          ImplicitTypenameContext AllowImplicitTypename =
3138                              ImplicitTypenameContext::No,
3139                          IdentifierInfo **CorrectedII = nullptr);
3140 
3141   /// isTagName() - This method is called *for error recovery purposes only*
3142   /// to determine if the specified name is a valid tag name ("struct foo").  If
3143   /// so, this returns the TST for the tag corresponding to it (TST_enum,
3144   /// TST_union, TST_struct, TST_interface, TST_class).  This is used to
3145   /// diagnose cases in C where the user forgot to specify the tag.
3146   TypeSpecifierType isTagName(IdentifierInfo &II, Scope *S);
3147 
3148   /// isMicrosoftMissingTypename - In Microsoft mode, within class scope,
3149   /// if a CXXScopeSpec's type is equal to the type of one of the base classes
3150   /// then downgrade the missing typename error to a warning.
3151   /// This is needed for MSVC compatibility; Example:
3152   /// @code
3153   /// template<class T> class A {
3154   /// public:
3155   ///   typedef int TYPE;
3156   /// };
3157   /// template<class T> class B : public A<T> {
3158   /// public:
3159   ///   A<T>::TYPE a; // no typename required because A<T> is a base class.
3160   /// };
3161   /// @endcode
3162   bool isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S);
3163   void DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc,
3164                                Scope *S, CXXScopeSpec *SS,
3165                                ParsedType &SuggestedType,
3166                                bool IsTemplateName = false);
3167 
3168   /// Attempt to behave like MSVC in situations where lookup of an unqualified
3169   /// type name has failed in a dependent context. In these situations, we
3170   /// automatically form a DependentTypeName that will retry lookup in a related
3171   /// scope during instantiation.
3172   ParsedType ActOnMSVCUnknownTypeName(const IdentifierInfo &II,
3173                                       SourceLocation NameLoc,
3174                                       bool IsTemplateTypeArg);
3175 
3176   /// Describes the result of the name lookup and resolution performed
3177   /// by \c ClassifyName().
3178   enum NameClassificationKind {
3179     /// This name is not a type or template in this context, but might be
3180     /// something else.
3181     NC_Unknown,
3182     /// Classification failed; an error has been produced.
3183     NC_Error,
3184     /// The name has been typo-corrected to a keyword.
3185     NC_Keyword,
3186     /// The name was classified as a type.
3187     NC_Type,
3188     /// The name was classified as a specific non-type, non-template
3189     /// declaration. ActOnNameClassifiedAsNonType should be called to
3190     /// convert the declaration to an expression.
3191     NC_NonType,
3192     /// The name was classified as an ADL-only function name.
3193     /// ActOnNameClassifiedAsUndeclaredNonType should be called to convert the
3194     /// result to an expression.
3195     NC_UndeclaredNonType,
3196     /// The name denotes a member of a dependent type that could not be
3197     /// resolved. ActOnNameClassifiedAsDependentNonType should be called to
3198     /// convert the result to an expression.
3199     NC_DependentNonType,
3200     /// The name was classified as an overload set, and an expression
3201     /// representing that overload set has been formed.
3202     /// ActOnNameClassifiedAsOverloadSet should be called to form a suitable
3203     /// expression referencing the overload set.
3204     NC_OverloadSet,
3205     /// The name was classified as a template whose specializations are types.
3206     NC_TypeTemplate,
3207     /// The name was classified as a variable template name.
3208     NC_VarTemplate,
3209     /// The name was classified as a function template name.
3210     NC_FunctionTemplate,
3211     /// The name was classified as an ADL-only function template name.
3212     NC_UndeclaredTemplate,
3213     /// The name was classified as a concept name.
3214     NC_Concept,
3215   };
3216 
3217   class NameClassification {
3218     NameClassificationKind Kind;
3219     union {
3220       ExprResult Expr;
3221       NamedDecl *NonTypeDecl;
3222       TemplateName Template;
3223       ParsedType Type;
3224     };
3225 
3226     explicit NameClassification(NameClassificationKind Kind) : Kind(Kind) {}
3227 
3228   public:
3229     NameClassification(ParsedType Type) : Kind(NC_Type), Type(Type) {}
3230 
3231     NameClassification(const IdentifierInfo *Keyword) : Kind(NC_Keyword) {}
3232 
3233     static NameClassification Error() { return NameClassification(NC_Error); }
3234 
3235     static NameClassification Unknown() {
3236       return NameClassification(NC_Unknown);
3237     }
3238 
3239     static NameClassification OverloadSet(ExprResult E) {
3240       NameClassification Result(NC_OverloadSet);
3241       Result.Expr = E;
3242       return Result;
3243     }
3244 
3245     static NameClassification NonType(NamedDecl *D) {
3246       NameClassification Result(NC_NonType);
3247       Result.NonTypeDecl = D;
3248       return Result;
3249     }
3250 
3251     static NameClassification UndeclaredNonType() {
3252       return NameClassification(NC_UndeclaredNonType);
3253     }
3254 
3255     static NameClassification DependentNonType() {
3256       return NameClassification(NC_DependentNonType);
3257     }
3258 
3259     static NameClassification TypeTemplate(TemplateName Name) {
3260       NameClassification Result(NC_TypeTemplate);
3261       Result.Template = Name;
3262       return Result;
3263     }
3264 
3265     static NameClassification VarTemplate(TemplateName Name) {
3266       NameClassification Result(NC_VarTemplate);
3267       Result.Template = Name;
3268       return Result;
3269     }
3270 
3271     static NameClassification FunctionTemplate(TemplateName Name) {
3272       NameClassification Result(NC_FunctionTemplate);
3273       Result.Template = Name;
3274       return Result;
3275     }
3276 
3277     static NameClassification Concept(TemplateName Name) {
3278       NameClassification Result(NC_Concept);
3279       Result.Template = Name;
3280       return Result;
3281     }
3282 
3283     static NameClassification UndeclaredTemplate(TemplateName Name) {
3284       NameClassification Result(NC_UndeclaredTemplate);
3285       Result.Template = Name;
3286       return Result;
3287     }
3288 
3289     NameClassificationKind getKind() const { return Kind; }
3290 
3291     ExprResult getExpression() const {
3292       assert(Kind == NC_OverloadSet);
3293       return Expr;
3294     }
3295 
3296     ParsedType getType() const {
3297       assert(Kind == NC_Type);
3298       return Type;
3299     }
3300 
3301     NamedDecl *getNonTypeDecl() const {
3302       assert(Kind == NC_NonType);
3303       return NonTypeDecl;
3304     }
3305 
3306     TemplateName getTemplateName() const {
3307       assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate ||
3308              Kind == NC_VarTemplate || Kind == NC_Concept ||
3309              Kind == NC_UndeclaredTemplate);
3310       return Template;
3311     }
3312 
3313     TemplateNameKind getTemplateNameKind() const {
3314       switch (Kind) {
3315       case NC_TypeTemplate:
3316         return TNK_Type_template;
3317       case NC_FunctionTemplate:
3318         return TNK_Function_template;
3319       case NC_VarTemplate:
3320         return TNK_Var_template;
3321       case NC_Concept:
3322         return TNK_Concept_template;
3323       case NC_UndeclaredTemplate:
3324         return TNK_Undeclared_template;
3325       default:
3326         llvm_unreachable("unsupported name classification.");
3327       }
3328     }
3329   };
3330 
3331   /// Perform name lookup on the given name, classifying it based on
3332   /// the results of name lookup and the following token.
3333   ///
3334   /// This routine is used by the parser to resolve identifiers and help direct
3335   /// parsing. When the identifier cannot be found, this routine will attempt
3336   /// to correct the typo and classify based on the resulting name.
3337   ///
3338   /// \param S The scope in which we're performing name lookup.
3339   ///
3340   /// \param SS The nested-name-specifier that precedes the name.
3341   ///
3342   /// \param Name The identifier. If typo correction finds an alternative name,
3343   /// this pointer parameter will be updated accordingly.
3344   ///
3345   /// \param NameLoc The location of the identifier.
3346   ///
3347   /// \param NextToken The token following the identifier. Used to help
3348   /// disambiguate the name.
3349   ///
3350   /// \param CCC The correction callback, if typo correction is desired.
3351   NameClassification ClassifyName(Scope *S, CXXScopeSpec &SS,
3352                                   IdentifierInfo *&Name, SourceLocation NameLoc,
3353                                   const Token &NextToken,
3354                                   CorrectionCandidateCallback *CCC = nullptr);
3355 
3356   /// Act on the result of classifying a name as an undeclared (ADL-only)
3357   /// non-type declaration.
3358   ExprResult ActOnNameClassifiedAsUndeclaredNonType(IdentifierInfo *Name,
3359                                                     SourceLocation NameLoc);
3360   /// Act on the result of classifying a name as an undeclared member of a
3361   /// dependent base class.
3362   ExprResult ActOnNameClassifiedAsDependentNonType(const CXXScopeSpec &SS,
3363                                                    IdentifierInfo *Name,
3364                                                    SourceLocation NameLoc,
3365                                                    bool IsAddressOfOperand);
3366   /// Act on the result of classifying a name as a specific non-type
3367   /// declaration.
3368   ExprResult ActOnNameClassifiedAsNonType(Scope *S, const CXXScopeSpec &SS,
3369                                           NamedDecl *Found,
3370                                           SourceLocation NameLoc,
3371                                           const Token &NextToken);
3372   /// Act on the result of classifying a name as an overload set.
3373   ExprResult ActOnNameClassifiedAsOverloadSet(Scope *S, Expr *OverloadSet);
3374 
3375   /// Describes the detailed kind of a template name. Used in diagnostics.
3376   enum class TemplateNameKindForDiagnostics {
3377     ClassTemplate,
3378     FunctionTemplate,
3379     VarTemplate,
3380     AliasTemplate,
3381     TemplateTemplateParam,
3382     Concept,
3383     DependentTemplate
3384   };
3385   TemplateNameKindForDiagnostics
3386   getTemplateNameKindForDiagnostics(TemplateName Name);
3387 
3388   /// Determine whether it's plausible that E was intended to be a
3389   /// template-name.
3390   bool mightBeIntendedToBeTemplateName(ExprResult E, bool &Dependent) {
3391     if (!getLangOpts().CPlusPlus || E.isInvalid())
3392       return false;
3393     Dependent = false;
3394     if (auto *DRE = dyn_cast<DeclRefExpr>(E.get()))
3395       return !DRE->hasExplicitTemplateArgs();
3396     if (auto *ME = dyn_cast<MemberExpr>(E.get()))
3397       return !ME->hasExplicitTemplateArgs();
3398     Dependent = true;
3399     if (auto *DSDRE = dyn_cast<DependentScopeDeclRefExpr>(E.get()))
3400       return !DSDRE->hasExplicitTemplateArgs();
3401     if (auto *DSME = dyn_cast<CXXDependentScopeMemberExpr>(E.get()))
3402       return !DSME->hasExplicitTemplateArgs();
3403     // Any additional cases recognized here should also be handled by
3404     // diagnoseExprIntendedAsTemplateName.
3405     return false;
3406   }
3407 
3408   void warnOnReservedIdentifier(const NamedDecl *D);
3409 
3410   Decl *ActOnDeclarator(Scope *S, Declarator &D);
3411 
3412   NamedDecl *HandleDeclarator(Scope *S, Declarator &D,
3413                               MultiTemplateParamsArg TemplateParameterLists);
3414 
3415   /// Attempt to fold a variable-sized type to a constant-sized type, returning
3416   /// true if we were successful.
3417   bool tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T,
3418                                        SourceLocation Loc,
3419                                        unsigned FailedFoldDiagID);
3420 
3421   /// Register the given locally-scoped extern "C" declaration so
3422   /// that it can be found later for redeclarations. We include any extern "C"
3423   /// declaration that is not visible in the translation unit here, not just
3424   /// function-scope declarations.
3425   void RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S);
3426 
3427   /// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:
3428   ///   If T is the name of a class, then each of the following shall have a
3429   ///   name different from T:
3430   ///     - every static data member of class T;
3431   ///     - every member function of class T
3432   ///     - every member of class T that is itself a type;
3433   /// \returns true if the declaration name violates these rules.
3434   bool DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo Info);
3435 
3436   /// Diagnose a declaration whose declarator-id has the given
3437   /// nested-name-specifier.
3438   ///
3439   /// \param SS The nested-name-specifier of the declarator-id.
3440   ///
3441   /// \param DC The declaration context to which the nested-name-specifier
3442   /// resolves.
3443   ///
3444   /// \param Name The name of the entity being declared.
3445   ///
3446   /// \param Loc The location of the name of the entity being declared.
3447   ///
3448   /// \param IsMemberSpecialization Whether we are declaring a member
3449   /// specialization.
3450   ///
3451   /// \param TemplateId The template-id, if any.
3452   ///
3453   /// \returns true if we cannot safely recover from this error, false
3454   /// otherwise.
3455   bool diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
3456                                     DeclarationName Name, SourceLocation Loc,
3457                                     TemplateIdAnnotation *TemplateId,
3458                                     bool IsMemberSpecialization);
3459 
3460   bool checkPointerAuthEnabled(SourceLocation Loc, SourceRange Range);
3461 
3462   bool checkConstantPointerAuthKey(Expr *keyExpr, unsigned &key);
3463 
3464   /// Diagnose function specifiers on a declaration of an identifier that
3465   /// does not identify a function.
3466   void DiagnoseFunctionSpecifiers(const DeclSpec &DS);
3467 
3468   /// Return the declaration shadowed by the given typedef \p D, or null
3469   /// if it doesn't shadow any declaration or shadowing warnings are disabled.
3470   NamedDecl *getShadowedDeclaration(const TypedefNameDecl *D,
3471                                     const LookupResult &R);
3472 
3473   /// Return the declaration shadowed by the given variable \p D, or null
3474   /// if it doesn't shadow any declaration or shadowing warnings are disabled.
3475   NamedDecl *getShadowedDeclaration(const VarDecl *D, const LookupResult &R);
3476 
3477   /// Return the declaration shadowed by the given variable \p D, or null
3478   /// if it doesn't shadow any declaration or shadowing warnings are disabled.
3479   NamedDecl *getShadowedDeclaration(const BindingDecl *D,
3480                                     const LookupResult &R);
3481   /// Diagnose variable or built-in function shadowing.  Implements
3482   /// -Wshadow.
3483   ///
3484   /// This method is called whenever a VarDecl is added to a "useful"
3485   /// scope.
3486   ///
3487   /// \param ShadowedDecl the declaration that is shadowed by the given variable
3488   /// \param R the lookup of the name
3489   void CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl,
3490                    const LookupResult &R);
3491 
3492   /// Check -Wshadow without the advantage of a previous lookup.
3493   void CheckShadow(Scope *S, VarDecl *D);
3494 
3495   /// Warn if 'E', which is an expression that is about to be modified, refers
3496   /// to a shadowing declaration.
3497   void CheckShadowingDeclModification(Expr *E, SourceLocation Loc);
3498 
3499   /// Diagnose shadowing for variables shadowed in the lambda record \p LambdaRD
3500   /// when these variables are captured by the lambda.
3501   void DiagnoseShadowingLambdaDecls(const sema::LambdaScopeInfo *LSI);
3502 
3503   void handleTagNumbering(const TagDecl *Tag, Scope *TagScope);
3504   void setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec,
3505                                     TypedefNameDecl *NewTD);
3506   void CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *D);
3507   NamedDecl *ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC,
3508                                     TypeSourceInfo *TInfo,
3509                                     LookupResult &Previous);
3510 
3511   /// ActOnTypedefNameDecl - Perform semantic checking for a declaration which
3512   /// declares a typedef-name, either using the 'typedef' type specifier or via
3513   /// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'.
3514   NamedDecl *ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *D,
3515                                   LookupResult &Previous, bool &Redeclaration);
3516   NamedDecl *ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
3517                                      TypeSourceInfo *TInfo,
3518                                      LookupResult &Previous,
3519                                      MultiTemplateParamsArg TemplateParamLists,
3520                                      bool &AddToScope,
3521                                      ArrayRef<BindingDecl *> Bindings = {});
3522 
3523   /// Perform semantic checking on a newly-created variable
3524   /// declaration.
3525   ///
3526   /// This routine performs all of the type-checking required for a
3527   /// variable declaration once it has been built. It is used both to
3528   /// check variables after they have been parsed and their declarators
3529   /// have been translated into a declaration, and to check variables
3530   /// that have been instantiated from a template.
3531   ///
3532   /// Sets NewVD->isInvalidDecl() if an error was encountered.
3533   ///
3534   /// Returns true if the variable declaration is a redeclaration.
3535   bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous);
3536   void CheckVariableDeclarationType(VarDecl *NewVD);
3537   void CheckCompleteVariableDeclaration(VarDecl *VD);
3538 
3539   NamedDecl *ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
3540                                      TypeSourceInfo *TInfo,
3541                                      LookupResult &Previous,
3542                                      MultiTemplateParamsArg TemplateParamLists,
3543                                      bool &AddToScope);
3544 
3545   /// AddOverriddenMethods - See if a method overrides any in the base classes,
3546   /// and if so, check that it's a valid override and remember it.
3547   bool AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD);
3548 
3549   /// Perform semantic checking of a new function declaration.
3550   ///
3551   /// Performs semantic analysis of the new function declaration
3552   /// NewFD. This routine performs all semantic checking that does not
3553   /// require the actual declarator involved in the declaration, and is
3554   /// used both for the declaration of functions as they are parsed
3555   /// (called via ActOnDeclarator) and for the declaration of functions
3556   /// that have been instantiated via C++ template instantiation (called
3557   /// via InstantiateDecl).
3558   ///
3559   /// \param IsMemberSpecialization whether this new function declaration is
3560   /// a member specialization (that replaces any definition provided by the
3561   /// previous declaration).
3562   ///
3563   /// This sets NewFD->isInvalidDecl() to true if there was an error.
3564   ///
3565   /// \returns true if the function declaration is a redeclaration.
3566   bool CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
3567                                 LookupResult &Previous,
3568                                 bool IsMemberSpecialization, bool DeclIsDefn);
3569 
3570   /// Checks if the new declaration declared in dependent context must be
3571   /// put in the same redeclaration chain as the specified declaration.
3572   ///
3573   /// \param D Declaration that is checked.
3574   /// \param PrevDecl Previous declaration found with proper lookup method for
3575   ///                 the same declaration name.
3576   /// \returns True if D must be added to the redeclaration chain which PrevDecl
3577   ///          belongs to.
3578   bool shouldLinkDependentDeclWithPrevious(Decl *D, Decl *OldDecl);
3579 
3580   /// Determines if we can perform a correct type check for \p D as a
3581   /// redeclaration of \p PrevDecl. If not, we can generally still perform a
3582   /// best-effort check.
3583   ///
3584   /// \param NewD The new declaration.
3585   /// \param OldD The old declaration.
3586   /// \param NewT The portion of the type of the new declaration to check.
3587   /// \param OldT The portion of the type of the old declaration to check.
3588   bool canFullyTypeCheckRedeclaration(ValueDecl *NewD, ValueDecl *OldD,
3589                                       QualType NewT, QualType OldT);
3590   void CheckMain(FunctionDecl *FD, const DeclSpec &D);
3591   void CheckMSVCRTEntryPoint(FunctionDecl *FD);
3592 
3593   /// Returns an implicit CodeSegAttr if a __declspec(code_seg) is found on a
3594   /// containing class. Otherwise it will return implicit SectionAttr if the
3595   /// function is a definition and there is an active value on CodeSegStack
3596   /// (from the current #pragma code-seg value).
3597   ///
3598   /// \param FD Function being declared.
3599   /// \param IsDefinition Whether it is a definition or just a declaration.
3600   /// \returns A CodeSegAttr or SectionAttr to apply to the function or
3601   ///          nullptr if no attribute should be added.
3602   Attr *getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD,
3603                                                    bool IsDefinition);
3604 
3605   /// Common checks for a parameter-declaration that should apply to both
3606   /// function parameters and non-type template parameters.
3607   void CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D);
3608 
3609   /// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()
3610   /// to introduce parameters into function prototype scope.
3611   Decl *ActOnParamDeclarator(Scope *S, Declarator &D,
3612                              SourceLocation ExplicitThisLoc = {});
3613 
3614   /// Synthesizes a variable for a parameter arising from a
3615   /// typedef.
3616   ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC, SourceLocation Loc,
3617                                           QualType T);
3618   ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc,
3619                               SourceLocation NameLoc,
3620                               const IdentifierInfo *Name, QualType T,
3621                               TypeSourceInfo *TSInfo, StorageClass SC);
3622 
3623   // Contexts where using non-trivial C union types can be disallowed. This is
3624   // passed to err_non_trivial_c_union_in_invalid_context.
3625   enum NonTrivialCUnionContext {
3626     // Function parameter.
3627     NTCUC_FunctionParam,
3628     // Function return.
3629     NTCUC_FunctionReturn,
3630     // Default-initialized object.
3631     NTCUC_DefaultInitializedObject,
3632     // Variable with automatic storage duration.
3633     NTCUC_AutoVar,
3634     // Initializer expression that might copy from another object.
3635     NTCUC_CopyInit,
3636     // Assignment.
3637     NTCUC_Assignment,
3638     // Compound literal.
3639     NTCUC_CompoundLiteral,
3640     // Block capture.
3641     NTCUC_BlockCapture,
3642     // lvalue-to-rvalue conversion of volatile type.
3643     NTCUC_LValueToRValueVolatile,
3644   };
3645 
3646   /// Emit diagnostics if the initializer or any of its explicit or
3647   /// implicitly-generated subexpressions require copying or
3648   /// default-initializing a type that is or contains a C union type that is
3649   /// non-trivial to copy or default-initialize.
3650   void checkNonTrivialCUnionInInitializer(const Expr *Init, SourceLocation Loc);
3651 
3652   // These flags are passed to checkNonTrivialCUnion.
3653   enum NonTrivialCUnionKind {
3654     NTCUK_Init = 0x1,
3655     NTCUK_Destruct = 0x2,
3656     NTCUK_Copy = 0x4,
3657   };
3658 
3659   /// Emit diagnostics if a non-trivial C union type or a struct that contains
3660   /// a non-trivial C union is used in an invalid context.
3661   void checkNonTrivialCUnion(QualType QT, SourceLocation Loc,
3662                              NonTrivialCUnionContext UseContext,
3663                              unsigned NonTrivialKind);
3664 
3665   /// AddInitializerToDecl - Adds the initializer Init to the
3666   /// declaration dcl. If DirectInit is true, this is C++ direct
3667   /// initialization rather than copy initialization.
3668   void AddInitializerToDecl(Decl *dcl, Expr *init, bool DirectInit);
3669   void ActOnUninitializedDecl(Decl *dcl);
3670 
3671   /// ActOnInitializerError - Given that there was an error parsing an
3672   /// initializer for the given declaration, try to at least re-establish
3673   /// invariants such as whether a variable's type is either dependent or
3674   /// complete.
3675   void ActOnInitializerError(Decl *Dcl);
3676 
3677   void ActOnCXXForRangeDecl(Decl *D);
3678   StmtResult ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc,
3679                                         IdentifierInfo *Ident,
3680                                         ParsedAttributes &Attrs);
3681 
3682   /// Check if VD needs to be dllexport/dllimport due to being in a
3683   /// dllexport/import function.
3684   void CheckStaticLocalForDllExport(VarDecl *VD);
3685   void CheckThreadLocalForLargeAlignment(VarDecl *VD);
3686 
3687   /// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform
3688   /// any semantic actions necessary after any initializer has been attached.
3689   void FinalizeDeclaration(Decl *D);
3690   DeclGroupPtrTy FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
3691                                          ArrayRef<Decl *> Group);
3692 
3693   /// BuildDeclaratorGroup - convert a list of declarations into a declaration
3694   /// group, performing any necessary semantic checking.
3695   DeclGroupPtrTy BuildDeclaratorGroup(MutableArrayRef<Decl *> Group);
3696 
3697   /// Should be called on all declarations that might have attached
3698   /// documentation comments.
3699   void ActOnDocumentableDecl(Decl *D);
3700   void ActOnDocumentableDecls(ArrayRef<Decl *> Group);
3701 
3702   enum class FnBodyKind {
3703     /// C++26 [dcl.fct.def.general]p1
3704     /// function-body:
3705     ///   ctor-initializer[opt] compound-statement
3706     ///   function-try-block
3707     Other,
3708     ///   = default ;
3709     Default,
3710     ///   deleted-function-body
3711     ///
3712     /// deleted-function-body:
3713     ///   = delete ;
3714     ///   = delete ( unevaluated-string ) ;
3715     Delete
3716   };
3717 
3718   void ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
3719                                        SourceLocation LocAfterDecls);
3720   void CheckForFunctionRedefinition(
3721       FunctionDecl *FD, const FunctionDecl *EffectiveDefinition = nullptr,
3722       SkipBodyInfo *SkipBody = nullptr);
3723   Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D,
3724                                 MultiTemplateParamsArg TemplateParamLists,
3725                                 SkipBodyInfo *SkipBody = nullptr,
3726                                 FnBodyKind BodyKind = FnBodyKind::Other);
3727   Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D,
3728                                 SkipBodyInfo *SkipBody = nullptr,
3729                                 FnBodyKind BodyKind = FnBodyKind::Other);
3730   void applyFunctionAttributesBeforeParsingBody(Decl *FD);
3731 
3732   /// Determine whether we can delay parsing the body of a function or
3733   /// function template until it is used, assuming we don't care about emitting
3734   /// code for that function.
3735   ///
3736   /// This will be \c false if we may need the body of the function in the
3737   /// middle of parsing an expression (where it's impractical to switch to
3738   /// parsing a different function), for instance, if it's constexpr in C++11
3739   /// or has an 'auto' return type in C++14. These cases are essentially bugs.
3740   bool canDelayFunctionBody(const Declarator &D);
3741 
3742   /// Determine whether we can skip parsing the body of a function
3743   /// definition, assuming we don't care about analyzing its body or emitting
3744   /// code for that function.
3745   ///
3746   /// This will be \c false only if we may need the body of the function in
3747   /// order to parse the rest of the program (for instance, if it is
3748   /// \c constexpr in C++11 or has an 'auto' return type in C++14).
3749   bool canSkipFunctionBody(Decl *D);
3750 
3751   /// Given the set of return statements within a function body,
3752   /// compute the variables that are subject to the named return value
3753   /// optimization.
3754   ///
3755   /// Each of the variables that is subject to the named return value
3756   /// optimization will be marked as NRVO variables in the AST, and any
3757   /// return statement that has a marked NRVO variable as its NRVO candidate can
3758   /// use the named return value optimization.
3759   ///
3760   /// This function applies a very simplistic algorithm for NRVO: if every
3761   /// return statement in the scope of a variable has the same NRVO candidate,
3762   /// that candidate is an NRVO variable.
3763   void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope);
3764   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body);
3765   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation);
3766   Decl *ActOnSkippedFunctionBody(Decl *Decl);
3767   void ActOnFinishInlineFunctionDef(FunctionDecl *D);
3768 
3769   /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an
3770   /// attribute for which parsing is delayed.
3771   void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs);
3772 
3773   /// Diagnose any unused parameters in the given sequence of
3774   /// ParmVarDecl pointers.
3775   void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters);
3776 
3777   /// Diagnose whether the size of parameters or return value of a
3778   /// function or obj-c method definition is pass-by-value and larger than a
3779   /// specified threshold.
3780   void
3781   DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters,
3782                                          QualType ReturnTy, NamedDecl *D);
3783 
3784   Decl *ActOnFileScopeAsmDecl(Expr *expr, SourceLocation AsmLoc,
3785                               SourceLocation RParenLoc);
3786 
3787   TopLevelStmtDecl *ActOnStartTopLevelStmtDecl(Scope *S);
3788   void ActOnFinishTopLevelStmtDecl(TopLevelStmtDecl *D, Stmt *Statement);
3789 
3790   void ActOnPopScope(SourceLocation Loc, Scope *S);
3791 
3792   /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
3793   /// no declarator (e.g. "struct foo;") is parsed.
3794   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
3795                                    const ParsedAttributesView &DeclAttrs,
3796                                    RecordDecl *&AnonRecord);
3797 
3798   /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
3799   /// no declarator (e.g. "struct foo;") is parsed. It also accepts template
3800   /// parameters to cope with template friend declarations.
3801   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
3802                                    const ParsedAttributesView &DeclAttrs,
3803                                    MultiTemplateParamsArg TemplateParams,
3804                                    bool IsExplicitInstantiation,
3805                                    RecordDecl *&AnonRecord,
3806                                    SourceLocation EllipsisLoc = {});
3807 
3808   /// BuildAnonymousStructOrUnion - Handle the declaration of an
3809   /// anonymous structure or union. Anonymous unions are a C++ feature
3810   /// (C++ [class.union]) and a C11 feature; anonymous structures
3811   /// are a C11 feature and GNU C++ extension.
3812   Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS,
3813                                     RecordDecl *Record,
3814                                     const PrintingPolicy &Policy);
3815 
3816   /// Called once it is known whether
3817   /// a tag declaration is an anonymous union or struct.
3818   void ActOnDefinedDeclarationSpecifier(Decl *D);
3819 
3820   /// Emit diagnostic warnings for placeholder members.
3821   /// We can only do that after the class is fully constructed,
3822   /// as anonymous union/structs can insert placeholders
3823   /// in their parent scope (which might be a Record).
3824   void DiagPlaceholderFieldDeclDefinitions(RecordDecl *Record);
3825 
3826   /// BuildMicrosoftCAnonymousStruct - Handle the declaration of an
3827   /// Microsoft C anonymous structure.
3828   /// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx
3829   /// Example:
3830   ///
3831   /// struct A { int a; };
3832   /// struct B { struct A; int b; };
3833   ///
3834   /// void foo() {
3835   ///   B var;
3836   ///   var.a = 3;
3837   /// }
3838   Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
3839                                        RecordDecl *Record);
3840 
3841   /// Common ways to introduce type names without a tag for use in diagnostics.
3842   /// Keep in sync with err_tag_reference_non_tag.
3843   enum NonTagKind {
3844     NTK_NonStruct,
3845     NTK_NonClass,
3846     NTK_NonUnion,
3847     NTK_NonEnum,
3848     NTK_Typedef,
3849     NTK_TypeAlias,
3850     NTK_Template,
3851     NTK_TypeAliasTemplate,
3852     NTK_TemplateTemplateArgument,
3853   };
3854 
3855   /// Given a non-tag type declaration, returns an enum useful for indicating
3856   /// what kind of non-tag type this is.
3857   NonTagKind getNonTagTypeDeclKind(const Decl *D, TagTypeKind TTK);
3858 
3859   /// Determine whether a tag with a given kind is acceptable
3860   /// as a redeclaration of the given tag declaration.
3861   ///
3862   /// \returns true if the new tag kind is acceptable, false otherwise.
3863   bool isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag,
3864                                     bool isDefinition, SourceLocation NewTagLoc,
3865                                     const IdentifierInfo *Name);
3866 
3867   enum OffsetOfKind {
3868     // Not parsing a type within __builtin_offsetof.
3869     OOK_Outside,
3870     // Parsing a type within __builtin_offsetof.
3871     OOK_Builtin,
3872     // Parsing a type within macro "offsetof", defined in __buitin_offsetof
3873     // To improve our diagnostic message.
3874     OOK_Macro,
3875   };
3876 
3877   /// This is invoked when we see 'struct foo' or 'struct {'.  In the
3878   /// former case, Name will be non-null.  In the later case, Name will be null.
3879   /// TagSpec indicates what kind of tag this is. TUK indicates whether this is
3880   /// a reference/declaration/definition of a tag.
3881   ///
3882   /// \param IsTypeSpecifier \c true if this is a type-specifier (or
3883   /// trailing-type-specifier) other than one in an alias-declaration.
3884   ///
3885   /// \param SkipBody If non-null, will be set to indicate if the caller should
3886   /// skip the definition of this tag and treat it as if it were a declaration.
3887   DeclResult ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
3888                       SourceLocation KWLoc, CXXScopeSpec &SS,
3889                       IdentifierInfo *Name, SourceLocation NameLoc,
3890                       const ParsedAttributesView &Attr, AccessSpecifier AS,
3891                       SourceLocation ModulePrivateLoc,
3892                       MultiTemplateParamsArg TemplateParameterLists,
3893                       bool &OwnedDecl, bool &IsDependent,
3894                       SourceLocation ScopedEnumKWLoc,
3895                       bool ScopedEnumUsesClassTag, TypeResult UnderlyingType,
3896                       bool IsTypeSpecifier, bool IsTemplateParamOrArg,
3897                       OffsetOfKind OOK, SkipBodyInfo *SkipBody = nullptr);
3898 
3899   /// ActOnField - Each field of a C struct/union is passed into this in order
3900   /// to create a FieldDecl object for it.
3901   Decl *ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
3902                    Declarator &D, Expr *BitfieldWidth);
3903 
3904   /// HandleField - Analyze a field of a C struct or a C++ data member.
3905   FieldDecl *HandleField(Scope *S, RecordDecl *TagD, SourceLocation DeclStart,
3906                          Declarator &D, Expr *BitfieldWidth,
3907                          InClassInitStyle InitStyle, AccessSpecifier AS);
3908 
3909   /// Build a new FieldDecl and check its well-formedness.
3910   ///
3911   /// This routine builds a new FieldDecl given the fields name, type,
3912   /// record, etc. \p PrevDecl should refer to any previous declaration
3913   /// with the same name and in the same scope as the field to be
3914   /// created.
3915   ///
3916   /// \returns a new FieldDecl.
3917   ///
3918   /// \todo The Declarator argument is a hack. It will be removed once
3919   FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T,
3920                             TypeSourceInfo *TInfo, RecordDecl *Record,
3921                             SourceLocation Loc, bool Mutable,
3922                             Expr *BitfieldWidth, InClassInitStyle InitStyle,
3923                             SourceLocation TSSL, AccessSpecifier AS,
3924                             NamedDecl *PrevDecl, Declarator *D = nullptr);
3925 
3926   bool CheckNontrivialField(FieldDecl *FD);
3927 
3928   /// ActOnLastBitfield - This routine handles synthesized bitfields rules for
3929   /// class and class extensions. For every class \@interface and class
3930   /// extension \@interface, if the last ivar is a bitfield of any type,
3931   /// then add an implicit `char :0` ivar to the end of that interface.
3932   void ActOnLastBitfield(SourceLocation DeclStart,
3933                          SmallVectorImpl<Decl *> &AllIvarDecls);
3934 
3935   // This is used for both record definitions and ObjC interface declarations.
3936   void ActOnFields(Scope *S, SourceLocation RecLoc, Decl *TagDecl,
3937                    ArrayRef<Decl *> Fields, SourceLocation LBrac,
3938                    SourceLocation RBrac, const ParsedAttributesView &AttrList);
3939 
3940   /// ActOnTagStartDefinition - Invoked when we have entered the
3941   /// scope of a tag's definition (e.g., for an enumeration, class,
3942   /// struct, or union).
3943   void ActOnTagStartDefinition(Scope *S, Decl *TagDecl);
3944 
3945   /// Perform ODR-like check for C/ObjC when merging tag types from modules.
3946   /// Differently from C++, actually parse the body and reject / error out
3947   /// in case of a structural mismatch.
3948   bool ActOnDuplicateDefinition(Decl *Prev, SkipBodyInfo &SkipBody);
3949 
3950   typedef void *SkippedDefinitionContext;
3951 
3952   /// Invoked when we enter a tag definition that we're skipping.
3953   SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD);
3954 
3955   /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a
3956   /// C++ record definition's base-specifiers clause and are starting its
3957   /// member declarations.
3958   void ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagDecl,
3959                                        SourceLocation FinalLoc,
3960                                        bool IsFinalSpelledSealed,
3961                                        bool IsAbstract,
3962                                        SourceLocation LBraceLoc);
3963 
3964   /// ActOnTagFinishDefinition - Invoked once we have finished parsing
3965   /// the definition of a tag (enumeration, class, struct, or union).
3966   void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl,
3967                                 SourceRange BraceRange);
3968 
3969   void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context);
3970 
3971   /// ActOnTagDefinitionError - Invoked when there was an unrecoverable
3972   /// error parsing the definition of a tag.
3973   void ActOnTagDefinitionError(Scope *S, Decl *TagDecl);
3974 
3975   EnumConstantDecl *CheckEnumConstant(EnumDecl *Enum,
3976                                       EnumConstantDecl *LastEnumConst,
3977                                       SourceLocation IdLoc, IdentifierInfo *Id,
3978                                       Expr *val);
3979 
3980   /// Check that this is a valid underlying type for an enum declaration.
3981   bool CheckEnumUnderlyingType(TypeSourceInfo *TI);
3982 
3983   /// Check whether this is a valid redeclaration of a previous enumeration.
3984   /// \return true if the redeclaration was invalid.
3985   bool CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
3986                               QualType EnumUnderlyingTy, bool IsFixed,
3987                               const EnumDecl *Prev);
3988 
3989   /// Determine whether the body of an anonymous enumeration should be skipped.
3990   /// \param II The name of the first enumerator.
3991   SkipBodyInfo shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II,
3992                                       SourceLocation IILoc);
3993 
3994   Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant,
3995                           SourceLocation IdLoc, IdentifierInfo *Id,
3996                           const ParsedAttributesView &Attrs,
3997                           SourceLocation EqualLoc, Expr *Val);
3998   void ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange,
3999                      Decl *EnumDecl, ArrayRef<Decl *> Elements, Scope *S,
4000                      const ParsedAttributesView &Attr);
4001 
4002   /// Set the current declaration context until it gets popped.
4003   void PushDeclContext(Scope *S, DeclContext *DC);
4004   void PopDeclContext();
4005 
4006   /// EnterDeclaratorContext - Used when we must lookup names in the context
4007   /// of a declarator's nested name specifier.
4008   void EnterDeclaratorContext(Scope *S, DeclContext *DC);
4009   void ExitDeclaratorContext(Scope *S);
4010 
4011   /// Enter a template parameter scope, after it's been associated with a
4012   /// particular DeclContext. Causes lookup within the scope to chain through
4013   /// enclosing contexts in the correct order.
4014   void EnterTemplatedContext(Scope *S, DeclContext *DC);
4015 
4016   /// Push the parameters of D, which must be a function, into scope.
4017   void ActOnReenterFunctionContext(Scope *S, Decl *D);
4018   void ActOnExitFunctionContext();
4019 
4020   /// Add this decl to the scope shadowed decl chains.
4021   void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true);
4022 
4023   /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true
4024   /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns
4025   /// true if 'D' belongs to the given declaration context.
4026   ///
4027   /// \param AllowInlineNamespace If \c true, allow the declaration to be in the
4028   ///        enclosing namespace set of the context, rather than contained
4029   ///        directly within it.
4030   bool isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S = nullptr,
4031                      bool AllowInlineNamespace = false) const;
4032 
4033   /// Finds the scope corresponding to the given decl context, if it
4034   /// happens to be an enclosing scope.  Otherwise return NULL.
4035   static Scope *getScopeForDeclContext(Scope *S, DeclContext *DC);
4036 
4037   /// Subroutines of ActOnDeclarator().
4038   TypedefDecl *ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
4039                                 TypeSourceInfo *TInfo);
4040   bool isIncompatibleTypedef(const TypeDecl *Old, TypedefNameDecl *New);
4041 
4042   /// Describes the kind of merge to perform for availability
4043   /// attributes (including "deprecated", "unavailable", and "availability").
4044   enum AvailabilityMergeKind {
4045     /// Don't merge availability attributes at all.
4046     AMK_None,
4047     /// Merge availability attributes for a redeclaration, which requires
4048     /// an exact match.
4049     AMK_Redeclaration,
4050     /// Merge availability attributes for an override, which requires
4051     /// an exact match or a weakening of constraints.
4052     AMK_Override,
4053     /// Merge availability attributes for an implementation of
4054     /// a protocol requirement.
4055     AMK_ProtocolImplementation,
4056     /// Merge availability attributes for an implementation of
4057     /// an optional protocol requirement.
4058     AMK_OptionalProtocolImplementation
4059   };
4060 
4061   /// mergeDeclAttributes - Copy attributes from the Old decl to the New one.
4062   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
4063                            AvailabilityMergeKind AMK = AMK_Redeclaration);
4064 
4065   /// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the
4066   /// same name and scope as a previous declaration 'Old'.  Figure out
4067   /// how to resolve this situation, merging decls or emitting
4068   /// diagnostics as appropriate. If there was an error, set New to be invalid.
4069   void MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New,
4070                             LookupResult &OldDecls);
4071 
4072   /// MergeFunctionDecl - We just parsed a function 'New' from
4073   /// declarator D which has the same name and scope as a previous
4074   /// declaration 'Old'.  Figure out how to resolve this situation,
4075   /// merging decls or emitting diagnostics as appropriate.
4076   ///
4077   /// In C++, New and Old must be declarations that are not
4078   /// overloaded. Use IsOverload to determine whether New and Old are
4079   /// overloaded, and to select the Old declaration that New should be
4080   /// merged with.
4081   ///
4082   /// Returns true if there was an error, false otherwise.
4083   bool MergeFunctionDecl(FunctionDecl *New, NamedDecl *&Old, Scope *S,
4084                          bool MergeTypeWithOld, bool NewDeclIsDefn);
4085 
4086   /// Completes the merge of two function declarations that are
4087   /// known to be compatible.
4088   ///
4089   /// This routine handles the merging of attributes and other
4090   /// properties of function declarations from the old declaration to
4091   /// the new declaration, once we know that New is in fact a
4092   /// redeclaration of Old.
4093   ///
4094   /// \returns false
4095   bool MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
4096                                     Scope *S, bool MergeTypeWithOld);
4097   void mergeObjCMethodDecls(ObjCMethodDecl *New, ObjCMethodDecl *Old);
4098 
4099   /// MergeVarDecl - We just parsed a variable 'New' which has the same name
4100   /// and scope as a previous declaration 'Old'.  Figure out how to resolve this
4101   /// situation, merging decls or emitting diagnostics as appropriate.
4102   ///
4103   /// Tentative definition rules (C99 6.9.2p2) are checked by
4104   /// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative
4105   /// definitions here, since the initializer hasn't been attached.
4106   void MergeVarDecl(VarDecl *New, LookupResult &Previous);
4107 
4108   /// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and
4109   /// scope as a previous declaration 'Old'.  Figure out how to merge their
4110   /// types, emitting diagnostics as appropriate.
4111   ///
4112   /// Declarations using the auto type specifier (C++ [decl.spec.auto]) call
4113   /// back to here in AddInitializerToDecl. We can't check them before the
4114   /// initializer is attached.
4115   void MergeVarDeclTypes(VarDecl *New, VarDecl *Old, bool MergeTypeWithOld);
4116 
4117   /// We've just determined that \p Old and \p New both appear to be definitions
4118   /// of the same variable. Either diagnose or fix the problem.
4119   bool checkVarDeclRedefinition(VarDecl *OldDefn, VarDecl *NewDefn);
4120   void notePreviousDefinition(const NamedDecl *Old, SourceLocation New);
4121 
4122   /// Filters out lookup results that don't fall within the given scope
4123   /// as determined by isDeclInScope.
4124   void FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S,
4125                             bool ConsiderLinkage, bool AllowInlineNamespace);
4126 
4127   /// We've determined that \p New is a redeclaration of \p Old. Check that they
4128   /// have compatible owning modules.
4129   bool CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old);
4130 
4131   /// [module.interface]p6:
4132   /// A redeclaration of an entity X is implicitly exported if X was introduced
4133   /// by an exported declaration; otherwise it shall not be exported.
4134   bool CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old);
4135 
4136   /// A wrapper function for checking the semantic restrictions of
4137   /// a redeclaration within a module.
4138   bool CheckRedeclarationInModule(NamedDecl *New, NamedDecl *Old);
4139 
4140   /// Check the redefinition in C++20 Modules.
4141   ///
4142   /// [basic.def.odr]p14:
4143   /// For any definable item D with definitions in multiple translation units,
4144   /// - if D is a non-inline non-templated function or variable, or
4145   /// - if the definitions in different translation units do not satisfy the
4146   /// following requirements,
4147   ///   the program is ill-formed; a diagnostic is required only if the
4148   ///   definable item is attached to a named module and a prior definition is
4149   ///   reachable at the point where a later definition occurs.
4150   /// - Each such definition shall not be attached to a named module
4151   /// ([module.unit]).
4152   /// - Each such definition shall consist of the same sequence of tokens, ...
4153   /// ...
4154   ///
4155   /// Return true if the redefinition is not allowed. Return false otherwise.
4156   bool IsRedefinitionInModule(const NamedDecl *New, const NamedDecl *Old) const;
4157 
4158   bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const;
4159 
4160   /// If it's a file scoped decl that must warn if not used, keep track
4161   /// of it.
4162   void MarkUnusedFileScopedDecl(const DeclaratorDecl *D);
4163 
4164   typedef llvm::function_ref<void(SourceLocation Loc, PartialDiagnostic PD)>
4165       DiagReceiverTy;
4166 
4167   void DiagnoseUnusedNestedTypedefs(const RecordDecl *D);
4168   void DiagnoseUnusedNestedTypedefs(const RecordDecl *D,
4169                                     DiagReceiverTy DiagReceiver);
4170   void DiagnoseUnusedDecl(const NamedDecl *ND);
4171 
4172   /// DiagnoseUnusedDecl - Emit warnings about declarations that are not used
4173   /// unless they are marked attr(unused).
4174   void DiagnoseUnusedDecl(const NamedDecl *ND, DiagReceiverTy DiagReceiver);
4175 
4176   /// If VD is set but not otherwise used, diagnose, for a parameter or a
4177   /// variable.
4178   void DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver);
4179 
4180   /// getNonFieldDeclScope - Retrieves the innermost scope, starting
4181   /// from S, where a non-field would be declared. This routine copes
4182   /// with the difference between C and C++ scoping rules in structs and
4183   /// unions. For example, the following code is well-formed in C but
4184   /// ill-formed in C++:
4185   /// @code
4186   /// struct S6 {
4187   ///   enum { BAR } e;
4188   /// };
4189   ///
4190   /// void test_S6() {
4191   ///   struct S6 a;
4192   ///   a.e = BAR;
4193   /// }
4194   /// @endcode
4195   /// For the declaration of BAR, this routine will return a different
4196   /// scope. The scope S will be the scope of the unnamed enumeration
4197   /// within S6. In C++, this routine will return the scope associated
4198   /// with S6, because the enumeration's scope is a transparent
4199   /// context but structures can contain non-field names. In C, this
4200   /// routine will return the translation unit scope, since the
4201   /// enumeration's scope is a transparent context and structures cannot
4202   /// contain non-field names.
4203   Scope *getNonFieldDeclScope(Scope *S);
4204 
4205   FunctionDecl *CreateBuiltin(IdentifierInfo *II, QualType Type, unsigned ID,
4206                               SourceLocation Loc);
4207 
4208   /// LazilyCreateBuiltin - The specified Builtin-ID was first used at
4209   /// file scope.  lazily create a decl for it. ForRedeclaration is true
4210   /// if we're creating this built-in in anticipation of redeclaring the
4211   /// built-in.
4212   NamedDecl *LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S,
4213                                  bool ForRedeclaration, SourceLocation Loc);
4214 
4215   /// Get the outermost AttributedType node that sets a calling convention.
4216   /// Valid types should not have multiple attributes with different CCs.
4217   const AttributedType *getCallingConvAttributedType(QualType T) const;
4218 
4219   /// GetNameForDeclarator - Determine the full declaration name for the
4220   /// given Declarator.
4221   DeclarationNameInfo GetNameForDeclarator(Declarator &D);
4222 
4223   /// Retrieves the declaration name from a parsed unqualified-id.
4224   DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name);
4225 
4226   /// ParsingInitForAutoVars - a set of declarations with auto types for which
4227   /// we are currently parsing the initializer.
4228   llvm::SmallPtrSet<const Decl *, 4> ParsingInitForAutoVars;
4229 
4230   /// Look for a locally scoped extern "C" declaration by the given name.
4231   NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
4232 
4233   void deduceOpenCLAddressSpace(ValueDecl *decl);
4234 
4235   /// Adjust the \c DeclContext for a function or variable that might be a
4236   /// function-local external declaration.
4237   static bool adjustContextForLocalExternDecl(DeclContext *&DC);
4238 
4239   void MarkTypoCorrectedFunctionDefinition(const NamedDecl *F);
4240 
4241   /// Checks if the variant/multiversion functions are compatible.
4242   bool areMultiversionVariantFunctionsCompatible(
4243       const FunctionDecl *OldFD, const FunctionDecl *NewFD,
4244       const PartialDiagnostic &NoProtoDiagID,
4245       const PartialDiagnosticAt &NoteCausedDiagIDAt,
4246       const PartialDiagnosticAt &NoSupportDiagIDAt,
4247       const PartialDiagnosticAt &DiffDiagIDAt, bool TemplatesSupported,
4248       bool ConstexprSupported, bool CLinkageMayDiffer);
4249 
4250   /// type checking declaration initializers (C99 6.7.8)
4251   bool CheckForConstantInitializer(
4252       Expr *Init, unsigned DiagID = diag::err_init_element_not_constant);
4253 
4254   QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name,
4255                                         QualType Type, TypeSourceInfo *TSI,
4256                                         SourceRange Range, bool DirectInit,
4257                                         Expr *Init);
4258 
4259   bool DeduceVariableDeclarationType(VarDecl *VDecl, bool DirectInit,
4260                                      Expr *Init);
4261 
4262   sema::LambdaScopeInfo *RebuildLambdaScopeInfo(CXXMethodDecl *CallOperator);
4263 
4264   // Heuristically tells if the function is `get_return_object` member of a
4265   // coroutine promise_type by matching the function name.
4266   static bool CanBeGetReturnObject(const FunctionDecl *FD);
4267   static bool CanBeGetReturnTypeOnAllocFailure(const FunctionDecl *FD);
4268 
4269   /// ImplicitlyDefineFunction - An undeclared identifier was used in a function
4270   /// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
4271   NamedDecl *ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II,
4272                                       Scope *S);
4273 
4274   /// If this function is a C++ replaceable global allocation function
4275   /// (C++2a [basic.stc.dynamic.allocation], C++2a [new.delete]),
4276   /// adds any function attributes that we know a priori based on the standard.
4277   ///
4278   /// We need to check for duplicate attributes both here and where user-written
4279   /// attributes are applied to declarations.
4280   void AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction(
4281       FunctionDecl *FD);
4282 
4283   /// Adds any function attributes that we know a priori based on
4284   /// the declaration of this function.
4285   ///
4286   /// These attributes can apply both to implicitly-declared builtins
4287   /// (like __builtin___printf_chk) or to library-declared functions
4288   /// like NSLog or printf.
4289   ///
4290   /// We need to check for duplicate attributes both here and where user-written
4291   /// attributes are applied to declarations.
4292   void AddKnownFunctionAttributes(FunctionDecl *FD);
4293 
4294   /// VerifyBitField - verifies that a bit field expression is an ICE and has
4295   /// the correct width, and that the field type is valid.
4296   /// Returns false on success.
4297   ExprResult VerifyBitField(SourceLocation FieldLoc,
4298                             const IdentifierInfo *FieldName, QualType FieldTy,
4299                             bool IsMsStruct, Expr *BitWidth);
4300 
4301   /// IsValueInFlagEnum - Determine if a value is allowed as part of a flag
4302   /// enum. If AllowMask is true, then we also allow the complement of a valid
4303   /// value, to be used as a mask.
4304   bool IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
4305                          bool AllowMask) const;
4306 
4307   /// ActOnPragmaWeakID - Called on well formed \#pragma weak ident.
4308   void ActOnPragmaWeakID(IdentifierInfo *WeakName, SourceLocation PragmaLoc,
4309                          SourceLocation WeakNameLoc);
4310 
4311   /// ActOnPragmaRedefineExtname - Called on well formed
4312   /// \#pragma redefine_extname oldname newname.
4313   void ActOnPragmaRedefineExtname(IdentifierInfo *WeakName,
4314                                   IdentifierInfo *AliasName,
4315                                   SourceLocation PragmaLoc,
4316                                   SourceLocation WeakNameLoc,
4317                                   SourceLocation AliasNameLoc);
4318 
4319   /// ActOnPragmaWeakAlias - Called on well formed \#pragma weak ident = ident.
4320   void ActOnPragmaWeakAlias(IdentifierInfo *WeakName, IdentifierInfo *AliasName,
4321                             SourceLocation PragmaLoc,
4322                             SourceLocation WeakNameLoc,
4323                             SourceLocation AliasNameLoc);
4324 
4325   /// Status of the function emission on the CUDA/HIP/OpenMP host/device attrs.
4326   enum class FunctionEmissionStatus {
4327     Emitted,
4328     CUDADiscarded,     // Discarded due to CUDA/HIP hostness
4329     OMPDiscarded,      // Discarded due to OpenMP hostness
4330     TemplateDiscarded, // Discarded due to uninstantiated templates
4331     Unknown,
4332   };
4333   FunctionEmissionStatus getEmissionStatus(const FunctionDecl *Decl,
4334                                            bool Final = false);
4335 
4336   // Whether the callee should be ignored in CUDA/HIP/OpenMP host/device check.
4337   bool shouldIgnoreInHostDeviceCheck(FunctionDecl *Callee);
4338 
4339   /// Function or variable declarations to be checked for whether the deferred
4340   /// diagnostics should be emitted.
4341   llvm::SmallSetVector<Decl *, 4> DeclsToCheckForDeferredDiags;
4342 
4343 private:
4344   /// Map of current shadowing declarations to shadowed declarations. Warn if
4345   /// it looks like the user is trying to modify the shadowing declaration.
4346   llvm::DenseMap<const NamedDecl *, const NamedDecl *> ShadowingDecls;
4347 
4348   // We need this to handle
4349   //
4350   // typedef struct {
4351   //   void *foo() { return 0; }
4352   // } A;
4353   //
4354   // When we see foo we don't know if after the typedef we will get 'A' or '*A'
4355   // for example. If 'A', foo will have external linkage. If we have '*A',
4356   // foo will have no linkage. Since we can't know until we get to the end
4357   // of the typedef, this function finds out if D might have non-external
4358   // linkage. Callers should verify at the end of the TU if it D has external
4359   // linkage or not.
4360   static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD);
4361 
4362   ///@}
4363 
4364   //
4365   //
4366   // -------------------------------------------------------------------------
4367   //
4368   //
4369 
4370   /// \name Declaration Attribute Handling
4371   /// Implementations are in SemaDeclAttr.cpp
4372   ///@{
4373 
4374 public:
4375   /// Describes the kind of priority given to an availability attribute.
4376   ///
4377   /// The sum of priorities deteremines the final priority of the attribute.
4378   /// The final priority determines how the attribute will be merged.
4379   /// An attribute with a lower priority will always remove higher priority
4380   /// attributes for the specified platform when it is being applied. An
4381   /// attribute with a higher priority will not be applied if the declaration
4382   /// already has an availability attribute with a lower priority for the
4383   /// specified platform. The final prirority values are not expected to match
4384   /// the values in this enumeration, but instead should be treated as a plain
4385   /// integer value. This enumeration just names the priority weights that are
4386   /// used to calculate that final vaue.
4387   enum AvailabilityPriority : int {
4388     /// The availability attribute was specified explicitly next to the
4389     /// declaration.
4390     AP_Explicit = 0,
4391 
4392     /// The availability attribute was applied using '#pragma clang attribute'.
4393     AP_PragmaClangAttribute = 1,
4394 
4395     /// The availability attribute for a specific platform was inferred from
4396     /// an availability attribute for another platform.
4397     AP_InferredFromOtherPlatform = 2
4398   };
4399 
4400   /// Describes the reason a calling convention specification was ignored, used
4401   /// for diagnostics.
4402   enum class CallingConventionIgnoredReason {
4403     ForThisTarget = 0,
4404     VariadicFunction,
4405     ConstructorDestructor,
4406     BuiltinFunction
4407   };
4408 
4409   /// A helper function to provide Attribute Location for the Attr types
4410   /// AND the ParsedAttr.
4411   template <typename AttrInfo>
4412   static std::enable_if_t<std::is_base_of_v<Attr, AttrInfo>, SourceLocation>
4413   getAttrLoc(const AttrInfo &AL) {
4414     return AL.getLocation();
4415   }
4416   SourceLocation getAttrLoc(const ParsedAttr &AL);
4417 
4418   /// If Expr is a valid integer constant, get the value of the integer
4419   /// expression and return success or failure. May output an error.
4420   ///
4421   /// Negative argument is implicitly converted to unsigned, unless
4422   /// \p StrictlyUnsigned is true.
4423   template <typename AttrInfo>
4424   bool checkUInt32Argument(const AttrInfo &AI, const Expr *Expr, uint32_t &Val,
4425                            unsigned Idx = UINT_MAX,
4426                            bool StrictlyUnsigned = false) {
4427     std::optional<llvm::APSInt> I = llvm::APSInt(32);
4428     if (Expr->isTypeDependent() ||
4429         !(I = Expr->getIntegerConstantExpr(Context))) {
4430       if (Idx != UINT_MAX)
4431         Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type)
4432             << &AI << Idx << AANT_ArgumentIntegerConstant
4433             << Expr->getSourceRange();
4434       else
4435         Diag(getAttrLoc(AI), diag::err_attribute_argument_type)
4436             << &AI << AANT_ArgumentIntegerConstant << Expr->getSourceRange();
4437       return false;
4438     }
4439 
4440     if (!I->isIntN(32)) {
4441       Diag(Expr->getExprLoc(), diag::err_ice_too_large)
4442           << toString(*I, 10, false) << 32 << /* Unsigned */ 1;
4443       return false;
4444     }
4445 
4446     if (StrictlyUnsigned && I->isSigned() && I->isNegative()) {
4447       Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer)
4448           << &AI << /*non-negative*/ 1;
4449       return false;
4450     }
4451 
4452     Val = (uint32_t)I->getZExtValue();
4453     return true;
4454   }
4455 
4456   /// WeakTopLevelDecl - Translation-unit scoped declarations generated by
4457   /// \#pragma weak during processing of other Decls.
4458   /// I couldn't figure out a clean way to generate these in-line, so
4459   /// we store them here and handle separately -- which is a hack.
4460   /// It would be best to refactor this.
4461   SmallVector<Decl *, 2> WeakTopLevelDecl;
4462 
4463   /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls
4464   SmallVectorImpl<Decl *> &WeakTopLevelDecls() { return WeakTopLevelDecl; }
4465 
4466   typedef LazyVector<TypedefNameDecl *, ExternalSemaSource,
4467                      &ExternalSemaSource::ReadExtVectorDecls, 2, 2>
4468       ExtVectorDeclsType;
4469 
4470   /// ExtVectorDecls - This is a list all the extended vector types. This allows
4471   /// us to associate a raw vector type with one of the ext_vector type names.
4472   /// This is only necessary for issuing pretty diagnostics.
4473   ExtVectorDeclsType ExtVectorDecls;
4474 
4475   /// Check if the argument \p E is a ASCII string literal. If not emit an error
4476   /// and return false, otherwise set \p Str to the value of the string literal
4477   /// and return true.
4478   bool checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI,
4479                                       const Expr *E, StringRef &Str,
4480                                       SourceLocation *ArgLocation = nullptr);
4481 
4482   /// Check if the argument \p ArgNum of \p Attr is a ASCII string literal.
4483   /// If not emit an error and return false. If the argument is an identifier it
4484   /// will emit an error with a fixit hint and treat it as if it was a string
4485   /// literal.
4486   bool checkStringLiteralArgumentAttr(const ParsedAttr &Attr, unsigned ArgNum,
4487                                       StringRef &Str,
4488                                       SourceLocation *ArgLocation = nullptr);
4489 
4490   /// Determine if type T is a valid subject for a nonnull and similar
4491   /// attributes. Dependent types are considered valid so they can be checked
4492   /// during instantiation time. By default, we look through references (the
4493   /// behavior used by nonnull), but if the second parameter is true, then we
4494   /// treat a reference type as valid.
4495   bool isValidPointerAttrType(QualType T, bool RefOkay = false);
4496 
4497   /// AddAssumeAlignedAttr - Adds an assume_aligned attribute to a particular
4498   /// declaration.
4499   void AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
4500                             Expr *OE);
4501 
4502   /// AddAllocAlignAttr - Adds an alloc_align attribute to a particular
4503   /// declaration.
4504   void AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI,
4505                          Expr *ParamExpr);
4506 
4507   bool CheckAttrTarget(const ParsedAttr &CurrAttr);
4508   bool CheckAttrNoArgs(const ParsedAttr &CurrAttr);
4509 
4510   AvailabilityAttr *mergeAvailabilityAttr(
4511       NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform,
4512       bool Implicit, VersionTuple Introduced, VersionTuple Deprecated,
4513       VersionTuple Obsoleted, bool IsUnavailable, StringRef Message,
4514       bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK,
4515       int Priority, IdentifierInfo *IIEnvironment);
4516 
4517   TypeVisibilityAttr *
4518   mergeTypeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI,
4519                           TypeVisibilityAttr::VisibilityType Vis);
4520   VisibilityAttr *mergeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI,
4521                                       VisibilityAttr::VisibilityType Vis);
4522   SectionAttr *mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI,
4523                                 StringRef Name);
4524 
4525   /// Used to implement to perform semantic checking on
4526   /// attribute((section("foo"))) specifiers.
4527   ///
4528   /// In this case, "foo" is passed in to be checked.  If the section
4529   /// specifier is invalid, return an Error that indicates the problem.
4530   ///
4531   /// This is a simple quality of implementation feature to catch errors
4532   /// and give good diagnostics in cases when the assembler or code generator
4533   /// would otherwise reject the section specifier.
4534   llvm::Error isValidSectionSpecifier(StringRef Str);
4535   bool checkSectionName(SourceLocation LiteralLoc, StringRef Str);
4536   CodeSegAttr *mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI,
4537                                 StringRef Name);
4538 
4539   // Check for things we'd like to warn about. Multiversioning issues are
4540   // handled later in the process, once we know how many exist.
4541   bool checkTargetAttr(SourceLocation LiteralLoc, StringRef Str);
4542 
4543   /// Check Target Version attrs
4544   bool checkTargetVersionAttr(SourceLocation Loc, Decl *D, StringRef Str);
4545   bool checkTargetClonesAttrString(
4546       SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal,
4547       Decl *D, bool &HasDefault, bool &HasCommas, bool &HasNotDefault,
4548       SmallVectorImpl<SmallString<64>> &StringsBuffer);
4549 
4550   ErrorAttr *mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI,
4551                             StringRef NewUserDiagnostic);
4552   FormatAttr *mergeFormatAttr(Decl *D, const AttributeCommonInfo &CI,
4553                               IdentifierInfo *Format, int FormatIdx,
4554                               int FirstArg);
4555 
4556   /// AddAlignedAttr - Adds an aligned attribute to a particular declaration.
4557   void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
4558                       bool IsPackExpansion);
4559   void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *T,
4560                       bool IsPackExpansion);
4561 
4562   /// AddAlignValueAttr - Adds an align_value attribute to a particular
4563   /// declaration.
4564   void AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E);
4565 
4566   /// CreateAnnotationAttr - Creates an annotation Annot with Args arguments.
4567   Attr *CreateAnnotationAttr(const AttributeCommonInfo &CI, StringRef Annot,
4568                              MutableArrayRef<Expr *> Args);
4569   Attr *CreateAnnotationAttr(const ParsedAttr &AL);
4570 
4571   bool checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range,
4572                                           bool BestCase,
4573                                           MSInheritanceModel SemanticSpelling);
4574 
4575   void CheckAlignasUnderalignment(Decl *D);
4576 
4577   /// AddModeAttr - Adds a mode attribute to a particular declaration.
4578   void AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name,
4579                    bool InInstantiation = false);
4580   AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D,
4581                                           const AttributeCommonInfo &CI,
4582                                           const IdentifierInfo *Ident);
4583   MinSizeAttr *mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI);
4584   OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D,
4585                                           const AttributeCommonInfo &CI);
4586   InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL);
4587   InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D,
4588                                                 const InternalLinkageAttr &AL);
4589 
4590   /// Check validaty of calling convention attribute \p attr. If \p FD
4591   /// is not null pointer, use \p FD to determine the CUDA/HIP host/device
4592   /// target. Otherwise, it is specified by \p CFT.
4593   bool CheckCallingConvAttr(
4594       const ParsedAttr &attr, CallingConv &CC, const FunctionDecl *FD = nullptr,
4595       CUDAFunctionTarget CFT = CUDAFunctionTarget::InvalidTarget);
4596 
4597   /// Checks a regparm attribute, returning true if it is ill-formed and
4598   /// otherwise setting numParams to the appropriate value.
4599   bool CheckRegparmAttr(const ParsedAttr &attr, unsigned &value);
4600 
4601   /// Create an CUDALaunchBoundsAttr attribute.
4602   CUDALaunchBoundsAttr *CreateLaunchBoundsAttr(const AttributeCommonInfo &CI,
4603                                                Expr *MaxThreads,
4604                                                Expr *MinBlocks,
4605                                                Expr *MaxBlocks);
4606 
4607   /// AddLaunchBoundsAttr - Adds a launch_bounds attribute to a particular
4608   /// declaration.
4609   void AddLaunchBoundsAttr(Decl *D, const AttributeCommonInfo &CI,
4610                            Expr *MaxThreads, Expr *MinBlocks, Expr *MaxBlocks);
4611 
4612   enum class RetainOwnershipKind { NS, CF, OS };
4613 
4614   UuidAttr *mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI,
4615                           StringRef UuidAsWritten, MSGuidDecl *GuidDecl);
4616 
4617   BTFDeclTagAttr *mergeBTFDeclTagAttr(Decl *D, const BTFDeclTagAttr &AL);
4618 
4619   DLLImportAttr *mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI);
4620   DLLExportAttr *mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI);
4621   MSInheritanceAttr *mergeMSInheritanceAttr(Decl *D,
4622                                             const AttributeCommonInfo &CI,
4623                                             bool BestCase,
4624                                             MSInheritanceModel Model);
4625 
4626   EnforceTCBAttr *mergeEnforceTCBAttr(Decl *D, const EnforceTCBAttr &AL);
4627   EnforceTCBLeafAttr *mergeEnforceTCBLeafAttr(Decl *D,
4628                                               const EnforceTCBLeafAttr &AL);
4629 
4630   /// Helper for delayed processing TransparentUnion or
4631   /// BPFPreserveAccessIndexAttr attribute.
4632   void ProcessDeclAttributeDelayed(Decl *D,
4633                                    const ParsedAttributesView &AttrList);
4634 
4635   // Options for ProcessDeclAttributeList().
4636   struct ProcessDeclAttributeOptions {
4637     ProcessDeclAttributeOptions()
4638         : IncludeCXX11Attributes(true), IgnoreTypeAttributes(false) {}
4639 
4640     ProcessDeclAttributeOptions WithIncludeCXX11Attributes(bool Val) {
4641       ProcessDeclAttributeOptions Result = *this;
4642       Result.IncludeCXX11Attributes = Val;
4643       return Result;
4644     }
4645 
4646     ProcessDeclAttributeOptions WithIgnoreTypeAttributes(bool Val) {
4647       ProcessDeclAttributeOptions Result = *this;
4648       Result.IgnoreTypeAttributes = Val;
4649       return Result;
4650     }
4651 
4652     // Should C++11 attributes be processed?
4653     bool IncludeCXX11Attributes;
4654 
4655     // Should any type attributes encountered be ignored?
4656     // If this option is false, a diagnostic will be emitted for any type
4657     // attributes of a kind that does not "slide" from the declaration to
4658     // the decl-specifier-seq.
4659     bool IgnoreTypeAttributes;
4660   };
4661 
4662   /// ProcessDeclAttributeList - Apply all the decl attributes in the specified
4663   /// attribute list to the specified decl, ignoring any type attributes.
4664   void ProcessDeclAttributeList(Scope *S, Decl *D,
4665                                 const ParsedAttributesView &AttrList,
4666                                 const ProcessDeclAttributeOptions &Options =
4667                                     ProcessDeclAttributeOptions());
4668 
4669   /// Annotation attributes are the only attributes allowed after an access
4670   /// specifier.
4671   bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl,
4672                                       const ParsedAttributesView &AttrList);
4673 
4674   /// checkUnusedDeclAttributes - Given a declarator which is not being
4675   /// used to build a declaration, complain about any decl attributes
4676   /// which might be lying around on it.
4677   void checkUnusedDeclAttributes(Declarator &D);
4678 
4679   /// DeclClonePragmaWeak - clone existing decl (maybe definition),
4680   /// \#pragma weak needs a non-definition decl and source may not have one.
4681   NamedDecl *DeclClonePragmaWeak(NamedDecl *ND, const IdentifierInfo *II,
4682                                  SourceLocation Loc);
4683 
4684   /// DeclApplyPragmaWeak - A declaration (maybe definition) needs \#pragma weak
4685   /// applied to it, possibly with an alias.
4686   void DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, const WeakInfo &W);
4687 
4688   void ProcessPragmaWeak(Scope *S, Decl *D);
4689   // Decl attributes - this routine is the top level dispatcher.
4690   void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD);
4691 
4692   void PopParsingDeclaration(ParsingDeclState state, Decl *decl);
4693 
4694   /// Given a set of delayed diagnostics, re-emit them as if they had
4695   /// been delayed in the current context instead of in the given pool.
4696   /// Essentially, this just moves them to the current pool.
4697   void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);
4698 
4699   /// Check if IdxExpr is a valid parameter index for a function or
4700   /// instance method D.  May output an error.
4701   ///
4702   /// \returns true if IdxExpr is a valid index.
4703   template <typename AttrInfo>
4704   bool checkFunctionOrMethodParameterIndex(const Decl *D, const AttrInfo &AI,
4705                                            unsigned AttrArgNum,
4706                                            const Expr *IdxExpr, ParamIdx &Idx,
4707                                            bool CanIndexImplicitThis = false) {
4708     assert(isFunctionOrMethodOrBlockForAttrSubject(D));
4709 
4710     // In C++ the implicit 'this' function parameter also counts.
4711     // Parameters are counted from one.
4712     bool HP = hasFunctionProto(D);
4713     bool HasImplicitThisParam = isInstanceMethod(D);
4714     bool IV = HP && isFunctionOrMethodVariadic(D);
4715     unsigned NumParams =
4716         (HP ? getFunctionOrMethodNumParams(D) : 0) + HasImplicitThisParam;
4717 
4718     std::optional<llvm::APSInt> IdxInt;
4719     if (IdxExpr->isTypeDependent() ||
4720         !(IdxInt = IdxExpr->getIntegerConstantExpr(Context))) {
4721       Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type)
4722           << &AI << AttrArgNum << AANT_ArgumentIntegerConstant
4723           << IdxExpr->getSourceRange();
4724       return false;
4725     }
4726 
4727     unsigned IdxSource = IdxInt->getLimitedValue(UINT_MAX);
4728     if (IdxSource < 1 || (!IV && IdxSource > NumParams)) {
4729       Diag(getAttrLoc(AI), diag::err_attribute_argument_out_of_bounds)
4730           << &AI << AttrArgNum << IdxExpr->getSourceRange();
4731       return false;
4732     }
4733     if (HasImplicitThisParam && !CanIndexImplicitThis) {
4734       if (IdxSource == 1) {
4735         Diag(getAttrLoc(AI), diag::err_attribute_invalid_implicit_this_argument)
4736             << &AI << IdxExpr->getSourceRange();
4737         return false;
4738       }
4739     }
4740 
4741     Idx = ParamIdx(IdxSource, D);
4742     return true;
4743   }
4744 
4745   ///@}
4746 
4747   //
4748   //
4749   // -------------------------------------------------------------------------
4750   //
4751   //
4752 
4753   /// \name C++ Declarations
4754   /// Implementations are in SemaDeclCXX.cpp
4755   ///@{
4756 
4757 public:
4758   void CheckDelegatingCtorCycles();
4759 
4760   /// Called before parsing a function declarator belonging to a function
4761   /// declaration.
4762   void ActOnStartFunctionDeclarationDeclarator(Declarator &D,
4763                                                unsigned TemplateParameterDepth);
4764 
4765   /// Called after parsing a function declarator belonging to a function
4766   /// declaration.
4767   void ActOnFinishFunctionDeclarationDeclarator(Declarator &D);
4768 
4769   // Act on C++ namespaces
4770   Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc,
4771                                SourceLocation NamespaceLoc,
4772                                SourceLocation IdentLoc, IdentifierInfo *Ident,
4773                                SourceLocation LBrace,
4774                                const ParsedAttributesView &AttrList,
4775                                UsingDirectiveDecl *&UsingDecl, bool IsNested);
4776 
4777   /// ActOnFinishNamespaceDef - This callback is called after a namespace is
4778   /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
4779   void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace);
4780 
4781   NamespaceDecl *getStdNamespace() const;
4782 
4783   /// Retrieve the special "std" namespace, which may require us to
4784   /// implicitly define the namespace.
4785   NamespaceDecl *getOrCreateStdNamespace();
4786 
4787   CXXRecordDecl *getStdBadAlloc() const;
4788   EnumDecl *getStdAlignValT() const;
4789 
4790   ValueDecl *tryLookupUnambiguousFieldDecl(RecordDecl *ClassDecl,
4791                                            const IdentifierInfo *MemberOrBase);
4792 
4793   enum class ComparisonCategoryUsage {
4794     /// The '<=>' operator was used in an expression and a builtin operator
4795     /// was selected.
4796     OperatorInExpression,
4797     /// A defaulted 'operator<=>' needed the comparison category. This
4798     /// typically only applies to 'std::strong_ordering', due to the implicit
4799     /// fallback return value.
4800     DefaultedOperator,
4801   };
4802 
4803   /// Lookup the specified comparison category types in the standard
4804   ///   library, an check the VarDecls possibly returned by the operator<=>
4805   ///   builtins for that type.
4806   ///
4807   /// \return The type of the comparison category type corresponding to the
4808   ///   specified Kind, or a null type if an error occurs
4809   QualType CheckComparisonCategoryType(ComparisonCategoryType Kind,
4810                                        SourceLocation Loc,
4811                                        ComparisonCategoryUsage Usage);
4812 
4813   /// Tests whether Ty is an instance of std::initializer_list and, if
4814   /// it is and Element is not NULL, assigns the element type to Element.
4815   bool isStdInitializerList(QualType Ty, QualType *Element);
4816 
4817   /// Looks for the std::initializer_list template and instantiates it
4818   /// with Element, or emits an error if it's not found.
4819   ///
4820   /// \returns The instantiated template, or null on error.
4821   QualType BuildStdInitializerList(QualType Element, SourceLocation Loc);
4822 
4823   /// Determine whether Ctor is an initializer-list constructor, as
4824   /// defined in [dcl.init.list]p2.
4825   bool isInitListConstructor(const FunctionDecl *Ctor);
4826 
4827   Decl *ActOnUsingDirective(Scope *CurScope, SourceLocation UsingLoc,
4828                             SourceLocation NamespcLoc, CXXScopeSpec &SS,
4829                             SourceLocation IdentLoc,
4830                             IdentifierInfo *NamespcName,
4831                             const ParsedAttributesView &AttrList);
4832 
4833   void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir);
4834 
4835   Decl *ActOnNamespaceAliasDef(Scope *CurScope, SourceLocation NamespaceLoc,
4836                                SourceLocation AliasLoc, IdentifierInfo *Alias,
4837                                CXXScopeSpec &SS, SourceLocation IdentLoc,
4838                                IdentifierInfo *Ident);
4839 
4840   /// Remove decls we can't actually see from a lookup being used to declare
4841   /// shadow using decls.
4842   ///
4843   /// \param S - The scope of the potential shadow decl
4844   /// \param Previous - The lookup of a potential shadow decl's name.
4845   void FilterUsingLookup(Scope *S, LookupResult &lookup);
4846 
4847   /// Hides a using shadow declaration.  This is required by the current
4848   /// using-decl implementation when a resolvable using declaration in a
4849   /// class is followed by a declaration which would hide or override
4850   /// one or more of the using decl's targets; for example:
4851   ///
4852   ///   struct Base { void foo(int); };
4853   ///   struct Derived : Base {
4854   ///     using Base::foo;
4855   ///     void foo(int);
4856   ///   };
4857   ///
4858   /// The governing language is C++03 [namespace.udecl]p12:
4859   ///
4860   ///   When a using-declaration brings names from a base class into a
4861   ///   derived class scope, member functions in the derived class
4862   ///   override and/or hide member functions with the same name and
4863   ///   parameter types in a base class (rather than conflicting).
4864   ///
4865   /// There are two ways to implement this:
4866   ///   (1) optimistically create shadow decls when they're not hidden
4867   ///       by existing declarations, or
4868   ///   (2) don't create any shadow decls (or at least don't make them
4869   ///       visible) until we've fully parsed/instantiated the class.
4870   /// The problem with (1) is that we might have to retroactively remove
4871   /// a shadow decl, which requires several O(n) operations because the
4872   /// decl structures are (very reasonably) not designed for removal.
4873   /// (2) avoids this but is very fiddly and phase-dependent.
4874   void HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow);
4875 
4876   /// Determines whether to create a using shadow decl for a particular
4877   /// decl, given the set of decls existing prior to this using lookup.
4878   bool CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Target,
4879                             const LookupResult &PreviousDecls,
4880                             UsingShadowDecl *&PrevShadow);
4881 
4882   /// Builds a shadow declaration corresponding to a 'using' declaration.
4883   UsingShadowDecl *BuildUsingShadowDecl(Scope *S, BaseUsingDecl *BUD,
4884                                         NamedDecl *Target,
4885                                         UsingShadowDecl *PrevDecl);
4886 
4887   /// Checks that the given using declaration is not an invalid
4888   /// redeclaration.  Note that this is checking only for the using decl
4889   /// itself, not for any ill-formedness among the UsingShadowDecls.
4890   bool CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
4891                                    bool HasTypenameKeyword,
4892                                    const CXXScopeSpec &SS,
4893                                    SourceLocation NameLoc,
4894                                    const LookupResult &Previous);
4895 
4896   /// Checks that the given nested-name qualifier used in a using decl
4897   /// in the current context is appropriately related to the current
4898   /// scope.  If an error is found, diagnoses it and returns true.
4899   /// R is nullptr, if the caller has not (yet) done a lookup, otherwise it's
4900   /// the result of that lookup. UD is likewise nullptr, except when we have an
4901   /// already-populated UsingDecl whose shadow decls contain the same
4902   /// information (i.e. we're instantiating a UsingDecl with non-dependent
4903   /// scope).
4904   bool CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename,
4905                                const CXXScopeSpec &SS,
4906                                const DeclarationNameInfo &NameInfo,
4907                                SourceLocation NameLoc,
4908                                const LookupResult *R = nullptr,
4909                                const UsingDecl *UD = nullptr);
4910 
4911   /// Builds a using declaration.
4912   ///
4913   /// \param IsInstantiation - Whether this call arises from an
4914   ///   instantiation of an unresolved using declaration.  We treat
4915   ///   the lookup differently for these declarations.
4916   NamedDecl *BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
4917                                    SourceLocation UsingLoc,
4918                                    bool HasTypenameKeyword,
4919                                    SourceLocation TypenameLoc, CXXScopeSpec &SS,
4920                                    DeclarationNameInfo NameInfo,
4921                                    SourceLocation EllipsisLoc,
4922                                    const ParsedAttributesView &AttrList,
4923                                    bool IsInstantiation, bool IsUsingIfExists);
4924   NamedDecl *BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS,
4925                                        SourceLocation UsingLoc,
4926                                        SourceLocation EnumLoc,
4927                                        SourceLocation NameLoc,
4928                                        TypeSourceInfo *EnumType, EnumDecl *ED);
4929   NamedDecl *BuildUsingPackDecl(NamedDecl *InstantiatedFrom,
4930                                 ArrayRef<NamedDecl *> Expansions);
4931 
4932   /// Additional checks for a using declaration referring to a constructor name.
4933   bool CheckInheritingConstructorUsingDecl(UsingDecl *UD);
4934 
4935   /// Given a derived-class using shadow declaration for a constructor and the
4936   /// correspnding base class constructor, find or create the implicit
4937   /// synthesized derived class constructor to use for this initialization.
4938   CXXConstructorDecl *
4939   findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor,
4940                             ConstructorUsingShadowDecl *DerivedShadow);
4941 
4942   Decl *ActOnUsingDeclaration(Scope *CurScope, AccessSpecifier AS,
4943                               SourceLocation UsingLoc,
4944                               SourceLocation TypenameLoc, CXXScopeSpec &SS,
4945                               UnqualifiedId &Name, SourceLocation EllipsisLoc,
4946                               const ParsedAttributesView &AttrList);
4947   Decl *ActOnUsingEnumDeclaration(Scope *CurScope, AccessSpecifier AS,
4948                                   SourceLocation UsingLoc,
4949                                   SourceLocation EnumLoc, SourceRange TyLoc,
4950                                   const IdentifierInfo &II, ParsedType Ty,
4951                                   CXXScopeSpec *SS = nullptr);
4952   Decl *ActOnAliasDeclaration(Scope *CurScope, AccessSpecifier AS,
4953                               MultiTemplateParamsArg TemplateParams,
4954                               SourceLocation UsingLoc, UnqualifiedId &Name,
4955                               const ParsedAttributesView &AttrList,
4956                               TypeResult Type, Decl *DeclFromDeclSpec);
4957 
4958   /// BuildCXXConstructExpr - Creates a complete call to a constructor,
4959   /// including handling of its default argument expressions.
4960   ///
4961   /// \param ConstructKind - a CXXConstructExpr::ConstructionKind
4962   ExprResult BuildCXXConstructExpr(
4963       SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl,
4964       CXXConstructorDecl *Constructor, MultiExprArg Exprs,
4965       bool HadMultipleCandidates, bool IsListInitialization,
4966       bool IsStdInitListInitialization, bool RequiresZeroInit,
4967       CXXConstructionKind ConstructKind, SourceRange ParenRange);
4968 
4969   /// Build a CXXConstructExpr whose constructor has already been resolved if
4970   /// it denotes an inherited constructor.
4971   ExprResult BuildCXXConstructExpr(
4972       SourceLocation ConstructLoc, QualType DeclInitType,
4973       CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg Exprs,
4974       bool HadMultipleCandidates, bool IsListInitialization,
4975       bool IsStdInitListInitialization, bool RequiresZeroInit,
4976       CXXConstructionKind ConstructKind, SourceRange ParenRange);
4977 
4978   // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if
4979   // the constructor can be elidable?
4980   ExprResult BuildCXXConstructExpr(
4981       SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl,
4982       CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg Exprs,
4983       bool HadMultipleCandidates, bool IsListInitialization,
4984       bool IsStdInitListInitialization, bool RequiresZeroInit,
4985       CXXConstructionKind ConstructKind, SourceRange ParenRange);
4986 
4987   ExprResult ConvertMemberDefaultInitExpression(FieldDecl *FD, Expr *InitExpr,
4988                                                 SourceLocation InitLoc);
4989 
4990   /// FinalizeVarWithDestructor - Prepare for calling destructor on the
4991   /// constructed variable.
4992   void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType);
4993 
4994   /// Helper class that collects exception specifications for
4995   /// implicitly-declared special member functions.
4996   class ImplicitExceptionSpecification {
4997     // Pointer to allow copying
4998     Sema *Self;
4999     // We order exception specifications thus:
5000     // noexcept is the most restrictive, but is only used in C++11.
5001     // throw() comes next.
5002     // Then a throw(collected exceptions)
5003     // Finally no specification, which is expressed as noexcept(false).
5004     // throw(...) is used instead if any called function uses it.
5005     ExceptionSpecificationType ComputedEST;
5006     llvm::SmallPtrSet<CanQualType, 4> ExceptionsSeen;
5007     SmallVector<QualType, 4> Exceptions;
5008 
5009     void ClearExceptions() {
5010       ExceptionsSeen.clear();
5011       Exceptions.clear();
5012     }
5013 
5014   public:
5015     explicit ImplicitExceptionSpecification(Sema &Self)
5016         : Self(&Self), ComputedEST(EST_BasicNoexcept) {
5017       if (!Self.getLangOpts().CPlusPlus11)
5018         ComputedEST = EST_DynamicNone;
5019     }
5020 
5021     /// Get the computed exception specification type.
5022     ExceptionSpecificationType getExceptionSpecType() const {
5023       assert(!isComputedNoexcept(ComputedEST) &&
5024              "noexcept(expr) should not be a possible result");
5025       return ComputedEST;
5026     }
5027 
5028     /// The number of exceptions in the exception specification.
5029     unsigned size() const { return Exceptions.size(); }
5030 
5031     /// The set of exceptions in the exception specification.
5032     const QualType *data() const { return Exceptions.data(); }
5033 
5034     /// Integrate another called method into the collected data.
5035     void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method);
5036 
5037     /// Integrate an invoked expression into the collected data.
5038     void CalledExpr(Expr *E) { CalledStmt(E); }
5039 
5040     /// Integrate an invoked statement into the collected data.
5041     void CalledStmt(Stmt *S);
5042 
5043     /// Overwrite an EPI's exception specification with this
5044     /// computed exception specification.
5045     FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const {
5046       FunctionProtoType::ExceptionSpecInfo ESI;
5047       ESI.Type = getExceptionSpecType();
5048       if (ESI.Type == EST_Dynamic) {
5049         ESI.Exceptions = Exceptions;
5050       } else if (ESI.Type == EST_None) {
5051         /// C++11 [except.spec]p14:
5052         ///   The exception-specification is noexcept(false) if the set of
5053         ///   potential exceptions of the special member function contains "any"
5054         ESI.Type = EST_NoexceptFalse;
5055         ESI.NoexceptExpr =
5056             Self->ActOnCXXBoolLiteral(SourceLocation(), tok::kw_false).get();
5057       }
5058       return ESI;
5059     }
5060   };
5061 
5062   /// Evaluate the implicit exception specification for a defaulted
5063   /// special member function.
5064   void EvaluateImplicitExceptionSpec(SourceLocation Loc, FunctionDecl *FD);
5065 
5066   /// Check the given exception-specification and update the
5067   /// exception specification information with the results.
5068   void checkExceptionSpecification(bool IsTopLevel,
5069                                    ExceptionSpecificationType EST,
5070                                    ArrayRef<ParsedType> DynamicExceptions,
5071                                    ArrayRef<SourceRange> DynamicExceptionRanges,
5072                                    Expr *NoexceptExpr,
5073                                    SmallVectorImpl<QualType> &Exceptions,
5074                                    FunctionProtoType::ExceptionSpecInfo &ESI);
5075 
5076   /// Add an exception-specification to the given member or friend function
5077   /// (or function template). The exception-specification was parsed
5078   /// after the function itself was declared.
5079   void actOnDelayedExceptionSpecification(
5080       Decl *D, ExceptionSpecificationType EST, SourceRange SpecificationRange,
5081       ArrayRef<ParsedType> DynamicExceptions,
5082       ArrayRef<SourceRange> DynamicExceptionRanges, Expr *NoexceptExpr);
5083 
5084   class InheritedConstructorInfo;
5085 
5086   /// Determine if a special member function should have a deleted
5087   /// definition when it is defaulted.
5088   bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMemberKind CSM,
5089                                  InheritedConstructorInfo *ICI = nullptr,
5090                                  bool Diagnose = false);
5091 
5092   /// Produce notes explaining why a defaulted function was defined as deleted.
5093   void DiagnoseDeletedDefaultedFunction(FunctionDecl *FD);
5094 
5095   /// Declare the implicit default constructor for the given class.
5096   ///
5097   /// \param ClassDecl The class declaration into which the implicit
5098   /// default constructor will be added.
5099   ///
5100   /// \returns The implicitly-declared default constructor.
5101   CXXConstructorDecl *
5102   DeclareImplicitDefaultConstructor(CXXRecordDecl *ClassDecl);
5103 
5104   /// DefineImplicitDefaultConstructor - Checks for feasibility of
5105   /// defining this constructor as the default constructor.
5106   void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
5107                                         CXXConstructorDecl *Constructor);
5108 
5109   /// Declare the implicit destructor for the given class.
5110   ///
5111   /// \param ClassDecl The class declaration into which the implicit
5112   /// destructor will be added.
5113   ///
5114   /// \returns The implicitly-declared destructor.
5115   CXXDestructorDecl *DeclareImplicitDestructor(CXXRecordDecl *ClassDecl);
5116 
5117   /// DefineImplicitDestructor - Checks for feasibility of
5118   /// defining this destructor as the default destructor.
5119   void DefineImplicitDestructor(SourceLocation CurrentLocation,
5120                                 CXXDestructorDecl *Destructor);
5121 
5122   /// Build an exception spec for destructors that don't have one.
5123   ///
5124   /// C++11 says that user-defined destructors with no exception spec get one
5125   /// that looks as if the destructor was implicitly declared.
5126   void AdjustDestructorExceptionSpec(CXXDestructorDecl *Destructor);
5127 
5128   /// Define the specified inheriting constructor.
5129   void DefineInheritingConstructor(SourceLocation UseLoc,
5130                                    CXXConstructorDecl *Constructor);
5131 
5132   /// Declare the implicit copy constructor for the given class.
5133   ///
5134   /// \param ClassDecl The class declaration into which the implicit
5135   /// copy constructor will be added.
5136   ///
5137   /// \returns The implicitly-declared copy constructor.
5138   CXXConstructorDecl *DeclareImplicitCopyConstructor(CXXRecordDecl *ClassDecl);
5139 
5140   /// DefineImplicitCopyConstructor - Checks for feasibility of
5141   /// defining this constructor as the copy constructor.
5142   void DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
5143                                      CXXConstructorDecl *Constructor);
5144 
5145   /// Declare the implicit move constructor for the given class.
5146   ///
5147   /// \param ClassDecl The Class declaration into which the implicit
5148   /// move constructor will be added.
5149   ///
5150   /// \returns The implicitly-declared move constructor, or NULL if it wasn't
5151   /// declared.
5152   CXXConstructorDecl *DeclareImplicitMoveConstructor(CXXRecordDecl *ClassDecl);
5153 
5154   /// DefineImplicitMoveConstructor - Checks for feasibility of
5155   /// defining this constructor as the move constructor.
5156   void DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
5157                                      CXXConstructorDecl *Constructor);
5158 
5159   /// Declare the implicit copy assignment operator for the given class.
5160   ///
5161   /// \param ClassDecl The class declaration into which the implicit
5162   /// copy assignment operator will be added.
5163   ///
5164   /// \returns The implicitly-declared copy assignment operator.
5165   CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl);
5166 
5167   /// Defines an implicitly-declared copy assignment operator.
5168   void DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
5169                                     CXXMethodDecl *MethodDecl);
5170 
5171   /// Declare the implicit move assignment operator for the given class.
5172   ///
5173   /// \param ClassDecl The Class declaration into which the implicit
5174   /// move assignment operator will be added.
5175   ///
5176   /// \returns The implicitly-declared move assignment operator, or NULL if it
5177   /// wasn't declared.
5178   CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl);
5179 
5180   /// Defines an implicitly-declared move assignment operator.
5181   void DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
5182                                     CXXMethodDecl *MethodDecl);
5183 
5184   /// Check a completed declaration of an implicit special member.
5185   void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD);
5186 
5187   /// Determine whether the given function is an implicitly-deleted
5188   /// special member function.
5189   bool isImplicitlyDeleted(FunctionDecl *FD);
5190 
5191   /// Check whether 'this' shows up in the type of a static member
5192   /// function after the (naturally empty) cv-qualifier-seq would be.
5193   ///
5194   /// \returns true if an error occurred.
5195   bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method);
5196 
5197   /// Whether this' shows up in the exception specification of a static
5198   /// member function.
5199   bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method);
5200 
5201   /// Check whether 'this' shows up in the attributes of the given
5202   /// static member function.
5203   ///
5204   /// \returns true if an error occurred.
5205   bool checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method);
5206 
5207   bool CheckImmediateEscalatingFunctionDefinition(
5208       FunctionDecl *FD, const sema::FunctionScopeInfo *FSI);
5209 
5210   void DiagnoseImmediateEscalatingReason(FunctionDecl *FD);
5211 
5212   /// Given a constructor and the set of arguments provided for the
5213   /// constructor, convert the arguments and add any required default arguments
5214   /// to form a proper call to this constructor.
5215   ///
5216   /// \returns true if an error occurred, false otherwise.
5217   bool CompleteConstructorCall(CXXConstructorDecl *Constructor,
5218                                QualType DeclInitType, MultiExprArg ArgsPtr,
5219                                SourceLocation Loc,
5220                                SmallVectorImpl<Expr *> &ConvertedArgs,
5221                                bool AllowExplicit = false,
5222                                bool IsListInitialization = false);
5223 
5224   /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an
5225   /// initializer for the declaration 'Dcl'.
5226   /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
5227   /// static data member of class X, names should be looked up in the scope of
5228   /// class X.
5229   void ActOnCXXEnterDeclInitializer(Scope *S, Decl *Dcl);
5230 
5231   /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
5232   /// initializer for the declaration 'Dcl'.
5233   void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl);
5234 
5235   /// Define the "body" of the conversion from a lambda object to a
5236   /// function pointer.
5237   ///
5238   /// This routine doesn't actually define a sensible body; rather, it fills
5239   /// in the initialization expression needed to copy the lambda object into
5240   /// the block, and IR generation actually generates the real body of the
5241   /// block pointer conversion.
5242   void
5243   DefineImplicitLambdaToFunctionPointerConversion(SourceLocation CurrentLoc,
5244                                                   CXXConversionDecl *Conv);
5245 
5246   /// Define the "body" of the conversion from a lambda object to a
5247   /// block pointer.
5248   ///
5249   /// This routine doesn't actually define a sensible body; rather, it fills
5250   /// in the initialization expression needed to copy the lambda object into
5251   /// the block, and IR generation actually generates the real body of the
5252   /// block pointer conversion.
5253   void DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLoc,
5254                                                     CXXConversionDecl *Conv);
5255 
5256   /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
5257   /// linkage specification, including the language and (if present)
5258   /// the '{'. ExternLoc is the location of the 'extern', Lang is the
5259   /// language string literal. LBraceLoc, if valid, provides the location of
5260   /// the '{' brace. Otherwise, this linkage specification does not
5261   /// have any braces.
5262   Decl *ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
5263                                        Expr *LangStr, SourceLocation LBraceLoc);
5264 
5265   /// ActOnFinishLinkageSpecification - Complete the definition of
5266   /// the C++ linkage specification LinkageSpec. If RBraceLoc is
5267   /// valid, it's the position of the closing '}' brace in a linkage
5268   /// specification that uses braces.
5269   Decl *ActOnFinishLinkageSpecification(Scope *S, Decl *LinkageSpec,
5270                                         SourceLocation RBraceLoc);
5271 
5272   //===--------------------------------------------------------------------===//
5273   // C++ Classes
5274   //
5275 
5276   /// Get the class that is directly named by the current context. This is the
5277   /// class for which an unqualified-id in this scope could name a constructor
5278   /// or destructor.
5279   ///
5280   /// If the scope specifier denotes a class, this will be that class.
5281   /// If the scope specifier is empty, this will be the class whose
5282   /// member-specification we are currently within. Otherwise, there
5283   /// is no such class.
5284   CXXRecordDecl *getCurrentClass(Scope *S, const CXXScopeSpec *SS);
5285 
5286   /// isCurrentClassName - Determine whether the identifier II is the
5287   /// name of the class type currently being defined. In the case of
5288   /// nested classes, this will only return true if II is the name of
5289   /// the innermost class.
5290   bool isCurrentClassName(const IdentifierInfo &II, Scope *S,
5291                           const CXXScopeSpec *SS = nullptr);
5292 
5293   /// Determine whether the identifier II is a typo for the name of
5294   /// the class type currently being defined. If so, update it to the identifier
5295   /// that should have been used.
5296   bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS);
5297 
5298   /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
5299   bool ActOnAccessSpecifier(AccessSpecifier Access, SourceLocation ASLoc,
5300                             SourceLocation ColonLoc,
5301                             const ParsedAttributesView &Attrs);
5302 
5303   /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
5304   /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
5305   /// bitfield width if there is one, 'InitExpr' specifies the initializer if
5306   /// one has been parsed, and 'InitStyle' is set if an in-class initializer is
5307   /// present (but parsing it has been deferred).
5308   NamedDecl *
5309   ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
5310                            MultiTemplateParamsArg TemplateParameterLists,
5311                            Expr *BitfieldWidth, const VirtSpecifiers &VS,
5312                            InClassInitStyle InitStyle);
5313 
5314   /// Enter a new C++ default initializer scope. After calling this, the
5315   /// caller must call \ref ActOnFinishCXXInClassMemberInitializer, even if
5316   /// parsing or instantiating the initializer failed.
5317   void ActOnStartCXXInClassMemberInitializer();
5318 
5319   /// This is invoked after parsing an in-class initializer for a
5320   /// non-static C++ class member, and after instantiating an in-class
5321   /// initializer in a class template. Such actions are deferred until the class
5322   /// is complete.
5323   void ActOnFinishCXXInClassMemberInitializer(Decl *VarDecl,
5324                                               SourceLocation EqualLoc,
5325                                               ExprResult Init);
5326 
5327   /// Handle a C++ member initializer using parentheses syntax.
5328   MemInitResult
5329   ActOnMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS,
5330                       IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy,
5331                       const DeclSpec &DS, SourceLocation IdLoc,
5332                       SourceLocation LParenLoc, ArrayRef<Expr *> Args,
5333                       SourceLocation RParenLoc, SourceLocation EllipsisLoc);
5334 
5335   /// Handle a C++ member initializer using braced-init-list syntax.
5336   MemInitResult ActOnMemInitializer(Decl *ConstructorD, Scope *S,
5337                                     CXXScopeSpec &SS,
5338                                     IdentifierInfo *MemberOrBase,
5339                                     ParsedType TemplateTypeTy,
5340                                     const DeclSpec &DS, SourceLocation IdLoc,
5341                                     Expr *InitList, SourceLocation EllipsisLoc);
5342 
5343   /// Handle a C++ member initializer.
5344   MemInitResult BuildMemInitializer(Decl *ConstructorD, Scope *S,
5345                                     CXXScopeSpec &SS,
5346                                     IdentifierInfo *MemberOrBase,
5347                                     ParsedType TemplateTypeTy,
5348                                     const DeclSpec &DS, SourceLocation IdLoc,
5349                                     Expr *Init, SourceLocation EllipsisLoc);
5350 
5351   MemInitResult BuildMemberInitializer(ValueDecl *Member, Expr *Init,
5352                                        SourceLocation IdLoc);
5353 
5354   MemInitResult BuildBaseInitializer(QualType BaseType,
5355                                      TypeSourceInfo *BaseTInfo, Expr *Init,
5356                                      CXXRecordDecl *ClassDecl,
5357                                      SourceLocation EllipsisLoc);
5358 
5359   MemInitResult BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
5360                                            CXXRecordDecl *ClassDecl);
5361 
5362   bool SetDelegatingInitializer(CXXConstructorDecl *Constructor,
5363                                 CXXCtorInitializer *Initializer);
5364 
5365   bool SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
5366                            ArrayRef<CXXCtorInitializer *> Initializers = {});
5367 
5368   /// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
5369   /// mark all the non-trivial destructors of its members and bases as
5370   /// referenced.
5371   void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc,
5372                                               CXXRecordDecl *Record);
5373 
5374   /// Mark destructors of virtual bases of this class referenced. In the Itanium
5375   /// C++ ABI, this is done when emitting a destructor for any non-abstract
5376   /// class. In the Microsoft C++ ABI, this is done any time a class's
5377   /// destructor is referenced.
5378   void MarkVirtualBaseDestructorsReferenced(
5379       SourceLocation Location, CXXRecordDecl *ClassDecl,
5380       llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases = nullptr);
5381 
5382   /// Do semantic checks to allow the complete destructor variant to be emitted
5383   /// when the destructor is defined in another translation unit. In the Itanium
5384   /// C++ ABI, destructor variants are emitted together. In the MS C++ ABI, they
5385   /// can be emitted in separate TUs. To emit the complete variant, run a subset
5386   /// of the checks performed when emitting a regular destructor.
5387   void CheckCompleteDestructorVariant(SourceLocation CurrentLocation,
5388                                       CXXDestructorDecl *Dtor);
5389 
5390   /// The list of classes whose vtables have been used within
5391   /// this translation unit, and the source locations at which the
5392   /// first use occurred.
5393   typedef std::pair<CXXRecordDecl *, SourceLocation> VTableUse;
5394 
5395   /// The list of vtables that are required but have not yet been
5396   /// materialized.
5397   SmallVector<VTableUse, 16> VTableUses;
5398 
5399   /// The set of classes whose vtables have been used within
5400   /// this translation unit, and a bit that will be true if the vtable is
5401   /// required to be emitted (otherwise, it should be emitted only if needed
5402   /// by code generation).
5403   llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed;
5404 
5405   /// Load any externally-stored vtable uses.
5406   void LoadExternalVTableUses();
5407 
5408   /// Note that the vtable for the given class was used at the
5409   /// given location.
5410   void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
5411                       bool DefinitionRequired = false);
5412 
5413   /// Mark the exception specifications of all virtual member functions
5414   /// in the given class as needed.
5415   void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
5416                                              const CXXRecordDecl *RD);
5417 
5418   /// MarkVirtualMembersReferenced - Will mark all members of the given
5419   /// CXXRecordDecl referenced.
5420   void MarkVirtualMembersReferenced(SourceLocation Loc, const CXXRecordDecl *RD,
5421                                     bool ConstexprOnly = false);
5422 
5423   /// Define all of the vtables that have been used in this
5424   /// translation unit and reference any virtual members used by those
5425   /// vtables.
5426   ///
5427   /// \returns true if any work was done, false otherwise.
5428   bool DefineUsedVTables();
5429 
5430   /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
5431   /// special functions, such as the default constructor, copy
5432   /// constructor, or destructor, to the given C++ class (C++
5433   /// [special]p1).  This routine can only be executed just before the
5434   /// definition of the class is complete.
5435   void AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl);
5436 
5437   /// ActOnMemInitializers - Handle the member initializers for a constructor.
5438   void ActOnMemInitializers(Decl *ConstructorDecl, SourceLocation ColonLoc,
5439                             ArrayRef<CXXCtorInitializer *> MemInits,
5440                             bool AnyErrors);
5441 
5442   /// Check class-level dllimport/dllexport attribute. The caller must
5443   /// ensure that referenceDLLExportedClassMethods is called some point later
5444   /// when all outer classes of Class are complete.
5445   void checkClassLevelDLLAttribute(CXXRecordDecl *Class);
5446   void checkClassLevelCodeSegAttribute(CXXRecordDecl *Class);
5447 
5448   void referenceDLLExportedClassMethods();
5449 
5450   /// Perform propagation of DLL attributes from a derived class to a
5451   /// templated base class for MS compatibility.
5452   void propagateDLLAttrToBaseClassTemplate(
5453       CXXRecordDecl *Class, Attr *ClassAttr,
5454       ClassTemplateSpecializationDecl *BaseTemplateSpec,
5455       SourceLocation BaseLoc);
5456 
5457   /// Perform semantic checks on a class definition that has been
5458   /// completing, introducing implicitly-declared members, checking for
5459   /// abstract types, etc.
5460   ///
5461   /// \param S The scope in which the class was parsed. Null if we didn't just
5462   ///        parse a class definition.
5463   /// \param Record The completed class.
5464   void CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record);
5465 
5466   /// Check that the C++ class annoated with "trivial_abi" satisfies all the
5467   /// conditions that are needed for the attribute to have an effect.
5468   void checkIllFormedTrivialABIStruct(CXXRecordDecl &RD);
5469 
5470   /// Check that VTable Pointer authentication is only being set on the first
5471   /// first instantiation of the vtable
5472   void checkIncorrectVTablePointerAuthenticationAttribute(CXXRecordDecl &RD);
5473 
5474   void ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc,
5475                                          Decl *TagDecl, SourceLocation LBrac,
5476                                          SourceLocation RBrac,
5477                                          const ParsedAttributesView &AttrList);
5478 
5479   /// Perform any semantic analysis which needs to be delayed until all
5480   /// pending class member declarations have been parsed.
5481   void ActOnFinishCXXMemberDecls();
5482   void ActOnFinishCXXNonNestedClass();
5483 
5484   /// This is used to implement the constant expression evaluation part of the
5485   /// attribute enable_if extension. There is nothing in standard C++ which
5486   /// would require reentering parameters.
5487   void ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param);
5488   unsigned ActOnReenterTemplateScope(Decl *Template,
5489                                      llvm::function_ref<Scope *()> EnterScope);
5490   void ActOnStartDelayedMemberDeclarations(Scope *S, Decl *Record);
5491 
5492   /// ActOnStartDelayedCXXMethodDeclaration - We have completed
5493   /// parsing a top-level (non-nested) C++ class, and we are now
5494   /// parsing those parts of the given Method declaration that could
5495   /// not be parsed earlier (C++ [class.mem]p2), such as default
5496   /// arguments. This action should enter the scope of the given
5497   /// Method declaration as if we had just parsed the qualified method
5498   /// name. However, it should not bring the parameters into scope;
5499   /// that will be performed by ActOnDelayedCXXMethodParameter.
5500   void ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5501   void ActOnDelayedCXXMethodParameter(Scope *S, Decl *Param);
5502   void ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *Record);
5503 
5504   /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
5505   /// processing the delayed method declaration for Method. The method
5506   /// declaration is now considered finished. There may be a separate
5507   /// ActOnStartOfFunctionDef action later (not necessarily
5508   /// immediately!) for this method, if it was also defined inside the
5509   /// class body.
5510   void ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5511   void ActOnFinishDelayedMemberInitializers(Decl *Record);
5512 
5513   bool EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result,
5514                                            ASTContext &Ctx,
5515                                            bool ErrorOnInvalidMessage);
5516   Decl *ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5517                                      Expr *AssertExpr, Expr *AssertMessageExpr,
5518                                      SourceLocation RParenLoc);
5519   Decl *BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5520                                      Expr *AssertExpr, Expr *AssertMessageExpr,
5521                                      SourceLocation RParenLoc, bool Failed);
5522 
5523   /// Try to print more useful information about a failed static_assert
5524   /// with expression \E
5525   void DiagnoseStaticAssertDetails(const Expr *E);
5526 
5527   /// Handle a friend type declaration.  This works in tandem with
5528   /// ActOnTag.
5529   ///
5530   /// Notes on friend class templates:
5531   ///
5532   /// We generally treat friend class declarations as if they were
5533   /// declaring a class.  So, for example, the elaborated type specifier
5534   /// in a friend declaration is required to obey the restrictions of a
5535   /// class-head (i.e. no typedefs in the scope chain), template
5536   /// parameters are required to match up with simple template-ids, &c.
5537   /// However, unlike when declaring a template specialization, it's
5538   /// okay to refer to a template specialization without an empty
5539   /// template parameter declaration, e.g.
5540   ///   friend class A<T>::B<unsigned>;
5541   /// We permit this as a special case; if there are any template
5542   /// parameters present at all, require proper matching, i.e.
5543   ///   template <> template \<class T> friend class A<int>::B;
5544   Decl *ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
5545                             MultiTemplateParamsArg TemplateParams,
5546                             SourceLocation EllipsisLoc);
5547   NamedDecl *ActOnFriendFunctionDecl(Scope *S, Declarator &D,
5548                                      MultiTemplateParamsArg TemplateParams);
5549 
5550   /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
5551   /// the well-formedness of the constructor declarator @p D with type @p
5552   /// R. If there are any errors in the declarator, this routine will
5553   /// emit diagnostics and set the invalid bit to true.  In any case, the type
5554   /// will be updated to reflect a well-formed type for the constructor and
5555   /// returned.
5556   QualType CheckConstructorDeclarator(Declarator &D, QualType R,
5557                                       StorageClass &SC);
5558 
5559   /// CheckConstructor - Checks a fully-formed constructor for
5560   /// well-formedness, issuing any diagnostics required. Returns true if
5561   /// the constructor declarator is invalid.
5562   void CheckConstructor(CXXConstructorDecl *Constructor);
5563 
5564   /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
5565   /// the well-formednes of the destructor declarator @p D with type @p
5566   /// R. If there are any errors in the declarator, this routine will
5567   /// emit diagnostics and set the declarator to invalid.  Even if this happens,
5568   /// will be updated to reflect a well-formed type for the destructor and
5569   /// returned.
5570   QualType CheckDestructorDeclarator(Declarator &D, QualType R,
5571                                      StorageClass &SC);
5572 
5573   /// CheckDestructor - Checks a fully-formed destructor definition for
5574   /// well-formedness, issuing any diagnostics required.  Returns true
5575   /// on error.
5576   bool CheckDestructor(CXXDestructorDecl *Destructor);
5577 
5578   /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
5579   /// well-formednes of the conversion function declarator @p D with
5580   /// type @p R. If there are any errors in the declarator, this routine
5581   /// will emit diagnostics and return true. Otherwise, it will return
5582   /// false. Either way, the type @p R will be updated to reflect a
5583   /// well-formed type for the conversion operator.
5584   void CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC);
5585 
5586   /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
5587   /// the declaration of the given C++ conversion function. This routine
5588   /// is responsible for recording the conversion function in the C++
5589   /// class, if possible.
5590   Decl *ActOnConversionDeclarator(CXXConversionDecl *Conversion);
5591 
5592   /// Check the validity of a declarator that we parsed for a deduction-guide.
5593   /// These aren't actually declarators in the grammar, so we need to check that
5594   /// the user didn't specify any pieces that are not part of the
5595   /// deduction-guide grammar. Return true on invalid deduction-guide.
5596   bool CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
5597                                      StorageClass &SC);
5598 
5599   void CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *MD);
5600 
5601   bool CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD,
5602                                              CXXSpecialMemberKind CSM,
5603                                              SourceLocation DefaultLoc);
5604   void CheckDelayedMemberExceptionSpecs();
5605 
5606   /// Kinds of defaulted comparison operator functions.
5607   enum class DefaultedComparisonKind : unsigned char {
5608     /// This is not a defaultable comparison operator.
5609     None,
5610     /// This is an operator== that should be implemented as a series of
5611     /// subobject comparisons.
5612     Equal,
5613     /// This is an operator<=> that should be implemented as a series of
5614     /// subobject comparisons.
5615     ThreeWay,
5616     /// This is an operator!= that should be implemented as a rewrite in terms
5617     /// of a == comparison.
5618     NotEqual,
5619     /// This is an <, <=, >, or >= that should be implemented as a rewrite in
5620     /// terms of a <=> comparison.
5621     Relational,
5622   };
5623 
5624   bool CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *MD,
5625                                           DefaultedComparisonKind DCK);
5626   void DeclareImplicitEqualityComparison(CXXRecordDecl *RD,
5627                                          FunctionDecl *Spaceship);
5628   void DefineDefaultedComparison(SourceLocation Loc, FunctionDecl *FD,
5629                                  DefaultedComparisonKind DCK);
5630 
5631   void CheckExplicitObjectMemberFunction(Declarator &D, DeclarationName Name,
5632                                          QualType R, bool IsLambda,
5633                                          DeclContext *DC = nullptr);
5634   void CheckExplicitObjectMemberFunction(DeclContext *DC, Declarator &D,
5635                                          DeclarationName Name, QualType R);
5636   void CheckExplicitObjectLambda(Declarator &D);
5637 
5638   //===--------------------------------------------------------------------===//
5639   // C++ Derived Classes
5640   //
5641 
5642   /// Check the validity of a C++ base class specifier.
5643   ///
5644   /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
5645   /// and returns NULL otherwise.
5646   CXXBaseSpecifier *CheckBaseSpecifier(CXXRecordDecl *Class,
5647                                        SourceRange SpecifierRange, bool Virtual,
5648                                        AccessSpecifier Access,
5649                                        TypeSourceInfo *TInfo,
5650                                        SourceLocation EllipsisLoc);
5651 
5652   /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
5653   /// one entry in the base class list of a class specifier, for
5654   /// example:
5655   ///    class foo : public bar, virtual private baz {
5656   /// 'public bar' and 'virtual private baz' are each base-specifiers.
5657   BaseResult ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
5658                                 const ParsedAttributesView &Attrs, bool Virtual,
5659                                 AccessSpecifier Access, ParsedType basetype,
5660                                 SourceLocation BaseLoc,
5661                                 SourceLocation EllipsisLoc);
5662 
5663   /// Performs the actual work of attaching the given base class
5664   /// specifiers to a C++ class.
5665   bool AttachBaseSpecifiers(CXXRecordDecl *Class,
5666                             MutableArrayRef<CXXBaseSpecifier *> Bases);
5667 
5668   /// ActOnBaseSpecifiers - Attach the given base specifiers to the
5669   /// class, after checking whether there are any duplicate base
5670   /// classes.
5671   void ActOnBaseSpecifiers(Decl *ClassDecl,
5672                            MutableArrayRef<CXXBaseSpecifier *> Bases);
5673 
5674   /// Determine whether the type \p Derived is a C++ class that is
5675   /// derived from the type \p Base.
5676   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base);
5677 
5678   /// Determine whether the type \p Derived is a C++ class that is
5679   /// derived from the type \p Base.
5680   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base,
5681                      CXXBasePaths &Paths);
5682 
5683   // FIXME: I don't like this name.
5684   void BuildBasePathArray(const CXXBasePaths &Paths, CXXCastPath &BasePath);
5685 
5686   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5687                                     SourceLocation Loc, SourceRange Range,
5688                                     CXXCastPath *BasePath = nullptr,
5689                                     bool IgnoreAccess = false);
5690 
5691   /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
5692   /// conversion (where Derived and Base are class types) is
5693   /// well-formed, meaning that the conversion is unambiguous (and
5694   /// that all of the base classes are accessible). Returns true
5695   /// and emits a diagnostic if the code is ill-formed, returns false
5696   /// otherwise. Loc is the location where this routine should point to
5697   /// if there is an error, and Range is the source range to highlight
5698   /// if there is an error.
5699   ///
5700   /// If either InaccessibleBaseID or AmbiguousBaseConvID are 0, then the
5701   /// diagnostic for the respective type of error will be suppressed, but the
5702   /// check for ill-formed code will still be performed.
5703   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5704                                     unsigned InaccessibleBaseID,
5705                                     unsigned AmbiguousBaseConvID,
5706                                     SourceLocation Loc, SourceRange Range,
5707                                     DeclarationName Name, CXXCastPath *BasePath,
5708                                     bool IgnoreAccess = false);
5709 
5710   /// Builds a string representing ambiguous paths from a
5711   /// specific derived class to different subobjects of the same base
5712   /// class.
5713   ///
5714   /// This function builds a string that can be used in error messages
5715   /// to show the different paths that one can take through the
5716   /// inheritance hierarchy to go from the derived class to different
5717   /// subobjects of a base class. The result looks something like this:
5718   /// @code
5719   /// struct D -> struct B -> struct A
5720   /// struct D -> struct C -> struct A
5721   /// @endcode
5722   std::string getAmbiguousPathsDisplayString(CXXBasePaths &Paths);
5723 
5724   bool CheckOverridingFunctionAttributes(CXXMethodDecl *New,
5725                                          const CXXMethodDecl *Old);
5726 
5727   /// CheckOverridingFunctionReturnType - Checks whether the return types are
5728   /// covariant, according to C++ [class.virtual]p5.
5729   bool CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
5730                                          const CXXMethodDecl *Old);
5731 
5732   // Check that the overriding method has no explicit object parameter.
5733   bool CheckExplicitObjectOverride(CXXMethodDecl *New,
5734                                    const CXXMethodDecl *Old);
5735 
5736   /// Mark the given method pure.
5737   ///
5738   /// \param Method the method to be marked pure.
5739   ///
5740   /// \param InitRange the source range that covers the "0" initializer.
5741   bool CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange);
5742 
5743   /// CheckOverrideControl - Check C++11 override control semantics.
5744   void CheckOverrideControl(NamedDecl *D);
5745 
5746   /// DiagnoseAbsenceOfOverrideControl - Diagnose if 'override' keyword was
5747   /// not used in the declaration of an overriding method.
5748   void DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent);
5749 
5750   /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
5751   /// function overrides a virtual member function marked 'final', according to
5752   /// C++11 [class.virtual]p4.
5753   bool CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
5754                                               const CXXMethodDecl *Old);
5755 
5756   enum AbstractDiagSelID {
5757     AbstractNone = -1,
5758     AbstractReturnType,
5759     AbstractParamType,
5760     AbstractVariableType,
5761     AbstractFieldType,
5762     AbstractIvarType,
5763     AbstractSynthesizedIvarType,
5764     AbstractArrayType
5765   };
5766 
5767   struct TypeDiagnoser;
5768 
5769   bool isAbstractType(SourceLocation Loc, QualType T);
5770   bool RequireNonAbstractType(SourceLocation Loc, QualType T,
5771                               TypeDiagnoser &Diagnoser);
5772   template <typename... Ts>
5773   bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned DiagID,
5774                               const Ts &...Args) {
5775     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
5776     return RequireNonAbstractType(Loc, T, Diagnoser);
5777   }
5778 
5779   void DiagnoseAbstractType(const CXXRecordDecl *RD);
5780 
5781   //===--------------------------------------------------------------------===//
5782   // C++ Overloaded Operators [C++ 13.5]
5783   //
5784 
5785   /// CheckOverloadedOperatorDeclaration - Check whether the declaration
5786   /// of this overloaded operator is well-formed. If so, returns false;
5787   /// otherwise, emits appropriate diagnostics and returns true.
5788   bool CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl);
5789 
5790   /// CheckLiteralOperatorDeclaration - Check whether the declaration
5791   /// of this literal operator function is well-formed. If so, returns
5792   /// false; otherwise, emits appropriate diagnostics and returns true.
5793   bool CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl);
5794 
5795   /// ActOnExplicitBoolSpecifier - Build an ExplicitSpecifier from an expression
5796   /// found in an explicit(bool) specifier.
5797   ExplicitSpecifier ActOnExplicitBoolSpecifier(Expr *E);
5798 
5799   /// tryResolveExplicitSpecifier - Attempt to resolve the explict specifier.
5800   /// Returns true if the explicit specifier is now resolved.
5801   bool tryResolveExplicitSpecifier(ExplicitSpecifier &ExplicitSpec);
5802 
5803   /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
5804   /// C++ if/switch/while/for statement.
5805   /// e.g: "if (int x = f()) {...}"
5806   DeclResult ActOnCXXConditionDeclaration(Scope *S, Declarator &D);
5807 
5808   // Emitting members of dllexported classes is delayed until the class
5809   // (including field initializers) is fully parsed.
5810   SmallVector<CXXRecordDecl *, 4> DelayedDllExportClasses;
5811   SmallVector<CXXMethodDecl *, 4> DelayedDllExportMemberFunctions;
5812 
5813   /// Merge the exception specifications of two variable declarations.
5814   ///
5815   /// This is called when there's a redeclaration of a VarDecl. The function
5816   /// checks if the redeclaration might have an exception specification and
5817   /// validates compatibility and merges the specs if necessary.
5818   void MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old);
5819 
5820   /// MergeCXXFunctionDecl - Merge two declarations of the same C++
5821   /// function, once we already know that they have the same
5822   /// type. Subroutine of MergeFunctionDecl. Returns true if there was an
5823   /// error, false otherwise.
5824   bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S);
5825 
5826   /// Helpers for dealing with blocks and functions.
5827   void CheckCXXDefaultArguments(FunctionDecl *FD);
5828 
5829   /// CheckExtraCXXDefaultArguments - Check for any extra default
5830   /// arguments in the declarator, which is not a function declaration
5831   /// or definition and therefore is not permitted to have default
5832   /// arguments. This routine should be invoked for every declarator
5833   /// that is not a function declaration or definition.
5834   void CheckExtraCXXDefaultArguments(Declarator &D);
5835 
5836   CXXSpecialMemberKind getSpecialMember(const CXXMethodDecl *MD) {
5837     return getDefaultedFunctionKind(MD).asSpecialMember();
5838   }
5839 
5840   /// Perform semantic analysis for the variable declaration that
5841   /// occurs within a C++ catch clause, returning the newly-created
5842   /// variable.
5843   VarDecl *BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo,
5844                                      SourceLocation StartLoc,
5845                                      SourceLocation IdLoc,
5846                                      const IdentifierInfo *Id);
5847 
5848   /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
5849   /// handler.
5850   Decl *ActOnExceptionDeclarator(Scope *S, Declarator &D);
5851 
5852   void DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock);
5853 
5854   /// Handle a friend tag declaration where the scope specifier was
5855   /// templated.
5856   DeclResult ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
5857                                      unsigned TagSpec, SourceLocation TagLoc,
5858                                      CXXScopeSpec &SS, IdentifierInfo *Name,
5859                                      SourceLocation NameLoc,
5860                                      SourceLocation EllipsisLoc,
5861                                      const ParsedAttributesView &Attr,
5862                                      MultiTemplateParamsArg TempParamLists);
5863 
5864   MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD,
5865                                    SourceLocation DeclStart, Declarator &D,
5866                                    Expr *BitfieldWidth,
5867                                    InClassInitStyle InitStyle,
5868                                    AccessSpecifier AS,
5869                                    const ParsedAttr &MSPropertyAttr);
5870 
5871   /// Diagnose why the specified class does not have a trivial special member of
5872   /// the given kind.
5873   void DiagnoseNontrivial(const CXXRecordDecl *Record,
5874                           CXXSpecialMemberKind CSM);
5875 
5876   enum TrivialABIHandling {
5877     /// The triviality of a method unaffected by "trivial_abi".
5878     TAH_IgnoreTrivialABI,
5879 
5880     /// The triviality of a method affected by "trivial_abi".
5881     TAH_ConsiderTrivialABI
5882   };
5883 
5884   /// Determine whether a defaulted or deleted special member function is
5885   /// trivial, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
5886   /// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
5887   bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMemberKind CSM,
5888                               TrivialABIHandling TAH = TAH_IgnoreTrivialABI,
5889                               bool Diagnose = false);
5890 
5891   /// For a defaulted function, the kind of defaulted function that it is.
5892   class DefaultedFunctionKind {
5893     LLVM_PREFERRED_TYPE(CXXSpecialMemberKind)
5894     unsigned SpecialMember : 8;
5895     unsigned Comparison : 8;
5896 
5897   public:
5898     DefaultedFunctionKind()
5899         : SpecialMember(llvm::to_underlying(CXXSpecialMemberKind::Invalid)),
5900           Comparison(llvm::to_underlying(DefaultedComparisonKind::None)) {}
5901     DefaultedFunctionKind(CXXSpecialMemberKind CSM)
5902         : SpecialMember(llvm::to_underlying(CSM)),
5903           Comparison(llvm::to_underlying(DefaultedComparisonKind::None)) {}
5904     DefaultedFunctionKind(DefaultedComparisonKind Comp)
5905         : SpecialMember(llvm::to_underlying(CXXSpecialMemberKind::Invalid)),
5906           Comparison(llvm::to_underlying(Comp)) {}
5907 
5908     bool isSpecialMember() const {
5909       return static_cast<CXXSpecialMemberKind>(SpecialMember) !=
5910              CXXSpecialMemberKind::Invalid;
5911     }
5912     bool isComparison() const {
5913       return static_cast<DefaultedComparisonKind>(Comparison) !=
5914              DefaultedComparisonKind::None;
5915     }
5916 
5917     explicit operator bool() const {
5918       return isSpecialMember() || isComparison();
5919     }
5920 
5921     CXXSpecialMemberKind asSpecialMember() const {
5922       return static_cast<CXXSpecialMemberKind>(SpecialMember);
5923     }
5924     DefaultedComparisonKind asComparison() const {
5925       return static_cast<DefaultedComparisonKind>(Comparison);
5926     }
5927 
5928     /// Get the index of this function kind for use in diagnostics.
5929     unsigned getDiagnosticIndex() const {
5930       static_assert(llvm::to_underlying(CXXSpecialMemberKind::Invalid) >
5931                         llvm::to_underlying(CXXSpecialMemberKind::Destructor),
5932                     "invalid should have highest index");
5933       static_assert((unsigned)DefaultedComparisonKind::None == 0,
5934                     "none should be equal to zero");
5935       return SpecialMember + Comparison;
5936     }
5937   };
5938 
5939   /// Determine the kind of defaulting that would be done for a given function.
5940   ///
5941   /// If the function is both a default constructor and a copy / move
5942   /// constructor (due to having a default argument for the first parameter),
5943   /// this picks CXXSpecialMemberKind::DefaultConstructor.
5944   ///
5945   /// FIXME: Check that case is properly handled by all callers.
5946   DefaultedFunctionKind getDefaultedFunctionKind(const FunctionDecl *FD);
5947 
5948   /// Handle a C++11 empty-declaration and attribute-declaration.
5949   Decl *ActOnEmptyDeclaration(Scope *S, const ParsedAttributesView &AttrList,
5950                               SourceLocation SemiLoc);
5951 
5952   enum class CheckConstexprKind {
5953     /// Diagnose issues that are non-constant or that are extensions.
5954     Diagnose,
5955     /// Identify whether this function satisfies the formal rules for constexpr
5956     /// functions in the current lanugage mode (with no extensions).
5957     CheckValid
5958   };
5959 
5960   // Check whether a function declaration satisfies the requirements of a
5961   // constexpr function definition or a constexpr constructor definition. If so,
5962   // return true. If not, produce appropriate diagnostics (unless asked not to
5963   // by Kind) and return false.
5964   //
5965   // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
5966   bool CheckConstexprFunctionDefinition(const FunctionDecl *FD,
5967                                         CheckConstexprKind Kind);
5968 
5969   /// Diagnose methods which overload virtual methods in a base class
5970   /// without overriding any.
5971   void DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD);
5972 
5973   /// Check if a method overloads virtual methods in a base class without
5974   /// overriding any.
5975   void
5976   FindHiddenVirtualMethods(CXXMethodDecl *MD,
5977                            SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods);
5978   void
5979   NoteHiddenVirtualMethods(CXXMethodDecl *MD,
5980                            SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods);
5981 
5982   /// ActOnParamDefaultArgument - Check whether the default argument
5983   /// provided for a function parameter is well-formed. If so, attach it
5984   /// to the parameter declaration.
5985   void ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
5986                                  Expr *defarg);
5987 
5988   /// ActOnParamUnparsedDefaultArgument - We've seen a default
5989   /// argument for a function parameter, but we can't parse it yet
5990   /// because we're inside a class definition. Note that this default
5991   /// argument will be parsed later.
5992   void ActOnParamUnparsedDefaultArgument(Decl *param, SourceLocation EqualLoc,
5993                                          SourceLocation ArgLoc);
5994 
5995   /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
5996   /// the default argument for the parameter param failed.
5997   void ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc,
5998                                       Expr *DefaultArg);
5999   ExprResult ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
6000                                          SourceLocation EqualLoc);
6001   void SetParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
6002                                SourceLocation EqualLoc);
6003 
6004   void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc);
6005   void SetDeclDeleted(Decl *dcl, SourceLocation DelLoc,
6006                       StringLiteral *Message = nullptr);
6007   void SetDeclDefaulted(Decl *dcl, SourceLocation DefaultLoc);
6008 
6009   void SetFunctionBodyKind(Decl *D, SourceLocation Loc, FnBodyKind BodyKind,
6010                            StringLiteral *DeletedMessage = nullptr);
6011   void ActOnStartTrailingRequiresClause(Scope *S, Declarator &D);
6012   ExprResult ActOnFinishTrailingRequiresClause(ExprResult ConstraintExpr);
6013   ExprResult ActOnRequiresClause(ExprResult ConstraintExpr);
6014 
6015   NamedDecl *
6016   ActOnDecompositionDeclarator(Scope *S, Declarator &D,
6017                                MultiTemplateParamsArg TemplateParamLists);
6018   void DiagPlaceholderVariableDefinition(SourceLocation Loc);
6019   bool DiagRedefinedPlaceholderFieldDecl(SourceLocation Loc,
6020                                          RecordDecl *ClassDecl,
6021                                          const IdentifierInfo *Name);
6022 
6023   void CheckCompleteDecompositionDeclaration(DecompositionDecl *DD);
6024 
6025   /// Stack containing information needed when in C++2a an 'auto' is encountered
6026   /// in a function declaration parameter type specifier in order to invent a
6027   /// corresponding template parameter in the enclosing abbreviated function
6028   /// template. This information is also present in LambdaScopeInfo, stored in
6029   /// the FunctionScopes stack.
6030   SmallVector<InventedTemplateParameterInfo, 4> InventedParameterInfos;
6031 
6032   /// FieldCollector - Collects CXXFieldDecls during parsing of C++ classes.
6033   std::unique_ptr<CXXFieldCollector> FieldCollector;
6034 
6035   typedef llvm::SmallSetVector<const NamedDecl *, 16> NamedDeclSetType;
6036   /// Set containing all declared private fields that are not used.
6037   NamedDeclSetType UnusedPrivateFields;
6038 
6039   typedef llvm::SmallPtrSet<const CXXRecordDecl *, 8> RecordDeclSetTy;
6040 
6041   /// PureVirtualClassDiagSet - a set of class declarations which we have
6042   /// emitted a list of pure virtual functions. Used to prevent emitting the
6043   /// same list more than once.
6044   std::unique_ptr<RecordDeclSetTy> PureVirtualClassDiagSet;
6045 
6046   typedef LazyVector<CXXConstructorDecl *, ExternalSemaSource,
6047                      &ExternalSemaSource::ReadDelegatingConstructors, 2, 2>
6048       DelegatingCtorDeclsType;
6049 
6050   /// All the delegating constructors seen so far in the file, used for
6051   /// cycle detection at the end of the TU.
6052   DelegatingCtorDeclsType DelegatingCtorDecls;
6053 
6054   /// The C++ "std" namespace, where the standard library resides.
6055   LazyDeclPtr StdNamespace;
6056 
6057   /// The C++ "std::initializer_list" template, which is defined in
6058   /// \<initializer_list>.
6059   ClassTemplateDecl *StdInitializerList;
6060 
6061   // Contains the locations of the beginning of unparsed default
6062   // argument locations.
6063   llvm::DenseMap<ParmVarDecl *, SourceLocation> UnparsedDefaultArgLocs;
6064 
6065   /// UndefinedInternals - all the used, undefined objects which require a
6066   /// definition in this translation unit.
6067   llvm::MapVector<NamedDecl *, SourceLocation> UndefinedButUsed;
6068 
6069   typedef llvm::PointerIntPair<CXXRecordDecl *, 3, CXXSpecialMemberKind>
6070       SpecialMemberDecl;
6071 
6072   /// The C++ special members which we are currently in the process of
6073   /// declaring. If this process recursively triggers the declaration of the
6074   /// same special member, we should act as if it is not yet declared.
6075   llvm::SmallPtrSet<SpecialMemberDecl, 4> SpecialMembersBeingDeclared;
6076 
6077   void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD);
6078 
6079   void ActOnDefaultCtorInitializers(Decl *CDtorDecl);
6080 
6081   typedef ProcessingContextState ParsingClassState;
6082   ParsingClassState PushParsingClass() {
6083     ParsingClassDepth++;
6084     return DelayedDiagnostics.pushUndelayed();
6085   }
6086   void PopParsingClass(ParsingClassState state) {
6087     ParsingClassDepth--;
6088     DelayedDiagnostics.popUndelayed(state);
6089   }
6090 
6091   ValueDecl *tryLookupCtorInitMemberDecl(CXXRecordDecl *ClassDecl,
6092                                          CXXScopeSpec &SS,
6093                                          ParsedType TemplateTypeTy,
6094                                          IdentifierInfo *MemberOrBase);
6095 
6096 private:
6097   void setupImplicitSpecialMemberType(CXXMethodDecl *SpecialMem,
6098                                       QualType ResultTy,
6099                                       ArrayRef<QualType> Args);
6100 
6101   // A cache representing if we've fully checked the various comparison category
6102   // types stored in ASTContext. The bit-index corresponds to the integer value
6103   // of a ComparisonCategoryType enumerator.
6104   llvm::SmallBitVector FullyCheckedComparisonCategories;
6105 
6106   /// Check if there is a field shadowing.
6107   void CheckShadowInheritedFields(const SourceLocation &Loc,
6108                                   DeclarationName FieldName,
6109                                   const CXXRecordDecl *RD,
6110                                   bool DeclIsField = true);
6111 
6112   ///@}
6113 
6114   //
6115   //
6116   // -------------------------------------------------------------------------
6117   //
6118   //
6119 
6120   /// \name C++ Exception Specifications
6121   /// Implementations are in SemaExceptionSpec.cpp
6122   ///@{
6123 
6124 public:
6125   /// All the overriding functions seen during a class definition
6126   /// that had their exception spec checks delayed, plus the overridden
6127   /// function.
6128   SmallVector<std::pair<const CXXMethodDecl *, const CXXMethodDecl *>, 2>
6129       DelayedOverridingExceptionSpecChecks;
6130 
6131   /// All the function redeclarations seen during a class definition that had
6132   /// their exception spec checks delayed, plus the prior declaration they
6133   /// should be checked against. Except during error recovery, the new decl
6134   /// should always be a friend declaration, as that's the only valid way to
6135   /// redeclare a special member before its class is complete.
6136   SmallVector<std::pair<FunctionDecl *, FunctionDecl *>, 2>
6137       DelayedEquivalentExceptionSpecChecks;
6138 
6139   /// Determine if we're in a case where we need to (incorrectly) eagerly
6140   /// parse an exception specification to work around a libstdc++ bug.
6141   bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D);
6142 
6143   /// Check the given noexcept-specifier, convert its expression, and compute
6144   /// the appropriate ExceptionSpecificationType.
6145   ExprResult ActOnNoexceptSpec(Expr *NoexceptExpr,
6146                                ExceptionSpecificationType &EST);
6147 
6148   CanThrowResult canThrow(const Stmt *E);
6149   /// Determine whether the callee of a particular function call can throw.
6150   /// E, D and Loc are all optional.
6151   static CanThrowResult canCalleeThrow(Sema &S, const Expr *E, const Decl *D,
6152                                        SourceLocation Loc = SourceLocation());
6153   const FunctionProtoType *ResolveExceptionSpec(SourceLocation Loc,
6154                                                 const FunctionProtoType *FPT);
6155   void UpdateExceptionSpec(FunctionDecl *FD,
6156                            const FunctionProtoType::ExceptionSpecInfo &ESI);
6157 
6158   /// CheckSpecifiedExceptionType - Check if the given type is valid in an
6159   /// exception specification. Incomplete types, or pointers to incomplete types
6160   /// other than void are not allowed.
6161   ///
6162   /// \param[in,out] T  The exception type. This will be decayed to a pointer
6163   /// type
6164   ///                   when the input is an array or a function type.
6165   bool CheckSpecifiedExceptionType(QualType &T, SourceRange Range);
6166 
6167   /// CheckDistantExceptionSpec - Check if the given type is a pointer or
6168   /// pointer to member to a function with an exception specification. This
6169   /// means that it is invalid to add another level of indirection.
6170   bool CheckDistantExceptionSpec(QualType T);
6171   bool CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New);
6172 
6173   /// CheckEquivalentExceptionSpec - Check if the two types have equivalent
6174   /// exception specifications. Exception specifications are equivalent if
6175   /// they allow exactly the same set of exception types. It does not matter how
6176   /// that is achieved. See C++ [except.spec]p2.
6177   bool CheckEquivalentExceptionSpec(const FunctionProtoType *Old,
6178                                     SourceLocation OldLoc,
6179                                     const FunctionProtoType *New,
6180                                     SourceLocation NewLoc);
6181   bool CheckEquivalentExceptionSpec(const PartialDiagnostic &DiagID,
6182                                     const PartialDiagnostic &NoteID,
6183                                     const FunctionProtoType *Old,
6184                                     SourceLocation OldLoc,
6185                                     const FunctionProtoType *New,
6186                                     SourceLocation NewLoc);
6187   bool handlerCanCatch(QualType HandlerType, QualType ExceptionType);
6188 
6189   /// CheckExceptionSpecSubset - Check whether the second function type's
6190   /// exception specification is a subset (or equivalent) of the first function
6191   /// type. This is used by override and pointer assignment checks.
6192   bool CheckExceptionSpecSubset(
6193       const PartialDiagnostic &DiagID, const PartialDiagnostic &NestedDiagID,
6194       const PartialDiagnostic &NoteID, const PartialDiagnostic &NoThrowDiagID,
6195       const FunctionProtoType *Superset, bool SkipSupersetFirstParameter,
6196       SourceLocation SuperLoc, const FunctionProtoType *Subset,
6197       bool SkipSubsetFirstParameter, SourceLocation SubLoc);
6198 
6199   /// CheckParamExceptionSpec - Check if the parameter and return types of the
6200   /// two functions have equivalent exception specs. This is part of the
6201   /// assignment and override compatibility check. We do not check the
6202   /// parameters of parameter function pointers recursively, as no sane
6203   /// programmer would even be able to write such a function type.
6204   bool CheckParamExceptionSpec(
6205       const PartialDiagnostic &NestedDiagID, const PartialDiagnostic &NoteID,
6206       const FunctionProtoType *Target, bool SkipTargetFirstParameter,
6207       SourceLocation TargetLoc, const FunctionProtoType *Source,
6208       bool SkipSourceFirstParameter, SourceLocation SourceLoc);
6209 
6210   bool CheckExceptionSpecCompatibility(Expr *From, QualType ToType);
6211 
6212   /// CheckOverridingFunctionExceptionSpec - Checks whether the exception
6213   /// spec is a subset of base spec.
6214   bool CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
6215                                             const CXXMethodDecl *Old);
6216 
6217   ///@}
6218 
6219   //
6220   //
6221   // -------------------------------------------------------------------------
6222   //
6223   //
6224 
6225   /// \name Expressions
6226   /// Implementations are in SemaExpr.cpp
6227   ///@{
6228 
6229 public:
6230   /// Describes how the expressions currently being parsed are
6231   /// evaluated at run-time, if at all.
6232   enum class ExpressionEvaluationContext {
6233     /// The current expression and its subexpressions occur within an
6234     /// unevaluated operand (C++11 [expr]p7), such as the subexpression of
6235     /// \c sizeof, where the type of the expression may be significant but
6236     /// no code will be generated to evaluate the value of the expression at
6237     /// run time.
6238     Unevaluated,
6239 
6240     /// The current expression occurs within a braced-init-list within
6241     /// an unevaluated operand. This is mostly like a regular unevaluated
6242     /// context, except that we still instantiate constexpr functions that are
6243     /// referenced here so that we can perform narrowing checks correctly.
6244     UnevaluatedList,
6245 
6246     /// The current expression occurs within a discarded statement.
6247     /// This behaves largely similarly to an unevaluated operand in preventing
6248     /// definitions from being required, but not in other ways.
6249     DiscardedStatement,
6250 
6251     /// The current expression occurs within an unevaluated
6252     /// operand that unconditionally permits abstract references to
6253     /// fields, such as a SIZE operator in MS-style inline assembly.
6254     UnevaluatedAbstract,
6255 
6256     /// The current context is "potentially evaluated" in C++11 terms,
6257     /// but the expression is evaluated at compile-time (like the values of
6258     /// cases in a switch statement).
6259     ConstantEvaluated,
6260 
6261     /// In addition of being constant evaluated, the current expression
6262     /// occurs in an immediate function context - either a consteval function
6263     /// or a consteval if statement.
6264     ImmediateFunctionContext,
6265 
6266     /// The current expression is potentially evaluated at run time,
6267     /// which means that code may be generated to evaluate the value of the
6268     /// expression at run time.
6269     PotentiallyEvaluated,
6270 
6271     /// The current expression is potentially evaluated, but any
6272     /// declarations referenced inside that expression are only used if
6273     /// in fact the current expression is used.
6274     ///
6275     /// This value is used when parsing default function arguments, for which
6276     /// we would like to provide diagnostics (e.g., passing non-POD arguments
6277     /// through varargs) but do not want to mark declarations as "referenced"
6278     /// until the default argument is used.
6279     PotentiallyEvaluatedIfUsed
6280   };
6281 
6282   /// Store a set of either DeclRefExprs or MemberExprs that contain a reference
6283   /// to a variable (constant) that may or may not be odr-used in this Expr, and
6284   /// we won't know until all lvalue-to-rvalue and discarded value conversions
6285   /// have been applied to all subexpressions of the enclosing full expression.
6286   /// This is cleared at the end of each full expression.
6287   using MaybeODRUseExprSet = llvm::SmallSetVector<Expr *, 4>;
6288   MaybeODRUseExprSet MaybeODRUseExprs;
6289 
6290   using ImmediateInvocationCandidate = llvm::PointerIntPair<ConstantExpr *, 1>;
6291 
6292   /// Data structure used to record current or nested
6293   /// expression evaluation contexts.
6294   struct ExpressionEvaluationContextRecord {
6295     /// The expression evaluation context.
6296     ExpressionEvaluationContext Context;
6297 
6298     /// Whether the enclosing context needed a cleanup.
6299     CleanupInfo ParentCleanup;
6300 
6301     /// The number of active cleanup objects when we entered
6302     /// this expression evaluation context.
6303     unsigned NumCleanupObjects;
6304 
6305     /// The number of typos encountered during this expression evaluation
6306     /// context (i.e. the number of TypoExprs created).
6307     unsigned NumTypos;
6308 
6309     MaybeODRUseExprSet SavedMaybeODRUseExprs;
6310 
6311     /// The lambdas that are present within this context, if it
6312     /// is indeed an unevaluated context.
6313     SmallVector<LambdaExpr *, 2> Lambdas;
6314 
6315     /// The declaration that provides context for lambda expressions
6316     /// and block literals if the normal declaration context does not
6317     /// suffice, e.g., in a default function argument.
6318     Decl *ManglingContextDecl;
6319 
6320     /// If we are processing a decltype type, a set of call expressions
6321     /// for which we have deferred checking the completeness of the return type.
6322     SmallVector<CallExpr *, 8> DelayedDecltypeCalls;
6323 
6324     /// If we are processing a decltype type, a set of temporary binding
6325     /// expressions for which we have deferred checking the destructor.
6326     SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds;
6327 
6328     llvm::SmallPtrSet<const Expr *, 8> PossibleDerefs;
6329 
6330     /// Expressions appearing as the LHS of a volatile assignment in this
6331     /// context. We produce a warning for these when popping the context if
6332     /// they are not discarded-value expressions nor unevaluated operands.
6333     SmallVector<Expr *, 2> VolatileAssignmentLHSs;
6334 
6335     /// Set of candidates for starting an immediate invocation.
6336     llvm::SmallVector<ImmediateInvocationCandidate, 4>
6337         ImmediateInvocationCandidates;
6338 
6339     /// Set of DeclRefExprs referencing a consteval function when used in a
6340     /// context not already known to be immediately invoked.
6341     llvm::SmallPtrSet<DeclRefExpr *, 4> ReferenceToConsteval;
6342 
6343     /// P2718R0 - Lifetime extension in range-based for loops.
6344     /// MaterializeTemporaryExprs in for-range-init expressions which need to
6345     /// extend lifetime. Add MaterializeTemporaryExpr* if the value of
6346     /// InLifetimeExtendingContext is true.
6347     SmallVector<MaterializeTemporaryExpr *, 8> ForRangeLifetimeExtendTemps;
6348 
6349     /// \brief Describes whether we are in an expression constext which we have
6350     /// to handle differently.
6351     enum ExpressionKind {
6352       EK_Decltype,
6353       EK_TemplateArgument,
6354       EK_AttrArgument,
6355       EK_Other
6356     } ExprContext;
6357 
6358     // A context can be nested in both a discarded statement context and
6359     // an immediate function context, so they need to be tracked independently.
6360     bool InDiscardedStatement;
6361     bool InImmediateFunctionContext;
6362     bool InImmediateEscalatingFunctionContext;
6363 
6364     bool IsCurrentlyCheckingDefaultArgumentOrInitializer = false;
6365 
6366     // We are in a constant context, but we also allow
6367     // non constant expressions, for example for array bounds (which may be
6368     // VLAs).
6369     bool InConditionallyConstantEvaluateContext = false;
6370 
6371     /// Whether we are currently in a context in which all temporaries must be
6372     /// lifetime-extended, even if they're not bound to a reference (for
6373     /// example, in a for-range initializer).
6374     bool InLifetimeExtendingContext = false;
6375 
6376     /// Whether we should rebuild CXXDefaultArgExpr and CXXDefaultInitExpr.
6377     bool RebuildDefaultArgOrDefaultInit = false;
6378 
6379     // When evaluating immediate functions in the initializer of a default
6380     // argument or default member initializer, this is the declaration whose
6381     // default initializer is being evaluated and the location of the call
6382     // or constructor definition.
6383     struct InitializationContext {
6384       InitializationContext(SourceLocation Loc, ValueDecl *Decl,
6385                             DeclContext *Context)
6386           : Loc(Loc), Decl(Decl), Context(Context) {
6387         assert(Decl && Context && "invalid initialization context");
6388       }
6389 
6390       SourceLocation Loc;
6391       ValueDecl *Decl = nullptr;
6392       DeclContext *Context = nullptr;
6393     };
6394     std::optional<InitializationContext> DelayedDefaultInitializationContext;
6395 
6396     ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context,
6397                                       unsigned NumCleanupObjects,
6398                                       CleanupInfo ParentCleanup,
6399                                       Decl *ManglingContextDecl,
6400                                       ExpressionKind ExprContext)
6401         : Context(Context), ParentCleanup(ParentCleanup),
6402           NumCleanupObjects(NumCleanupObjects), NumTypos(0),
6403           ManglingContextDecl(ManglingContextDecl), ExprContext(ExprContext),
6404           InDiscardedStatement(false), InImmediateFunctionContext(false),
6405           InImmediateEscalatingFunctionContext(false) {}
6406 
6407     bool isUnevaluated() const {
6408       return Context == ExpressionEvaluationContext::Unevaluated ||
6409              Context == ExpressionEvaluationContext::UnevaluatedAbstract ||
6410              Context == ExpressionEvaluationContext::UnevaluatedList;
6411     }
6412 
6413     bool isPotentiallyEvaluated() const {
6414       return Context == ExpressionEvaluationContext::PotentiallyEvaluated ||
6415              Context ==
6416                  ExpressionEvaluationContext::PotentiallyEvaluatedIfUsed ||
6417              Context == ExpressionEvaluationContext::ConstantEvaluated;
6418     }
6419 
6420     bool isConstantEvaluated() const {
6421       return Context == ExpressionEvaluationContext::ConstantEvaluated ||
6422              Context == ExpressionEvaluationContext::ImmediateFunctionContext;
6423     }
6424 
6425     bool isImmediateFunctionContext() const {
6426       return Context == ExpressionEvaluationContext::ImmediateFunctionContext ||
6427              (Context == ExpressionEvaluationContext::DiscardedStatement &&
6428               InImmediateFunctionContext) ||
6429              // C++23 [expr.const]p14:
6430              // An expression or conversion is in an immediate function
6431              // context if it is potentially evaluated and either:
6432              //   * its innermost enclosing non-block scope is a function
6433              //     parameter scope of an immediate function, or
6434              //   * its enclosing statement is enclosed by the compound-
6435              //     statement of a consteval if statement.
6436              (Context == ExpressionEvaluationContext::PotentiallyEvaluated &&
6437               InImmediateFunctionContext);
6438     }
6439 
6440     bool isDiscardedStatementContext() const {
6441       return Context == ExpressionEvaluationContext::DiscardedStatement ||
6442              (Context ==
6443                   ExpressionEvaluationContext::ImmediateFunctionContext &&
6444               InDiscardedStatement);
6445     }
6446   };
6447 
6448   const ExpressionEvaluationContextRecord &currentEvaluationContext() const {
6449     assert(!ExprEvalContexts.empty() &&
6450            "Must be in an expression evaluation context");
6451     return ExprEvalContexts.back();
6452   };
6453 
6454   ExpressionEvaluationContextRecord &currentEvaluationContext() {
6455     assert(!ExprEvalContexts.empty() &&
6456            "Must be in an expression evaluation context");
6457     return ExprEvalContexts.back();
6458   };
6459 
6460   ExpressionEvaluationContextRecord &parentEvaluationContext() {
6461     assert(ExprEvalContexts.size() >= 2 &&
6462            "Must be in an expression evaluation context");
6463     return ExprEvalContexts[ExprEvalContexts.size() - 2];
6464   };
6465 
6466   const ExpressionEvaluationContextRecord &parentEvaluationContext() const {
6467     return const_cast<Sema *>(this)->parentEvaluationContext();
6468   };
6469 
6470   bool isAttrContext() const {
6471     return ExprEvalContexts.back().ExprContext ==
6472            ExpressionEvaluationContextRecord::ExpressionKind::EK_AttrArgument;
6473   }
6474 
6475   /// Increment when we find a reference; decrement when we find an ignored
6476   /// assignment.  Ultimately the value is 0 if every reference is an ignored
6477   /// assignment.
6478   llvm::DenseMap<const VarDecl *, int> RefsMinusAssignments;
6479 
6480   /// Used to control the generation of ExprWithCleanups.
6481   CleanupInfo Cleanup;
6482 
6483   /// ExprCleanupObjects - This is the stack of objects requiring
6484   /// cleanup that are created by the current full expression.
6485   SmallVector<ExprWithCleanups::CleanupObject, 8> ExprCleanupObjects;
6486 
6487   /// Determine whether the use of this declaration is valid, without
6488   /// emitting diagnostics.
6489   bool CanUseDecl(NamedDecl *D, bool TreatUnavailableAsInvalid);
6490   // A version of DiagnoseUseOfDecl that should be used if overload resolution
6491   // has been used to find this declaration, which means we don't have to bother
6492   // checking the trailing requires clause.
6493   bool DiagnoseUseOfOverloadedDecl(NamedDecl *D, SourceLocation Loc) {
6494     return DiagnoseUseOfDecl(
6495         D, Loc, /*UnknownObjCClass=*/nullptr, /*ObjCPropertyAccess=*/false,
6496         /*AvoidPartialAvailabilityChecks=*/false, /*ClassReceiver=*/nullptr,
6497         /*SkipTrailingRequiresClause=*/true);
6498   }
6499 
6500   /// Determine whether the use of this declaration is valid, and
6501   /// emit any corresponding diagnostics.
6502   ///
6503   /// This routine diagnoses various problems with referencing
6504   /// declarations that can occur when using a declaration. For example,
6505   /// it might warn if a deprecated or unavailable declaration is being
6506   /// used, or produce an error (and return true) if a C++0x deleted
6507   /// function is being used.
6508   ///
6509   /// \returns true if there was an error (this declaration cannot be
6510   /// referenced), false otherwise.
6511   bool DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs,
6512                          const ObjCInterfaceDecl *UnknownObjCClass = nullptr,
6513                          bool ObjCPropertyAccess = false,
6514                          bool AvoidPartialAvailabilityChecks = false,
6515                          ObjCInterfaceDecl *ClassReciever = nullptr,
6516                          bool SkipTrailingRequiresClause = false);
6517 
6518   /// Emit a note explaining that this function is deleted.
6519   void NoteDeletedFunction(FunctionDecl *FD);
6520 
6521   /// DiagnoseSentinelCalls - This routine checks whether a call or
6522   /// message-send is to a declaration with the sentinel attribute, and
6523   /// if so, it checks that the requirements of the sentinel are
6524   /// satisfied.
6525   void DiagnoseSentinelCalls(const NamedDecl *D, SourceLocation Loc,
6526                              ArrayRef<Expr *> Args);
6527 
6528   void PushExpressionEvaluationContext(
6529       ExpressionEvaluationContext NewContext, Decl *LambdaContextDecl = nullptr,
6530       ExpressionEvaluationContextRecord::ExpressionKind Type =
6531           ExpressionEvaluationContextRecord::EK_Other);
6532   enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl };
6533   void PushExpressionEvaluationContext(
6534       ExpressionEvaluationContext NewContext, ReuseLambdaContextDecl_t,
6535       ExpressionEvaluationContextRecord::ExpressionKind Type =
6536           ExpressionEvaluationContextRecord::EK_Other);
6537   void PopExpressionEvaluationContext();
6538 
6539   void DiscardCleanupsInEvaluationContext();
6540 
6541   ExprResult TransformToPotentiallyEvaluated(Expr *E);
6542   TypeSourceInfo *TransformToPotentiallyEvaluated(TypeSourceInfo *TInfo);
6543   ExprResult HandleExprEvaluationContextForTypeof(Expr *E);
6544 
6545   /// Check whether E, which is either a discarded-value expression or an
6546   /// unevaluated operand, is a simple-assignment to a volatlie-qualified
6547   /// lvalue, and if so, remove it from the list of volatile-qualified
6548   /// assignments that we are going to warn are deprecated.
6549   void CheckUnusedVolatileAssignment(Expr *E);
6550 
6551   ExprResult ActOnConstantExpression(ExprResult Res);
6552 
6553   // Functions for marking a declaration referenced.  These functions also
6554   // contain the relevant logic for marking if a reference to a function or
6555   // variable is an odr-use (in the C++11 sense).  There are separate variants
6556   // for expressions referring to a decl; these exist because odr-use marking
6557   // needs to be delayed for some constant variables when we build one of the
6558   // named expressions.
6559   //
6560   // MightBeOdrUse indicates whether the use could possibly be an odr-use, and
6561   // should usually be true. This only needs to be set to false if the lack of
6562   // odr-use cannot be determined from the current context (for instance,
6563   // because the name denotes a virtual function and was written without an
6564   // explicit nested-name-specifier).
6565   void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse);
6566 
6567   /// Mark a function referenced, and check whether it is odr-used
6568   /// (C++ [basic.def.odr]p2, C99 6.9p3)
6569   void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func,
6570                               bool MightBeOdrUse = true);
6571 
6572   /// Mark a variable referenced, and check whether it is odr-used
6573   /// (C++ [basic.def.odr]p2, C99 6.9p3).  Note that this should not be
6574   /// used directly for normal expressions referring to VarDecl.
6575   void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var);
6576 
6577   /// Perform reference-marking and odr-use handling for a DeclRefExpr.
6578   ///
6579   /// Note, this may change the dependence of the DeclRefExpr, and so needs to
6580   /// be handled with care if the DeclRefExpr is not newly-created.
6581   void MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base = nullptr);
6582 
6583   /// Perform reference-marking and odr-use handling for a MemberExpr.
6584   void MarkMemberReferenced(MemberExpr *E);
6585 
6586   /// Perform reference-marking and odr-use handling for a FunctionParmPackExpr.
6587   void MarkFunctionParmPackReferenced(FunctionParmPackExpr *E);
6588   void MarkCaptureUsedInEnclosingContext(ValueDecl *Capture, SourceLocation Loc,
6589                                          unsigned CapturingScopeIndex);
6590 
6591   ExprResult CheckLValueToRValueConversionOperand(Expr *E);
6592   void CleanupVarDeclMarking();
6593 
6594   enum TryCaptureKind {
6595     TryCapture_Implicit,
6596     TryCapture_ExplicitByVal,
6597     TryCapture_ExplicitByRef
6598   };
6599 
6600   /// Try to capture the given variable.
6601   ///
6602   /// \param Var The variable to capture.
6603   ///
6604   /// \param Loc The location at which the capture occurs.
6605   ///
6606   /// \param Kind The kind of capture, which may be implicit (for either a
6607   /// block or a lambda), or explicit by-value or by-reference (for a lambda).
6608   ///
6609   /// \param EllipsisLoc The location of the ellipsis, if one is provided in
6610   /// an explicit lambda capture.
6611   ///
6612   /// \param BuildAndDiagnose Whether we are actually supposed to add the
6613   /// captures or diagnose errors. If false, this routine merely check whether
6614   /// the capture can occur without performing the capture itself or complaining
6615   /// if the variable cannot be captured.
6616   ///
6617   /// \param CaptureType Will be set to the type of the field used to capture
6618   /// this variable in the innermost block or lambda. Only valid when the
6619   /// variable can be captured.
6620   ///
6621   /// \param DeclRefType Will be set to the type of a reference to the capture
6622   /// from within the current scope. Only valid when the variable can be
6623   /// captured.
6624   ///
6625   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
6626   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
6627   /// This is useful when enclosing lambdas must speculatively capture
6628   /// variables that may or may not be used in certain specializations of
6629   /// a nested generic lambda.
6630   ///
6631   /// \returns true if an error occurred (i.e., the variable cannot be
6632   /// captured) and false if the capture succeeded.
6633   bool tryCaptureVariable(ValueDecl *Var, SourceLocation Loc,
6634                           TryCaptureKind Kind, SourceLocation EllipsisLoc,
6635                           bool BuildAndDiagnose, QualType &CaptureType,
6636                           QualType &DeclRefType,
6637                           const unsigned *const FunctionScopeIndexToStopAt);
6638 
6639   /// Try to capture the given variable.
6640   bool tryCaptureVariable(ValueDecl *Var, SourceLocation Loc,
6641                           TryCaptureKind Kind = TryCapture_Implicit,
6642                           SourceLocation EllipsisLoc = SourceLocation());
6643 
6644   /// Checks if the variable must be captured.
6645   bool NeedToCaptureVariable(ValueDecl *Var, SourceLocation Loc);
6646 
6647   /// Given a variable, determine the type that a reference to that
6648   /// variable will have in the given scope.
6649   QualType getCapturedDeclRefType(ValueDecl *Var, SourceLocation Loc);
6650 
6651   /// Mark all of the declarations referenced within a particular AST node as
6652   /// referenced. Used when template instantiation instantiates a non-dependent
6653   /// type -- entities referenced by the type are now referenced.
6654   void MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T);
6655 
6656   /// Mark any declarations that appear within this expression or any
6657   /// potentially-evaluated subexpressions as "referenced".
6658   ///
6659   /// \param SkipLocalVariables If true, don't mark local variables as
6660   /// 'referenced'.
6661   /// \param StopAt Subexpressions that we shouldn't recurse into.
6662   void MarkDeclarationsReferencedInExpr(Expr *E,
6663                                         bool SkipLocalVariables = false,
6664                                         ArrayRef<const Expr *> StopAt = {});
6665 
6666   /// Try to convert an expression \p E to type \p Ty. Returns the result of the
6667   /// conversion.
6668   ExprResult tryConvertExprToType(Expr *E, QualType Ty);
6669 
6670   /// Conditionally issue a diagnostic based on the statements's reachability
6671   /// analysis.
6672   ///
6673   /// \param Stmts If Stmts is non-empty, delay reporting the diagnostic until
6674   /// the function body is parsed, and then do a basic reachability analysis to
6675   /// determine if the statement is reachable. If it is unreachable, the
6676   /// diagnostic will not be emitted.
6677   bool DiagIfReachable(SourceLocation Loc, ArrayRef<const Stmt *> Stmts,
6678                        const PartialDiagnostic &PD);
6679 
6680   /// Conditionally issue a diagnostic based on the current
6681   /// evaluation context.
6682   ///
6683   /// \param Statement If Statement is non-null, delay reporting the
6684   /// diagnostic until the function body is parsed, and then do a basic
6685   /// reachability analysis to determine if the statement is reachable.
6686   /// If it is unreachable, the diagnostic will not be emitted.
6687   bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement,
6688                            const PartialDiagnostic &PD);
6689   /// Similar, but diagnostic is only produced if all the specified statements
6690   /// are reachable.
6691   bool DiagRuntimeBehavior(SourceLocation Loc, ArrayRef<const Stmt *> Stmts,
6692                            const PartialDiagnostic &PD);
6693 
6694   // Primary Expressions.
6695   SourceRange getExprRange(Expr *E) const;
6696 
6697   ExprResult ActOnIdExpression(Scope *S, CXXScopeSpec &SS,
6698                                SourceLocation TemplateKWLoc, UnqualifiedId &Id,
6699                                bool HasTrailingLParen, bool IsAddressOfOperand,
6700                                CorrectionCandidateCallback *CCC = nullptr,
6701                                bool IsInlineAsmIdentifier = false,
6702                                Token *KeywordReplacement = nullptr);
6703 
6704   /// Decomposes the given name into a DeclarationNameInfo, its location, and
6705   /// possibly a list of template arguments.
6706   ///
6707   /// If this produces template arguments, it is permitted to call
6708   /// DecomposeTemplateName.
6709   ///
6710   /// This actually loses a lot of source location information for
6711   /// non-standard name kinds; we should consider preserving that in
6712   /// some way.
6713   void DecomposeUnqualifiedId(const UnqualifiedId &Id,
6714                               TemplateArgumentListInfo &Buffer,
6715                               DeclarationNameInfo &NameInfo,
6716                               const TemplateArgumentListInfo *&TemplateArgs);
6717 
6718   /// Diagnose a lookup that found results in an enclosing class during error
6719   /// recovery. This usually indicates that the results were found in a
6720   /// dependent base class that could not be searched as part of a template
6721   /// definition. Always issues a diagnostic (though this may be only a warning
6722   /// in MS compatibility mode).
6723   ///
6724   /// Return \c true if the error is unrecoverable, or \c false if the caller
6725   /// should attempt to recover using these lookup results.
6726   bool DiagnoseDependentMemberLookup(const LookupResult &R);
6727 
6728   /// Diagnose an empty lookup.
6729   ///
6730   /// \return false if new lookup candidates were found
6731   bool
6732   DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R,
6733                       CorrectionCandidateCallback &CCC,
6734                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
6735                       ArrayRef<Expr *> Args = {},
6736                       DeclContext *LookupCtx = nullptr,
6737                       TypoExpr **Out = nullptr);
6738 
6739   /// If \p D cannot be odr-used in the current expression evaluation context,
6740   /// return a reason explaining why. Otherwise, return NOUR_None.
6741   NonOdrUseReason getNonOdrUseReasonInCurrentContext(ValueDecl *D);
6742 
6743   DeclRefExpr *BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
6744                                 SourceLocation Loc,
6745                                 const CXXScopeSpec *SS = nullptr);
6746   DeclRefExpr *
6747   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
6748                    const DeclarationNameInfo &NameInfo,
6749                    const CXXScopeSpec *SS = nullptr,
6750                    NamedDecl *FoundD = nullptr,
6751                    SourceLocation TemplateKWLoc = SourceLocation(),
6752                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
6753 
6754   /// BuildDeclRefExpr - Build an expression that references a
6755   /// declaration that does not require a closure capture.
6756   DeclRefExpr *
6757   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
6758                    const DeclarationNameInfo &NameInfo,
6759                    NestedNameSpecifierLoc NNS, NamedDecl *FoundD = nullptr,
6760                    SourceLocation TemplateKWLoc = SourceLocation(),
6761                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
6762 
6763   bool UseArgumentDependentLookup(const CXXScopeSpec &SS, const LookupResult &R,
6764                                   bool HasTrailingLParen);
6765 
6766   /// BuildQualifiedDeclarationNameExpr - Build a C++ qualified
6767   /// declaration name, generally during template instantiation.
6768   /// There's a large number of things which don't need to be done along
6769   /// this path.
6770   ExprResult BuildQualifiedDeclarationNameExpr(
6771       CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo,
6772       bool IsAddressOfOperand, TypeSourceInfo **RecoveryTSI = nullptr);
6773 
6774   ExprResult BuildDeclarationNameExpr(const CXXScopeSpec &SS, LookupResult &R,
6775                                       bool NeedsADL,
6776                                       bool AcceptInvalidDecl = false);
6777 
6778   /// Complete semantic analysis for a reference to the given declaration.
6779   ExprResult BuildDeclarationNameExpr(
6780       const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D,
6781       NamedDecl *FoundD = nullptr,
6782       const TemplateArgumentListInfo *TemplateArgs = nullptr,
6783       bool AcceptInvalidDecl = false);
6784 
6785   // ExpandFunctionLocalPredefinedMacros - Returns a new vector of Tokens,
6786   // where Tokens representing function local predefined macros (such as
6787   // __FUNCTION__) are replaced (expanded) with string-literal Tokens.
6788   std::vector<Token> ExpandFunctionLocalPredefinedMacros(ArrayRef<Token> Toks);
6789 
6790   ExprResult BuildPredefinedExpr(SourceLocation Loc, PredefinedIdentKind IK);
6791   ExprResult ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind);
6792   ExprResult ActOnIntegerConstant(SourceLocation Loc, int64_t Val);
6793 
6794   bool CheckLoopHintExpr(Expr *E, SourceLocation Loc, bool AllowZero);
6795 
6796   ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr);
6797   ExprResult ActOnCharacterConstant(const Token &Tok,
6798                                     Scope *UDLScope = nullptr);
6799   ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E);
6800   ExprResult ActOnParenListExpr(SourceLocation L, SourceLocation R,
6801                                 MultiExprArg Val);
6802 
6803   /// ActOnStringLiteral - The specified tokens were lexed as pasted string
6804   /// fragments (e.g. "foo" "bar" L"baz").  The result string has to handle
6805   /// string concatenation ([C99 5.1.1.2, translation phase #6]), so it may come
6806   /// from multiple tokens.  However, the common case is that StringToks points
6807   /// to one string.
6808   ExprResult ActOnStringLiteral(ArrayRef<Token> StringToks,
6809                                 Scope *UDLScope = nullptr);
6810 
6811   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef<Token> StringToks);
6812 
6813   /// ControllingExprOrType is either an opaque pointer coming out of a
6814   /// ParsedType or an Expr *. FIXME: it'd be better to split this interface
6815   /// into two so we don't take a void *, but that's awkward because one of
6816   /// the operands is either a ParsedType or an Expr *, which doesn't lend
6817   /// itself to generic code very well.
6818   ExprResult ActOnGenericSelectionExpr(SourceLocation KeyLoc,
6819                                        SourceLocation DefaultLoc,
6820                                        SourceLocation RParenLoc,
6821                                        bool PredicateIsExpr,
6822                                        void *ControllingExprOrType,
6823                                        ArrayRef<ParsedType> ArgTypes,
6824                                        ArrayRef<Expr *> ArgExprs);
6825   /// ControllingExprOrType is either a TypeSourceInfo * or an Expr *. FIXME:
6826   /// it'd be better to split this interface into two so we don't take a
6827   /// void *, but see the FIXME on ActOnGenericSelectionExpr as to why that
6828   /// isn't a trivial change.
6829   ExprResult CreateGenericSelectionExpr(SourceLocation KeyLoc,
6830                                         SourceLocation DefaultLoc,
6831                                         SourceLocation RParenLoc,
6832                                         bool PredicateIsExpr,
6833                                         void *ControllingExprOrType,
6834                                         ArrayRef<TypeSourceInfo *> Types,
6835                                         ArrayRef<Expr *> Exprs);
6836 
6837   // Binary/Unary Operators.  'Tok' is the token for the operator.
6838   ExprResult CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
6839                                   Expr *InputExpr, bool IsAfterAmp = false);
6840   ExprResult BuildUnaryOp(Scope *S, SourceLocation OpLoc, UnaryOperatorKind Opc,
6841                           Expr *Input, bool IsAfterAmp = false);
6842 
6843   /// Unary Operators.  'Tok' is the token for the operator.
6844   ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc, tok::TokenKind Op,
6845                           Expr *Input, bool IsAfterAmp = false);
6846 
6847   /// Determine whether the given expression is a qualified member
6848   /// access expression, of a form that could be turned into a pointer to member
6849   /// with the address-of operator.
6850   bool isQualifiedMemberAccess(Expr *E);
6851   bool CheckUseOfCXXMethodAsAddressOfOperand(SourceLocation OpLoc,
6852                                              const Expr *Op,
6853                                              const CXXMethodDecl *MD);
6854 
6855   /// CheckAddressOfOperand - The operand of & must be either a function
6856   /// designator or an lvalue designating an object. If it is an lvalue, the
6857   /// object cannot be declared with storage class register or be a bit field.
6858   /// Note: The usual conversions are *not* applied to the operand of the &
6859   /// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.
6860   /// In C++, the operand might be an overloaded function name, in which case
6861   /// we allow the '&' but retain the overloaded-function type.
6862   QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc);
6863 
6864   /// ActOnAlignasTypeArgument - Handle @c alignas(type-id) and @c
6865   /// _Alignas(type-name) .
6866   /// [dcl.align] An alignment-specifier of the form
6867   /// alignas(type-id) has the same effect as alignas(alignof(type-id)).
6868   ///
6869   /// [N1570 6.7.5] _Alignas(type-name) is equivalent to
6870   /// _Alignas(_Alignof(type-name)).
6871   bool ActOnAlignasTypeArgument(StringRef KWName, ParsedType Ty,
6872                                 SourceLocation OpLoc, SourceRange R);
6873   bool CheckAlignasTypeArgument(StringRef KWName, TypeSourceInfo *TInfo,
6874                                 SourceLocation OpLoc, SourceRange R);
6875 
6876   /// Build a sizeof or alignof expression given a type operand.
6877   ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo,
6878                                             SourceLocation OpLoc,
6879                                             UnaryExprOrTypeTrait ExprKind,
6880                                             SourceRange R);
6881 
6882   /// Build a sizeof or alignof expression given an expression
6883   /// operand.
6884   ExprResult CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc,
6885                                             UnaryExprOrTypeTrait ExprKind);
6886 
6887   /// ActOnUnaryExprOrTypeTraitExpr - Handle @c sizeof(type) and @c sizeof @c
6888   /// expr and the same for @c alignof and @c __alignof
6889   /// Note that the ArgRange is invalid if isType is false.
6890   ExprResult ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc,
6891                                            UnaryExprOrTypeTrait ExprKind,
6892                                            bool IsType, void *TyOrEx,
6893                                            SourceRange ArgRange);
6894 
6895   /// Check for operands with placeholder types and complain if found.
6896   /// Returns ExprError() if there was an error and no recovery was possible.
6897   ExprResult CheckPlaceholderExpr(Expr *E);
6898   bool CheckVecStepExpr(Expr *E);
6899 
6900   /// Check the constraints on expression operands to unary type expression
6901   /// and type traits.
6902   ///
6903   /// Completes any types necessary and validates the constraints on the operand
6904   /// expression. The logic mostly mirrors the type-based overload, but may
6905   /// modify the expression as it completes the type for that expression through
6906   /// template instantiation, etc.
6907   bool CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind);
6908 
6909   /// Check the constraints on operands to unary expression and type
6910   /// traits.
6911   ///
6912   /// This will complete any types necessary, and validate the various
6913   /// constraints on those operands.
6914   ///
6915   /// The UsualUnaryConversions() function is *not* called by this routine.
6916   /// C99 6.3.2.1p[2-4] all state:
6917   ///   Except when it is the operand of the sizeof operator ...
6918   ///
6919   /// C++ [expr.sizeof]p4
6920   ///   The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6921   ///   standard conversions are not applied to the operand of sizeof.
6922   ///
6923   /// This policy is followed for all of the unary trait expressions.
6924   bool CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc,
6925                                         SourceRange ExprRange,
6926                                         UnaryExprOrTypeTrait ExprKind,
6927                                         StringRef KWName);
6928 
6929   ExprResult ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc,
6930                                  tok::TokenKind Kind, Expr *Input);
6931 
6932   ExprResult ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc,
6933                                      MultiExprArg ArgExprs,
6934                                      SourceLocation RLoc);
6935   ExprResult CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc,
6936                                              Expr *Idx, SourceLocation RLoc);
6937 
6938   ExprResult CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx,
6939                                               Expr *ColumnIdx,
6940                                               SourceLocation RBLoc);
6941 
6942   /// ConvertArgumentsForCall - Converts the arguments specified in
6943   /// Args/NumArgs to the parameter types of the function FDecl with
6944   /// function prototype Proto. Call is the call expression itself, and
6945   /// Fn is the function expression. For a C++ member function, this
6946   /// routine does not attempt to convert the object argument. Returns
6947   /// true if the call is ill-formed.
6948   bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl,
6949                                const FunctionProtoType *Proto,
6950                                ArrayRef<Expr *> Args, SourceLocation RParenLoc,
6951                                bool ExecConfig = false);
6952 
6953   /// CheckStaticArrayArgument - If the given argument corresponds to a static
6954   /// array parameter, check that it is non-null, and that if it is formed by
6955   /// array-to-pointer decay, the underlying array is sufficiently large.
6956   ///
6957   /// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of
6958   /// the array type derivation, then for each call to the function, the value
6959   /// of the corresponding actual argument shall provide access to the first
6960   /// element of an array with at least as many elements as specified by the
6961   /// size expression.
6962   void CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param,
6963                                 const Expr *ArgExpr);
6964 
6965   /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
6966   /// This provides the location of the left/right parens and a list of comma
6967   /// locations.
6968   ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
6969                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
6970                            Expr *ExecConfig = nullptr);
6971 
6972   /// BuildCallExpr - Handle a call to Fn with the specified array of arguments.
6973   /// This provides the location of the left/right parens and a list of comma
6974   /// locations.
6975   ExprResult BuildCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
6976                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
6977                            Expr *ExecConfig = nullptr,
6978                            bool IsExecConfig = false,
6979                            bool AllowRecovery = false);
6980 
6981   /// BuildBuiltinCallExpr - Create a call to a builtin function specified by Id
6982   //  with the specified CallArgs
6983   Expr *BuildBuiltinCallExpr(SourceLocation Loc, Builtin::ID Id,
6984                              MultiExprArg CallArgs);
6985 
6986   using ADLCallKind = CallExpr::ADLCallKind;
6987 
6988   /// BuildResolvedCallExpr - Build a call to a resolved expression,
6989   /// i.e. an expression not of \p OverloadTy.  The expression should
6990   /// unary-convert to an expression of function-pointer or
6991   /// block-pointer type.
6992   ///
6993   /// \param NDecl the declaration being called, if available
6994   ExprResult
6995   BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc,
6996                         ArrayRef<Expr *> Arg, SourceLocation RParenLoc,
6997                         Expr *Config = nullptr, bool IsExecConfig = false,
6998                         ADLCallKind UsesADL = ADLCallKind::NotADL);
6999 
7000   ExprResult ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D,
7001                            ParsedType &Ty, SourceLocation RParenLoc,
7002                            Expr *CastExpr);
7003 
7004   /// Prepares for a scalar cast, performing all the necessary stages
7005   /// except the final cast and returning the kind required.
7006   CastKind PrepareScalarCast(ExprResult &src, QualType destType);
7007 
7008   /// Build an altivec or OpenCL literal.
7009   ExprResult BuildVectorLiteral(SourceLocation LParenLoc,
7010                                 SourceLocation RParenLoc, Expr *E,
7011                                 TypeSourceInfo *TInfo);
7012 
7013   /// This is not an AltiVec-style cast or or C++ direct-initialization, so turn
7014   /// the ParenListExpr into a sequence of comma binary operators.
7015   ExprResult MaybeConvertParenListExprToParenExpr(Scope *S, Expr *ME);
7016 
7017   ExprResult ActOnCompoundLiteral(SourceLocation LParenLoc, ParsedType Ty,
7018                                   SourceLocation RParenLoc, Expr *InitExpr);
7019 
7020   ExprResult BuildCompoundLiteralExpr(SourceLocation LParenLoc,
7021                                       TypeSourceInfo *TInfo,
7022                                       SourceLocation RParenLoc,
7023                                       Expr *LiteralExpr);
7024 
7025   ExprResult ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList,
7026                            SourceLocation RBraceLoc);
7027 
7028   ExprResult BuildInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList,
7029                            SourceLocation RBraceLoc);
7030 
7031   /// Binary Operators.  'Tok' is the token for the operator.
7032   ExprResult ActOnBinOp(Scope *S, SourceLocation TokLoc, tok::TokenKind Kind,
7033                         Expr *LHSExpr, Expr *RHSExpr);
7034   ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc,
7035                         Expr *LHSExpr, Expr *RHSExpr);
7036 
7037   /// CreateBuiltinBinOp - Creates a new built-in binary operation with
7038   /// operator @p Opc at location @c TokLoc. This routine only supports
7039   /// built-in operations; ActOnBinOp handles overloaded operators.
7040   ExprResult CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc,
7041                                 Expr *LHSExpr, Expr *RHSExpr);
7042   void LookupBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc,
7043                    UnresolvedSetImpl &Functions);
7044 
7045   /// Look for instances where it is likely the comma operator is confused with
7046   /// another operator.  There is an explicit list of acceptable expressions for
7047   /// the left hand side of the comma operator, otherwise emit a warning.
7048   void DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc);
7049 
7050   /// ActOnConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
7051   /// in the case of a the GNU conditional expr extension.
7052   ExprResult ActOnConditionalOp(SourceLocation QuestionLoc,
7053                                 SourceLocation ColonLoc, Expr *CondExpr,
7054                                 Expr *LHSExpr, Expr *RHSExpr);
7055 
7056   /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
7057   ExprResult ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc,
7058                             LabelDecl *TheDecl);
7059 
7060   void ActOnStartStmtExpr();
7061   ExprResult ActOnStmtExpr(Scope *S, SourceLocation LPLoc, Stmt *SubStmt,
7062                            SourceLocation RPLoc);
7063   ExprResult BuildStmtExpr(SourceLocation LPLoc, Stmt *SubStmt,
7064                            SourceLocation RPLoc, unsigned TemplateDepth);
7065   // Handle the final expression in a statement expression.
7066   ExprResult ActOnStmtExprResult(ExprResult E);
7067   void ActOnStmtExprError();
7068 
7069   // __builtin_offsetof(type, identifier(.identifier|[expr])*)
7070   struct OffsetOfComponent {
7071     SourceLocation LocStart, LocEnd;
7072     bool isBrackets; // true if [expr], false if .ident
7073     union {
7074       IdentifierInfo *IdentInfo;
7075       Expr *E;
7076     } U;
7077   };
7078 
7079   /// __builtin_offsetof(type, a.b[123][456].c)
7080   ExprResult BuildBuiltinOffsetOf(SourceLocation BuiltinLoc,
7081                                   TypeSourceInfo *TInfo,
7082                                   ArrayRef<OffsetOfComponent> Components,
7083                                   SourceLocation RParenLoc);
7084   ExprResult ActOnBuiltinOffsetOf(Scope *S, SourceLocation BuiltinLoc,
7085                                   SourceLocation TypeLoc,
7086                                   ParsedType ParsedArgTy,
7087                                   ArrayRef<OffsetOfComponent> Components,
7088                                   SourceLocation RParenLoc);
7089 
7090   // __builtin_choose_expr(constExpr, expr1, expr2)
7091   ExprResult ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr,
7092                              Expr *LHSExpr, Expr *RHSExpr,
7093                              SourceLocation RPLoc);
7094 
7095   // __builtin_va_arg(expr, type)
7096   ExprResult ActOnVAArg(SourceLocation BuiltinLoc, Expr *E, ParsedType Ty,
7097                         SourceLocation RPLoc);
7098   ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E,
7099                             TypeSourceInfo *TInfo, SourceLocation RPLoc);
7100 
7101   // __builtin_LINE(), __builtin_FUNCTION(), __builtin_FUNCSIG(),
7102   // __builtin_FILE(), __builtin_COLUMN(), __builtin_source_location()
7103   ExprResult ActOnSourceLocExpr(SourceLocIdentKind Kind,
7104                                 SourceLocation BuiltinLoc,
7105                                 SourceLocation RPLoc);
7106 
7107   // #embed
7108   ExprResult ActOnEmbedExpr(SourceLocation EmbedKeywordLoc,
7109                             StringLiteral *BinaryData);
7110 
7111   // Build a potentially resolved SourceLocExpr.
7112   ExprResult BuildSourceLocExpr(SourceLocIdentKind Kind, QualType ResultTy,
7113                                 SourceLocation BuiltinLoc, SourceLocation RPLoc,
7114                                 DeclContext *ParentContext);
7115 
7116   // __null
7117   ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc);
7118 
7119   bool CheckCaseExpression(Expr *E);
7120 
7121   //===------------------------- "Block" Extension ------------------------===//
7122 
7123   /// ActOnBlockStart - This callback is invoked when a block literal is
7124   /// started.
7125   void ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope);
7126 
7127   /// ActOnBlockArguments - This callback allows processing of block arguments.
7128   /// If there are no arguments, this is still invoked.
7129   void ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo,
7130                            Scope *CurScope);
7131 
7132   /// ActOnBlockError - If there is an error parsing a block, this callback
7133   /// is invoked to pop the information about the block from the action impl.
7134   void ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope);
7135 
7136   /// ActOnBlockStmtExpr - This is called when the body of a block statement
7137   /// literal was successfully completed.  ^(int x){...}
7138   ExprResult ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body,
7139                                 Scope *CurScope);
7140 
7141   //===---------------------------- Clang Extensions ----------------------===//
7142 
7143   /// ActOnConvertVectorExpr - create a new convert-vector expression from the
7144   /// provided arguments.
7145   ///
7146   /// __builtin_convertvector( value, dst type )
7147   ///
7148   ExprResult ActOnConvertVectorExpr(Expr *E, ParsedType ParsedDestTy,
7149                                     SourceLocation BuiltinLoc,
7150                                     SourceLocation RParenLoc);
7151 
7152   //===---------------------------- OpenCL Features -----------------------===//
7153 
7154   /// Parse a __builtin_astype expression.
7155   ///
7156   /// __builtin_astype( value, dst type )
7157   ///
7158   ExprResult ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy,
7159                              SourceLocation BuiltinLoc,
7160                              SourceLocation RParenLoc);
7161 
7162   /// Create a new AsTypeExpr node (bitcast) from the arguments.
7163   ExprResult BuildAsTypeExpr(Expr *E, QualType DestTy,
7164                              SourceLocation BuiltinLoc,
7165                              SourceLocation RParenLoc);
7166 
7167   /// Attempts to produce a RecoveryExpr after some AST node cannot be created.
7168   ExprResult CreateRecoveryExpr(SourceLocation Begin, SourceLocation End,
7169                                 ArrayRef<Expr *> SubExprs,
7170                                 QualType T = QualType());
7171 
7172   /// Cast a base object to a member's actual type.
7173   ///
7174   /// There are two relevant checks:
7175   ///
7176   /// C++ [class.access.base]p7:
7177   ///
7178   ///   If a class member access operator [...] is used to access a non-static
7179   ///   data member or non-static member function, the reference is ill-formed
7180   ///   if the left operand [...] cannot be implicitly converted to a pointer to
7181   ///   the naming class of the right operand.
7182   ///
7183   /// C++ [expr.ref]p7:
7184   ///
7185   ///   If E2 is a non-static data member or a non-static member function, the
7186   ///   program is ill-formed if the class of which E2 is directly a member is
7187   ///   an ambiguous base (11.8) of the naming class (11.9.3) of E2.
7188   ///
7189   /// Note that the latter check does not consider access; the access of the
7190   /// "real" base class is checked as appropriate when checking the access of
7191   /// the member name.
7192   ExprResult PerformObjectMemberConversion(Expr *From,
7193                                            NestedNameSpecifier *Qualifier,
7194                                            NamedDecl *FoundDecl,
7195                                            NamedDecl *Member);
7196 
7197   /// CheckCallReturnType - Checks that a call expression's return type is
7198   /// complete. Returns true on failure. The location passed in is the location
7199   /// that best represents the call.
7200   bool CheckCallReturnType(QualType ReturnType, SourceLocation Loc,
7201                            CallExpr *CE, FunctionDecl *FD);
7202 
7203   /// Emit a warning for all pending noderef expressions that we recorded.
7204   void WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec);
7205 
7206   ExprResult BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field);
7207 
7208   /// Instantiate or parse a C++ default argument expression as necessary.
7209   /// Return true on error.
7210   bool CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD,
7211                               ParmVarDecl *Param, Expr *Init = nullptr,
7212                               bool SkipImmediateInvocations = true);
7213 
7214   /// BuildCXXDefaultArgExpr - Creates a CXXDefaultArgExpr, instantiating
7215   /// the default expr if needed.
7216   ExprResult BuildCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD,
7217                                     ParmVarDecl *Param, Expr *Init = nullptr);
7218 
7219   /// Wrap the expression in a ConstantExpr if it is a potential immediate
7220   /// invocation.
7221   ExprResult CheckForImmediateInvocation(ExprResult E, FunctionDecl *Decl);
7222 
7223   void MarkExpressionAsImmediateEscalating(Expr *E);
7224 
7225   // Check that the SME attributes for PSTATE.ZA and PSTATE.SM are compatible.
7226   bool IsInvalidSMECallConversion(QualType FromType, QualType ToType);
7227 
7228   /// Abstract base class used for diagnosing integer constant
7229   /// expression violations.
7230   class VerifyICEDiagnoser {
7231   public:
7232     bool Suppress;
7233 
7234     VerifyICEDiagnoser(bool Suppress = false) : Suppress(Suppress) {}
7235 
7236     virtual SemaDiagnosticBuilder
7237     diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T);
7238     virtual SemaDiagnosticBuilder diagnoseNotICE(Sema &S,
7239                                                  SourceLocation Loc) = 0;
7240     virtual SemaDiagnosticBuilder diagnoseFold(Sema &S, SourceLocation Loc);
7241     virtual ~VerifyICEDiagnoser() {}
7242   };
7243 
7244   enum AllowFoldKind {
7245     NoFold,
7246     AllowFold,
7247   };
7248 
7249   /// VerifyIntegerConstantExpression - Verifies that an expression is an ICE,
7250   /// and reports the appropriate diagnostics. Returns false on success.
7251   /// Can optionally return the value of the expression.
7252   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
7253                                              VerifyICEDiagnoser &Diagnoser,
7254                                              AllowFoldKind CanFold = NoFold);
7255   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
7256                                              unsigned DiagID,
7257                                              AllowFoldKind CanFold = NoFold);
7258   ExprResult VerifyIntegerConstantExpression(Expr *E,
7259                                              llvm::APSInt *Result = nullptr,
7260                                              AllowFoldKind CanFold = NoFold);
7261   ExprResult VerifyIntegerConstantExpression(Expr *E,
7262                                              AllowFoldKind CanFold = NoFold) {
7263     return VerifyIntegerConstantExpression(E, nullptr, CanFold);
7264   }
7265 
7266   /// DiagnoseAssignmentAsCondition - Given that an expression is
7267   /// being used as a boolean condition, warn if it's an assignment.
7268   void DiagnoseAssignmentAsCondition(Expr *E);
7269 
7270   /// Redundant parentheses over an equality comparison can indicate
7271   /// that the user intended an assignment used as condition.
7272   void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE);
7273 
7274   class FullExprArg {
7275   public:
7276     FullExprArg() : E(nullptr) {}
7277     FullExprArg(Sema &actions) : E(nullptr) {}
7278 
7279     ExprResult release() { return E; }
7280 
7281     Expr *get() const { return E; }
7282 
7283     Expr *operator->() { return E; }
7284 
7285   private:
7286     // FIXME: No need to make the entire Sema class a friend when it's just
7287     // Sema::MakeFullExpr that needs access to the constructor below.
7288     friend class Sema;
7289 
7290     explicit FullExprArg(Expr *expr) : E(expr) {}
7291 
7292     Expr *E;
7293   };
7294 
7295   FullExprArg MakeFullExpr(Expr *Arg) {
7296     return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation());
7297   }
7298   FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) {
7299     return FullExprArg(
7300         ActOnFinishFullExpr(Arg, CC, /*DiscardedValue*/ false).get());
7301   }
7302   FullExprArg MakeFullDiscardedValueExpr(Expr *Arg) {
7303     ExprResult FE =
7304         ActOnFinishFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation(),
7305                             /*DiscardedValue*/ true);
7306     return FullExprArg(FE.get());
7307   }
7308 
7309   class ConditionResult {
7310     Decl *ConditionVar;
7311     FullExprArg Condition;
7312     bool Invalid;
7313     std::optional<bool> KnownValue;
7314 
7315     friend class Sema;
7316     ConditionResult(Sema &S, Decl *ConditionVar, FullExprArg Condition,
7317                     bool IsConstexpr)
7318         : ConditionVar(ConditionVar), Condition(Condition), Invalid(false) {
7319       if (IsConstexpr && Condition.get()) {
7320         if (std::optional<llvm::APSInt> Val =
7321                 Condition.get()->getIntegerConstantExpr(S.Context)) {
7322           KnownValue = !!(*Val);
7323         }
7324       }
7325     }
7326     explicit ConditionResult(bool Invalid)
7327         : ConditionVar(nullptr), Condition(nullptr), Invalid(Invalid),
7328           KnownValue(std::nullopt) {}
7329 
7330   public:
7331     ConditionResult() : ConditionResult(false) {}
7332     bool isInvalid() const { return Invalid; }
7333     std::pair<VarDecl *, Expr *> get() const {
7334       return std::make_pair(cast_or_null<VarDecl>(ConditionVar),
7335                             Condition.get());
7336     }
7337     std::optional<bool> getKnownValue() const { return KnownValue; }
7338   };
7339   static ConditionResult ConditionError() { return ConditionResult(true); }
7340 
7341   /// CheckBooleanCondition - Diagnose problems involving the use of
7342   /// the given expression as a boolean condition (e.g. in an if
7343   /// statement).  Also performs the standard function and array
7344   /// decays, possibly changing the input variable.
7345   ///
7346   /// \param Loc - A location associated with the condition, e.g. the
7347   /// 'if' keyword.
7348   /// \return true iff there were any errors
7349   ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E,
7350                                    bool IsConstexpr = false);
7351 
7352   enum class ConditionKind {
7353     Boolean,     ///< A boolean condition, from 'if', 'while', 'for', or 'do'.
7354     ConstexprIf, ///< A constant boolean condition from 'if constexpr'.
7355     Switch       ///< An integral condition for a 'switch' statement.
7356   };
7357 
7358   ConditionResult ActOnCondition(Scope *S, SourceLocation Loc, Expr *SubExpr,
7359                                  ConditionKind CK, bool MissingOK = false);
7360 
7361   QualType CheckConditionalOperands( // C99 6.5.15
7362       ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK,
7363       ExprObjectKind &OK, SourceLocation QuestionLoc);
7364 
7365   /// Emit a specialized diagnostic when one expression is a null pointer
7366   /// constant and the other is not a pointer.  Returns true if a diagnostic is
7367   /// emitted.
7368   bool DiagnoseConditionalForNull(const Expr *LHSExpr, const Expr *RHSExpr,
7369                                   SourceLocation QuestionLoc);
7370 
7371   /// type checking for vector binary operators.
7372   QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS,
7373                                SourceLocation Loc, bool IsCompAssign,
7374                                bool AllowBothBool, bool AllowBoolConversion,
7375                                bool AllowBoolOperation, bool ReportInvalid);
7376 
7377   /// Return a signed ext_vector_type that is of identical size and number of
7378   /// elements. For floating point vectors, return an integer type of identical
7379   /// size and number of elements. In the non ext_vector_type case, search from
7380   /// the largest type to the smallest type to avoid cases where long long ==
7381   /// long, where long gets picked over long long.
7382   QualType GetSignedVectorType(QualType V);
7383   QualType GetSignedSizelessVectorType(QualType V);
7384 
7385   /// CheckVectorCompareOperands - vector comparisons are a clang extension that
7386   /// operates on extended vector types.  Instead of producing an IntTy result,
7387   /// like a scalar comparison, a vector comparison produces a vector of integer
7388   /// types.
7389   QualType CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS,
7390                                       SourceLocation Loc,
7391                                       BinaryOperatorKind Opc);
7392   QualType CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS,
7393                                               SourceLocation Loc,
7394                                               BinaryOperatorKind Opc);
7395   QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS,
7396                                       SourceLocation Loc,
7397                                       BinaryOperatorKind Opc);
7398 
7399   /// Context in which we're performing a usual arithmetic conversion.
7400   enum ArithConvKind {
7401     /// An arithmetic operation.
7402     ACK_Arithmetic,
7403     /// A bitwise operation.
7404     ACK_BitwiseOp,
7405     /// A comparison.
7406     ACK_Comparison,
7407     /// A conditional (?:) operator.
7408     ACK_Conditional,
7409     /// A compound assignment expression.
7410     ACK_CompAssign,
7411   };
7412 
7413   // type checking for sizeless vector binary operators.
7414   QualType CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS,
7415                                        SourceLocation Loc, bool IsCompAssign,
7416                                        ArithConvKind OperationKind);
7417 
7418   /// Type checking for matrix binary operators.
7419   QualType CheckMatrixElementwiseOperands(ExprResult &LHS, ExprResult &RHS,
7420                                           SourceLocation Loc,
7421                                           bool IsCompAssign);
7422   QualType CheckMatrixMultiplyOperands(ExprResult &LHS, ExprResult &RHS,
7423                                        SourceLocation Loc, bool IsCompAssign);
7424 
7425   /// Are the two types SVE-bitcast-compatible types? I.e. is bitcasting from
7426   /// the first SVE type (e.g. an SVE VLAT) to the second type (e.g. an SVE
7427   /// VLST) allowed?
7428   ///
7429   /// This will also return false if the two given types do not make sense from
7430   /// the perspective of SVE bitcasts.
7431   bool isValidSveBitcast(QualType srcType, QualType destType);
7432 
7433   /// Are the two types matrix types and do they have the same dimensions i.e.
7434   /// do they have the same number of rows and the same number of columns?
7435   bool areMatrixTypesOfTheSameDimension(QualType srcTy, QualType destTy);
7436 
7437   bool areVectorTypesSameSize(QualType srcType, QualType destType);
7438 
7439   /// Are the two types lax-compatible vector types?  That is, given
7440   /// that one of them is a vector, do they have equal storage sizes,
7441   /// where the storage size is the number of elements times the element
7442   /// size?
7443   ///
7444   /// This will also return false if either of the types is neither a
7445   /// vector nor a real type.
7446   bool areLaxCompatibleVectorTypes(QualType srcType, QualType destType);
7447 
7448   /// Is this a legal conversion between two types, one of which is
7449   /// known to be a vector type?
7450   bool isLaxVectorConversion(QualType srcType, QualType destType);
7451 
7452   // This returns true if at least one of the types is an altivec vector.
7453   bool anyAltivecTypes(QualType srcType, QualType destType);
7454 
7455   // type checking C++ declaration initializers (C++ [dcl.init]).
7456 
7457   /// Check a cast of an unknown-any type.  We intentionally only
7458   /// trigger this for C-style casts.
7459   ExprResult checkUnknownAnyCast(SourceRange TypeRange, QualType CastType,
7460                                  Expr *CastExpr, CastKind &CastKind,
7461                                  ExprValueKind &VK, CXXCastPath &Path);
7462 
7463   /// Force an expression with unknown-type to an expression of the
7464   /// given type.
7465   ExprResult forceUnknownAnyToType(Expr *E, QualType ToType);
7466 
7467   /// Type-check an expression that's being passed to an
7468   /// __unknown_anytype parameter.
7469   ExprResult checkUnknownAnyArg(SourceLocation callLoc, Expr *result,
7470                                 QualType &paramType);
7471 
7472   // CheckMatrixCast - Check type constraints for matrix casts.
7473   // We allow casting between matrixes of the same dimensions i.e. when they
7474   // have the same number of rows and column. Returns true if the cast is
7475   // invalid.
7476   bool CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy,
7477                        CastKind &Kind);
7478 
7479   // CheckVectorCast - check type constraints for vectors.
7480   // Since vectors are an extension, there are no C standard reference for this.
7481   // We allow casting between vectors and integer datatypes of the same size.
7482   // returns true if the cast is invalid
7483   bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty,
7484                        CastKind &Kind);
7485 
7486   /// Prepare `SplattedExpr` for a vector splat operation, adding
7487   /// implicit casts if necessary.
7488   ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr);
7489 
7490   // CheckExtVectorCast - check type constraints for extended vectors.
7491   // Since vectors are an extension, there are no C standard reference for this.
7492   // We allow casting between vectors and integer datatypes of the same size,
7493   // or vectors and the element type of that vector.
7494   // returns the cast expr
7495   ExprResult CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr,
7496                                 CastKind &Kind);
7497 
7498   QualType PreferredConditionType(ConditionKind K) const {
7499     return K == ConditionKind::Switch ? Context.IntTy : Context.BoolTy;
7500   }
7501 
7502   // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts
7503   // functions and arrays to their respective pointers (C99 6.3.2.1).
7504   ExprResult UsualUnaryConversions(Expr *E);
7505 
7506   /// CallExprUnaryConversions - a special case of an unary conversion
7507   /// performed on a function designator of a call expression.
7508   ExprResult CallExprUnaryConversions(Expr *E);
7509 
7510   // DefaultFunctionArrayConversion - converts functions and arrays
7511   // to their respective pointers (C99 6.3.2.1).
7512   ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose = true);
7513 
7514   // DefaultFunctionArrayLvalueConversion - converts functions and
7515   // arrays to their respective pointers and performs the
7516   // lvalue-to-rvalue conversion.
7517   ExprResult DefaultFunctionArrayLvalueConversion(Expr *E,
7518                                                   bool Diagnose = true);
7519 
7520   // DefaultLvalueConversion - performs lvalue-to-rvalue conversion on
7521   // the operand. This function is a no-op if the operand has a function type
7522   // or an array type.
7523   ExprResult DefaultLvalueConversion(Expr *E);
7524 
7525   // DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that
7526   // do not have a prototype. Integer promotions are performed on each
7527   // argument, and arguments that have type float are promoted to double.
7528   ExprResult DefaultArgumentPromotion(Expr *E);
7529 
7530   VariadicCallType getVariadicCallType(FunctionDecl *FDecl,
7531                                        const FunctionProtoType *Proto,
7532                                        Expr *Fn);
7533 
7534   // Used for determining in which context a type is allowed to be passed to a
7535   // vararg function.
7536   enum VarArgKind {
7537     VAK_Valid,
7538     VAK_ValidInCXX11,
7539     VAK_Undefined,
7540     VAK_MSVCUndefined,
7541     VAK_Invalid
7542   };
7543 
7544   /// Determine the degree of POD-ness for an expression.
7545   /// Incomplete types are considered POD, since this check can be performed
7546   /// when we're in an unevaluated context.
7547   VarArgKind isValidVarArgType(const QualType &Ty);
7548 
7549   /// Check to see if the given expression is a valid argument to a variadic
7550   /// function, issuing a diagnostic if not.
7551   void checkVariadicArgument(const Expr *E, VariadicCallType CT);
7552 
7553   /// GatherArgumentsForCall - Collector argument expressions for various
7554   /// form of call prototypes.
7555   bool GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl,
7556                               const FunctionProtoType *Proto,
7557                               unsigned FirstParam, ArrayRef<Expr *> Args,
7558                               SmallVectorImpl<Expr *> &AllArgs,
7559                               VariadicCallType CallType = VariadicDoesNotApply,
7560                               bool AllowExplicit = false,
7561                               bool IsListInitialization = false);
7562 
7563   // DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but
7564   // will create a runtime trap if the resulting type is not a POD type.
7565   ExprResult DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT,
7566                                               FunctionDecl *FDecl);
7567 
7568   // UsualArithmeticConversions - performs the UsualUnaryConversions on it's
7569   // operands and then handles various conversions that are common to binary
7570   // operators (C99 6.3.1.8). If both operands aren't arithmetic, this
7571   // routine returns the first non-arithmetic type found. The client is
7572   // responsible for emitting appropriate error diagnostics.
7573   QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS,
7574                                       SourceLocation Loc, ArithConvKind ACK);
7575 
7576   /// AssignConvertType - All of the 'assignment' semantic checks return this
7577   /// enum to indicate whether the assignment was allowed.  These checks are
7578   /// done for simple assignments, as well as initialization, return from
7579   /// function, argument passing, etc.  The query is phrased in terms of a
7580   /// source and destination type.
7581   enum AssignConvertType {
7582     /// Compatible - the types are compatible according to the standard.
7583     Compatible,
7584 
7585     /// PointerToInt - The assignment converts a pointer to an int, which we
7586     /// accept as an extension.
7587     PointerToInt,
7588 
7589     /// IntToPointer - The assignment converts an int to a pointer, which we
7590     /// accept as an extension.
7591     IntToPointer,
7592 
7593     /// FunctionVoidPointer - The assignment is between a function pointer and
7594     /// void*, which the standard doesn't allow, but we accept as an extension.
7595     FunctionVoidPointer,
7596 
7597     /// IncompatiblePointer - The assignment is between two pointers types that
7598     /// are not compatible, but we accept them as an extension.
7599     IncompatiblePointer,
7600 
7601     /// IncompatibleFunctionPointer - The assignment is between two function
7602     /// pointers types that are not compatible, but we accept them as an
7603     /// extension.
7604     IncompatibleFunctionPointer,
7605 
7606     /// IncompatibleFunctionPointerStrict - The assignment is between two
7607     /// function pointer types that are not identical, but are compatible,
7608     /// unless compiled with -fsanitize=cfi, in which case the type mismatch
7609     /// may trip an indirect call runtime check.
7610     IncompatibleFunctionPointerStrict,
7611 
7612     /// IncompatiblePointerSign - The assignment is between two pointers types
7613     /// which point to integers which have a different sign, but are otherwise
7614     /// identical. This is a subset of the above, but broken out because it's by
7615     /// far the most common case of incompatible pointers.
7616     IncompatiblePointerSign,
7617 
7618     /// CompatiblePointerDiscardsQualifiers - The assignment discards
7619     /// c/v/r qualifiers, which we accept as an extension.
7620     CompatiblePointerDiscardsQualifiers,
7621 
7622     /// IncompatiblePointerDiscardsQualifiers - The assignment
7623     /// discards qualifiers that we don't permit to be discarded,
7624     /// like address spaces.
7625     IncompatiblePointerDiscardsQualifiers,
7626 
7627     /// IncompatibleNestedPointerAddressSpaceMismatch - The assignment
7628     /// changes address spaces in nested pointer types which is not allowed.
7629     /// For instance, converting __private int ** to __generic int ** is
7630     /// illegal even though __private could be converted to __generic.
7631     IncompatibleNestedPointerAddressSpaceMismatch,
7632 
7633     /// IncompatibleNestedPointerQualifiers - The assignment is between two
7634     /// nested pointer types, and the qualifiers other than the first two
7635     /// levels differ e.g. char ** -> const char **, but we accept them as an
7636     /// extension.
7637     IncompatibleNestedPointerQualifiers,
7638 
7639     /// IncompatibleVectors - The assignment is between two vector types that
7640     /// have the same size, which we accept as an extension.
7641     IncompatibleVectors,
7642 
7643     /// IntToBlockPointer - The assignment converts an int to a block
7644     /// pointer. We disallow this.
7645     IntToBlockPointer,
7646 
7647     /// IncompatibleBlockPointer - The assignment is between two block
7648     /// pointers types that are not compatible.
7649     IncompatibleBlockPointer,
7650 
7651     /// IncompatibleObjCQualifiedId - The assignment is between a qualified
7652     /// id type and something else (that is incompatible with it). For example,
7653     /// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol.
7654     IncompatibleObjCQualifiedId,
7655 
7656     /// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an
7657     /// object with __weak qualifier.
7658     IncompatibleObjCWeakRef,
7659 
7660     /// Incompatible - We reject this conversion outright, it is invalid to
7661     /// represent it in the AST.
7662     Incompatible
7663   };
7664 
7665   /// DiagnoseAssignmentResult - Emit a diagnostic, if required, for the
7666   /// assignment conversion type specified by ConvTy.  This returns true if the
7667   /// conversion was invalid or false if the conversion was accepted.
7668   bool DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc,
7669                                 QualType DstType, QualType SrcType,
7670                                 Expr *SrcExpr, AssignmentAction Action,
7671                                 bool *Complained = nullptr);
7672 
7673   /// CheckAssignmentConstraints - Perform type checking for assignment,
7674   /// argument passing, variable initialization, and function return values.
7675   /// C99 6.5.16.
7676   AssignConvertType CheckAssignmentConstraints(SourceLocation Loc,
7677                                                QualType LHSType,
7678                                                QualType RHSType);
7679 
7680   /// Check assignment constraints and optionally prepare for a conversion of
7681   /// the RHS to the LHS type. The conversion is prepared for if ConvertRHS
7682   /// is true.
7683   AssignConvertType CheckAssignmentConstraints(QualType LHSType,
7684                                                ExprResult &RHS, CastKind &Kind,
7685                                                bool ConvertRHS = true);
7686 
7687   /// Check assignment constraints for an assignment of RHS to LHSType.
7688   ///
7689   /// \param LHSType The destination type for the assignment.
7690   /// \param RHS The source expression for the assignment.
7691   /// \param Diagnose If \c true, diagnostics may be produced when checking
7692   ///        for assignability. If a diagnostic is produced, \p RHS will be
7693   ///        set to ExprError(). Note that this function may still return
7694   ///        without producing a diagnostic, even for an invalid assignment.
7695   /// \param DiagnoseCFAudited If \c true, the target is a function parameter
7696   ///        in an audited Core Foundation API and does not need to be checked
7697   ///        for ARC retain issues.
7698   /// \param ConvertRHS If \c true, \p RHS will be updated to model the
7699   ///        conversions necessary to perform the assignment. If \c false,
7700   ///        \p Diagnose must also be \c false.
7701   AssignConvertType CheckSingleAssignmentConstraints(
7702       QualType LHSType, ExprResult &RHS, bool Diagnose = true,
7703       bool DiagnoseCFAudited = false, bool ConvertRHS = true);
7704 
7705   // If the lhs type is a transparent union, check whether we
7706   // can initialize the transparent union with the given expression.
7707   AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType,
7708                                                              ExprResult &RHS);
7709 
7710   /// the following "Check" methods will return a valid/converted QualType
7711   /// or a null QualType (indicating an error diagnostic was issued).
7712 
7713   /// type checking binary operators (subroutines of CreateBuiltinBinOp).
7714   QualType InvalidOperands(SourceLocation Loc, ExprResult &LHS,
7715                            ExprResult &RHS);
7716 
7717   /// Diagnose cases where a scalar was implicitly converted to a vector and
7718   /// diagnose the underlying types. Otherwise, diagnose the error
7719   /// as invalid vector logical operands for non-C++ cases.
7720   QualType InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS,
7721                                         ExprResult &RHS);
7722 
7723   QualType CheckMultiplyDivideOperands( // C99 6.5.5
7724       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign,
7725       bool IsDivide);
7726   QualType CheckRemainderOperands( // C99 6.5.5
7727       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7728       bool IsCompAssign = false);
7729   QualType CheckAdditionOperands( // C99 6.5.6
7730       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7731       BinaryOperatorKind Opc, QualType *CompLHSTy = nullptr);
7732   QualType CheckSubtractionOperands( // C99 6.5.6
7733       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7734       QualType *CompLHSTy = nullptr);
7735   QualType CheckShiftOperands( // C99 6.5.7
7736       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7737       BinaryOperatorKind Opc, bool IsCompAssign = false);
7738   void CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE);
7739   QualType CheckCompareOperands( // C99 6.5.8/9
7740       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7741       BinaryOperatorKind Opc);
7742   QualType CheckBitwiseOperands( // C99 6.5.[10...12]
7743       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7744       BinaryOperatorKind Opc);
7745   QualType CheckLogicalOperands( // C99 6.5.[13,14]
7746       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7747       BinaryOperatorKind Opc);
7748   // CheckAssignmentOperands is used for both simple and compound assignment.
7749   // For simple assignment, pass both expressions and a null converted type.
7750   // For compound assignment, pass both expressions and the converted type.
7751   QualType CheckAssignmentOperands( // C99 6.5.16.[1,2]
7752       Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType,
7753       BinaryOperatorKind Opc);
7754 
7755   /// To be used for checking whether the arguments being passed to
7756   /// function exceeds the number of parameters expected for it.
7757   static bool TooManyArguments(size_t NumParams, size_t NumArgs,
7758                                bool PartialOverloading = false) {
7759     // We check whether we're just after a comma in code-completion.
7760     if (NumArgs > 0 && PartialOverloading)
7761       return NumArgs + 1 > NumParams; // If so, we view as an extra argument.
7762     return NumArgs > NumParams;
7763   }
7764 
7765   /// Whether the AST is currently being rebuilt to correct immediate
7766   /// invocations. Immediate invocation candidates and references to consteval
7767   /// functions aren't tracked when this is set.
7768   bool RebuildingImmediateInvocation = false;
7769 
7770   bool isAlwaysConstantEvaluatedContext() const {
7771     const ExpressionEvaluationContextRecord &Ctx = currentEvaluationContext();
7772     return (Ctx.isConstantEvaluated() || isConstantEvaluatedOverride) &&
7773            !Ctx.InConditionallyConstantEvaluateContext;
7774   }
7775 
7776   /// Determines whether we are currently in a context that
7777   /// is not evaluated as per C++ [expr] p5.
7778   bool isUnevaluatedContext() const {
7779     return currentEvaluationContext().isUnevaluated();
7780   }
7781 
7782   bool isImmediateFunctionContext() const {
7783     return currentEvaluationContext().isImmediateFunctionContext();
7784   }
7785 
7786   bool isInLifetimeExtendingContext() const {
7787     return currentEvaluationContext().InLifetimeExtendingContext;
7788   }
7789 
7790   bool needsRebuildOfDefaultArgOrInit() const {
7791     return currentEvaluationContext().RebuildDefaultArgOrDefaultInit;
7792   }
7793 
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>
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>
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   DefaultedComparisonKind getDefaultedComparisonKind(const FunctionDecl *FD) {
7834     return getDefaultedFunctionKind(FD).asComparison();
7835   }
7836 
7837   /// Returns a field in a CXXRecordDecl that has the same name as the decl \p
7838   /// SelfAssigned when inside a CXXMethodDecl.
7839   const FieldDecl *
7840   getSelfAssignmentClassMemberCandidate(const ValueDecl *SelfAssigned);
7841 
7842   void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D);
7843 
7844   template <typename... Ts>
7845   bool RequireCompleteSizedType(SourceLocation Loc, QualType T, unsigned DiagID,
7846                                 const Ts &...Args) {
7847     SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
7848     return RequireCompleteType(Loc, T, CompleteTypeKind::Normal, Diagnoser);
7849   }
7850 
7851   template <typename... Ts>
7852   bool RequireCompleteSizedExprType(Expr *E, unsigned DiagID,
7853                                     const Ts &...Args) {
7854     SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
7855     return RequireCompleteExprType(E, CompleteTypeKind::Normal, Diagnoser);
7856   }
7857 
7858   /// Abstract class used to diagnose incomplete types.
7859   struct TypeDiagnoser {
7860     TypeDiagnoser() {}
7861 
7862     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) = 0;
7863     virtual ~TypeDiagnoser() {}
7864   };
7865 
7866   template <typename... Ts> class BoundTypeDiagnoser : public TypeDiagnoser {
7867   protected:
7868     unsigned DiagID;
7869     std::tuple<const Ts &...> Args;
7870 
7871     template <std::size_t... Is>
7872     void emit(const SemaDiagnosticBuilder &DB,
7873               std::index_sequence<Is...>) const {
7874       // Apply all tuple elements to the builder in order.
7875       bool Dummy[] = {false, (DB << getPrintable(std::get<Is>(Args)))...};
7876       (void)Dummy;
7877     }
7878 
7879   public:
7880     BoundTypeDiagnoser(unsigned DiagID, const Ts &...Args)
7881         : TypeDiagnoser(), DiagID(DiagID), Args(Args...) {
7882       assert(DiagID != 0 && "no diagnostic for type diagnoser");
7883     }
7884 
7885     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
7886       const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID);
7887       emit(DB, std::index_sequence_for<Ts...>());
7888       DB << T;
7889     }
7890   };
7891 
7892   /// A derivative of BoundTypeDiagnoser for which the diagnostic's type
7893   /// parameter is preceded by a 0/1 enum that is 1 if the type is sizeless.
7894   /// For example, a diagnostic with no other parameters would generally have
7895   /// the form "...%select{incomplete|sizeless}0 type %1...".
7896   template <typename... Ts>
7897   class SizelessTypeDiagnoser : public BoundTypeDiagnoser<Ts...> {
7898   public:
7899     SizelessTypeDiagnoser(unsigned DiagID, const Ts &...Args)
7900         : BoundTypeDiagnoser<Ts...>(DiagID, Args...) {}
7901 
7902     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
7903       const SemaDiagnosticBuilder &DB = S.Diag(Loc, this->DiagID);
7904       this->emit(DB, std::index_sequence_for<Ts...>());
7905       DB << T->isSizelessType() << T;
7906     }
7907   };
7908 
7909   /// Check an argument list for placeholders that we won't try to
7910   /// handle later.
7911   bool CheckArgsForPlaceholders(MultiExprArg args);
7912 
7913   /// The C++ "std::source_location::__impl" struct, defined in
7914   /// \<source_location>.
7915   RecordDecl *StdSourceLocationImplDecl;
7916 
7917   /// A stack of expression evaluation contexts.
7918   SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts;
7919 
7920   // Set of failed immediate invocations to avoid double diagnosing.
7921   llvm::SmallPtrSet<ConstantExpr *, 4> FailedImmediateInvocations;
7922 
7923   /// List of SourceLocations where 'self' is implicitly retained inside a
7924   /// block.
7925   llvm::SmallVector<std::pair<SourceLocation, const BlockDecl *>, 1>
7926       ImplicitlyRetainedSelfLocs;
7927 
7928   /// Do an explicit extend of the given block pointer if we're in ARC.
7929   void maybeExtendBlockObject(ExprResult &E);
7930 
7931   std::vector<std::pair<QualType, unsigned>> ExcessPrecisionNotSatisfied;
7932   SourceLocation LocationOfExcessPrecisionNotSatisfied;
7933   void DiagnosePrecisionLossInComplexDivision();
7934 
7935 private:
7936   static BinaryOperatorKind ConvertTokenKindToBinaryOpcode(tok::TokenKind Kind);
7937 
7938   /// Methods for marking which expressions involve dereferencing a pointer
7939   /// marked with the 'noderef' attribute. Expressions are checked bottom up as
7940   /// they are parsed, meaning that a noderef pointer may not be accessed. For
7941   /// example, in `&*p` where `p` is a noderef pointer, we will first parse the
7942   /// `*p`, but need to check that `address of` is called on it. This requires
7943   /// keeping a container of all pending expressions and checking if the address
7944   /// of them are eventually taken.
7945   void CheckSubscriptAccessOfNoDeref(const ArraySubscriptExpr *E);
7946   void CheckAddressOfNoDeref(const Expr *E);
7947 
7948   ///@}
7949 
7950   //
7951   //
7952   // -------------------------------------------------------------------------
7953   //
7954   //
7955 
7956   /// \name C++ Expressions
7957   /// Implementations are in SemaExprCXX.cpp
7958   ///@{
7959 
7960 public:
7961   /// The C++ "std::bad_alloc" class, which is defined by the C++
7962   /// standard library.
7963   LazyDeclPtr StdBadAlloc;
7964 
7965   /// The C++ "std::align_val_t" enum class, which is defined by the C++
7966   /// standard library.
7967   LazyDeclPtr StdAlignValT;
7968 
7969   /// The C++ "type_info" declaration, which is defined in \<typeinfo>.
7970   RecordDecl *CXXTypeInfoDecl;
7971 
7972   /// A flag to remember whether the implicit forms of operator new and delete
7973   /// have been declared.
7974   bool GlobalNewDeleteDeclared;
7975 
7976   /// Delete-expressions to be analyzed at the end of translation unit
7977   ///
7978   /// This list contains class members, and locations of delete-expressions
7979   /// that could not be proven as to whether they mismatch with new-expression
7980   /// used in initializer of the field.
7981   llvm::MapVector<FieldDecl *, DeleteLocs> DeleteExprs;
7982 
7983   /// Handle the result of the special case name lookup for inheriting
7984   /// constructor declarations. 'NS::X::X' and 'NS::X<...>::X' are treated as
7985   /// constructor names in member using declarations, even if 'X' is not the
7986   /// name of the corresponding type.
7987   ParsedType getInheritingConstructorName(CXXScopeSpec &SS,
7988                                           SourceLocation NameLoc,
7989                                           const IdentifierInfo &Name);
7990 
7991   ParsedType getConstructorName(const IdentifierInfo &II,
7992                                 SourceLocation NameLoc, Scope *S,
7993                                 CXXScopeSpec &SS, bool EnteringContext);
7994   ParsedType getDestructorName(const IdentifierInfo &II, SourceLocation NameLoc,
7995                                Scope *S, CXXScopeSpec &SS,
7996                                ParsedType ObjectType, bool EnteringContext);
7997 
7998   ParsedType getDestructorTypeForDecltype(const DeclSpec &DS,
7999                                           ParsedType ObjectType);
8000 
8001   /// Build a C++ typeid expression with a type operand.
8002   ExprResult BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc,
8003                             TypeSourceInfo *Operand, SourceLocation RParenLoc);
8004 
8005   /// Build a C++ typeid expression with an expression operand.
8006   ExprResult BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc,
8007                             Expr *Operand, SourceLocation RParenLoc);
8008 
8009   /// ActOnCXXTypeid - Parse typeid( something ).
8010   ExprResult ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc,
8011                             bool isType, void *TyOrExpr,
8012                             SourceLocation RParenLoc);
8013 
8014   /// Build a Microsoft __uuidof expression with a type operand.
8015   ExprResult BuildCXXUuidof(QualType TypeInfoType, SourceLocation TypeidLoc,
8016                             TypeSourceInfo *Operand, SourceLocation RParenLoc);
8017 
8018   /// Build a Microsoft __uuidof expression with an expression operand.
8019   ExprResult BuildCXXUuidof(QualType TypeInfoType, SourceLocation TypeidLoc,
8020                             Expr *Operand, SourceLocation RParenLoc);
8021 
8022   /// ActOnCXXUuidof - Parse __uuidof( something ).
8023   ExprResult ActOnCXXUuidof(SourceLocation OpLoc, SourceLocation LParenLoc,
8024                             bool isType, void *TyOrExpr,
8025                             SourceLocation RParenLoc);
8026 
8027   //// ActOnCXXThis -  Parse 'this' pointer.
8028   ExprResult ActOnCXXThis(SourceLocation Loc);
8029 
8030   /// Check whether the type of 'this' is valid in the current context.
8031   bool CheckCXXThisType(SourceLocation Loc, QualType Type);
8032 
8033   /// Build a CXXThisExpr and mark it referenced in the current context.
8034   Expr *BuildCXXThisExpr(SourceLocation Loc, QualType Type, bool IsImplicit);
8035   void MarkThisReferenced(CXXThisExpr *This);
8036 
8037   /// Try to retrieve the type of the 'this' pointer.
8038   ///
8039   /// \returns The type of 'this', if possible. Otherwise, returns a NULL type.
8040   QualType getCurrentThisType();
8041 
8042   /// When non-NULL, the C++ 'this' expression is allowed despite the
8043   /// current context not being a non-static member function. In such cases,
8044   /// this provides the type used for 'this'.
8045   QualType CXXThisTypeOverride;
8046 
8047   /// RAII object used to temporarily allow the C++ 'this' expression
8048   /// to be used, with the given qualifiers on the current class type.
8049   class CXXThisScopeRAII {
8050     Sema &S;
8051     QualType OldCXXThisTypeOverride;
8052     bool Enabled;
8053 
8054   public:
8055     /// Introduce a new scope where 'this' may be allowed (when enabled),
8056     /// using the given declaration (which is either a class template or a
8057     /// class) along with the given qualifiers.
8058     /// along with the qualifiers placed on '*this'.
8059     CXXThisScopeRAII(Sema &S, Decl *ContextDecl, Qualifiers CXXThisTypeQuals,
8060                      bool Enabled = true);
8061 
8062     ~CXXThisScopeRAII();
8063   };
8064 
8065   /// Make sure the value of 'this' is actually available in the current
8066   /// context, if it is a potentially evaluated context.
8067   ///
8068   /// \param Loc The location at which the capture of 'this' occurs.
8069   ///
8070   /// \param Explicit Whether 'this' is explicitly captured in a lambda
8071   /// capture list.
8072   ///
8073   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
8074   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
8075   /// This is useful when enclosing lambdas must speculatively capture
8076   /// 'this' that may or may not be used in certain specializations of
8077   /// a nested generic lambda (depending on whether the name resolves to
8078   /// a non-static member function or a static function).
8079   /// \return returns 'true' if failed, 'false' if success.
8080   bool CheckCXXThisCapture(
8081       SourceLocation Loc, bool Explicit = false, bool BuildAndDiagnose = true,
8082       const unsigned *const FunctionScopeIndexToStopAt = nullptr,
8083       bool ByCopy = false);
8084 
8085   /// Determine whether the given type is the type of *this that is used
8086   /// outside of the body of a member function for a type that is currently
8087   /// being defined.
8088   bool isThisOutsideMemberFunctionBody(QualType BaseType);
8089 
8090   /// ActOnCXXBoolLiteral - Parse {true,false} literals.
8091   ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
8092 
8093   /// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
8094   ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc);
8095 
8096   //// ActOnCXXThrow -  Parse throw expressions.
8097   ExprResult ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *expr);
8098   ExprResult BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
8099                            bool IsThrownVarInScope);
8100 
8101   /// CheckCXXThrowOperand - Validate the operand of a throw.
8102   bool CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ThrowTy, Expr *E);
8103 
8104   /// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
8105   /// Can be interpreted either as function-style casting ("int(x)")
8106   /// or class type construction ("ClassType(x,y,z)")
8107   /// or creation of a value-initialized type ("int()").
8108   ExprResult ActOnCXXTypeConstructExpr(ParsedType TypeRep,
8109                                        SourceLocation LParenOrBraceLoc,
8110                                        MultiExprArg Exprs,
8111                                        SourceLocation RParenOrBraceLoc,
8112                                        bool ListInitialization);
8113 
8114   ExprResult BuildCXXTypeConstructExpr(TypeSourceInfo *Type,
8115                                        SourceLocation LParenLoc,
8116                                        MultiExprArg Exprs,
8117                                        SourceLocation RParenLoc,
8118                                        bool ListInitialization);
8119 
8120   /// Parsed a C++ 'new' expression (C++ 5.3.4).
8121   ///
8122   /// E.g.:
8123   /// @code new (memory) int[size][4] @endcode
8124   /// or
8125   /// @code ::new Foo(23, "hello") @endcode
8126   ///
8127   /// \param StartLoc The first location of the expression.
8128   /// \param UseGlobal True if 'new' was prefixed with '::'.
8129   /// \param PlacementLParen Opening paren of the placement arguments.
8130   /// \param PlacementArgs Placement new arguments.
8131   /// \param PlacementRParen Closing paren of the placement arguments.
8132   /// \param TypeIdParens If the type is in parens, the source range.
8133   /// \param D The type to be allocated, as well as array dimensions.
8134   /// \param Initializer The initializing expression or initializer-list, or
8135   ///   null if there is none.
8136   ExprResult ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
8137                          SourceLocation PlacementLParen,
8138                          MultiExprArg PlacementArgs,
8139                          SourceLocation PlacementRParen,
8140                          SourceRange TypeIdParens, Declarator &D,
8141                          Expr *Initializer);
8142   ExprResult
8143   BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen,
8144               MultiExprArg PlacementArgs, SourceLocation PlacementRParen,
8145               SourceRange TypeIdParens, QualType AllocType,
8146               TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize,
8147               SourceRange DirectInitRange, Expr *Initializer);
8148 
8149   /// Determine whether \p FD is an aligned allocation or deallocation
8150   /// function that is unavailable.
8151   bool isUnavailableAlignedAllocationFunction(const FunctionDecl &FD) const;
8152 
8153   /// Produce diagnostics if \p FD is an aligned allocation or deallocation
8154   /// function that is unavailable.
8155   void diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD,
8156                                             SourceLocation Loc);
8157 
8158   /// Checks that a type is suitable as the allocated type
8159   /// in a new-expression.
8160   bool CheckAllocatedType(QualType AllocType, SourceLocation Loc,
8161                           SourceRange R);
8162 
8163   /// The scope in which to find allocation functions.
8164   enum AllocationFunctionScope {
8165     /// Only look for allocation functions in the global scope.
8166     AFS_Global,
8167     /// Only look for allocation functions in the scope of the
8168     /// allocated class.
8169     AFS_Class,
8170     /// Look for allocation functions in both the global scope
8171     /// and in the scope of the allocated class.
8172     AFS_Both
8173   };
8174 
8175   /// Finds the overloads of operator new and delete that are appropriate
8176   /// for the allocation.
8177   bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
8178                                AllocationFunctionScope NewScope,
8179                                AllocationFunctionScope DeleteScope,
8180                                QualType AllocType, bool IsArray,
8181                                bool &PassAlignment, MultiExprArg PlaceArgs,
8182                                FunctionDecl *&OperatorNew,
8183                                FunctionDecl *&OperatorDelete,
8184                                bool Diagnose = true);
8185 
8186   /// DeclareGlobalNewDelete - Declare the global forms of operator new and
8187   /// delete. These are:
8188   /// @code
8189   ///   // C++03:
8190   ///   void* operator new(std::size_t) throw(std::bad_alloc);
8191   ///   void* operator new[](std::size_t) throw(std::bad_alloc);
8192   ///   void operator delete(void *) throw();
8193   ///   void operator delete[](void *) throw();
8194   ///   // C++11:
8195   ///   void* operator new(std::size_t);
8196   ///   void* operator new[](std::size_t);
8197   ///   void operator delete(void *) noexcept;
8198   ///   void operator delete[](void *) noexcept;
8199   ///   // C++1y:
8200   ///   void* operator new(std::size_t);
8201   ///   void* operator new[](std::size_t);
8202   ///   void operator delete(void *) noexcept;
8203   ///   void operator delete[](void *) noexcept;
8204   ///   void operator delete(void *, std::size_t) noexcept;
8205   ///   void operator delete[](void *, std::size_t) noexcept;
8206   /// @endcode
8207   /// Note that the placement and nothrow forms of new are *not* implicitly
8208   /// declared. Their use requires including \<new\>.
8209   void DeclareGlobalNewDelete();
8210   void DeclareGlobalAllocationFunction(DeclarationName Name, QualType Return,
8211                                        ArrayRef<QualType> Params);
8212 
8213   bool FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
8214                                 DeclarationName Name, FunctionDecl *&Operator,
8215                                 bool Diagnose = true, bool WantSize = false,
8216                                 bool WantAligned = false);
8217   FunctionDecl *FindUsualDeallocationFunction(SourceLocation StartLoc,
8218                                               bool CanProvideSize,
8219                                               bool Overaligned,
8220                                               DeclarationName Name);
8221   FunctionDecl *FindDeallocationFunctionForDestructor(SourceLocation StartLoc,
8222                                                       CXXRecordDecl *RD);
8223 
8224   /// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in:
8225   /// @code ::delete ptr; @endcode
8226   /// or
8227   /// @code delete [] ptr; @endcode
8228   ExprResult ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal,
8229                             bool ArrayForm, Expr *Operand);
8230   void CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc,
8231                             bool IsDelete, bool CallCanBeVirtual,
8232                             bool WarnOnNonAbstractTypes,
8233                             SourceLocation DtorLoc);
8234 
8235   ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen,
8236                                Expr *Operand, SourceLocation RParen);
8237   ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
8238                                   SourceLocation RParen);
8239 
8240   ExprResult ActOnStartCXXMemberReference(Scope *S, Expr *Base,
8241                                           SourceLocation OpLoc,
8242                                           tok::TokenKind OpKind,
8243                                           ParsedType &ObjectType,
8244                                           bool &MayBePseudoDestructor);
8245 
8246   ExprResult BuildPseudoDestructorExpr(
8247       Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind,
8248       const CXXScopeSpec &SS, TypeSourceInfo *ScopeType, SourceLocation CCLoc,
8249       SourceLocation TildeLoc, PseudoDestructorTypeStorage DestroyedType);
8250 
8251   ExprResult ActOnPseudoDestructorExpr(
8252       Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind,
8253       CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc,
8254       SourceLocation TildeLoc, UnqualifiedId &SecondTypeName);
8255 
8256   ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
8257                                        SourceLocation OpLoc,
8258                                        tok::TokenKind OpKind,
8259                                        SourceLocation TildeLoc,
8260                                        const DeclSpec &DS);
8261 
8262   /// MaybeCreateExprWithCleanups - If the current full-expression
8263   /// requires any cleanups, surround it with a ExprWithCleanups node.
8264   /// Otherwise, just returns the passed-in expression.
8265   Expr *MaybeCreateExprWithCleanups(Expr *SubExpr);
8266   Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt);
8267   ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr);
8268 
8269   ExprResult ActOnFinishFullExpr(Expr *Expr, bool DiscardedValue) {
8270     return ActOnFinishFullExpr(
8271         Expr, Expr ? Expr->getExprLoc() : SourceLocation(), DiscardedValue);
8272   }
8273   ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC,
8274                                  bool DiscardedValue, bool IsConstexpr = false,
8275                                  bool IsTemplateArgument = false);
8276   StmtResult ActOnFinishFullStmt(Stmt *Stmt);
8277 
8278   /// Process the expression contained within a decltype. For such expressions,
8279   /// certain semantic checks on temporaries are delayed until this point, and
8280   /// are omitted for the 'topmost' call in the decltype expression. If the
8281   /// topmost call bound a temporary, strip that temporary off the expression.
8282   ExprResult ActOnDecltypeExpression(Expr *E);
8283 
8284   bool checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Id,
8285                               bool IsUDSuffix);
8286 
8287   bool isUsualDeallocationFunction(const CXXMethodDecl *FD);
8288 
8289   ConditionResult ActOnConditionVariable(Decl *ConditionVar,
8290                                          SourceLocation StmtLoc,
8291                                          ConditionKind CK);
8292 
8293   /// Check the use of the given variable as a C++ condition in an if,
8294   /// while, do-while, or switch statement.
8295   ExprResult CheckConditionVariable(VarDecl *ConditionVar,
8296                                     SourceLocation StmtLoc, ConditionKind CK);
8297 
8298   /// CheckCXXBooleanCondition - Returns true if conversion to bool is invalid.
8299   ExprResult CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr = false);
8300 
8301   /// Helper function to determine whether this is the (deprecated) C++
8302   /// conversion from a string literal to a pointer to non-const char or
8303   /// non-const wchar_t (for narrow and wide string literals,
8304   /// respectively).
8305   bool IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType);
8306 
8307   /// PerformImplicitConversion - Perform an implicit conversion of the
8308   /// expression From to the type ToType using the pre-computed implicit
8309   /// conversion sequence ICS. Returns the converted
8310   /// expression. Action is the kind of conversion we're performing,
8311   /// used in the error message.
8312   ExprResult PerformImplicitConversion(
8313       Expr *From, QualType ToType, const ImplicitConversionSequence &ICS,
8314       AssignmentAction Action,
8315       CheckedConversionKind CCK = CheckedConversionKind::Implicit);
8316 
8317   /// PerformImplicitConversion - Perform an implicit conversion of the
8318   /// expression From to the type ToType by following the standard
8319   /// conversion sequence SCS. Returns the converted
8320   /// expression. Flavor is the context in which we're performing this
8321   /// conversion, for use in error messages.
8322   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
8323                                        const StandardConversionSequence &SCS,
8324                                        AssignmentAction Action,
8325                                        CheckedConversionKind CCK);
8326 
8327   bool CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N);
8328 
8329   /// Parsed one of the type trait support pseudo-functions.
8330   ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
8331                             ArrayRef<ParsedType> Args,
8332                             SourceLocation RParenLoc);
8333   ExprResult BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
8334                             ArrayRef<TypeSourceInfo *> Args,
8335                             SourceLocation RParenLoc);
8336 
8337   /// ActOnArrayTypeTrait - Parsed one of the binary type trait support
8338   /// pseudo-functions.
8339   ExprResult ActOnArrayTypeTrait(ArrayTypeTrait ATT, SourceLocation KWLoc,
8340                                  ParsedType LhsTy, Expr *DimExpr,
8341                                  SourceLocation RParen);
8342 
8343   ExprResult BuildArrayTypeTrait(ArrayTypeTrait ATT, SourceLocation KWLoc,
8344                                  TypeSourceInfo *TSInfo, Expr *DimExpr,
8345                                  SourceLocation RParen);
8346 
8347   /// ActOnExpressionTrait - Parsed one of the unary type trait support
8348   /// pseudo-functions.
8349   ExprResult ActOnExpressionTrait(ExpressionTrait OET, SourceLocation KWLoc,
8350                                   Expr *Queried, SourceLocation RParen);
8351 
8352   ExprResult BuildExpressionTrait(ExpressionTrait OET, SourceLocation KWLoc,
8353                                   Expr *Queried, SourceLocation RParen);
8354 
8355   QualType CheckPointerToMemberOperands( // C++ 5.5
8356       ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation OpLoc,
8357       bool isIndirect);
8358   QualType CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS,
8359                                        ExprResult &RHS,
8360                                        SourceLocation QuestionLoc);
8361 
8362   QualType CheckSizelessVectorConditionalTypes(ExprResult &Cond,
8363                                                ExprResult &LHS, ExprResult &RHS,
8364                                                SourceLocation QuestionLoc);
8365 
8366   /// Check the operands of ?: under C++ semantics.
8367   ///
8368   /// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y
8369   /// extension. In this case, LHS == Cond. (But they're not aliases.)
8370   ///
8371   /// This function also implements GCC's vector extension and the
8372   /// OpenCL/ext_vector_type extension for conditionals. The vector extensions
8373   /// permit the use of a?b:c where the type of a is that of a integer vector
8374   /// with the same number of elements and size as the vectors of b and c. If
8375   /// one of either b or c is a scalar it is implicitly converted to match the
8376   /// type of the vector. Otherwise the expression is ill-formed. If both b and
8377   /// c are scalars, then b and c are checked and converted to the type of a if
8378   /// possible.
8379   ///
8380   /// The expressions are evaluated differently for GCC's and OpenCL's
8381   /// extensions. For the GCC extension, the ?: operator is evaluated as
8382   ///   (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).
8383   /// For the OpenCL extensions, the ?: operator is evaluated as
8384   ///   (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,
8385   ///    most-significant-bit-set(a[n]) ? b[n] : c[n]).
8386   QualType CXXCheckConditionalOperands( // C++ 5.16
8387       ExprResult &cond, ExprResult &lhs, ExprResult &rhs, ExprValueKind &VK,
8388       ExprObjectKind &OK, SourceLocation questionLoc);
8389 
8390   /// Find a merged pointer type and convert the two expressions to it.
8391   ///
8392   /// This finds the composite pointer type for \p E1 and \p E2 according to
8393   /// C++2a [expr.type]p3. It converts both expressions to this type and returns
8394   /// it.  It does not emit diagnostics (FIXME: that's not true if \p
8395   /// ConvertArgs is \c true).
8396   ///
8397   /// \param Loc The location of the operator requiring these two expressions to
8398   /// be converted to the composite pointer type.
8399   ///
8400   /// \param ConvertArgs If \c false, do not convert E1 and E2 to the target
8401   /// type.
8402   QualType FindCompositePointerType(SourceLocation Loc, Expr *&E1, Expr *&E2,
8403                                     bool ConvertArgs = true);
8404   QualType FindCompositePointerType(SourceLocation Loc, ExprResult &E1,
8405                                     ExprResult &E2, bool ConvertArgs = true) {
8406     Expr *E1Tmp = E1.get(), *E2Tmp = E2.get();
8407     QualType Composite =
8408         FindCompositePointerType(Loc, E1Tmp, E2Tmp, ConvertArgs);
8409     E1 = E1Tmp;
8410     E2 = E2Tmp;
8411     return Composite;
8412   }
8413 
8414   /// MaybeBindToTemporary - If the passed in expression has a record type with
8415   /// a non-trivial destructor, this will return CXXBindTemporaryExpr. Otherwise
8416   /// it simply returns the passed in expression.
8417   ExprResult MaybeBindToTemporary(Expr *E);
8418 
8419   /// IgnoredValueConversions - Given that an expression's result is
8420   /// syntactically ignored, perform any conversions that are
8421   /// required.
8422   ExprResult IgnoredValueConversions(Expr *E);
8423 
8424   ExprResult CheckUnevaluatedOperand(Expr *E);
8425 
8426   /// Process any TypoExprs in the given Expr and its children,
8427   /// generating diagnostics as appropriate and returning a new Expr if there
8428   /// were typos that were all successfully corrected and ExprError if one or
8429   /// more typos could not be corrected.
8430   ///
8431   /// \param E The Expr to check for TypoExprs.
8432   ///
8433   /// \param InitDecl A VarDecl to avoid because the Expr being corrected is its
8434   /// initializer.
8435   ///
8436   /// \param RecoverUncorrectedTypos If true, when typo correction fails, it
8437   /// will rebuild the given Expr with all TypoExprs degraded to RecoveryExprs.
8438   ///
8439   /// \param Filter A function applied to a newly rebuilt Expr to determine if
8440   /// it is an acceptable/usable result from a single combination of typo
8441   /// corrections. As long as the filter returns ExprError, different
8442   /// combinations of corrections will be tried until all are exhausted.
8443   ExprResult CorrectDelayedTyposInExpr(
8444       Expr *E, VarDecl *InitDecl = nullptr,
8445       bool RecoverUncorrectedTypos = false,
8446       llvm::function_ref<ExprResult(Expr *)> Filter =
8447           [](Expr *E) -> ExprResult { return E; });
8448 
8449   ExprResult CorrectDelayedTyposInExpr(
8450       ExprResult ER, VarDecl *InitDecl = nullptr,
8451       bool RecoverUncorrectedTypos = false,
8452       llvm::function_ref<ExprResult(Expr *)> Filter =
8453           [](Expr *E) -> ExprResult { return E; }) {
8454     return ER.isInvalid()
8455                ? ER
8456                : CorrectDelayedTyposInExpr(ER.get(), InitDecl,
8457                                            RecoverUncorrectedTypos, Filter);
8458   }
8459 
8460   /// Describes the result of an "if-exists" condition check.
8461   enum IfExistsResult {
8462     /// The symbol exists.
8463     IER_Exists,
8464 
8465     /// The symbol does not exist.
8466     IER_DoesNotExist,
8467 
8468     /// The name is a dependent name, so the results will differ
8469     /// from one instantiation to the next.
8470     IER_Dependent,
8471 
8472     /// An error occurred.
8473     IER_Error
8474   };
8475 
8476   IfExistsResult
8477   CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS,
8478                                const DeclarationNameInfo &TargetNameInfo);
8479 
8480   IfExistsResult CheckMicrosoftIfExistsSymbol(Scope *S,
8481                                               SourceLocation KeywordLoc,
8482                                               bool IsIfExists, CXXScopeSpec &SS,
8483                                               UnqualifiedId &Name);
8484 
8485   RequiresExprBodyDecl *
8486   ActOnStartRequiresExpr(SourceLocation RequiresKWLoc,
8487                          ArrayRef<ParmVarDecl *> LocalParameters,
8488                          Scope *BodyScope);
8489   void ActOnFinishRequiresExpr();
8490   concepts::Requirement *ActOnSimpleRequirement(Expr *E);
8491   concepts::Requirement *ActOnTypeRequirement(SourceLocation TypenameKWLoc,
8492                                               CXXScopeSpec &SS,
8493                                               SourceLocation NameLoc,
8494                                               const IdentifierInfo *TypeName,
8495                                               TemplateIdAnnotation *TemplateId);
8496   concepts::Requirement *ActOnCompoundRequirement(Expr *E,
8497                                                   SourceLocation NoexceptLoc);
8498   concepts::Requirement *ActOnCompoundRequirement(
8499       Expr *E, SourceLocation NoexceptLoc, CXXScopeSpec &SS,
8500       TemplateIdAnnotation *TypeConstraint, unsigned Depth);
8501   concepts::Requirement *ActOnNestedRequirement(Expr *Constraint);
8502   concepts::ExprRequirement *BuildExprRequirement(
8503       Expr *E, bool IsSatisfied, SourceLocation NoexceptLoc,
8504       concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement);
8505   concepts::ExprRequirement *BuildExprRequirement(
8506       concepts::Requirement::SubstitutionDiagnostic *ExprSubstDiag,
8507       bool IsSatisfied, SourceLocation NoexceptLoc,
8508       concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement);
8509   concepts::TypeRequirement *BuildTypeRequirement(TypeSourceInfo *Type);
8510   concepts::TypeRequirement *BuildTypeRequirement(
8511       concepts::Requirement::SubstitutionDiagnostic *SubstDiag);
8512   concepts::NestedRequirement *BuildNestedRequirement(Expr *E);
8513   concepts::NestedRequirement *
8514   BuildNestedRequirement(StringRef InvalidConstraintEntity,
8515                          const ASTConstraintSatisfaction &Satisfaction);
8516   ExprResult ActOnRequiresExpr(SourceLocation RequiresKWLoc,
8517                                RequiresExprBodyDecl *Body,
8518                                SourceLocation LParenLoc,
8519                                ArrayRef<ParmVarDecl *> LocalParameters,
8520                                SourceLocation RParenLoc,
8521                                ArrayRef<concepts::Requirement *> Requirements,
8522                                SourceLocation ClosingBraceLoc);
8523 
8524 private:
8525   ExprResult BuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult,
8526                                                 bool IsDelete);
8527 
8528   void AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE);
8529   void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc,
8530                                  bool DeleteWasArrayForm);
8531 
8532   ///@}
8533 
8534   //
8535   //
8536   // -------------------------------------------------------------------------
8537   //
8538   //
8539 
8540   /// \name Member Access Expressions
8541   /// Implementations are in SemaExprMember.cpp
8542   ///@{
8543 
8544 public:
8545   /// Check whether an expression might be an implicit class member access.
8546   bool isPotentialImplicitMemberAccess(const CXXScopeSpec &SS, LookupResult &R,
8547                                        bool IsAddressOfOperand);
8548 
8549   /// Builds an expression which might be an implicit member expression.
8550   ExprResult BuildPossibleImplicitMemberExpr(
8551       const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R,
8552       const TemplateArgumentListInfo *TemplateArgs, const Scope *S);
8553 
8554   /// Builds an implicit member access expression.  The current context
8555   /// is known to be an instance method, and the given unqualified lookup
8556   /// set is known to contain only instance members, at least one of which
8557   /// is from an appropriate type.
8558   ExprResult
8559   BuildImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
8560                           LookupResult &R,
8561                           const TemplateArgumentListInfo *TemplateArgs,
8562                           bool IsDefiniteInstance, const Scope *S);
8563 
8564   ExprResult ActOnDependentMemberExpr(
8565       Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OpLoc,
8566       const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
8567       NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo,
8568       const TemplateArgumentListInfo *TemplateArgs);
8569 
8570   /// The main callback when the parser finds something like
8571   ///   expression . [nested-name-specifier] identifier
8572   ///   expression -> [nested-name-specifier] identifier
8573   /// where 'identifier' encompasses a fairly broad spectrum of
8574   /// possibilities, including destructor and operator references.
8575   ///
8576   /// \param OpKind either tok::arrow or tok::period
8577   /// \param ObjCImpDecl the current Objective-C \@implementation
8578   ///   decl; this is an ugly hack around the fact that Objective-C
8579   ///   \@implementations aren't properly put in the context chain
8580   ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
8581                                    tok::TokenKind OpKind, CXXScopeSpec &SS,
8582                                    SourceLocation TemplateKWLoc,
8583                                    UnqualifiedId &Member, Decl *ObjCImpDecl);
8584 
8585   MemberExpr *
8586   BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
8587                   NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
8588                   ValueDecl *Member, DeclAccessPair FoundDecl,
8589                   bool HadMultipleCandidates,
8590                   const DeclarationNameInfo &MemberNameInfo, QualType Ty,
8591                   ExprValueKind VK, ExprObjectKind OK,
8592                   const TemplateArgumentListInfo *TemplateArgs = nullptr);
8593 
8594   // Check whether the declarations we found through a nested-name
8595   // specifier in a member expression are actually members of the base
8596   // type.  The restriction here is:
8597   //
8598   //   C++ [expr.ref]p2:
8599   //     ... In these cases, the id-expression shall name a
8600   //     member of the class or of one of its base classes.
8601   //
8602   // So it's perfectly legitimate for the nested-name specifier to name
8603   // an unrelated class, and for us to find an overload set including
8604   // decls from classes which are not superclasses, as long as the decl
8605   // we actually pick through overload resolution is from a superclass.
8606   bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType,
8607                                      const CXXScopeSpec &SS,
8608                                      const LookupResult &R);
8609 
8610   // This struct is for use by ActOnMemberAccess to allow
8611   // BuildMemberReferenceExpr to be able to reinvoke ActOnMemberAccess after
8612   // changing the access operator from a '.' to a '->' (to see if that is the
8613   // change needed to fix an error about an unknown member, e.g. when the class
8614   // defines a custom operator->).
8615   struct ActOnMemberAccessExtraArgs {
8616     Scope *S;
8617     UnqualifiedId &Id;
8618     Decl *ObjCImpDecl;
8619   };
8620 
8621   ExprResult BuildMemberReferenceExpr(
8622       Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow,
8623       CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
8624       NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo,
8625       const TemplateArgumentListInfo *TemplateArgs, const Scope *S,
8626       ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
8627 
8628   ExprResult
8629   BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc,
8630                            bool IsArrow, const CXXScopeSpec &SS,
8631                            SourceLocation TemplateKWLoc,
8632                            NamedDecl *FirstQualifierInScope, LookupResult &R,
8633                            const TemplateArgumentListInfo *TemplateArgs,
8634                            const Scope *S, bool SuppressQualifierCheck = false,
8635                            ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
8636 
8637   ExprResult BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow,
8638                                      SourceLocation OpLoc,
8639                                      const CXXScopeSpec &SS, FieldDecl *Field,
8640                                      DeclAccessPair FoundDecl,
8641                                      const DeclarationNameInfo &MemberNameInfo);
8642 
8643   /// Perform conversions on the LHS of a member access expression.
8644   ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow);
8645 
8646   ExprResult BuildAnonymousStructUnionMemberReference(
8647       const CXXScopeSpec &SS, SourceLocation nameLoc,
8648       IndirectFieldDecl *indirectField,
8649       DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_none),
8650       Expr *baseObjectExpr = nullptr, SourceLocation opLoc = SourceLocation());
8651 
8652 private:
8653   void CheckMemberAccessOfNoDeref(const MemberExpr *E);
8654 
8655   ///@}
8656 
8657   //
8658   //
8659   // -------------------------------------------------------------------------
8660   //
8661   //
8662 
8663   /// \name Initializers
8664   /// Implementations are in SemaInit.cpp
8665   ///@{
8666 
8667 public:
8668   /// Stack of types that correspond to the parameter entities that are
8669   /// currently being copy-initialized. Can be empty.
8670   llvm::SmallVector<QualType, 4> CurrentParameterCopyTypes;
8671 
8672   llvm::DenseMap<unsigned, CXXDeductionGuideDecl *>
8673       AggregateDeductionCandidates;
8674 
8675   bool IsStringInit(Expr *Init, const ArrayType *AT);
8676 
8677   /// Determine whether we can perform aggregate initialization for the purposes
8678   /// of overload resolution.
8679   bool CanPerformAggregateInitializationForOverloadResolution(
8680       const InitializedEntity &Entity, InitListExpr *From);
8681 
8682   ExprResult ActOnDesignatedInitializer(Designation &Desig,
8683                                         SourceLocation EqualOrColonLoc,
8684                                         bool GNUSyntax, ExprResult Init);
8685 
8686   /// Check that the lifetime of the initializer (and its subobjects) is
8687   /// sufficient for initializing the entity, and perform lifetime extension
8688   /// (when permitted) if not.
8689   void checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init);
8690 
8691   MaterializeTemporaryExpr *
8692   CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary,
8693                                  bool BoundToLvalueReference);
8694 
8695   /// If \p E is a prvalue denoting an unmaterialized temporary, materialize
8696   /// it as an xvalue. In C++98, the result will still be a prvalue, because
8697   /// we don't have xvalues there.
8698   ExprResult TemporaryMaterializationConversion(Expr *E);
8699 
8700   ExprResult PerformQualificationConversion(
8701       Expr *E, QualType Ty, ExprValueKind VK = VK_PRValue,
8702       CheckedConversionKind CCK = CheckedConversionKind::Implicit);
8703 
8704   bool CanPerformCopyInitialization(const InitializedEntity &Entity,
8705                                     ExprResult Init);
8706   ExprResult PerformCopyInitialization(const InitializedEntity &Entity,
8707                                        SourceLocation EqualLoc, ExprResult Init,
8708                                        bool TopLevelOfInitList = false,
8709                                        bool AllowExplicit = false);
8710 
8711   QualType DeduceTemplateSpecializationFromInitializer(
8712       TypeSourceInfo *TInfo, const InitializedEntity &Entity,
8713       const InitializationKind &Kind, MultiExprArg Init);
8714 
8715   ///@}
8716 
8717   //
8718   //
8719   // -------------------------------------------------------------------------
8720   //
8721   //
8722 
8723   /// \name C++ Lambda Expressions
8724   /// Implementations are in SemaLambda.cpp
8725   ///@{
8726 
8727 public:
8728   /// Create a new lambda closure type.
8729   CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange,
8730                                          TypeSourceInfo *Info,
8731                                          unsigned LambdaDependencyKind,
8732                                          LambdaCaptureDefault CaptureDefault);
8733 
8734   /// Number lambda for linkage purposes if necessary.
8735   void handleLambdaNumbering(CXXRecordDecl *Class, CXXMethodDecl *Method,
8736                              std::optional<CXXRecordDecl::LambdaNumbering>
8737                                  NumberingOverride = std::nullopt);
8738 
8739   /// Endow the lambda scope info with the relevant properties.
8740   void buildLambdaScope(sema::LambdaScopeInfo *LSI, CXXMethodDecl *CallOperator,
8741                         SourceRange IntroducerRange,
8742                         LambdaCaptureDefault CaptureDefault,
8743                         SourceLocation CaptureDefaultLoc, bool ExplicitParams,
8744                         bool Mutable);
8745 
8746   CXXMethodDecl *CreateLambdaCallOperator(SourceRange IntroducerRange,
8747                                           CXXRecordDecl *Class);
8748 
8749   void AddTemplateParametersToLambdaCallOperator(
8750       CXXMethodDecl *CallOperator, CXXRecordDecl *Class,
8751       TemplateParameterList *TemplateParams);
8752 
8753   void CompleteLambdaCallOperator(
8754       CXXMethodDecl *Method, SourceLocation LambdaLoc,
8755       SourceLocation CallOperatorLoc, Expr *TrailingRequiresClause,
8756       TypeSourceInfo *MethodTyInfo, ConstexprSpecKind ConstexprKind,
8757       StorageClass SC, ArrayRef<ParmVarDecl *> Params,
8758       bool HasExplicitResultType);
8759 
8760   /// Returns true if the explicit object parameter was invalid.
8761   bool DiagnoseInvalidExplicitObjectParameterInLambda(CXXMethodDecl *Method,
8762                                                       SourceLocation CallLoc);
8763 
8764   /// Perform initialization analysis of the init-capture and perform
8765   /// any implicit conversions such as an lvalue-to-rvalue conversion if
8766   /// not being used to initialize a reference.
8767   ParsedType actOnLambdaInitCaptureInitialization(
8768       SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
8769       IdentifierInfo *Id, LambdaCaptureInitKind InitKind, Expr *&Init) {
8770     return ParsedType::make(buildLambdaInitCaptureInitialization(
8771         Loc, ByRef, EllipsisLoc, std::nullopt, Id,
8772         InitKind != LambdaCaptureInitKind::CopyInit, Init));
8773   }
8774   QualType buildLambdaInitCaptureInitialization(
8775       SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
8776       std::optional<unsigned> NumExpansions, IdentifierInfo *Id,
8777       bool DirectInit, Expr *&Init);
8778 
8779   /// Create a dummy variable within the declcontext of the lambda's
8780   ///  call operator, for name lookup purposes for a lambda init capture.
8781   ///
8782   ///  CodeGen handles emission of lambda captures, ignoring these dummy
8783   ///  variables appropriately.
8784   VarDecl *createLambdaInitCaptureVarDecl(
8785       SourceLocation Loc, QualType InitCaptureType, SourceLocation EllipsisLoc,
8786       IdentifierInfo *Id, unsigned InitStyle, Expr *Init, DeclContext *DeclCtx);
8787 
8788   /// Add an init-capture to a lambda scope.
8789   void addInitCapture(sema::LambdaScopeInfo *LSI, VarDecl *Var, bool ByRef);
8790 
8791   /// Note that we have finished the explicit captures for the
8792   /// given lambda.
8793   void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI);
8794 
8795   /// Deduce a block or lambda's return type based on the return
8796   /// statements present in the body.
8797   void deduceClosureReturnType(sema::CapturingScopeInfo &CSI);
8798 
8799   /// Once the Lambdas capture are known, we can start to create the closure,
8800   /// call operator method, and keep track of the captures.
8801   /// We do the capture lookup here, but they are not actually captured until
8802   /// after we know what the qualifiers of the call operator are.
8803   void ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro,
8804                                             Scope *CurContext);
8805 
8806   /// This is called after parsing the explicit template parameter list
8807   /// on a lambda (if it exists) in C++2a.
8808   void ActOnLambdaExplicitTemplateParameterList(LambdaIntroducer &Intro,
8809                                                 SourceLocation LAngleLoc,
8810                                                 ArrayRef<NamedDecl *> TParams,
8811                                                 SourceLocation RAngleLoc,
8812                                                 ExprResult RequiresClause);
8813 
8814   void ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro,
8815                                     SourceLocation MutableLoc);
8816 
8817   void ActOnLambdaClosureParameters(
8818       Scope *LambdaScope,
8819       MutableArrayRef<DeclaratorChunk::ParamInfo> ParamInfo);
8820 
8821   /// ActOnStartOfLambdaDefinition - This is called just before we start
8822   /// parsing the body of a lambda; it analyzes the explicit captures and
8823   /// arguments, and sets up various data-structures for the body of the
8824   /// lambda.
8825   void ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
8826                                     Declarator &ParamInfo, const DeclSpec &DS);
8827 
8828   /// ActOnLambdaError - If there is an error parsing a lambda, this callback
8829   /// is invoked to pop the information about the lambda.
8830   void ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope,
8831                         bool IsInstantiation = false);
8832 
8833   /// ActOnLambdaExpr - This is called when the body of a lambda expression
8834   /// was successfully completed.
8835   ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body);
8836 
8837   /// Does copying/destroying the captured variable have side effects?
8838   bool CaptureHasSideEffects(const sema::Capture &From);
8839 
8840   /// Diagnose if an explicit lambda capture is unused. Returns true if a
8841   /// diagnostic is emitted.
8842   bool DiagnoseUnusedLambdaCapture(SourceRange CaptureRange,
8843                                    const sema::Capture &From);
8844 
8845   /// Build a FieldDecl suitable to hold the given capture.
8846   FieldDecl *BuildCaptureField(RecordDecl *RD, const sema::Capture &Capture);
8847 
8848   /// Initialize the given capture with a suitable expression.
8849   ExprResult BuildCaptureInit(const sema::Capture &Capture,
8850                               SourceLocation ImplicitCaptureLoc,
8851                               bool IsOpenMPMapping = false);
8852 
8853   /// Complete a lambda-expression having processed and attached the
8854   /// lambda body.
8855   ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
8856                              sema::LambdaScopeInfo *LSI);
8857 
8858   /// Get the return type to use for a lambda's conversion function(s) to
8859   /// function pointer type, given the type of the call operator.
8860   QualType
8861   getLambdaConversionFunctionResultType(const FunctionProtoType *CallOpType,
8862                                         CallingConv CC);
8863 
8864   ExprResult BuildBlockForLambdaConversion(SourceLocation CurrentLocation,
8865                                            SourceLocation ConvLocation,
8866                                            CXXConversionDecl *Conv, Expr *Src);
8867 
8868   class LambdaScopeForCallOperatorInstantiationRAII
8869       : private FunctionScopeRAII {
8870   public:
8871     LambdaScopeForCallOperatorInstantiationRAII(
8872         Sema &SemasRef, FunctionDecl *FD, MultiLevelTemplateArgumentList MLTAL,
8873         LocalInstantiationScope &Scope,
8874         bool ShouldAddDeclsFromParentScope = true);
8875   };
8876 
8877   /// Compute the mangling number context for a lambda expression or
8878   /// block literal. Also return the extra mangling decl if any.
8879   ///
8880   /// \param DC - The DeclContext containing the lambda expression or
8881   /// block literal.
8882   std::tuple<MangleNumberingContext *, Decl *>
8883   getCurrentMangleNumberContext(const DeclContext *DC);
8884 
8885   ///@}
8886 
8887   //
8888   //
8889   // -------------------------------------------------------------------------
8890   //
8891   //
8892 
8893   /// \name Name Lookup
8894   ///
8895   /// These routines provide name lookup that is used during semantic
8896   /// analysis to resolve the various kinds of names (identifiers,
8897   /// overloaded operator names, constructor names, etc.) into zero or
8898   /// more declarations within a particular scope. The major entry
8899   /// points are LookupName, which performs unqualified name lookup,
8900   /// and LookupQualifiedName, which performs qualified name lookup.
8901   ///
8902   /// All name lookup is performed based on some specific criteria,
8903   /// which specify what names will be visible to name lookup and how
8904   /// far name lookup should work. These criteria are important both
8905   /// for capturing language semantics (certain lookups will ignore
8906   /// certain names, for example) and for performance, since name
8907   /// lookup is often a bottleneck in the compilation of C++. Name
8908   /// lookup criteria is specified via the LookupCriteria enumeration.
8909   ///
8910   /// The results of name lookup can vary based on the kind of name
8911   /// lookup performed, the current language, and the translation
8912   /// unit. In C, for example, name lookup will either return nothing
8913   /// (no entity found) or a single declaration. In C++, name lookup
8914   /// can additionally refer to a set of overloaded functions or
8915   /// result in an ambiguity. All of the possible results of name
8916   /// lookup are captured by the LookupResult class, which provides
8917   /// the ability to distinguish among them.
8918   ///
8919   /// Implementations are in SemaLookup.cpp
8920   ///@{
8921 
8922 public:
8923   /// Tracks whether we are in a context where typo correction is
8924   /// disabled.
8925   bool DisableTypoCorrection;
8926 
8927   /// The number of typos corrected by CorrectTypo.
8928   unsigned TyposCorrected;
8929 
8930   typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet;
8931   typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations;
8932 
8933   /// A cache containing identifiers for which typo correction failed and
8934   /// their locations, so that repeated attempts to correct an identifier in a
8935   /// given location are ignored if typo correction already failed for it.
8936   IdentifierSourceLocations TypoCorrectionFailures;
8937 
8938   /// SpecialMemberOverloadResult - The overloading result for a special member
8939   /// function.
8940   ///
8941   /// This is basically a wrapper around PointerIntPair. The lowest bits of the
8942   /// integer are used to determine whether overload resolution succeeded.
8943   class SpecialMemberOverloadResult {
8944   public:
8945     enum Kind { NoMemberOrDeleted, Ambiguous, Success };
8946 
8947   private:
8948     llvm::PointerIntPair<CXXMethodDecl *, 2> Pair;
8949 
8950   public:
8951     SpecialMemberOverloadResult() {}
8952     SpecialMemberOverloadResult(CXXMethodDecl *MD)
8953         : Pair(MD, MD->isDeleted() ? NoMemberOrDeleted : Success) {}
8954 
8955     CXXMethodDecl *getMethod() const { return Pair.getPointer(); }
8956     void setMethod(CXXMethodDecl *MD) { Pair.setPointer(MD); }
8957 
8958     Kind getKind() const { return static_cast<Kind>(Pair.getInt()); }
8959     void setKind(Kind K) { Pair.setInt(K); }
8960   };
8961 
8962   class SpecialMemberOverloadResultEntry : public llvm::FastFoldingSetNode,
8963                                            public SpecialMemberOverloadResult {
8964   public:
8965     SpecialMemberOverloadResultEntry(const llvm::FoldingSetNodeID &ID)
8966         : FastFoldingSetNode(ID) {}
8967   };
8968 
8969   /// A cache of special member function overload resolution results
8970   /// for C++ records.
8971   llvm::FoldingSet<SpecialMemberOverloadResultEntry> SpecialMemberCache;
8972 
8973   /// Holds TypoExprs that are created from `createDelayedTypo`. This is used by
8974   /// `TransformTypos` in order to keep track of any TypoExprs that are created
8975   /// recursively during typo correction and wipe them away if the correction
8976   /// fails.
8977   llvm::SmallVector<TypoExpr *, 2> TypoExprs;
8978 
8979   enum class AcceptableKind { Visible, Reachable };
8980 
8981   // Members have to be NamespaceDecl* or TranslationUnitDecl*.
8982   // TODO: make this is a typesafe union.
8983   typedef llvm::SmallSetVector<DeclContext *, 16> AssociatedNamespaceSet;
8984   typedef llvm::SmallSetVector<CXXRecordDecl *, 16> AssociatedClassSet;
8985 
8986   /// Describes the kind of name lookup to perform.
8987   enum LookupNameKind {
8988     /// Ordinary name lookup, which finds ordinary names (functions,
8989     /// variables, typedefs, etc.) in C and most kinds of names
8990     /// (functions, variables, members, types, etc.) in C++.
8991     LookupOrdinaryName = 0,
8992     /// Tag name lookup, which finds the names of enums, classes,
8993     /// structs, and unions.
8994     LookupTagName,
8995     /// Label name lookup.
8996     LookupLabel,
8997     /// Member name lookup, which finds the names of
8998     /// class/struct/union members.
8999     LookupMemberName,
9000     /// Look up of an operator name (e.g., operator+) for use with
9001     /// operator overloading. This lookup is similar to ordinary name
9002     /// lookup, but will ignore any declarations that are class members.
9003     LookupOperatorName,
9004     /// Look up a name following ~ in a destructor name. This is an ordinary
9005     /// lookup, but prefers tags to typedefs.
9006     LookupDestructorName,
9007     /// Look up of a name that precedes the '::' scope resolution
9008     /// operator in C++. This lookup completely ignores operator, object,
9009     /// function, and enumerator names (C++ [basic.lookup.qual]p1).
9010     LookupNestedNameSpecifierName,
9011     /// Look up a namespace name within a C++ using directive or
9012     /// namespace alias definition, ignoring non-namespace names (C++
9013     /// [basic.lookup.udir]p1).
9014     LookupNamespaceName,
9015     /// Look up all declarations in a scope with the given name,
9016     /// including resolved using declarations.  This is appropriate
9017     /// for checking redeclarations for a using declaration.
9018     LookupUsingDeclName,
9019     /// Look up an ordinary name that is going to be redeclared as a
9020     /// name with linkage. This lookup ignores any declarations that
9021     /// are outside of the current scope unless they have linkage. See
9022     /// C99 6.2.2p4-5 and C++ [basic.link]p6.
9023     LookupRedeclarationWithLinkage,
9024     /// Look up a friend of a local class. This lookup does not look
9025     /// outside the innermost non-class scope. See C++11 [class.friend]p11.
9026     LookupLocalFriendName,
9027     /// Look up the name of an Objective-C protocol.
9028     LookupObjCProtocolName,
9029     /// Look up implicit 'self' parameter of an objective-c method.
9030     LookupObjCImplicitSelfParam,
9031     /// Look up the name of an OpenMP user-defined reduction operation.
9032     LookupOMPReductionName,
9033     /// Look up the name of an OpenMP user-defined mapper.
9034     LookupOMPMapperName,
9035     /// Look up any declaration with any name.
9036     LookupAnyName
9037   };
9038 
9039   /// The possible outcomes of name lookup for a literal operator.
9040   enum LiteralOperatorLookupResult {
9041     /// The lookup resulted in an error.
9042     LOLR_Error,
9043     /// The lookup found no match but no diagnostic was issued.
9044     LOLR_ErrorNoDiagnostic,
9045     /// The lookup found a single 'cooked' literal operator, which
9046     /// expects a normal literal to be built and passed to it.
9047     LOLR_Cooked,
9048     /// The lookup found a single 'raw' literal operator, which expects
9049     /// a string literal containing the spelling of the literal token.
9050     LOLR_Raw,
9051     /// The lookup found an overload set of literal operator templates,
9052     /// which expect the characters of the spelling of the literal token to be
9053     /// passed as a non-type template argument pack.
9054     LOLR_Template,
9055     /// The lookup found an overload set of literal operator templates,
9056     /// which expect the character type and characters of the spelling of the
9057     /// string literal token to be passed as template arguments.
9058     LOLR_StringTemplatePack,
9059   };
9060 
9061   SpecialMemberOverloadResult
9062   LookupSpecialMember(CXXRecordDecl *D, CXXSpecialMemberKind SM, bool ConstArg,
9063                       bool VolatileArg, bool RValueThis, bool ConstThis,
9064                       bool VolatileThis);
9065 
9066   typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator;
9067   typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)>
9068       TypoRecoveryCallback;
9069 
9070   RedeclarationKind forRedeclarationInCurContext() const;
9071 
9072   /// Look up a name, looking for a single declaration.  Return
9073   /// null if the results were absent, ambiguous, or overloaded.
9074   ///
9075   /// It is preferable to use the elaborated form and explicitly handle
9076   /// ambiguity and overloaded.
9077   NamedDecl *LookupSingleName(
9078       Scope *S, DeclarationName Name, SourceLocation Loc,
9079       LookupNameKind NameKind,
9080       RedeclarationKind Redecl = RedeclarationKind::NotForRedeclaration);
9081 
9082   /// Lookup a builtin function, when name lookup would otherwise
9083   /// fail.
9084   bool LookupBuiltin(LookupResult &R);
9085   void LookupNecessaryTypesForBuiltin(Scope *S, unsigned ID);
9086 
9087   /// Perform unqualified name lookup starting from a given
9088   /// scope.
9089   ///
9090   /// Unqualified name lookup (C++ [basic.lookup.unqual], C99 6.2.1) is
9091   /// used to find names within the current scope. For example, 'x' in
9092   /// @code
9093   /// int x;
9094   /// int f() {
9095   ///   return x; // unqualified name look finds 'x' in the global scope
9096   /// }
9097   /// @endcode
9098   ///
9099   /// Different lookup criteria can find different names. For example, a
9100   /// particular scope can have both a struct and a function of the same
9101   /// name, and each can be found by certain lookup criteria. For more
9102   /// information about lookup criteria, see the documentation for the
9103   /// class LookupCriteria.
9104   ///
9105   /// @param S        The scope from which unqualified name lookup will
9106   /// begin. If the lookup criteria permits, name lookup may also search
9107   /// in the parent scopes.
9108   ///
9109   /// @param [in,out] R Specifies the lookup to perform (e.g., the name to
9110   /// look up and the lookup kind), and is updated with the results of lookup
9111   /// including zero or more declarations and possibly additional information
9112   /// used to diagnose ambiguities.
9113   ///
9114   /// @returns \c true if lookup succeeded and false otherwise.
9115   bool LookupName(LookupResult &R, Scope *S, bool AllowBuiltinCreation = false,
9116                   bool ForceNoCPlusPlus = false);
9117 
9118   /// Perform qualified name lookup into a given context.
9119   ///
9120   /// Qualified name lookup (C++ [basic.lookup.qual]) is used to find
9121   /// names when the context of those names is explicit specified, e.g.,
9122   /// "std::vector" or "x->member", or as part of unqualified name lookup.
9123   ///
9124   /// Different lookup criteria can find different names. For example, a
9125   /// particular scope can have both a struct and a function of the same
9126   /// name, and each can be found by certain lookup criteria. For more
9127   /// information about lookup criteria, see the documentation for the
9128   /// class LookupCriteria.
9129   ///
9130   /// \param R captures both the lookup criteria and any lookup results found.
9131   ///
9132   /// \param LookupCtx The context in which qualified name lookup will
9133   /// search. If the lookup criteria permits, name lookup may also search
9134   /// in the parent contexts or (for C++ classes) base classes.
9135   ///
9136   /// \param InUnqualifiedLookup true if this is qualified name lookup that
9137   /// occurs as part of unqualified name lookup.
9138   ///
9139   /// \returns true if lookup succeeded, false if it failed.
9140   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
9141                            bool InUnqualifiedLookup = false);
9142 
9143   /// Performs qualified name lookup or special type of lookup for
9144   /// "__super::" scope specifier.
9145   ///
9146   /// This routine is a convenience overload meant to be called from contexts
9147   /// that need to perform a qualified name lookup with an optional C++ scope
9148   /// specifier that might require special kind of lookup.
9149   ///
9150   /// \param R captures both the lookup criteria and any lookup results found.
9151   ///
9152   /// \param LookupCtx The context in which qualified name lookup will
9153   /// search.
9154   ///
9155   /// \param SS An optional C++ scope-specifier.
9156   ///
9157   /// \returns true if lookup succeeded, false if it failed.
9158   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
9159                            CXXScopeSpec &SS);
9160 
9161   /// Performs name lookup for a name that was parsed in the
9162   /// source code, and may contain a C++ scope specifier.
9163   ///
9164   /// This routine is a convenience routine meant to be called from
9165   /// contexts that receive a name and an optional C++ scope specifier
9166   /// (e.g., "N::M::x"). It will then perform either qualified or
9167   /// unqualified name lookup (with LookupQualifiedName or LookupName,
9168   /// respectively) on the given name and return those results. It will
9169   /// perform a special type of lookup for "__super::" scope specifier.
9170   ///
9171   /// @param S        The scope from which unqualified name lookup will
9172   /// begin.
9173   ///
9174   /// @param SS       An optional C++ scope-specifier, e.g., "::N::M".
9175   ///
9176   /// @param EnteringContext Indicates whether we are going to enter the
9177   /// context of the scope-specifier SS (if present).
9178   ///
9179   /// @returns True if any decls were found (but possibly ambiguous)
9180   bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS,
9181                         QualType ObjectType, bool AllowBuiltinCreation = false,
9182                         bool EnteringContext = false);
9183 
9184   /// Perform qualified name lookup into all base classes of the given
9185   /// class.
9186   ///
9187   /// \param R captures both the lookup criteria and any lookup results found.
9188   ///
9189   /// \param Class The context in which qualified name lookup will
9190   /// search. Name lookup will search in all base classes merging the results.
9191   ///
9192   /// @returns True if any decls were found (but possibly ambiguous)
9193   bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class);
9194 
9195   void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,
9196                                     UnresolvedSetImpl &Functions);
9197 
9198   /// LookupOrCreateLabel - Do a name lookup of a label with the specified name.
9199   /// If GnuLabelLoc is a valid source location, then this is a definition
9200   /// of an __label__ label name, otherwise it is a normal label definition
9201   /// or use.
9202   LabelDecl *LookupOrCreateLabel(IdentifierInfo *II, SourceLocation IdentLoc,
9203                                  SourceLocation GnuLabelLoc = SourceLocation());
9204 
9205   /// Look up the constructors for the given class.
9206   DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class);
9207 
9208   /// Look up the default constructor for the given class.
9209   CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class);
9210 
9211   /// Look up the copying constructor for the given class.
9212   CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class,
9213                                                unsigned Quals);
9214 
9215   /// Look up the copying assignment operator for the given class.
9216   CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals,
9217                                          bool RValueThis, unsigned ThisQuals);
9218 
9219   /// Look up the moving constructor for the given class.
9220   CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class,
9221                                               unsigned Quals);
9222 
9223   /// Look up the moving assignment operator for the given class.
9224   CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, unsigned Quals,
9225                                         bool RValueThis, unsigned ThisQuals);
9226 
9227   /// Look for the destructor of the given class.
9228   ///
9229   /// During semantic analysis, this routine should be used in lieu of
9230   /// CXXRecordDecl::getDestructor().
9231   ///
9232   /// \returns The destructor for this class.
9233   CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class);
9234 
9235   /// Force the declaration of any implicitly-declared members of this
9236   /// class.
9237   void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class);
9238 
9239   /// Make a merged definition of an existing hidden definition \p ND
9240   /// visible at the specified location.
9241   void makeMergedDefinitionVisible(NamedDecl *ND);
9242 
9243   /// Check ODR hashes for C/ObjC when merging types from modules.
9244   /// Differently from C++, actually parse the body and reject in case
9245   /// of a mismatch.
9246   template <typename T,
9247             typename = std::enable_if_t<std::is_base_of<NamedDecl, T>::value>>
9248   bool ActOnDuplicateODRHashDefinition(T *Duplicate, T *Previous) {
9249     if (Duplicate->getODRHash() != Previous->getODRHash())
9250       return false;
9251 
9252     // Make the previous decl visible.
9253     makeMergedDefinitionVisible(Previous);
9254     return true;
9255   }
9256 
9257   /// Get the set of additional modules that should be checked during
9258   /// name lookup. A module and its imports become visible when instanting a
9259   /// template defined within it.
9260   llvm::DenseSet<Module *> &getLookupModules();
9261 
9262   bool hasVisibleMergedDefinition(const NamedDecl *Def);
9263   bool hasMergedDefinitionInCurrentModule(const NamedDecl *Def);
9264 
9265   /// Determine if the template parameter \p D has a visible default argument.
9266   bool
9267   hasVisibleDefaultArgument(const NamedDecl *D,
9268                             llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9269   /// Determine if the template parameter \p D has a reachable default argument.
9270   bool hasReachableDefaultArgument(
9271       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9272   /// Determine if the template parameter \p D has a reachable default argument.
9273   bool hasAcceptableDefaultArgument(const NamedDecl *D,
9274                                     llvm::SmallVectorImpl<Module *> *Modules,
9275                                     Sema::AcceptableKind Kind);
9276 
9277   /// Determine if there is a visible declaration of \p D that is an explicit
9278   /// specialization declaration for a specialization of a template. (For a
9279   /// member specialization, use hasVisibleMemberSpecialization.)
9280   bool hasVisibleExplicitSpecialization(
9281       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9282   /// Determine if there is a reachable declaration of \p D that is an explicit
9283   /// specialization declaration for a specialization of a template. (For a
9284   /// member specialization, use hasReachableMemberSpecialization.)
9285   bool hasReachableExplicitSpecialization(
9286       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9287 
9288   /// Determine if there is a visible declaration of \p D that is a member
9289   /// specialization declaration (as opposed to an instantiated declaration).
9290   bool hasVisibleMemberSpecialization(
9291       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9292   /// Determine if there is a reachable declaration of \p D that is a member
9293   /// specialization declaration (as opposed to an instantiated declaration).
9294   bool hasReachableMemberSpecialization(
9295       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9296 
9297   bool isModuleVisible(const Module *M, bool ModulePrivate = false);
9298 
9299   /// Determine whether any declaration of an entity is visible.
9300   bool
9301   hasVisibleDeclaration(const NamedDecl *D,
9302                         llvm::SmallVectorImpl<Module *> *Modules = nullptr) {
9303     return isVisible(D) || hasVisibleDeclarationSlow(D, Modules);
9304   }
9305 
9306   bool hasVisibleDeclarationSlow(const NamedDecl *D,
9307                                  llvm::SmallVectorImpl<Module *> *Modules);
9308   /// Determine whether any declaration of an entity is reachable.
9309   bool
9310   hasReachableDeclaration(const NamedDecl *D,
9311                           llvm::SmallVectorImpl<Module *> *Modules = nullptr) {
9312     return isReachable(D) || hasReachableDeclarationSlow(D, Modules);
9313   }
9314   bool hasReachableDeclarationSlow(
9315       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9316 
9317   void diagnoseTypo(const TypoCorrection &Correction,
9318                     const PartialDiagnostic &TypoDiag,
9319                     bool ErrorRecovery = true);
9320 
9321   /// Diagnose a successfully-corrected typo. Separated from the correction
9322   /// itself to allow external validation of the result, etc.
9323   ///
9324   /// \param Correction The result of performing typo correction.
9325   /// \param TypoDiag The diagnostic to produce. This will have the corrected
9326   ///        string added to it (and usually also a fixit).
9327   /// \param PrevNote A note to use when indicating the location of the entity
9328   ///        to which we are correcting. Will have the correction string added
9329   ///        to it.
9330   /// \param ErrorRecovery If \c true (the default), the caller is going to
9331   ///        recover from the typo as if the corrected string had been typed.
9332   ///        In this case, \c PDiag must be an error, and we will attach a fixit
9333   ///        to it.
9334   void diagnoseTypo(const TypoCorrection &Correction,
9335                     const PartialDiagnostic &TypoDiag,
9336                     const PartialDiagnostic &PrevNote,
9337                     bool ErrorRecovery = true);
9338 
9339   /// Find the associated classes and namespaces for
9340   /// argument-dependent lookup for a call with the given set of
9341   /// arguments.
9342   ///
9343   /// This routine computes the sets of associated classes and associated
9344   /// namespaces searched by argument-dependent lookup
9345   /// (C++ [basic.lookup.argdep]) for a given set of arguments.
9346   void FindAssociatedClassesAndNamespaces(
9347       SourceLocation InstantiationLoc, ArrayRef<Expr *> Args,
9348       AssociatedNamespaceSet &AssociatedNamespaces,
9349       AssociatedClassSet &AssociatedClasses);
9350 
9351   /// Produce a diagnostic describing the ambiguity that resulted
9352   /// from name lookup.
9353   ///
9354   /// \param Result The result of the ambiguous lookup to be diagnosed.
9355   void DiagnoseAmbiguousLookup(LookupResult &Result);
9356 
9357   /// LookupLiteralOperator - Determine which literal operator should be used
9358   /// for a user-defined literal, per C++11 [lex.ext].
9359   ///
9360   /// Normal overload resolution is not used to select which literal operator to
9361   /// call for a user-defined literal. Look up the provided literal operator
9362   /// name, and filter the results to the appropriate set for the given argument
9363   /// types.
9364   LiteralOperatorLookupResult
9365   LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys,
9366                         bool AllowRaw, bool AllowTemplate,
9367                         bool AllowStringTemplate, bool DiagnoseMissing,
9368                         StringLiteral *StringLit = nullptr);
9369 
9370   void ArgumentDependentLookup(DeclarationName Name, SourceLocation Loc,
9371                                ArrayRef<Expr *> Args, ADLResult &Functions);
9372 
9373   void LookupVisibleDecls(Scope *S, LookupNameKind Kind,
9374                           VisibleDeclConsumer &Consumer,
9375                           bool IncludeGlobalScope = true,
9376                           bool LoadExternal = true);
9377   void LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind,
9378                           VisibleDeclConsumer &Consumer,
9379                           bool IncludeGlobalScope = true,
9380                           bool IncludeDependentBases = false,
9381                           bool LoadExternal = true);
9382 
9383   enum CorrectTypoKind {
9384     CTK_NonError,     // CorrectTypo used in a non error recovery situation.
9385     CTK_ErrorRecovery // CorrectTypo used in normal error recovery.
9386   };
9387 
9388   /// Try to "correct" a typo in the source code by finding
9389   /// visible declarations whose names are similar to the name that was
9390   /// present in the source code.
9391   ///
9392   /// \param TypoName the \c DeclarationNameInfo structure that contains
9393   /// the name that was present in the source code along with its location.
9394   ///
9395   /// \param LookupKind the name-lookup criteria used to search for the name.
9396   ///
9397   /// \param S the scope in which name lookup occurs.
9398   ///
9399   /// \param SS the nested-name-specifier that precedes the name we're
9400   /// looking for, if present.
9401   ///
9402   /// \param CCC A CorrectionCandidateCallback object that provides further
9403   /// validation of typo correction candidates. It also provides flags for
9404   /// determining the set of keywords permitted.
9405   ///
9406   /// \param MemberContext if non-NULL, the context in which to look for
9407   /// a member access expression.
9408   ///
9409   /// \param EnteringContext whether we're entering the context described by
9410   /// the nested-name-specifier SS.
9411   ///
9412   /// \param OPT when non-NULL, the search for visible declarations will
9413   /// also walk the protocols in the qualified interfaces of \p OPT.
9414   ///
9415   /// \returns a \c TypoCorrection containing the corrected name if the typo
9416   /// along with information such as the \c NamedDecl where the corrected name
9417   /// was declared, and any additional \c NestedNameSpecifier needed to access
9418   /// it (C++ only). The \c TypoCorrection is empty if there is no correction.
9419   TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo,
9420                              Sema::LookupNameKind LookupKind, Scope *S,
9421                              CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,
9422                              CorrectTypoKind Mode,
9423                              DeclContext *MemberContext = nullptr,
9424                              bool EnteringContext = false,
9425                              const ObjCObjectPointerType *OPT = nullptr,
9426                              bool RecordFailure = true);
9427 
9428   /// Try to "correct" a typo in the source code by finding
9429   /// visible declarations whose names are similar to the name that was
9430   /// present in the source code.
9431   ///
9432   /// \param TypoName the \c DeclarationNameInfo structure that contains
9433   /// the name that was present in the source code along with its location.
9434   ///
9435   /// \param LookupKind the name-lookup criteria used to search for the name.
9436   ///
9437   /// \param S the scope in which name lookup occurs.
9438   ///
9439   /// \param SS the nested-name-specifier that precedes the name we're
9440   /// looking for, if present.
9441   ///
9442   /// \param CCC A CorrectionCandidateCallback object that provides further
9443   /// validation of typo correction candidates. It also provides flags for
9444   /// determining the set of keywords permitted.
9445   ///
9446   /// \param TDG A TypoDiagnosticGenerator functor that will be used to print
9447   /// diagnostics when the actual typo correction is attempted.
9448   ///
9449   /// \param TRC A TypoRecoveryCallback functor that will be used to build an
9450   /// Expr from a typo correction candidate.
9451   ///
9452   /// \param MemberContext if non-NULL, the context in which to look for
9453   /// a member access expression.
9454   ///
9455   /// \param EnteringContext whether we're entering the context described by
9456   /// the nested-name-specifier SS.
9457   ///
9458   /// \param OPT when non-NULL, the search for visible declarations will
9459   /// also walk the protocols in the qualified interfaces of \p OPT.
9460   ///
9461   /// \returns a new \c TypoExpr that will later be replaced in the AST with an
9462   /// Expr representing the result of performing typo correction, or nullptr if
9463   /// typo correction is not possible. If nullptr is returned, no diagnostics
9464   /// will be emitted and it is the responsibility of the caller to emit any
9465   /// that are needed.
9466   TypoExpr *CorrectTypoDelayed(
9467       const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind,
9468       Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,
9469       TypoDiagnosticGenerator TDG, TypoRecoveryCallback TRC,
9470       CorrectTypoKind Mode, DeclContext *MemberContext = nullptr,
9471       bool EnteringContext = false, const ObjCObjectPointerType *OPT = nullptr);
9472 
9473   /// Kinds of missing import. Note, the values of these enumerators correspond
9474   /// to %select values in diagnostics.
9475   enum class MissingImportKind {
9476     Declaration,
9477     Definition,
9478     DefaultArgument,
9479     ExplicitSpecialization,
9480     PartialSpecialization
9481   };
9482 
9483   /// Diagnose that the specified declaration needs to be visible but
9484   /// isn't, and suggest a module import that would resolve the problem.
9485   void diagnoseMissingImport(SourceLocation Loc, const NamedDecl *Decl,
9486                              MissingImportKind MIK, bool Recover = true);
9487   void diagnoseMissingImport(SourceLocation Loc, const NamedDecl *Decl,
9488                              SourceLocation DeclLoc, ArrayRef<Module *> Modules,
9489                              MissingImportKind MIK, bool Recover);
9490 
9491   struct TypoExprState {
9492     std::unique_ptr<TypoCorrectionConsumer> Consumer;
9493     TypoDiagnosticGenerator DiagHandler;
9494     TypoRecoveryCallback RecoveryHandler;
9495     TypoExprState();
9496     TypoExprState(TypoExprState &&other) noexcept;
9497     TypoExprState &operator=(TypoExprState &&other) noexcept;
9498   };
9499 
9500   const TypoExprState &getTypoExprState(TypoExpr *TE) const;
9501 
9502   /// Clears the state of the given TypoExpr.
9503   void clearDelayedTypo(TypoExpr *TE);
9504 
9505   /// Called on #pragma clang __debug dump II
9506   void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II);
9507 
9508   /// Called on #pragma clang __debug dump E
9509   void ActOnPragmaDump(Expr *E);
9510 
9511 private:
9512   // The set of known/encountered (unique, canonicalized) NamespaceDecls.
9513   //
9514   // The boolean value will be true to indicate that the namespace was loaded
9515   // from an AST/PCH file, or false otherwise.
9516   llvm::MapVector<NamespaceDecl *, bool> KnownNamespaces;
9517 
9518   /// Whether we have already loaded known namespaces from an extenal
9519   /// source.
9520   bool LoadedExternalKnownNamespaces;
9521 
9522   bool CppLookupName(LookupResult &R, Scope *S);
9523 
9524   /// Determine if we could use all the declarations in the module.
9525   bool isUsableModule(const Module *M);
9526 
9527   /// Helper for CorrectTypo and CorrectTypoDelayed used to create and
9528   /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction
9529   /// should be skipped entirely.
9530   std::unique_ptr<TypoCorrectionConsumer> makeTypoCorrectionConsumer(
9531       const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind,
9532       Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,
9533       DeclContext *MemberContext, bool EnteringContext,
9534       const ObjCObjectPointerType *OPT, bool ErrorRecovery);
9535 
9536   /// The set of unhandled TypoExprs and their associated state.
9537   llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos;
9538 
9539   /// Creates a new TypoExpr AST node.
9540   TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC,
9541                               TypoDiagnosticGenerator TDG,
9542                               TypoRecoveryCallback TRC, SourceLocation TypoLoc);
9543 
9544   /// Cache for module units which is usable for current module.
9545   llvm::DenseSet<const Module *> UsableModuleUnitsCache;
9546 
9547   /// Record the typo correction failure and return an empty correction.
9548   TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc,
9549                                   bool RecordFailure = true) {
9550     if (RecordFailure)
9551       TypoCorrectionFailures[Typo].insert(TypoLoc);
9552     return TypoCorrection();
9553   }
9554 
9555   bool isAcceptableSlow(const NamedDecl *D, AcceptableKind Kind);
9556 
9557   /// Determine whether two declarations should be linked together, given that
9558   /// the old declaration might not be visible and the new declaration might
9559   /// not have external linkage.
9560   bool shouldLinkPossiblyHiddenDecl(const NamedDecl *Old,
9561                                     const NamedDecl *New) {
9562     if (isVisible(Old))
9563       return true;
9564     // See comment in below overload for why it's safe to compute the linkage
9565     // of the new declaration here.
9566     if (New->isExternallyDeclarable()) {
9567       assert(Old->isExternallyDeclarable() &&
9568              "should not have found a non-externally-declarable previous decl");
9569       return true;
9570     }
9571     return false;
9572   }
9573   bool shouldLinkPossiblyHiddenDecl(LookupResult &Old, const NamedDecl *New);
9574 
9575   ///@}
9576 
9577   //
9578   //
9579   // -------------------------------------------------------------------------
9580   //
9581   //
9582 
9583   /// \name Modules
9584   /// Implementations are in SemaModule.cpp
9585   ///@{
9586 
9587 public:
9588   /// Get the module unit whose scope we are currently within.
9589   Module *getCurrentModule() const {
9590     return ModuleScopes.empty() ? nullptr : ModuleScopes.back().Module;
9591   }
9592 
9593   /// Is the module scope we are an implementation unit?
9594   bool currentModuleIsImplementation() const {
9595     return ModuleScopes.empty()
9596                ? false
9597                : ModuleScopes.back().Module->isModuleImplementation();
9598   }
9599 
9600   // When loading a non-modular PCH files, this is used to restore module
9601   // visibility.
9602   void makeModuleVisible(Module *Mod, SourceLocation ImportLoc) {
9603     VisibleModules.setVisible(Mod, ImportLoc);
9604   }
9605 
9606   enum class ModuleDeclKind {
9607     Interface,               ///< 'export module X;'
9608     Implementation,          ///< 'module X;'
9609     PartitionInterface,      ///< 'export module X:Y;'
9610     PartitionImplementation, ///< 'module X:Y;'
9611   };
9612 
9613   /// An enumeration to represent the transition of states in parsing module
9614   /// fragments and imports.  If we are not parsing a C++20 TU, or we find
9615   /// an error in state transition, the state is set to NotACXX20Module.
9616   enum class ModuleImportState {
9617     FirstDecl,      ///< Parsing the first decl in a TU.
9618     GlobalFragment, ///< after 'module;' but before 'module X;'
9619     ImportAllowed,  ///< after 'module X;' but before any non-import decl.
9620     ImportFinished, ///< after any non-import decl.
9621     PrivateFragmentImportAllowed,  ///< after 'module :private;' but before any
9622                                    ///< non-import decl.
9623     PrivateFragmentImportFinished, ///< after 'module :private;' but a
9624                                    ///< non-import decl has already been seen.
9625     NotACXX20Module ///< Not a C++20 TU, or an invalid state was found.
9626   };
9627 
9628   /// The parser has processed a module-declaration that begins the definition
9629   /// of a module interface or implementation.
9630   DeclGroupPtrTy ActOnModuleDecl(SourceLocation StartLoc,
9631                                  SourceLocation ModuleLoc, ModuleDeclKind MDK,
9632                                  ModuleIdPath Path, ModuleIdPath Partition,
9633                                  ModuleImportState &ImportState);
9634 
9635   /// The parser has processed a global-module-fragment declaration that begins
9636   /// the definition of the global module fragment of the current module unit.
9637   /// \param ModuleLoc The location of the 'module' keyword.
9638   DeclGroupPtrTy ActOnGlobalModuleFragmentDecl(SourceLocation ModuleLoc);
9639 
9640   /// The parser has processed a private-module-fragment declaration that begins
9641   /// the definition of the private module fragment of the current module unit.
9642   /// \param ModuleLoc The location of the 'module' keyword.
9643   /// \param PrivateLoc The location of the 'private' keyword.
9644   DeclGroupPtrTy ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc,
9645                                                 SourceLocation PrivateLoc);
9646 
9647   /// The parser has processed a module import declaration.
9648   ///
9649   /// \param StartLoc The location of the first token in the declaration. This
9650   ///        could be the location of an '@', 'export', or 'import'.
9651   /// \param ExportLoc The location of the 'export' keyword, if any.
9652   /// \param ImportLoc The location of the 'import' keyword.
9653   /// \param Path The module toplevel name as an access path.
9654   /// \param IsPartition If the name is for a partition.
9655   DeclResult ActOnModuleImport(SourceLocation StartLoc,
9656                                SourceLocation ExportLoc,
9657                                SourceLocation ImportLoc, ModuleIdPath Path,
9658                                bool IsPartition = false);
9659   DeclResult ActOnModuleImport(SourceLocation StartLoc,
9660                                SourceLocation ExportLoc,
9661                                SourceLocation ImportLoc, Module *M,
9662                                ModuleIdPath Path = {});
9663 
9664   /// The parser has processed a module import translated from a
9665   /// #include or similar preprocessing directive.
9666   void ActOnAnnotModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
9667   void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
9668 
9669   /// The parsed has entered a submodule.
9670   void ActOnAnnotModuleBegin(SourceLocation DirectiveLoc, Module *Mod);
9671   /// The parser has left a submodule.
9672   void ActOnAnnotModuleEnd(SourceLocation DirectiveLoc, Module *Mod);
9673 
9674   /// Create an implicit import of the given module at the given
9675   /// source location, for error recovery, if possible.
9676   ///
9677   /// This routine is typically used when an entity found by name lookup
9678   /// is actually hidden within a module that we know about but the user
9679   /// has forgotten to import.
9680   void createImplicitModuleImportForErrorRecovery(SourceLocation Loc,
9681                                                   Module *Mod);
9682 
9683   /// We have parsed the start of an export declaration, including the '{'
9684   /// (if present).
9685   Decl *ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc,
9686                              SourceLocation LBraceLoc);
9687 
9688   /// Complete the definition of an export declaration.
9689   Decl *ActOnFinishExportDecl(Scope *S, Decl *ExportDecl,
9690                               SourceLocation RBraceLoc);
9691 
9692 private:
9693   /// The parser has begun a translation unit to be compiled as a C++20
9694   /// Header Unit, helper for ActOnStartOfTranslationUnit() only.
9695   void HandleStartOfHeaderUnit();
9696 
9697   struct ModuleScope {
9698     SourceLocation BeginLoc;
9699     clang::Module *Module = nullptr;
9700     VisibleModuleSet OuterVisibleModules;
9701   };
9702   /// The modules we're currently parsing.
9703   llvm::SmallVector<ModuleScope, 16> ModuleScopes;
9704 
9705   /// For an interface unit, this is the implicitly imported interface unit.
9706   clang::Module *ThePrimaryInterface = nullptr;
9707 
9708   /// The explicit global module fragment of the current translation unit.
9709   /// The explicit Global Module Fragment, as specified in C++
9710   /// [module.global.frag].
9711   clang::Module *TheGlobalModuleFragment = nullptr;
9712 
9713   /// The implicit global module fragments of the current translation unit.
9714   ///
9715   /// The contents in the implicit global module fragment can't be discarded.
9716   clang::Module *TheImplicitGlobalModuleFragment = nullptr;
9717 
9718   /// Namespace definitions that we will export when they finish.
9719   llvm::SmallPtrSet<const NamespaceDecl *, 8> DeferredExportedNamespaces;
9720 
9721   /// In a C++ standard module, inline declarations require a definition to be
9722   /// present at the end of a definition domain.  This set holds the decls to
9723   /// be checked at the end of the TU.
9724   llvm::SmallPtrSet<const FunctionDecl *, 8> PendingInlineFuncDecls;
9725 
9726   /// Helper function to judge if we are in module purview.
9727   /// Return false if we are not in a module.
9728   bool isCurrentModulePurview() const;
9729 
9730   /// Enter the scope of the explicit global module fragment.
9731   Module *PushGlobalModuleFragment(SourceLocation BeginLoc);
9732   /// Leave the scope of the explicit global module fragment.
9733   void PopGlobalModuleFragment();
9734 
9735   /// Enter the scope of an implicit global module fragment.
9736   Module *PushImplicitGlobalModuleFragment(SourceLocation BeginLoc);
9737   /// Leave the scope of an implicit global module fragment.
9738   void PopImplicitGlobalModuleFragment();
9739 
9740   VisibleModuleSet VisibleModules;
9741 
9742   ///@}
9743 
9744   //
9745   //
9746   // -------------------------------------------------------------------------
9747   //
9748   //
9749 
9750   /// \name C++ Overloading
9751   /// Implementations are in SemaOverload.cpp
9752   ///@{
9753 
9754 public:
9755   /// Whether deferrable diagnostics should be deferred.
9756   bool DeferDiags = false;
9757 
9758   /// RAII class to control scope of DeferDiags.
9759   class DeferDiagsRAII {
9760     Sema &S;
9761     bool SavedDeferDiags = false;
9762 
9763   public:
9764     DeferDiagsRAII(Sema &S, bool DeferDiags)
9765         : S(S), SavedDeferDiags(S.DeferDiags) {
9766       S.DeferDiags = DeferDiags;
9767     }
9768     ~DeferDiagsRAII() { S.DeferDiags = SavedDeferDiags; }
9769   };
9770 
9771   /// Flag indicating if Sema is building a recovery call expression.
9772   ///
9773   /// This flag is used to avoid building recovery call expressions
9774   /// if Sema is already doing so, which would cause infinite recursions.
9775   bool IsBuildingRecoveryCallExpr;
9776 
9777   enum OverloadKind {
9778     /// This is a legitimate overload: the existing declarations are
9779     /// functions or function templates with different signatures.
9780     Ovl_Overload,
9781 
9782     /// This is not an overload because the signature exactly matches
9783     /// an existing declaration.
9784     Ovl_Match,
9785 
9786     /// This is not an overload because the lookup results contain a
9787     /// non-function.
9788     Ovl_NonFunction
9789   };
9790 
9791   /// Determine whether the given New declaration is an overload of the
9792   /// declarations in Old. This routine returns Ovl_Match or Ovl_NonFunction if
9793   /// New and Old cannot be overloaded, e.g., if New has the same signature as
9794   /// some function in Old (C++ 1.3.10) or if the Old declarations aren't
9795   /// functions (or function templates) at all. When it does return Ovl_Match or
9796   /// Ovl_NonFunction, MatchedDecl will point to the decl that New cannot be
9797   /// overloaded with. This decl may be a UsingShadowDecl on top of the
9798   /// underlying declaration.
9799   ///
9800   /// Example: Given the following input:
9801   ///
9802   ///   void f(int, float); // #1
9803   ///   void f(int, int); // #2
9804   ///   int f(int, int); // #3
9805   ///
9806   /// When we process #1, there is no previous declaration of "f", so IsOverload
9807   /// will not be used.
9808   ///
9809   /// When we process #2, Old contains only the FunctionDecl for #1. By
9810   /// comparing the parameter types, we see that #1 and #2 are overloaded (since
9811   /// they have different signatures), so this routine returns Ovl_Overload;
9812   /// MatchedDecl is unchanged.
9813   ///
9814   /// When we process #3, Old is an overload set containing #1 and #2. We
9815   /// compare the signatures of #3 to #1 (they're overloaded, so we do nothing)
9816   /// and then #3 to #2. Since the signatures of #3 and #2 are identical (return
9817   /// types of functions are not part of the signature), IsOverload returns
9818   /// Ovl_Match and MatchedDecl will be set to point to the FunctionDecl for #2.
9819   ///
9820   /// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced into a
9821   /// class by a using declaration. The rules for whether to hide shadow
9822   /// declarations ignore some properties which otherwise figure into a function
9823   /// template's signature.
9824   OverloadKind CheckOverload(Scope *S, FunctionDecl *New,
9825                              const LookupResult &OldDecls, NamedDecl *&OldDecl,
9826                              bool UseMemberUsingDeclRules);
9827   bool IsOverload(FunctionDecl *New, FunctionDecl *Old,
9828                   bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs = true);
9829 
9830   // Checks whether MD constitutes an override the base class method BaseMD.
9831   // When checking for overrides, the object object members are ignored.
9832   bool IsOverride(FunctionDecl *MD, FunctionDecl *BaseMD,
9833                   bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs = true);
9834 
9835   enum class AllowedExplicit {
9836     /// Allow no explicit functions to be used.
9837     None,
9838     /// Allow explicit conversion functions but not explicit constructors.
9839     Conversions,
9840     /// Allow both explicit conversion functions and explicit constructors.
9841     All
9842   };
9843 
9844   ImplicitConversionSequence TryImplicitConversion(
9845       Expr *From, QualType ToType, bool SuppressUserConversions,
9846       AllowedExplicit AllowExplicit, bool InOverloadResolution, bool CStyle,
9847       bool AllowObjCWritebackConversion);
9848 
9849   /// PerformImplicitConversion - Perform an implicit conversion of the
9850   /// expression From to the type ToType. Returns the
9851   /// converted expression. Flavor is the kind of conversion we're
9852   /// performing, used in the error message. If @p AllowExplicit,
9853   /// explicit user-defined conversions are permitted.
9854   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
9855                                        AssignmentAction Action,
9856                                        bool AllowExplicit = false);
9857 
9858   /// IsIntegralPromotion - Determines whether the conversion from the
9859   /// expression From (whose potentially-adjusted type is FromType) to
9860   /// ToType is an integral promotion (C++ 4.5). If so, returns true and
9861   /// sets PromotedType to the promoted type.
9862   bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType);
9863 
9864   /// IsFloatingPointPromotion - Determines whether the conversion from
9865   /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
9866   /// returns true and sets PromotedType to the promoted type.
9867   bool IsFloatingPointPromotion(QualType FromType, QualType ToType);
9868 
9869   /// Determine if a conversion is a complex promotion.
9870   ///
9871   /// A complex promotion is defined as a complex -> complex conversion
9872   /// where the conversion between the underlying real types is a
9873   /// floating-point or integral promotion.
9874   bool IsComplexPromotion(QualType FromType, QualType ToType);
9875 
9876   /// IsPointerConversion - Determines whether the conversion of the
9877   /// expression From, which has the (possibly adjusted) type FromType,
9878   /// can be converted to the type ToType via a pointer conversion (C++
9879   /// 4.10). If so, returns true and places the converted type (that
9880   /// might differ from ToType in its cv-qualifiers at some level) into
9881   /// ConvertedType.
9882   ///
9883   /// This routine also supports conversions to and from block pointers
9884   /// and conversions with Objective-C's 'id', 'id<protocols...>', and
9885   /// pointers to interfaces. FIXME: Once we've determined the
9886   /// appropriate overloading rules for Objective-C, we may want to
9887   /// split the Objective-C checks into a different routine; however,
9888   /// GCC seems to consider all of these conversions to be pointer
9889   /// conversions, so for now they live here. IncompatibleObjC will be
9890   /// set if the conversion is an allowed Objective-C conversion that
9891   /// should result in a warning.
9892   bool IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
9893                            bool InOverloadResolution, QualType &ConvertedType,
9894                            bool &IncompatibleObjC);
9895 
9896   /// isObjCPointerConversion - Determines whether this is an
9897   /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
9898   /// with the same arguments and return values.
9899   bool isObjCPointerConversion(QualType FromType, QualType ToType,
9900                                QualType &ConvertedType, bool &IncompatibleObjC);
9901   bool IsBlockPointerConversion(QualType FromType, QualType ToType,
9902                                 QualType &ConvertedType);
9903 
9904   /// FunctionParamTypesAreEqual - This routine checks two function proto types
9905   /// for equality of their parameter types. Caller has already checked that
9906   /// they have same number of parameters.  If the parameters are different,
9907   /// ArgPos will have the parameter index of the first different parameter.
9908   /// If `Reversed` is true, the parameters of `NewType` will be compared in
9909   /// reverse order. That's useful if one of the functions is being used as a
9910   /// C++20 synthesized operator overload with a reversed parameter order.
9911   bool FunctionParamTypesAreEqual(ArrayRef<QualType> Old,
9912                                   ArrayRef<QualType> New,
9913                                   unsigned *ArgPos = nullptr,
9914                                   bool Reversed = false);
9915 
9916   bool FunctionParamTypesAreEqual(const FunctionProtoType *OldType,
9917                                   const FunctionProtoType *NewType,
9918                                   unsigned *ArgPos = nullptr,
9919                                   bool Reversed = false);
9920 
9921   bool FunctionNonObjectParamTypesAreEqual(const FunctionDecl *OldFunction,
9922                                            const FunctionDecl *NewFunction,
9923                                            unsigned *ArgPos = nullptr,
9924                                            bool Reversed = false);
9925 
9926   /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
9927   /// function types.  Catches different number of parameter, mismatch in
9928   /// parameter types, and different return types.
9929   void HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, QualType FromType,
9930                                   QualType ToType);
9931 
9932   /// CheckPointerConversion - Check the pointer conversion from the
9933   /// expression From to the type ToType. This routine checks for
9934   /// ambiguous or inaccessible derived-to-base pointer
9935   /// conversions for which IsPointerConversion has already returned
9936   /// true. It returns true and produces a diagnostic if there was an
9937   /// error, or returns false otherwise.
9938   bool CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind,
9939                               CXXCastPath &BasePath, bool IgnoreBaseAccess,
9940                               bool Diagnose = true);
9941 
9942   /// IsMemberPointerConversion - Determines whether the conversion of the
9943   /// expression From, which has the (possibly adjusted) type FromType, can be
9944   /// converted to the type ToType via a member pointer conversion (C++ 4.11).
9945   /// If so, returns true and places the converted type (that might differ from
9946   /// ToType in its cv-qualifiers at some level) into ConvertedType.
9947   bool IsMemberPointerConversion(Expr *From, QualType FromType, QualType ToType,
9948                                  bool InOverloadResolution,
9949                                  QualType &ConvertedType);
9950 
9951   /// CheckMemberPointerConversion - Check the member pointer conversion from
9952   /// the expression From to the type ToType. This routine checks for ambiguous
9953   /// or virtual or inaccessible base-to-derived member pointer conversions for
9954   /// which IsMemberPointerConversion has already returned true. It returns true
9955   /// and produces a diagnostic if there was an error, or returns false
9956   /// otherwise.
9957   bool CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind,
9958                                     CXXCastPath &BasePath,
9959                                     bool IgnoreBaseAccess);
9960 
9961   /// IsQualificationConversion - Determines whether the conversion from
9962   /// an rvalue of type FromType to ToType is a qualification conversion
9963   /// (C++ 4.4).
9964   ///
9965   /// \param ObjCLifetimeConversion Output parameter that will be set to
9966   /// indicate when the qualification conversion involves a change in the
9967   /// Objective-C object lifetime.
9968   bool IsQualificationConversion(QualType FromType, QualType ToType,
9969                                  bool CStyle, bool &ObjCLifetimeConversion);
9970 
9971   /// Determine whether the conversion from FromType to ToType is a valid
9972   /// conversion that strips "noexcept" or "noreturn" off the nested function
9973   /// type.
9974   bool IsFunctionConversion(QualType FromType, QualType ToType,
9975                             QualType &ResultTy);
9976   bool DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType);
9977   void DiagnoseUseOfDeletedFunction(SourceLocation Loc, SourceRange Range,
9978                                     DeclarationName Name,
9979                                     OverloadCandidateSet &CandidateSet,
9980                                     FunctionDecl *Fn, MultiExprArg Args,
9981                                     bool IsMember = false);
9982 
9983   ExprResult InitializeExplicitObjectArgument(Sema &S, Expr *Obj,
9984                                               FunctionDecl *Fun);
9985   ExprResult PerformImplicitObjectArgumentInitialization(
9986       Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl,
9987       CXXMethodDecl *Method);
9988 
9989   /// PerformContextuallyConvertToBool - Perform a contextual conversion
9990   /// of the expression From to bool (C++0x [conv]p3).
9991   ExprResult PerformContextuallyConvertToBool(Expr *From);
9992 
9993   /// PerformContextuallyConvertToObjCPointer - Perform a contextual
9994   /// conversion of the expression From to an Objective-C pointer type.
9995   /// Returns a valid but null ExprResult if no conversion sequence exists.
9996   ExprResult PerformContextuallyConvertToObjCPointer(Expr *From);
9997 
9998   /// Contexts in which a converted constant expression is required.
9999   enum CCEKind {
10000     CCEK_CaseValue,    ///< Expression in a case label.
10001     CCEK_Enumerator,   ///< Enumerator value with fixed underlying type.
10002     CCEK_TemplateArg,  ///< Value of a non-type template parameter.
10003     CCEK_InjectedTTP,  ///< Injected parameter of a template template parameter.
10004     CCEK_ArrayBound,   ///< Array bound in array declarator or new-expression.
10005     CCEK_ExplicitBool, ///< Condition in an explicit(bool) specifier.
10006     CCEK_Noexcept,     ///< Condition in a noexcept(bool) specifier.
10007     CCEK_StaticAssertMessageSize, ///< Call to size() in a static assert
10008                                   ///< message.
10009     CCEK_StaticAssertMessageData, ///< Call to data() in a static assert
10010                                   ///< message.
10011   };
10012 
10013   ExprResult BuildConvertedConstantExpression(Expr *From, QualType T,
10014                                               CCEKind CCE,
10015                                               NamedDecl *Dest = nullptr);
10016 
10017   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
10018                                               llvm::APSInt &Value, CCEKind CCE);
10019   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
10020                                               APValue &Value, CCEKind CCE,
10021                                               NamedDecl *Dest = nullptr);
10022 
10023   /// EvaluateConvertedConstantExpression - Evaluate an Expression
10024   /// That is a converted constant expression
10025   /// (which was built with BuildConvertedConstantExpression)
10026   ExprResult
10027   EvaluateConvertedConstantExpression(Expr *E, QualType T, APValue &Value,
10028                                       CCEKind CCE, bool RequireInt,
10029                                       const APValue &PreNarrowingValue);
10030 
10031   /// Abstract base class used to perform a contextual implicit
10032   /// conversion from an expression to any type passing a filter.
10033   class ContextualImplicitConverter {
10034   public:
10035     bool Suppress;
10036     bool SuppressConversion;
10037 
10038     ContextualImplicitConverter(bool Suppress = false,
10039                                 bool SuppressConversion = false)
10040         : Suppress(Suppress), SuppressConversion(SuppressConversion) {}
10041 
10042     /// Determine whether the specified type is a valid destination type
10043     /// for this conversion.
10044     virtual bool match(QualType T) = 0;
10045 
10046     /// Emits a diagnostic complaining that the expression does not have
10047     /// integral or enumeration type.
10048     virtual SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc,
10049                                                   QualType T) = 0;
10050 
10051     /// Emits a diagnostic when the expression has incomplete class type.
10052     virtual SemaDiagnosticBuilder
10053     diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0;
10054 
10055     /// Emits a diagnostic when the only matching conversion function
10056     /// is explicit.
10057     virtual SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S,
10058                                                        SourceLocation Loc,
10059                                                        QualType T,
10060                                                        QualType ConvTy) = 0;
10061 
10062     /// Emits a note for the explicit conversion function.
10063     virtual SemaDiagnosticBuilder
10064     noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
10065 
10066     /// Emits a diagnostic when there are multiple possible conversion
10067     /// functions.
10068     virtual SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc,
10069                                                     QualType T) = 0;
10070 
10071     /// Emits a note for one of the candidate conversions.
10072     virtual SemaDiagnosticBuilder
10073     noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
10074 
10075     /// Emits a diagnostic when we picked a conversion function
10076     /// (for cases when we are not allowed to pick a conversion function).
10077     virtual SemaDiagnosticBuilder diagnoseConversion(Sema &S,
10078                                                      SourceLocation Loc,
10079                                                      QualType T,
10080                                                      QualType ConvTy) = 0;
10081 
10082     virtual ~ContextualImplicitConverter() {}
10083   };
10084 
10085   class ICEConvertDiagnoser : public ContextualImplicitConverter {
10086     bool AllowScopedEnumerations;
10087 
10088   public:
10089     ICEConvertDiagnoser(bool AllowScopedEnumerations, bool Suppress,
10090                         bool SuppressConversion)
10091         : ContextualImplicitConverter(Suppress, SuppressConversion),
10092           AllowScopedEnumerations(AllowScopedEnumerations) {}
10093 
10094     /// Match an integral or (possibly scoped) enumeration type.
10095     bool match(QualType T) override;
10096 
10097     SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc,
10098                                           QualType T) override {
10099       return diagnoseNotInt(S, Loc, T);
10100     }
10101 
10102     /// Emits a diagnostic complaining that the expression does not have
10103     /// integral or enumeration type.
10104     virtual SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc,
10105                                                  QualType T) = 0;
10106   };
10107 
10108   /// Perform a contextual implicit conversion.
10109   ExprResult
10110   PerformContextualImplicitConversion(SourceLocation Loc, Expr *FromE,
10111                                       ContextualImplicitConverter &Converter);
10112 
10113   /// ReferenceCompareResult - Expresses the result of comparing two
10114   /// types (cv1 T1 and cv2 T2) to determine their compatibility for the
10115   /// purposes of initialization by reference (C++ [dcl.init.ref]p4).
10116   enum ReferenceCompareResult {
10117     /// Ref_Incompatible - The two types are incompatible, so direct
10118     /// reference binding is not possible.
10119     Ref_Incompatible = 0,
10120     /// Ref_Related - The two types are reference-related, which means
10121     /// that their unqualified forms (T1 and T2) are either the same
10122     /// or T1 is a base class of T2.
10123     Ref_Related,
10124     /// Ref_Compatible - The two types are reference-compatible.
10125     Ref_Compatible
10126   };
10127 
10128   // Fake up a scoped enumeration that still contextually converts to bool.
10129   struct ReferenceConversionsScope {
10130     /// The conversions that would be performed on an lvalue of type T2 when
10131     /// binding a reference of type T1 to it, as determined when evaluating
10132     /// whether T1 is reference-compatible with T2.
10133     enum ReferenceConversions {
10134       Qualification = 0x1,
10135       NestedQualification = 0x2,
10136       Function = 0x4,
10137       DerivedToBase = 0x8,
10138       ObjC = 0x10,
10139       ObjCLifetime = 0x20,
10140 
10141       LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/ObjCLifetime)
10142     };
10143   };
10144   using ReferenceConversions = ReferenceConversionsScope::ReferenceConversions;
10145 
10146   /// CompareReferenceRelationship - Compare the two types T1 and T2 to
10147   /// determine whether they are reference-compatible,
10148   /// reference-related, or incompatible, for use in C++ initialization by
10149   /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
10150   /// type, and the first type (T1) is the pointee type of the reference
10151   /// type being initialized.
10152   ReferenceCompareResult
10153   CompareReferenceRelationship(SourceLocation Loc, QualType T1, QualType T2,
10154                                ReferenceConversions *Conv = nullptr);
10155 
10156   /// AddOverloadCandidate - Adds the given function to the set of
10157   /// candidate functions, using the given function call arguments.  If
10158   /// @p SuppressUserConversions, then don't allow user-defined
10159   /// conversions via constructors or conversion operators.
10160   ///
10161   /// \param PartialOverloading true if we are performing "partial" overloading
10162   /// based on an incomplete set of function arguments. This feature is used by
10163   /// code completion.
10164   void AddOverloadCandidate(FunctionDecl *Function, DeclAccessPair FoundDecl,
10165                             ArrayRef<Expr *> Args,
10166                             OverloadCandidateSet &CandidateSet,
10167                             bool SuppressUserConversions = false,
10168                             bool PartialOverloading = false,
10169                             bool AllowExplicit = true,
10170                             bool AllowExplicitConversion = false,
10171                             ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
10172                             ConversionSequenceList EarlyConversions = {},
10173                             OverloadCandidateParamOrder PO = {},
10174                             bool AggregateCandidateDeduction = false,
10175                             bool HasMatchedPackOnParmToNonPackOnArg = false);
10176 
10177   /// Add all of the function declarations in the given function set to
10178   /// the overload candidate set.
10179   void AddFunctionCandidates(
10180       const UnresolvedSetImpl &Functions, ArrayRef<Expr *> Args,
10181       OverloadCandidateSet &CandidateSet,
10182       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
10183       bool SuppressUserConversions = false, bool PartialOverloading = false,
10184       bool FirstArgumentIsBase = false);
10185 
10186   /// AddMethodCandidate - Adds a named decl (which is some kind of
10187   /// method) as a method candidate to the given overload set.
10188   void AddMethodCandidate(DeclAccessPair FoundDecl, QualType ObjectType,
10189                           Expr::Classification ObjectClassification,
10190                           ArrayRef<Expr *> Args,
10191                           OverloadCandidateSet &CandidateSet,
10192                           bool SuppressUserConversion = false,
10193                           OverloadCandidateParamOrder PO = {});
10194 
10195   /// AddMethodCandidate - Adds the given C++ member function to the set
10196   /// of candidate functions, using the given function call arguments
10197   /// and the object argument (@c Object). For example, in a call
10198   /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
10199   /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
10200   /// allow user-defined conversions via constructors or conversion
10201   /// operators.
10202   void AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
10203                           CXXRecordDecl *ActingContext, QualType ObjectType,
10204                           Expr::Classification ObjectClassification,
10205                           ArrayRef<Expr *> Args,
10206                           OverloadCandidateSet &CandidateSet,
10207                           bool SuppressUserConversions = false,
10208                           bool PartialOverloading = false,
10209                           ConversionSequenceList EarlyConversions = {},
10210                           OverloadCandidateParamOrder PO = {},
10211                           bool HasMatchedPackOnParmToNonPackOnArg = false);
10212 
10213   /// Add a C++ member function template as a candidate to the candidate
10214   /// set, using template argument deduction to produce an appropriate member
10215   /// function template specialization.
10216   void AddMethodTemplateCandidate(
10217       FunctionTemplateDecl *MethodTmpl, DeclAccessPair FoundDecl,
10218       CXXRecordDecl *ActingContext,
10219       TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ObjectType,
10220       Expr::Classification ObjectClassification, ArrayRef<Expr *> Args,
10221       OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false,
10222       bool PartialOverloading = false, OverloadCandidateParamOrder PO = {});
10223 
10224   /// Add a C++ function template specialization as a candidate
10225   /// in the candidate set, using template argument deduction to produce
10226   /// an appropriate function template specialization.
10227   void AddTemplateOverloadCandidate(
10228       FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
10229       TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
10230       OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false,
10231       bool PartialOverloading = false, bool AllowExplicit = true,
10232       ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
10233       OverloadCandidateParamOrder PO = {},
10234       bool AggregateCandidateDeduction = false);
10235 
10236   /// Check that implicit conversion sequences can be formed for each argument
10237   /// whose corresponding parameter has a non-dependent type, per DR1391's
10238   /// [temp.deduct.call]p10.
10239   bool CheckNonDependentConversions(
10240       FunctionTemplateDecl *FunctionTemplate, ArrayRef<QualType> ParamTypes,
10241       ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet,
10242       ConversionSequenceList &Conversions, bool SuppressUserConversions,
10243       CXXRecordDecl *ActingContext = nullptr, QualType ObjectType = QualType(),
10244       Expr::Classification ObjectClassification = {},
10245       OverloadCandidateParamOrder PO = {});
10246 
10247   /// AddConversionCandidate - Add a C++ conversion function as a
10248   /// candidate in the candidate set (C++ [over.match.conv],
10249   /// C++ [over.match.copy]). From is the expression we're converting from,
10250   /// and ToType is the type that we're eventually trying to convert to
10251   /// (which may or may not be the same type as the type that the
10252   /// conversion function produces).
10253   void AddConversionCandidate(
10254       CXXConversionDecl *Conversion, DeclAccessPair FoundDecl,
10255       CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
10256       OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
10257       bool AllowExplicit, bool AllowResultConversion = true,
10258       bool HasMatchedPackOnParmToNonPackOnArg = false);
10259 
10260   /// Adds a conversion function template specialization
10261   /// candidate to the overload set, using template argument deduction
10262   /// to deduce the template arguments of the conversion function
10263   /// template from the type that we are converting to (C++
10264   /// [temp.deduct.conv]).
10265   void AddTemplateConversionCandidate(
10266       FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
10267       CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
10268       OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
10269       bool AllowExplicit, bool AllowResultConversion = true);
10270 
10271   /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
10272   /// converts the given @c Object to a function pointer via the
10273   /// conversion function @c Conversion, and then attempts to call it
10274   /// with the given arguments (C++ [over.call.object]p2-4). Proto is
10275   /// the type of function that we'll eventually be calling.
10276   void AddSurrogateCandidate(CXXConversionDecl *Conversion,
10277                              DeclAccessPair FoundDecl,
10278                              CXXRecordDecl *ActingContext,
10279                              const FunctionProtoType *Proto, Expr *Object,
10280                              ArrayRef<Expr *> Args,
10281                              OverloadCandidateSet &CandidateSet);
10282 
10283   /// Add all of the non-member operator function declarations in the given
10284   /// function set to the overload candidate set.
10285   void AddNonMemberOperatorCandidates(
10286       const UnresolvedSetImpl &Functions, ArrayRef<Expr *> Args,
10287       OverloadCandidateSet &CandidateSet,
10288       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
10289 
10290   /// Add overload candidates for overloaded operators that are
10291   /// member functions.
10292   ///
10293   /// Add the overloaded operator candidates that are member functions
10294   /// for the operator Op that was used in an operator expression such
10295   /// as "x Op y". , Args/NumArgs provides the operator arguments, and
10296   /// CandidateSet will store the added overload candidates. (C++
10297   /// [over.match.oper]).
10298   void AddMemberOperatorCandidates(OverloadedOperatorKind Op,
10299                                    SourceLocation OpLoc, ArrayRef<Expr *> Args,
10300                                    OverloadCandidateSet &CandidateSet,
10301                                    OverloadCandidateParamOrder PO = {});
10302 
10303   /// AddBuiltinCandidate - Add a candidate for a built-in
10304   /// operator. ResultTy and ParamTys are the result and parameter types
10305   /// of the built-in candidate, respectively. Args and NumArgs are the
10306   /// arguments being passed to the candidate. IsAssignmentOperator
10307   /// should be true when this built-in candidate is an assignment
10308   /// operator. NumContextualBoolArguments is the number of arguments
10309   /// (at the beginning of the argument list) that will be contextually
10310   /// converted to bool.
10311   void AddBuiltinCandidate(QualType *ParamTys, ArrayRef<Expr *> Args,
10312                            OverloadCandidateSet &CandidateSet,
10313                            bool IsAssignmentOperator = false,
10314                            unsigned NumContextualBoolArguments = 0);
10315 
10316   /// AddBuiltinOperatorCandidates - Add the appropriate built-in
10317   /// operator overloads to the candidate set (C++ [over.built]), based
10318   /// on the operator @p Op and the arguments given. For example, if the
10319   /// operator is a binary '+', this routine might add "int
10320   /// operator+(int, int)" to cover integer addition.
10321   void AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
10322                                     SourceLocation OpLoc, ArrayRef<Expr *> Args,
10323                                     OverloadCandidateSet &CandidateSet);
10324 
10325   /// Add function candidates found via argument-dependent lookup
10326   /// to the set of overloading candidates.
10327   ///
10328   /// This routine performs argument-dependent name lookup based on the
10329   /// given function name (which may also be an operator name) and adds
10330   /// all of the overload candidates found by ADL to the overload
10331   /// candidate set (C++ [basic.lookup.argdep]).
10332   void AddArgumentDependentLookupCandidates(
10333       DeclarationName Name, SourceLocation Loc, ArrayRef<Expr *> Args,
10334       TemplateArgumentListInfo *ExplicitTemplateArgs,
10335       OverloadCandidateSet &CandidateSet, bool PartialOverloading = false);
10336 
10337   /// Check the enable_if expressions on the given function. Returns the first
10338   /// failing attribute, or NULL if they were all successful.
10339   EnableIfAttr *CheckEnableIf(FunctionDecl *Function, SourceLocation CallLoc,
10340                               ArrayRef<Expr *> Args,
10341                               bool MissingImplicitThis = false);
10342 
10343   /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
10344   /// non-ArgDependent DiagnoseIfAttrs.
10345   ///
10346   /// Argument-dependent diagnose_if attributes should be checked each time a
10347   /// function is used as a direct callee of a function call.
10348   ///
10349   /// Returns true if any errors were emitted.
10350   bool diagnoseArgDependentDiagnoseIfAttrs(const FunctionDecl *Function,
10351                                            const Expr *ThisArg,
10352                                            ArrayRef<const Expr *> Args,
10353                                            SourceLocation Loc);
10354 
10355   /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
10356   /// ArgDependent DiagnoseIfAttrs.
10357   ///
10358   /// Argument-independent diagnose_if attributes should be checked on every use
10359   /// of a function.
10360   ///
10361   /// Returns true if any errors were emitted.
10362   bool diagnoseArgIndependentDiagnoseIfAttrs(const NamedDecl *ND,
10363                                              SourceLocation Loc);
10364 
10365   /// Determine if \p A and \p B are equivalent internal linkage declarations
10366   /// from different modules, and thus an ambiguity error can be downgraded to
10367   /// an extension warning.
10368   bool isEquivalentInternalLinkageDeclaration(const NamedDecl *A,
10369                                               const NamedDecl *B);
10370   void diagnoseEquivalentInternalLinkageDeclarations(
10371       SourceLocation Loc, const NamedDecl *D,
10372       ArrayRef<const NamedDecl *> Equiv);
10373 
10374   // Emit as a 'note' the specific overload candidate
10375   void NoteOverloadCandidate(
10376       const NamedDecl *Found, const FunctionDecl *Fn,
10377       OverloadCandidateRewriteKind RewriteKind = OverloadCandidateRewriteKind(),
10378       QualType DestType = QualType(), bool TakingAddress = false);
10379 
10380   // Emit as a series of 'note's all template and non-templates identified by
10381   // the expression Expr
10382   void NoteAllOverloadCandidates(Expr *E, QualType DestType = QualType(),
10383                                  bool TakingAddress = false);
10384 
10385   /// Returns whether the given function's address can be taken or not,
10386   /// optionally emitting a diagnostic if the address can't be taken.
10387   ///
10388   /// Returns false if taking the address of the function is illegal.
10389   bool checkAddressOfFunctionIsAvailable(const FunctionDecl *Function,
10390                                          bool Complain = false,
10391                                          SourceLocation Loc = SourceLocation());
10392 
10393   // [PossiblyAFunctionType]  -->   [Return]
10394   // NonFunctionType --> NonFunctionType
10395   // R (A) --> R(A)
10396   // R (*)(A) --> R (A)
10397   // R (&)(A) --> R (A)
10398   // R (S::*)(A) --> R (A)
10399   QualType ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType);
10400 
10401   /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
10402   /// an overloaded function (C++ [over.over]), where @p From is an
10403   /// expression with overloaded function type and @p ToType is the type
10404   /// we're trying to resolve to. For example:
10405   ///
10406   /// @code
10407   /// int f(double);
10408   /// int f(int);
10409   ///
10410   /// int (*pfd)(double) = f; // selects f(double)
10411   /// @endcode
10412   ///
10413   /// This routine returns the resulting FunctionDecl if it could be
10414   /// resolved, and NULL otherwise. When @p Complain is true, this
10415   /// routine will emit diagnostics if there is an error.
10416   FunctionDecl *
10417   ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, QualType TargetType,
10418                                      bool Complain, DeclAccessPair &Found,
10419                                      bool *pHadMultipleCandidates = nullptr);
10420 
10421   /// Given an expression that refers to an overloaded function, try to
10422   /// resolve that function to a single function that can have its address
10423   /// taken. This will modify `Pair` iff it returns non-null.
10424   ///
10425   /// This routine can only succeed if from all of the candidates in the
10426   /// overload set for SrcExpr that can have their addresses taken, there is one
10427   /// candidate that is more constrained than the rest.
10428   FunctionDecl *
10429   resolveAddressOfSingleOverloadCandidate(Expr *E, DeclAccessPair &FoundResult);
10430 
10431   /// Given an overloaded function, tries to turn it into a non-overloaded
10432   /// function reference using resolveAddressOfSingleOverloadCandidate. This
10433   /// will perform access checks, diagnose the use of the resultant decl, and,
10434   /// if requested, potentially perform a function-to-pointer decay.
10435   ///
10436   /// Returns false if resolveAddressOfSingleOverloadCandidate fails.
10437   /// Otherwise, returns true. This may emit diagnostics and return true.
10438   bool resolveAndFixAddressOfSingleOverloadCandidate(
10439       ExprResult &SrcExpr, bool DoFunctionPointerConversion = false);
10440 
10441   /// Given an expression that refers to an overloaded function, try to
10442   /// resolve that overloaded function expression down to a single function.
10443   ///
10444   /// This routine can only resolve template-ids that refer to a single function
10445   /// template, where that template-id refers to a single template whose
10446   /// template arguments are either provided by the template-id or have
10447   /// defaults, as described in C++0x [temp.arg.explicit]p3.
10448   ///
10449   /// If no template-ids are found, no diagnostics are emitted and NULL is
10450   /// returned.
10451   FunctionDecl *ResolveSingleFunctionTemplateSpecialization(
10452       OverloadExpr *ovl, bool Complain = false, DeclAccessPair *Found = nullptr,
10453       TemplateSpecCandidateSet *FailedTSC = nullptr);
10454 
10455   // Resolve and fix an overloaded expression that can be resolved
10456   // because it identifies a single function template specialization.
10457   //
10458   // Last three arguments should only be supplied if Complain = true
10459   //
10460   // Return true if it was logically possible to so resolve the
10461   // expression, regardless of whether or not it succeeded.  Always
10462   // returns true if 'complain' is set.
10463   bool ResolveAndFixSingleFunctionTemplateSpecialization(
10464       ExprResult &SrcExpr, bool DoFunctionPointerConversion = false,
10465       bool Complain = false, SourceRange OpRangeForComplaining = SourceRange(),
10466       QualType DestTypeForComplaining = QualType(),
10467       unsigned DiagIDForComplaining = 0);
10468 
10469   /// Add the overload candidates named by callee and/or found by argument
10470   /// dependent lookup to the given overload set.
10471   void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
10472                                    ArrayRef<Expr *> Args,
10473                                    OverloadCandidateSet &CandidateSet,
10474                                    bool PartialOverloading = false);
10475 
10476   /// Add the call candidates from the given set of lookup results to the given
10477   /// overload set. Non-function lookup results are ignored.
10478   void AddOverloadedCallCandidates(
10479       LookupResult &R, TemplateArgumentListInfo *ExplicitTemplateArgs,
10480       ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet);
10481 
10482   // An enum used to represent the different possible results of building a
10483   // range-based for loop.
10484   enum ForRangeStatus {
10485     FRS_Success,
10486     FRS_NoViableFunction,
10487     FRS_DiagnosticIssued
10488   };
10489 
10490   /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
10491   /// given LookupResult is non-empty, it is assumed to describe a member which
10492   /// will be invoked. Otherwise, the function will be found via argument
10493   /// dependent lookup.
10494   /// CallExpr is set to a valid expression and FRS_Success returned on success,
10495   /// otherwise CallExpr is set to ExprError() and some non-success value
10496   /// is returned.
10497   ForRangeStatus BuildForRangeBeginEndCall(SourceLocation Loc,
10498                                            SourceLocation RangeLoc,
10499                                            const DeclarationNameInfo &NameInfo,
10500                                            LookupResult &MemberLookup,
10501                                            OverloadCandidateSet *CandidateSet,
10502                                            Expr *Range, ExprResult *CallExpr);
10503 
10504   /// BuildOverloadedCallExpr - Given the call expression that calls Fn
10505   /// (which eventually refers to the declaration Func) and the call
10506   /// arguments Args/NumArgs, attempt to resolve the function call down
10507   /// to a specific function. If overload resolution succeeds, returns
10508   /// the call expression produced by overload resolution.
10509   /// Otherwise, emits diagnostics and returns ExprError.
10510   ExprResult BuildOverloadedCallExpr(
10511       Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc,
10512       MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig,
10513       bool AllowTypoCorrection = true, bool CalleesAddressIsTaken = false);
10514 
10515   /// Constructs and populates an OverloadedCandidateSet from
10516   /// the given function.
10517   /// \returns true when an the ExprResult output parameter has been set.
10518   bool buildOverloadedCallSet(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
10519                               MultiExprArg Args, SourceLocation RParenLoc,
10520                               OverloadCandidateSet *CandidateSet,
10521                               ExprResult *Result);
10522 
10523   ExprResult CreateUnresolvedLookupExpr(CXXRecordDecl *NamingClass,
10524                                         NestedNameSpecifierLoc NNSLoc,
10525                                         DeclarationNameInfo DNI,
10526                                         const UnresolvedSetImpl &Fns,
10527                                         bool PerformADL = true);
10528 
10529   /// Create a unary operation that may resolve to an overloaded
10530   /// operator.
10531   ///
10532   /// \param OpLoc The location of the operator itself (e.g., '*').
10533   ///
10534   /// \param Opc The UnaryOperatorKind that describes this operator.
10535   ///
10536   /// \param Fns The set of non-member functions that will be
10537   /// considered by overload resolution. The caller needs to build this
10538   /// set based on the context using, e.g.,
10539   /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10540   /// set should not contain any member functions; those will be added
10541   /// by CreateOverloadedUnaryOp().
10542   ///
10543   /// \param Input The input argument.
10544   ExprResult CreateOverloadedUnaryOp(SourceLocation OpLoc,
10545                                      UnaryOperatorKind Opc,
10546                                      const UnresolvedSetImpl &Fns, Expr *input,
10547                                      bool RequiresADL = true);
10548 
10549   /// Perform lookup for an overloaded binary operator.
10550   void LookupOverloadedBinOp(OverloadCandidateSet &CandidateSet,
10551                              OverloadedOperatorKind Op,
10552                              const UnresolvedSetImpl &Fns,
10553                              ArrayRef<Expr *> Args, bool RequiresADL = true);
10554 
10555   /// Create a binary operation that may resolve to an overloaded
10556   /// operator.
10557   ///
10558   /// \param OpLoc The location of the operator itself (e.g., '+').
10559   ///
10560   /// \param Opc The BinaryOperatorKind that describes this operator.
10561   ///
10562   /// \param Fns The set of non-member functions that will be
10563   /// considered by overload resolution. The caller needs to build this
10564   /// set based on the context using, e.g.,
10565   /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10566   /// set should not contain any member functions; those will be added
10567   /// by CreateOverloadedBinOp().
10568   ///
10569   /// \param LHS Left-hand argument.
10570   /// \param RHS Right-hand argument.
10571   /// \param PerformADL Whether to consider operator candidates found by ADL.
10572   /// \param AllowRewrittenCandidates Whether to consider candidates found by
10573   ///        C++20 operator rewrites.
10574   /// \param DefaultedFn If we are synthesizing a defaulted operator function,
10575   ///        the function in question. Such a function is never a candidate in
10576   ///        our overload resolution. This also enables synthesizing a three-way
10577   ///        comparison from < and == as described in C++20 [class.spaceship]p1.
10578   ExprResult CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc,
10579                                    const UnresolvedSetImpl &Fns, Expr *LHS,
10580                                    Expr *RHS, bool RequiresADL = true,
10581                                    bool AllowRewrittenCandidates = true,
10582                                    FunctionDecl *DefaultedFn = nullptr);
10583   ExprResult BuildSynthesizedThreeWayComparison(SourceLocation OpLoc,
10584                                                 const UnresolvedSetImpl &Fns,
10585                                                 Expr *LHS, Expr *RHS,
10586                                                 FunctionDecl *DefaultedFn);
10587 
10588   ExprResult CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10589                                                 SourceLocation RLoc, Expr *Base,
10590                                                 MultiExprArg Args);
10591 
10592   /// BuildCallToMemberFunction - Build a call to a member
10593   /// function. MemExpr is the expression that refers to the member
10594   /// function (and includes the object parameter), Args/NumArgs are the
10595   /// arguments to the function call (not including the object
10596   /// parameter). The caller needs to validate that the member
10597   /// expression refers to a non-static member function or an overloaded
10598   /// member function.
10599   ExprResult BuildCallToMemberFunction(
10600       Scope *S, Expr *MemExpr, SourceLocation LParenLoc, MultiExprArg Args,
10601       SourceLocation RParenLoc, Expr *ExecConfig = nullptr,
10602       bool IsExecConfig = false, bool AllowRecovery = false);
10603 
10604   /// BuildCallToObjectOfClassType - Build a call to an object of class
10605   /// type (C++ [over.call.object]), which can end up invoking an
10606   /// overloaded function call operator (@c operator()) or performing a
10607   /// user-defined conversion on the object argument.
10608   ExprResult BuildCallToObjectOfClassType(Scope *S, Expr *Object,
10609                                           SourceLocation LParenLoc,
10610                                           MultiExprArg Args,
10611                                           SourceLocation RParenLoc);
10612 
10613   /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
10614   ///  (if one exists), where @c Base is an expression of class type and
10615   /// @c Member is the name of the member we're trying to find.
10616   ExprResult BuildOverloadedArrowExpr(Scope *S, Expr *Base,
10617                                       SourceLocation OpLoc,
10618                                       bool *NoArrowOperatorFound = nullptr);
10619 
10620   ExprResult BuildCXXMemberCallExpr(Expr *Exp, NamedDecl *FoundDecl,
10621                                     CXXConversionDecl *Method,
10622                                     bool HadMultipleCandidates);
10623 
10624   /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call
10625   /// to a literal operator described by the provided lookup results.
10626   ExprResult BuildLiteralOperatorCall(
10627       LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args,
10628       SourceLocation LitEndLoc,
10629       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
10630 
10631   /// FixOverloadedFunctionReference - E is an expression that refers to
10632   /// a C++ overloaded function (possibly with some parentheses and
10633   /// perhaps a '&' around it). We have resolved the overloaded function
10634   /// to the function declaration Fn, so patch up the expression E to
10635   /// refer (possibly indirectly) to Fn. Returns the new expr.
10636   ExprResult FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10637                                             FunctionDecl *Fn);
10638   ExprResult FixOverloadedFunctionReference(ExprResult,
10639                                             DeclAccessPair FoundDecl,
10640                                             FunctionDecl *Fn);
10641 
10642   /// - Returns a selector which best matches given argument list or
10643   /// nullptr if none could be found
10644   ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args,
10645                                    bool IsInstance,
10646                                    SmallVectorImpl<ObjCMethodDecl *> &Methods);
10647 
10648   ///@}
10649 
10650   //
10651   //
10652   // -------------------------------------------------------------------------
10653   //
10654   //
10655 
10656   /// \name Statements
10657   /// Implementations are in SemaStmt.cpp
10658   ///@{
10659 
10660 public:
10661   /// Stack of active SEH __finally scopes.  Can be empty.
10662   SmallVector<Scope *, 2> CurrentSEHFinally;
10663 
10664   StmtResult ActOnExprStmt(ExprResult Arg, bool DiscardedValue = true);
10665   StmtResult ActOnExprStmtError();
10666 
10667   StmtResult ActOnNullStmt(SourceLocation SemiLoc,
10668                            bool HasLeadingEmptyMacro = false);
10669 
10670   StmtResult ActOnDeclStmt(DeclGroupPtrTy Decl, SourceLocation StartLoc,
10671                            SourceLocation EndLoc);
10672   void ActOnForEachDeclStmt(DeclGroupPtrTy Decl);
10673 
10674 
10675   // Unused, kept in Clang 20 for ABI stability.
10676   void DiagnoseDiscardedExprMarkedNodiscard(const Expr *E);
10677 
10678   /// DiagnoseUnusedExprResult - If the statement passed in is an expression
10679   /// whose result is unused, warn.
10680   void DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID);
10681 
10682   void ActOnStartOfCompoundStmt(bool IsStmtExpr);
10683   void ActOnAfterCompoundStatementLeadingPragmas();
10684   void ActOnFinishOfCompoundStmt();
10685   StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,
10686                                ArrayRef<Stmt *> Elts, bool isStmtExpr);
10687 
10688   sema::CompoundScopeInfo &getCurCompoundScope() const;
10689 
10690   ExprResult ActOnCaseExpr(SourceLocation CaseLoc, ExprResult Val);
10691   StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHS,
10692                            SourceLocation DotDotDotLoc, ExprResult RHS,
10693                            SourceLocation ColonLoc);
10694 
10695   /// ActOnCaseStmtBody - This installs a statement as the body of a case.
10696   void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt);
10697 
10698   StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
10699                               SourceLocation ColonLoc, Stmt *SubStmt,
10700                               Scope *CurScope);
10701   StmtResult ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl,
10702                             SourceLocation ColonLoc, Stmt *SubStmt);
10703 
10704   StmtResult BuildAttributedStmt(SourceLocation AttrsLoc,
10705                                  ArrayRef<const Attr *> Attrs, Stmt *SubStmt);
10706   StmtResult ActOnAttributedStmt(const ParsedAttributes &AttrList,
10707                                  Stmt *SubStmt);
10708 
10709   /// Check whether the given statement can have musttail applied to it,
10710   /// issuing a diagnostic and returning false if not. In the success case,
10711   /// the statement is rewritten to remove implicit nodes from the return
10712   /// value.
10713   bool checkAndRewriteMustTailAttr(Stmt *St, const Attr &MTA);
10714 
10715   StmtResult ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind,
10716                          SourceLocation LParenLoc, Stmt *InitStmt,
10717                          ConditionResult Cond, SourceLocation RParenLoc,
10718                          Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal);
10719   StmtResult BuildIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind,
10720                          SourceLocation LParenLoc, Stmt *InitStmt,
10721                          ConditionResult Cond, SourceLocation RParenLoc,
10722                          Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal);
10723 
10724   ExprResult CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond);
10725 
10726   StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc,
10727                                     SourceLocation LParenLoc, Stmt *InitStmt,
10728                                     ConditionResult Cond,
10729                                     SourceLocation RParenLoc);
10730   StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
10731                                    Stmt *Body);
10732 
10733   /// DiagnoseAssignmentEnum - Warn if assignment to enum is a constant
10734   /// integer not in the range of enum values.
10735   void DiagnoseAssignmentEnum(QualType DstType, QualType SrcType,
10736                               Expr *SrcExpr);
10737 
10738   StmtResult ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc,
10739                             ConditionResult Cond, SourceLocation RParenLoc,
10740                             Stmt *Body);
10741   StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body,
10742                          SourceLocation WhileLoc, SourceLocation CondLParen,
10743                          Expr *Cond, SourceLocation CondRParen);
10744 
10745   StmtResult ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc,
10746                           Stmt *First, ConditionResult Second,
10747                           FullExprArg Third, SourceLocation RParenLoc,
10748                           Stmt *Body);
10749 
10750   /// In an Objective C collection iteration statement:
10751   ///   for (x in y)
10752   /// x can be an arbitrary l-value expression.  Bind it up as a
10753   /// full-expression.
10754   StmtResult ActOnForEachLValueExpr(Expr *E);
10755 
10756   enum BuildForRangeKind {
10757     /// Initial building of a for-range statement.
10758     BFRK_Build,
10759     /// Instantiation or recovery rebuild of a for-range statement. Don't
10760     /// attempt any typo-correction.
10761     BFRK_Rebuild,
10762     /// Determining whether a for-range statement could be built. Avoid any
10763     /// unnecessary or irreversible actions.
10764     BFRK_Check
10765   };
10766 
10767   /// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.
10768   ///
10769   /// C++11 [stmt.ranged]:
10770   ///   A range-based for statement is equivalent to
10771   ///
10772   ///   {
10773   ///     auto && __range = range-init;
10774   ///     for ( auto __begin = begin-expr,
10775   ///           __end = end-expr;
10776   ///           __begin != __end;
10777   ///           ++__begin ) {
10778   ///       for-range-declaration = *__begin;
10779   ///       statement
10780   ///     }
10781   ///   }
10782   ///
10783   /// The body of the loop is not available yet, since it cannot be analysed
10784   /// until we have determined the type of the for-range-declaration.
10785   StmtResult ActOnCXXForRangeStmt(
10786       Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc,
10787       Stmt *InitStmt, Stmt *LoopVar, SourceLocation ColonLoc, Expr *Collection,
10788       SourceLocation RParenLoc, BuildForRangeKind Kind,
10789       ArrayRef<MaterializeTemporaryExpr *> LifetimeExtendTemps = {});
10790 
10791   /// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.
10792   StmtResult BuildCXXForRangeStmt(
10793       SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt,
10794       SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End,
10795       Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc,
10796       BuildForRangeKind Kind,
10797       ArrayRef<MaterializeTemporaryExpr *> LifetimeExtendTemps = {});
10798 
10799   /// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.
10800   /// This is a separate step from ActOnCXXForRangeStmt because analysis of the
10801   /// body cannot be performed until after the type of the range variable is
10802   /// determined.
10803   StmtResult FinishCXXForRangeStmt(Stmt *ForRange, Stmt *Body);
10804 
10805   StmtResult ActOnGotoStmt(SourceLocation GotoLoc, SourceLocation LabelLoc,
10806                            LabelDecl *TheDecl);
10807   StmtResult ActOnIndirectGotoStmt(SourceLocation GotoLoc,
10808                                    SourceLocation StarLoc, Expr *DestExp);
10809   StmtResult ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope);
10810   StmtResult ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope);
10811 
10812   struct NamedReturnInfo {
10813     const VarDecl *Candidate;
10814 
10815     enum Status : uint8_t { None, MoveEligible, MoveEligibleAndCopyElidable };
10816     Status S;
10817 
10818     bool isMoveEligible() const { return S != None; };
10819     bool isCopyElidable() const { return S == MoveEligibleAndCopyElidable; }
10820   };
10821   enum class SimplerImplicitMoveMode { ForceOff, Normal, ForceOn };
10822 
10823   /// Determine whether the given expression might be move-eligible or
10824   /// copy-elidable in either a (co_)return statement or throw expression,
10825   /// without considering function return type, if applicable.
10826   ///
10827   /// \param E The expression being returned from the function or block,
10828   /// being thrown, or being co_returned from a coroutine. This expression
10829   /// might be modified by the implementation.
10830   ///
10831   /// \param Mode Overrides detection of current language mode
10832   /// and uses the rules for C++23.
10833   ///
10834   /// \returns An aggregate which contains the Candidate and isMoveEligible
10835   /// and isCopyElidable methods. If Candidate is non-null, it means
10836   /// isMoveEligible() would be true under the most permissive language
10837   /// standard.
10838   NamedReturnInfo getNamedReturnInfo(
10839       Expr *&E, SimplerImplicitMoveMode Mode = SimplerImplicitMoveMode::Normal);
10840 
10841   /// Determine whether the given NRVO candidate variable is move-eligible or
10842   /// copy-elidable, without considering function return type.
10843   ///
10844   /// \param VD The NRVO candidate variable.
10845   ///
10846   /// \returns An aggregate which contains the Candidate and isMoveEligible
10847   /// and isCopyElidable methods. If Candidate is non-null, it means
10848   /// isMoveEligible() would be true under the most permissive language
10849   /// standard.
10850   NamedReturnInfo getNamedReturnInfo(const VarDecl *VD);
10851 
10852   /// Updates given NamedReturnInfo's move-eligible and
10853   /// copy-elidable statuses, considering the function
10854   /// return type criteria as applicable to return statements.
10855   ///
10856   /// \param Info The NamedReturnInfo object to update.
10857   ///
10858   /// \param ReturnType This is the return type of the function.
10859   /// \returns The copy elision candidate, in case the initial return expression
10860   /// was copy elidable, or nullptr otherwise.
10861   const VarDecl *getCopyElisionCandidate(NamedReturnInfo &Info,
10862                                          QualType ReturnType);
10863 
10864   /// Perform the initialization of a potentially-movable value, which
10865   /// is the result of return value.
10866   ///
10867   /// This routine implements C++20 [class.copy.elision]p3, which attempts to
10868   /// treat returned lvalues as rvalues in certain cases (to prefer move
10869   /// construction), then falls back to treating them as lvalues if that failed.
10870   ExprResult
10871   PerformMoveOrCopyInitialization(const InitializedEntity &Entity,
10872                                   const NamedReturnInfo &NRInfo, Expr *Value,
10873                                   bool SupressSimplerImplicitMoves = false);
10874 
10875   TypeLoc getReturnTypeLoc(FunctionDecl *FD) const;
10876 
10877   /// Deduce the return type for a function from a returned expression, per
10878   /// C++1y [dcl.spec.auto]p6.
10879   bool DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD,
10880                                         SourceLocation ReturnLoc, Expr *RetExpr,
10881                                         const AutoType *AT);
10882 
10883   StmtResult ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
10884                              Scope *CurScope);
10885   StmtResult BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
10886                              bool AllowRecovery = false);
10887 
10888   /// ActOnCapScopeReturnStmt - Utility routine to type-check return statements
10889   /// for capturing scopes.
10890   StmtResult ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
10891                                      NamedReturnInfo &NRInfo,
10892                                      bool SupressSimplerImplicitMoves);
10893 
10894   /// ActOnCXXCatchBlock - Takes an exception declaration and a handler block
10895   /// and creates a proper catch handler from them.
10896   StmtResult ActOnCXXCatchBlock(SourceLocation CatchLoc, Decl *ExDecl,
10897                                 Stmt *HandlerBlock);
10898 
10899   /// ActOnCXXTryBlock - Takes a try compound-statement and a number of
10900   /// handlers and creates a try statement from them.
10901   StmtResult ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock,
10902                               ArrayRef<Stmt *> Handlers);
10903 
10904   StmtResult ActOnSEHTryBlock(bool IsCXXTry, // try (true) or __try (false) ?
10905                               SourceLocation TryLoc, Stmt *TryBlock,
10906                               Stmt *Handler);
10907   StmtResult ActOnSEHExceptBlock(SourceLocation Loc, Expr *FilterExpr,
10908                                  Stmt *Block);
10909   void ActOnStartSEHFinallyBlock();
10910   void ActOnAbortSEHFinallyBlock();
10911   StmtResult ActOnFinishSEHFinallyBlock(SourceLocation Loc, Stmt *Block);
10912   StmtResult ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope);
10913 
10914   StmtResult BuildMSDependentExistsStmt(SourceLocation KeywordLoc,
10915                                         bool IsIfExists,
10916                                         NestedNameSpecifierLoc QualifierLoc,
10917                                         DeclarationNameInfo NameInfo,
10918                                         Stmt *Nested);
10919   StmtResult ActOnMSDependentExistsStmt(SourceLocation KeywordLoc,
10920                                         bool IsIfExists, CXXScopeSpec &SS,
10921                                         UnqualifiedId &Name, Stmt *Nested);
10922 
10923   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
10924                                 CapturedRegionKind Kind, unsigned NumParams);
10925   typedef std::pair<StringRef, QualType> CapturedParamNameType;
10926   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
10927                                 CapturedRegionKind Kind,
10928                                 ArrayRef<CapturedParamNameType> Params,
10929                                 unsigned OpenMPCaptureLevel = 0);
10930   StmtResult ActOnCapturedRegionEnd(Stmt *S);
10931   void ActOnCapturedRegionError();
10932   RecordDecl *CreateCapturedStmtRecordDecl(CapturedDecl *&CD,
10933                                            SourceLocation Loc,
10934                                            unsigned NumParams);
10935 
10936 private:
10937   /// Check whether the given statement can have musttail applied to it,
10938   /// issuing a diagnostic and returning false if not.
10939   bool checkMustTailAttr(const Stmt *St, const Attr &MTA);
10940 
10941   /// Check if the given expression contains 'break' or 'continue'
10942   /// statement that produces control flow different from GCC.
10943   void CheckBreakContinueBinding(Expr *E);
10944 
10945   ///@}
10946 
10947   //
10948   //
10949   // -------------------------------------------------------------------------
10950   //
10951   //
10952 
10953   /// \name `inline asm` Statement
10954   /// Implementations are in SemaStmtAsm.cpp
10955   ///@{
10956 
10957 public:
10958   StmtResult ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple,
10959                              bool IsVolatile, unsigned NumOutputs,
10960                              unsigned NumInputs, IdentifierInfo **Names,
10961                              MultiExprArg Constraints, MultiExprArg Exprs,
10962                              Expr *AsmString, MultiExprArg Clobbers,
10963                              unsigned NumLabels, SourceLocation RParenLoc);
10964 
10965   void FillInlineAsmIdentifierInfo(Expr *Res,
10966                                    llvm::InlineAsmIdentifierInfo &Info);
10967   ExprResult LookupInlineAsmIdentifier(CXXScopeSpec &SS,
10968                                        SourceLocation TemplateKWLoc,
10969                                        UnqualifiedId &Id,
10970                                        bool IsUnevaluatedContext);
10971   bool LookupInlineAsmField(StringRef Base, StringRef Member, unsigned &Offset,
10972                             SourceLocation AsmLoc);
10973   ExprResult LookupInlineAsmVarDeclField(Expr *RefExpr, StringRef Member,
10974                                          SourceLocation AsmLoc);
10975   StmtResult ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
10976                             ArrayRef<Token> AsmToks, StringRef AsmString,
10977                             unsigned NumOutputs, unsigned NumInputs,
10978                             ArrayRef<StringRef> Constraints,
10979                             ArrayRef<StringRef> Clobbers,
10980                             ArrayRef<Expr *> Exprs, SourceLocation EndLoc);
10981   LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName,
10982                                    SourceLocation Location, bool AlwaysCreate);
10983 
10984   ///@}
10985 
10986   //
10987   //
10988   // -------------------------------------------------------------------------
10989   //
10990   //
10991 
10992   /// \name Statement Attribute Handling
10993   /// Implementations are in SemaStmtAttr.cpp
10994   ///@{
10995 
10996 public:
10997   bool CheckNoInlineAttr(const Stmt *OrigSt, const Stmt *CurSt,
10998                          const AttributeCommonInfo &A);
10999   bool CheckAlwaysInlineAttr(const Stmt *OrigSt, const Stmt *CurSt,
11000                              const AttributeCommonInfo &A);
11001 
11002   CodeAlignAttr *BuildCodeAlignAttr(const AttributeCommonInfo &CI, Expr *E);
11003   bool CheckRebuiltStmtAttributes(ArrayRef<const Attr *> Attrs);
11004 
11005   /// Process the attributes before creating an attributed statement. Returns
11006   /// the semantic attributes that have been processed.
11007   void ProcessStmtAttributes(Stmt *Stmt, const ParsedAttributes &InAttrs,
11008                              SmallVectorImpl<const Attr *> &OutAttrs);
11009 
11010   ExprResult ActOnCXXAssumeAttr(Stmt *St, const ParsedAttr &A,
11011                                 SourceRange Range);
11012   ExprResult BuildCXXAssumeExpr(Expr *Assumption,
11013                                 const IdentifierInfo *AttrName,
11014                                 SourceRange Range);
11015 
11016   ///@}
11017 
11018   //
11019   //
11020   // -------------------------------------------------------------------------
11021   //
11022   //
11023 
11024   /// \name C++ Templates
11025   /// Implementations are in SemaTemplate.cpp
11026   ///@{
11027 
11028 public:
11029   // Saves the current floating-point pragma stack and clear it in this Sema.
11030   class FpPragmaStackSaveRAII {
11031   public:
11032     FpPragmaStackSaveRAII(Sema &S)
11033         : S(S), SavedStack(std::move(S.FpPragmaStack)) {
11034       S.FpPragmaStack.Stack.clear();
11035     }
11036     ~FpPragmaStackSaveRAII() { S.FpPragmaStack = std::move(SavedStack); }
11037 
11038   private:
11039     Sema &S;
11040     PragmaStack<FPOptionsOverride> SavedStack;
11041   };
11042 
11043   void resetFPOptions(FPOptions FPO) {
11044     CurFPFeatures = FPO;
11045     FpPragmaStack.CurrentValue = FPO.getChangesFrom(FPOptions(LangOpts));
11046   }
11047 
11048   ArrayRef<InventedTemplateParameterInfo> getInventedParameterInfos() const {
11049     return llvm::ArrayRef(InventedParameterInfos.begin() +
11050                               InventedParameterInfosStart,
11051                           InventedParameterInfos.end());
11052   }
11053 
11054   /// The number of SFINAE diagnostics that have been trapped.
11055   unsigned NumSFINAEErrors;
11056 
11057   ArrayRef<sema::FunctionScopeInfo *> getFunctionScopes() const {
11058     return llvm::ArrayRef(FunctionScopes.begin() + FunctionScopesStart,
11059                           FunctionScopes.end());
11060   }
11061 
11062   typedef llvm::MapVector<const FunctionDecl *,
11063                           std::unique_ptr<LateParsedTemplate>>
11064       LateParsedTemplateMapT;
11065   LateParsedTemplateMapT LateParsedTemplateMap;
11066 
11067   /// Determine the number of levels of enclosing template parameters. This is
11068   /// only usable while parsing. Note that this does not include dependent
11069   /// contexts in which no template parameters have yet been declared, such as
11070   /// in a terse function template or generic lambda before the first 'auto' is
11071   /// encountered.
11072   unsigned getTemplateDepth(Scope *S) const;
11073 
11074   void FilterAcceptableTemplateNames(LookupResult &R,
11075                                      bool AllowFunctionTemplates = true,
11076                                      bool AllowDependent = true);
11077   bool hasAnyAcceptableTemplateNames(LookupResult &R,
11078                                      bool AllowFunctionTemplates = true,
11079                                      bool AllowDependent = true,
11080                                      bool AllowNonTemplateFunctions = false);
11081   /// Try to interpret the lookup result D as a template-name.
11082   ///
11083   /// \param D A declaration found by name lookup.
11084   /// \param AllowFunctionTemplates Whether function templates should be
11085   ///        considered valid results.
11086   /// \param AllowDependent Whether unresolved using declarations (that might
11087   ///        name templates) should be considered valid results.
11088   static NamedDecl *getAsTemplateNameDecl(NamedDecl *D,
11089                                           bool AllowFunctionTemplates = true,
11090                                           bool AllowDependent = true);
11091 
11092   enum TemplateNameIsRequiredTag { TemplateNameIsRequired };
11093   /// Whether and why a template name is required in this lookup.
11094   class RequiredTemplateKind {
11095   public:
11096     /// Template name is required if TemplateKWLoc is valid.
11097     RequiredTemplateKind(SourceLocation TemplateKWLoc = SourceLocation())
11098         : TemplateKW(TemplateKWLoc) {}
11099     /// Template name is unconditionally required.
11100     RequiredTemplateKind(TemplateNameIsRequiredTag) {}
11101 
11102     SourceLocation getTemplateKeywordLoc() const {
11103       return TemplateKW.value_or(SourceLocation());
11104     }
11105     bool hasTemplateKeyword() const {
11106       return getTemplateKeywordLoc().isValid();
11107     }
11108     bool isRequired() const { return TemplateKW != SourceLocation(); }
11109     explicit operator bool() const { return isRequired(); }
11110 
11111   private:
11112     std::optional<SourceLocation> TemplateKW;
11113   };
11114 
11115   enum class AssumedTemplateKind {
11116     /// This is not assumed to be a template name.
11117     None,
11118     /// This is assumed to be a template name because lookup found nothing.
11119     FoundNothing,
11120     /// This is assumed to be a template name because lookup found one or more
11121     /// functions (but no function templates).
11122     FoundFunctions,
11123   };
11124 
11125   bool
11126   LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
11127                      QualType ObjectType, bool EnteringContext,
11128                      RequiredTemplateKind RequiredTemplate = SourceLocation(),
11129                      AssumedTemplateKind *ATK = nullptr,
11130                      bool AllowTypoCorrection = true);
11131 
11132   TemplateNameKind isTemplateName(Scope *S, CXXScopeSpec &SS,
11133                                   bool hasTemplateKeyword,
11134                                   const UnqualifiedId &Name,
11135                                   ParsedType ObjectType, bool EnteringContext,
11136                                   TemplateTy &Template,
11137                                   bool &MemberOfUnknownSpecialization,
11138                                   bool Disambiguation = false);
11139 
11140   /// Try to resolve an undeclared template name as a type template.
11141   ///
11142   /// Sets II to the identifier corresponding to the template name, and updates
11143   /// Name to a corresponding (typo-corrected) type template name and TNK to
11144   /// the corresponding kind, if possible.
11145   void ActOnUndeclaredTypeTemplateName(Scope *S, TemplateTy &Name,
11146                                        TemplateNameKind &TNK,
11147                                        SourceLocation NameLoc,
11148                                        IdentifierInfo *&II);
11149 
11150   bool resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name,
11151                                         SourceLocation NameLoc,
11152                                         bool Diagnose = true);
11153 
11154   /// Determine whether a particular identifier might be the name in a C++1z
11155   /// deduction-guide declaration.
11156   bool isDeductionGuideName(Scope *S, const IdentifierInfo &Name,
11157                             SourceLocation NameLoc, CXXScopeSpec &SS,
11158                             ParsedTemplateTy *Template = nullptr);
11159 
11160   bool DiagnoseUnknownTemplateName(const IdentifierInfo &II,
11161                                    SourceLocation IILoc, Scope *S,
11162                                    const CXXScopeSpec *SS,
11163                                    TemplateTy &SuggestedTemplate,
11164                                    TemplateNameKind &SuggestedKind);
11165 
11166   /// Determine whether we would be unable to instantiate this template (because
11167   /// it either has no definition, or is in the process of being instantiated).
11168   bool DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation,
11169                                       NamedDecl *Instantiation,
11170                                       bool InstantiatedFromMember,
11171                                       const NamedDecl *Pattern,
11172                                       const NamedDecl *PatternDef,
11173                                       TemplateSpecializationKind TSK,
11174                                       bool Complain = true);
11175 
11176   /// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining
11177   /// that the template parameter 'PrevDecl' is being shadowed by a new
11178   /// declaration at location Loc. Returns true to indicate that this is
11179   /// an error, and false otherwise.
11180   ///
11181   /// \param Loc The location of the declaration that shadows a template
11182   ///            parameter.
11183   ///
11184   /// \param PrevDecl The template parameter that the declaration shadows.
11185   ///
11186   /// \param SupportedForCompatibility Whether to issue the diagnostic as
11187   ///        a warning for compatibility with older versions of clang.
11188   ///        Ignored when MSVC compatibility is enabled.
11189   void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl,
11190                                        bool SupportedForCompatibility = false);
11191 
11192   /// AdjustDeclIfTemplate - If the given decl happens to be a template, reset
11193   /// the parameter D to reference the templated declaration and return a
11194   /// pointer to the template declaration. Otherwise, do nothing to D and return
11195   /// null.
11196   TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl);
11197 
11198   /// ActOnTypeParameter - Called when a C++ template type parameter
11199   /// (e.g., "typename T") has been parsed. Typename specifies whether
11200   /// the keyword "typename" was used to declare the type parameter
11201   /// (otherwise, "class" was used), and KeyLoc is the location of the
11202   /// "class" or "typename" keyword. ParamName is the name of the
11203   /// parameter (NULL indicates an unnamed template parameter) and
11204   /// ParamNameLoc is the location of the parameter name (if any).
11205   /// If the type parameter has a default argument, it will be added
11206   /// later via ActOnTypeParameterDefault.
11207   NamedDecl *ActOnTypeParameter(Scope *S, bool Typename,
11208                                 SourceLocation EllipsisLoc,
11209                                 SourceLocation KeyLoc,
11210                                 IdentifierInfo *ParamName,
11211                                 SourceLocation ParamNameLoc, unsigned Depth,
11212                                 unsigned Position, SourceLocation EqualLoc,
11213                                 ParsedType DefaultArg, bool HasTypeConstraint);
11214 
11215   bool CheckTypeConstraint(TemplateIdAnnotation *TypeConstraint);
11216 
11217   bool ActOnTypeConstraint(const CXXScopeSpec &SS,
11218                            TemplateIdAnnotation *TypeConstraint,
11219                            TemplateTypeParmDecl *ConstrainedParameter,
11220                            SourceLocation EllipsisLoc);
11221   bool BuildTypeConstraint(const CXXScopeSpec &SS,
11222                            TemplateIdAnnotation *TypeConstraint,
11223                            TemplateTypeParmDecl *ConstrainedParameter,
11224                            SourceLocation EllipsisLoc,
11225                            bool AllowUnexpandedPack);
11226 
11227   /// Attach a type-constraint to a template parameter.
11228   /// \returns true if an error occurred. This can happen if the
11229   /// immediately-declared constraint could not be formed (e.g. incorrect number
11230   /// of arguments for the named concept).
11231   bool AttachTypeConstraint(NestedNameSpecifierLoc NS,
11232                             DeclarationNameInfo NameInfo,
11233                             ConceptDecl *NamedConcept, NamedDecl *FoundDecl,
11234                             const TemplateArgumentListInfo *TemplateArgs,
11235                             TemplateTypeParmDecl *ConstrainedParameter,
11236                             QualType ConstrainedType,
11237                             SourceLocation EllipsisLoc);
11238 
11239   bool AttachTypeConstraint(AutoTypeLoc TL,
11240                             NonTypeTemplateParmDecl *NewConstrainedParm,
11241                             NonTypeTemplateParmDecl *OrigConstrainedParm,
11242                             SourceLocation EllipsisLoc);
11243 
11244   /// Require the given type to be a structural type, and diagnose if it is not.
11245   ///
11246   /// \return \c true if an error was produced.
11247   bool RequireStructuralType(QualType T, SourceLocation Loc);
11248 
11249   /// Check that the type of a non-type template parameter is
11250   /// well-formed.
11251   ///
11252   /// \returns the (possibly-promoted) parameter type if valid;
11253   /// otherwise, produces a diagnostic and returns a NULL type.
11254   QualType CheckNonTypeTemplateParameterType(TypeSourceInfo *&TSI,
11255                                              SourceLocation Loc);
11256   QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc);
11257 
11258   NamedDecl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
11259                                            unsigned Depth, unsigned Position,
11260                                            SourceLocation EqualLoc,
11261                                            Expr *DefaultArg);
11262 
11263   /// ActOnTemplateTemplateParameter - Called when a C++ template template
11264   /// parameter (e.g. T in template <template \<typename> class T> class array)
11265   /// has been parsed. S is the current scope.
11266   NamedDecl *ActOnTemplateTemplateParameter(
11267       Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params,
11268       bool Typename, SourceLocation EllipsisLoc, IdentifierInfo *ParamName,
11269       SourceLocation ParamNameLoc, unsigned Depth, unsigned Position,
11270       SourceLocation EqualLoc, ParsedTemplateArgument DefaultArg);
11271 
11272   /// ActOnTemplateParameterList - Builds a TemplateParameterList, optionally
11273   /// constrained by RequiresClause, that contains the template parameters in
11274   /// Params.
11275   TemplateParameterList *ActOnTemplateParameterList(
11276       unsigned Depth, SourceLocation ExportLoc, SourceLocation TemplateLoc,
11277       SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params,
11278       SourceLocation RAngleLoc, Expr *RequiresClause);
11279 
11280   /// The context in which we are checking a template parameter list.
11281   enum TemplateParamListContext {
11282     // For this context, Class, Variable, TypeAlias, and non-pack Template
11283     // Template Parameters are treated uniformly.
11284     TPC_Other,
11285 
11286     TPC_FunctionTemplate,
11287     TPC_ClassTemplateMember,
11288     TPC_FriendClassTemplate,
11289     TPC_FriendFunctionTemplate,
11290     TPC_FriendFunctionTemplateDefinition,
11291     TPC_TemplateTemplateParameterPack,
11292   };
11293 
11294   /// Checks the validity of a template parameter list, possibly
11295   /// considering the template parameter list from a previous
11296   /// declaration.
11297   ///
11298   /// If an "old" template parameter list is provided, it must be
11299   /// equivalent (per TemplateParameterListsAreEqual) to the "new"
11300   /// template parameter list.
11301   ///
11302   /// \param NewParams Template parameter list for a new template
11303   /// declaration. This template parameter list will be updated with any
11304   /// default arguments that are carried through from the previous
11305   /// template parameter list.
11306   ///
11307   /// \param OldParams If provided, template parameter list from a
11308   /// previous declaration of the same template. Default template
11309   /// arguments will be merged from the old template parameter list to
11310   /// the new template parameter list.
11311   ///
11312   /// \param TPC Describes the context in which we are checking the given
11313   /// template parameter list.
11314   ///
11315   /// \param SkipBody If we might have already made a prior merged definition
11316   /// of this template visible, the corresponding body-skipping information.
11317   /// Default argument redefinition is not an error when skipping such a body,
11318   /// because (under the ODR) we can assume the default arguments are the same
11319   /// as the prior merged definition.
11320   ///
11321   /// \returns true if an error occurred, false otherwise.
11322   bool CheckTemplateParameterList(TemplateParameterList *NewParams,
11323                                   TemplateParameterList *OldParams,
11324                                   TemplateParamListContext TPC,
11325                                   SkipBodyInfo *SkipBody = nullptr);
11326 
11327   /// Match the given template parameter lists to the given scope
11328   /// specifier, returning the template parameter list that applies to the
11329   /// name.
11330   ///
11331   /// \param DeclStartLoc the start of the declaration that has a scope
11332   /// specifier or a template parameter list.
11333   ///
11334   /// \param DeclLoc The location of the declaration itself.
11335   ///
11336   /// \param SS the scope specifier that will be matched to the given template
11337   /// parameter lists. This scope specifier precedes a qualified name that is
11338   /// being declared.
11339   ///
11340   /// \param TemplateId The template-id following the scope specifier, if there
11341   /// is one. Used to check for a missing 'template<>'.
11342   ///
11343   /// \param ParamLists the template parameter lists, from the outermost to the
11344   /// innermost template parameter lists.
11345   ///
11346   /// \param IsFriend Whether to apply the slightly different rules for
11347   /// matching template parameters to scope specifiers in friend
11348   /// declarations.
11349   ///
11350   /// \param IsMemberSpecialization will be set true if the scope specifier
11351   /// denotes a fully-specialized type, and therefore this is a declaration of
11352   /// a member specialization.
11353   ///
11354   /// \returns the template parameter list, if any, that corresponds to the
11355   /// name that is preceded by the scope specifier @p SS. This template
11356   /// parameter list may have template parameters (if we're declaring a
11357   /// template) or may have no template parameters (if we're declaring a
11358   /// template specialization), or may be NULL (if what we're declaring isn't
11359   /// itself a template).
11360   TemplateParameterList *MatchTemplateParametersToScopeSpecifier(
11361       SourceLocation DeclStartLoc, SourceLocation DeclLoc,
11362       const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId,
11363       ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend,
11364       bool &IsMemberSpecialization, bool &Invalid,
11365       bool SuppressDiagnostic = false);
11366 
11367   /// Returns the template parameter list with all default template argument
11368   /// information.
11369   TemplateParameterList *GetTemplateParameterList(TemplateDecl *TD);
11370 
11371   DeclResult CheckClassTemplate(
11372       Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
11373       CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc,
11374       const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams,
11375       AccessSpecifier AS, SourceLocation ModulePrivateLoc,
11376       SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists,
11377       TemplateParameterList **OuterTemplateParamLists,
11378       SkipBodyInfo *SkipBody = nullptr);
11379 
11380   /// Translates template arguments as provided by the parser
11381   /// into template arguments used by semantic analysis.
11382   void translateTemplateArguments(const ASTTemplateArgsPtr &In,
11383                                   TemplateArgumentListInfo &Out);
11384 
11385   /// Convert a parsed type into a parsed template argument. This is mostly
11386   /// trivial, except that we may have parsed a C++17 deduced class template
11387   /// specialization type, in which case we should form a template template
11388   /// argument instead of a type template argument.
11389   ParsedTemplateArgument ActOnTemplateTypeArgument(TypeResult ParsedType);
11390 
11391   void NoteAllFoundTemplates(TemplateName Name);
11392 
11393   QualType CheckTemplateIdType(TemplateName Template,
11394                                SourceLocation TemplateLoc,
11395                                TemplateArgumentListInfo &TemplateArgs);
11396 
11397   TypeResult
11398   ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
11399                       TemplateTy Template, const IdentifierInfo *TemplateII,
11400                       SourceLocation TemplateIILoc, SourceLocation LAngleLoc,
11401                       ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc,
11402                       bool IsCtorOrDtorName = false, bool IsClassName = false,
11403                       ImplicitTypenameContext AllowImplicitTypename =
11404                           ImplicitTypenameContext::No);
11405 
11406   /// Parsed an elaborated-type-specifier that refers to a template-id,
11407   /// such as \c class T::template apply<U>.
11408   TypeResult ActOnTagTemplateIdType(
11409       TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc,
11410       CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD,
11411       SourceLocation TemplateLoc, SourceLocation LAngleLoc,
11412       ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc);
11413 
11414   DeclResult ActOnVarTemplateSpecialization(
11415       Scope *S, Declarator &D, TypeSourceInfo *DI, LookupResult &Previous,
11416       SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams,
11417       StorageClass SC, bool IsPartialSpecialization);
11418 
11419   /// Get the specialization of the given variable template corresponding to
11420   /// the specified argument list, or a null-but-valid result if the arguments
11421   /// are dependent.
11422   DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
11423                                 SourceLocation TemplateLoc,
11424                                 SourceLocation TemplateNameLoc,
11425                                 const TemplateArgumentListInfo &TemplateArgs);
11426 
11427   /// Form a reference to the specialization of the given variable template
11428   /// corresponding to the specified argument list, or a null-but-valid result
11429   /// if the arguments are dependent.
11430   ExprResult CheckVarTemplateId(const CXXScopeSpec &SS,
11431                                 const DeclarationNameInfo &NameInfo,
11432                                 VarTemplateDecl *Template, NamedDecl *FoundD,
11433                                 SourceLocation TemplateLoc,
11434                                 const TemplateArgumentListInfo *TemplateArgs);
11435 
11436   ExprResult
11437   CheckConceptTemplateId(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
11438                          const DeclarationNameInfo &ConceptNameInfo,
11439                          NamedDecl *FoundDecl, ConceptDecl *NamedConcept,
11440                          const TemplateArgumentListInfo *TemplateArgs);
11441 
11442   void diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc);
11443   void diagnoseMissingTemplateArguments(const CXXScopeSpec &SS,
11444                                         bool TemplateKeyword, TemplateDecl *TD,
11445                                         SourceLocation Loc);
11446 
11447   ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS,
11448                                  SourceLocation TemplateKWLoc, LookupResult &R,
11449                                  bool RequiresADL,
11450                                  const TemplateArgumentListInfo *TemplateArgs);
11451 
11452   // We actually only call this from template instantiation.
11453   ExprResult
11454   BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
11455                                const DeclarationNameInfo &NameInfo,
11456                                const TemplateArgumentListInfo *TemplateArgs,
11457                                bool IsAddressOfOperand);
11458 
11459   /// Form a template name from a name that is syntactically required to name a
11460   /// template, either due to use of the 'template' keyword or because a name in
11461   /// this syntactic context is assumed to name a template (C++
11462   /// [temp.names]p2-4).
11463   ///
11464   /// This action forms a template name given the name of the template and its
11465   /// optional scope specifier. This is used when the 'template' keyword is used
11466   /// or when the parsing context unambiguously treats a following '<' as
11467   /// introducing a template argument list. Note that this may produce a
11468   /// non-dependent template name if we can perform the lookup now and identify
11469   /// the named template.
11470   ///
11471   /// For example, given "x.MetaFun::template apply", the scope specifier
11472   /// \p SS will be "MetaFun::", \p TemplateKWLoc contains the location
11473   /// of the "template" keyword, and "apply" is the \p Name.
11474   TemplateNameKind ActOnTemplateName(Scope *S, CXXScopeSpec &SS,
11475                                      SourceLocation TemplateKWLoc,
11476                                      const UnqualifiedId &Name,
11477                                      ParsedType ObjectType,
11478                                      bool EnteringContext, TemplateTy &Template,
11479                                      bool AllowInjectedClassName = false);
11480 
11481   DeclResult ActOnClassTemplateSpecialization(
11482       Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
11483       SourceLocation ModulePrivateLoc, CXXScopeSpec &SS,
11484       TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr,
11485       MultiTemplateParamsArg TemplateParameterLists,
11486       SkipBodyInfo *SkipBody = nullptr);
11487 
11488   /// Check the non-type template arguments of a class template
11489   /// partial specialization according to C++ [temp.class.spec]p9.
11490   ///
11491   /// \param TemplateNameLoc the location of the template name.
11492   /// \param PrimaryTemplate the template parameters of the primary class
11493   ///        template.
11494   /// \param NumExplicit the number of explicitly-specified template arguments.
11495   /// \param TemplateArgs the template arguments of the class template
11496   ///        partial specialization.
11497   ///
11498   /// \returns \c true if there was an error, \c false otherwise.
11499   bool CheckTemplatePartialSpecializationArgs(SourceLocation Loc,
11500                                               TemplateDecl *PrimaryTemplate,
11501                                               unsigned NumExplicitArgs,
11502                                               ArrayRef<TemplateArgument> Args);
11503   void CheckTemplatePartialSpecialization(
11504       ClassTemplatePartialSpecializationDecl *Partial);
11505   void CheckTemplatePartialSpecialization(
11506       VarTemplatePartialSpecializationDecl *Partial);
11507 
11508   Decl *ActOnTemplateDeclarator(Scope *S,
11509                                 MultiTemplateParamsArg TemplateParameterLists,
11510                                 Declarator &D);
11511 
11512   /// Diagnose cases where we have an explicit template specialization
11513   /// before/after an explicit template instantiation, producing diagnostics
11514   /// for those cases where they are required and determining whether the
11515   /// new specialization/instantiation will have any effect.
11516   ///
11517   /// \param NewLoc the location of the new explicit specialization or
11518   /// instantiation.
11519   ///
11520   /// \param NewTSK the kind of the new explicit specialization or
11521   /// instantiation.
11522   ///
11523   /// \param PrevDecl the previous declaration of the entity.
11524   ///
11525   /// \param PrevTSK the kind of the old explicit specialization or
11526   /// instantiatin.
11527   ///
11528   /// \param PrevPointOfInstantiation if valid, indicates where the previous
11529   /// declaration was instantiated (either implicitly or explicitly).
11530   ///
11531   /// \param HasNoEffect will be set to true to indicate that the new
11532   /// specialization or instantiation has no effect and should be ignored.
11533   ///
11534   /// \returns true if there was an error that should prevent the introduction
11535   /// of the new declaration into the AST, false otherwise.
11536   bool CheckSpecializationInstantiationRedecl(
11537       SourceLocation NewLoc,
11538       TemplateSpecializationKind ActOnExplicitInstantiationNewTSK,
11539       NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK,
11540       SourceLocation PrevPtOfInstantiation, bool &SuppressNew);
11541 
11542   /// Perform semantic analysis for the given dependent function
11543   /// template specialization.
11544   ///
11545   /// The only possible way to get a dependent function template specialization
11546   /// is with a friend declaration, like so:
11547   ///
11548   /// \code
11549   ///   template \<class T> void foo(T);
11550   ///   template \<class T> class A {
11551   ///     friend void foo<>(T);
11552   ///   };
11553   /// \endcode
11554   ///
11555   /// There really isn't any useful analysis we can do here, so we
11556   /// just store the information.
11557   bool CheckDependentFunctionTemplateSpecialization(
11558       FunctionDecl *FD, const TemplateArgumentListInfo *ExplicitTemplateArgs,
11559       LookupResult &Previous);
11560 
11561   /// Perform semantic analysis for the given function template
11562   /// specialization.
11563   ///
11564   /// This routine performs all of the semantic analysis required for an
11565   /// explicit function template specialization. On successful completion,
11566   /// the function declaration \p FD will become a function template
11567   /// specialization.
11568   ///
11569   /// \param FD the function declaration, which will be updated to become a
11570   /// function template specialization.
11571   ///
11572   /// \param ExplicitTemplateArgs the explicitly-provided template arguments,
11573   /// if any. Note that this may be valid info even when 0 arguments are
11574   /// explicitly provided as in, e.g., \c void sort<>(char*, char*);
11575   /// as it anyway contains info on the angle brackets locations.
11576   ///
11577   /// \param Previous the set of declarations that may be specialized by
11578   /// this function specialization.
11579   ///
11580   /// \param QualifiedFriend whether this is a lookup for a qualified friend
11581   /// declaration with no explicit template argument list that might be
11582   /// befriending a function template specialization.
11583   bool CheckFunctionTemplateSpecialization(
11584       FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs,
11585       LookupResult &Previous, bool QualifiedFriend = false);
11586 
11587   /// Perform semantic analysis for the given non-template member
11588   /// specialization.
11589   ///
11590   /// This routine performs all of the semantic analysis required for an
11591   /// explicit member function specialization. On successful completion,
11592   /// the function declaration \p FD will become a member function
11593   /// specialization.
11594   ///
11595   /// \param Member the member declaration, which will be updated to become a
11596   /// specialization.
11597   ///
11598   /// \param Previous the set of declarations, one of which may be specialized
11599   /// by this function specialization;  the set will be modified to contain the
11600   /// redeclared member.
11601   bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
11602   void CompleteMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
11603 
11604   // Explicit instantiation of a class template specialization
11605   DeclResult ActOnExplicitInstantiation(
11606       Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc,
11607       unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS,
11608       TemplateTy Template, SourceLocation TemplateNameLoc,
11609       SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs,
11610       SourceLocation RAngleLoc, const ParsedAttributesView &Attr);
11611 
11612   // Explicit instantiation of a member class of a class template.
11613   DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc,
11614                                         SourceLocation TemplateLoc,
11615                                         unsigned TagSpec, SourceLocation KWLoc,
11616                                         CXXScopeSpec &SS, IdentifierInfo *Name,
11617                                         SourceLocation NameLoc,
11618                                         const ParsedAttributesView &Attr);
11619 
11620   DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc,
11621                                         SourceLocation TemplateLoc,
11622                                         Declarator &D);
11623 
11624   /// If the given template parameter has a default template
11625   /// argument, substitute into that default template argument and
11626   /// return the corresponding template argument.
11627   TemplateArgumentLoc SubstDefaultTemplateArgumentIfAvailable(
11628       TemplateDecl *Template, SourceLocation TemplateLoc,
11629       SourceLocation RAngleLoc, Decl *Param,
11630       ArrayRef<TemplateArgument> SugaredConverted,
11631       ArrayRef<TemplateArgument> CanonicalConverted, bool &HasDefaultArg);
11632 
11633   /// Returns the top most location responsible for the definition of \p N.
11634   /// If \p N is a a template specialization, this is the location
11635   /// of the top of the instantiation stack.
11636   /// Otherwise, the location of \p N is returned.
11637   SourceLocation getTopMostPointOfInstantiation(const NamedDecl *) const;
11638 
11639   /// Specifies the context in which a particular template
11640   /// argument is being checked.
11641   enum CheckTemplateArgumentKind {
11642     /// The template argument was specified in the code or was
11643     /// instantiated with some deduced template arguments.
11644     CTAK_Specified,
11645 
11646     /// The template argument was deduced via template argument
11647     /// deduction.
11648     CTAK_Deduced,
11649 
11650     /// The template argument was deduced from an array bound
11651     /// via template argument deduction.
11652     CTAK_DeducedFromArrayBound
11653   };
11654 
11655   struct CheckTemplateArgumentInfo {
11656     explicit CheckTemplateArgumentInfo(bool PartialOrdering = false,
11657                                        bool MatchingTTP = false)
11658         : PartialOrdering(PartialOrdering), MatchingTTP(MatchingTTP) {}
11659     CheckTemplateArgumentInfo(const CheckTemplateArgumentInfo &) = delete;
11660     CheckTemplateArgumentInfo &
11661     operator=(const CheckTemplateArgumentInfo &) = delete;
11662 
11663     /// The checked, converted argument will be added to the
11664     /// end of these vectors.
11665     SmallVector<TemplateArgument, 4> SugaredConverted, CanonicalConverted;
11666 
11667     /// The check is being performed in the context of partial ordering.
11668     bool PartialOrdering;
11669 
11670     /// If true, assume these template arguments are
11671     /// the injected template arguments for a template template parameter.
11672     /// This will relax the requirement that all its possible uses are valid:
11673     /// TTP checking is loose, and assumes that invalid uses will be diagnosed
11674     /// during instantiation.
11675     bool MatchingTTP;
11676 
11677     /// Is set to true when, in the context of TTP matching, a pack parameter
11678     /// matches non-pack arguments.
11679     bool MatchedPackOnParmToNonPackOnArg = false;
11680   };
11681 
11682   /// Check that the given template argument corresponds to the given
11683   /// template parameter.
11684   ///
11685   /// \param Param The template parameter against which the argument will be
11686   /// checked.
11687   ///
11688   /// \param Arg The template argument, which may be updated due to conversions.
11689   ///
11690   /// \param Template The template in which the template argument resides.
11691   ///
11692   /// \param TemplateLoc The location of the template name for the template
11693   /// whose argument list we're matching.
11694   ///
11695   /// \param RAngleLoc The location of the right angle bracket ('>') that closes
11696   /// the template argument list.
11697   ///
11698   /// \param ArgumentPackIndex The index into the argument pack where this
11699   /// argument will be placed. Only valid if the parameter is a parameter pack.
11700   ///
11701   /// \param CTAK Describes how we arrived at this particular template argument:
11702   /// explicitly written, deduced, etc.
11703   ///
11704   /// \returns true on error, false otherwise.
11705   bool CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg,
11706                              NamedDecl *Template, SourceLocation TemplateLoc,
11707                              SourceLocation RAngleLoc,
11708                              unsigned ArgumentPackIndex,
11709                              CheckTemplateArgumentInfo &CTAI,
11710                              CheckTemplateArgumentKind CTAK);
11711 
11712   /// Check that the given template arguments can be provided to
11713   /// the given template, converting the arguments along the way.
11714   ///
11715   /// \param Template The template to which the template arguments are being
11716   /// provided.
11717   ///
11718   /// \param TemplateLoc The location of the template name in the source.
11719   ///
11720   /// \param TemplateArgs The list of template arguments. If the template is
11721   /// a template template parameter, this function may extend the set of
11722   /// template arguments to also include substituted, defaulted template
11723   /// arguments.
11724   ///
11725   /// \param PartialTemplateArgs True if the list of template arguments is
11726   /// intentionally partial, e.g., because we're checking just the initial
11727   /// set of template arguments.
11728   ///
11729   /// \param Converted Will receive the converted, canonicalized template
11730   /// arguments.
11731   ///
11732   /// \param UpdateArgsWithConversions If \c true, update \p TemplateArgs to
11733   /// contain the converted forms of the template arguments as written.
11734   /// Otherwise, \p TemplateArgs will not be modified.
11735   ///
11736   /// \param ConstraintsNotSatisfied If provided, and an error occurred, will
11737   /// receive true if the cause for the error is the associated constraints of
11738   /// the template not being satisfied by the template arguments.
11739   ///
11740   /// \param DefaultArgs any default arguments from template specialization
11741   /// deduction.
11742   ///
11743   /// \returns true if an error occurred, false otherwise.
11744   bool CheckTemplateArgumentList(TemplateDecl *Template,
11745                                  SourceLocation TemplateLoc,
11746                                  TemplateArgumentListInfo &TemplateArgs,
11747                                  const DefaultArguments &DefaultArgs,
11748                                  bool PartialTemplateArgs,
11749                                  CheckTemplateArgumentInfo &CTAI,
11750                                  bool UpdateArgsWithConversions = true,
11751                                  bool *ConstraintsNotSatisfied = nullptr);
11752 
11753   bool CheckTemplateTypeArgument(
11754       TemplateTypeParmDecl *Param, TemplateArgumentLoc &Arg,
11755       SmallVectorImpl<TemplateArgument> &SugaredConverted,
11756       SmallVectorImpl<TemplateArgument> &CanonicalConverted);
11757 
11758   /// Check a template argument against its corresponding
11759   /// template type parameter.
11760   ///
11761   /// This routine implements the semantics of C++ [temp.arg.type]. It
11762   /// returns true if an error occurred, and false otherwise.
11763   bool CheckTemplateArgument(TypeSourceInfo *Arg);
11764 
11765   /// Check a template argument against its corresponding
11766   /// non-type template parameter.
11767   ///
11768   /// This routine implements the semantics of C++ [temp.arg.nontype].
11769   /// If an error occurred, it returns ExprError(); otherwise, it
11770   /// returns the converted template argument. \p ParamType is the
11771   /// type of the non-type template parameter after it has been instantiated.
11772   ExprResult CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
11773                                    QualType InstantiatedParamType, Expr *Arg,
11774                                    TemplateArgument &SugaredConverted,
11775                                    TemplateArgument &CanonicalConverted,
11776                                    bool MatchingTTP,
11777                                    CheckTemplateArgumentKind CTAK);
11778 
11779   /// Check a template argument against its corresponding
11780   /// template template parameter.
11781   ///
11782   /// This routine implements the semantics of C++ [temp.arg.template].
11783   /// It returns true if an error occurred, and false otherwise.
11784   bool CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param,
11785                                      TemplateParameterList *Params,
11786                                      TemplateArgumentLoc &Arg,
11787                                      bool PartialOrdering,
11788                                      bool *MatchedPackOnParmToNonPackOnArg);
11789 
11790   void NoteTemplateLocation(const NamedDecl &Decl,
11791                             std::optional<SourceRange> ParamRange = {});
11792   void NoteTemplateParameterLocation(const NamedDecl &Decl);
11793 
11794   /// Given a non-type template argument that refers to a
11795   /// declaration and the type of its corresponding non-type template
11796   /// parameter, produce an expression that properly refers to that
11797   /// declaration.
11798   /// FIXME: This is used in some contexts where the resulting expression
11799   /// doesn't need to live too long. It would be useful if this function
11800   /// could return a temporary expression.
11801   ExprResult BuildExpressionFromDeclTemplateArgument(
11802       const TemplateArgument &Arg, QualType ParamType, SourceLocation Loc,
11803       NamedDecl *TemplateParam = nullptr);
11804   ExprResult
11805   BuildExpressionFromNonTypeTemplateArgument(const TemplateArgument &Arg,
11806                                              SourceLocation Loc);
11807 
11808   /// Enumeration describing how template parameter lists are compared
11809   /// for equality.
11810   enum TemplateParameterListEqualKind {
11811     /// We are matching the template parameter lists of two templates
11812     /// that might be redeclarations.
11813     ///
11814     /// \code
11815     /// template<typename T> struct X;
11816     /// template<typename T> struct X;
11817     /// \endcode
11818     TPL_TemplateMatch,
11819 
11820     /// We are matching the template parameter lists of two template
11821     /// template parameters as part of matching the template parameter lists
11822     /// of two templates that might be redeclarations.
11823     ///
11824     /// \code
11825     /// template<template<int I> class TT> struct X;
11826     /// template<template<int Value> class Other> struct X;
11827     /// \endcode
11828     TPL_TemplateTemplateParmMatch,
11829 
11830     /// We are matching the template parameter lists of a template
11831     /// template argument against the template parameter lists of a template
11832     /// template parameter.
11833     ///
11834     /// \code
11835     /// template<template<int Value> class Metafun> struct X;
11836     /// template<int Value> struct integer_c;
11837     /// X<integer_c> xic;
11838     /// \endcode
11839     TPL_TemplateTemplateArgumentMatch,
11840 
11841     /// We are determining whether the template-parameters are equivalent
11842     /// according to C++ [temp.over.link]/6. This comparison does not consider
11843     /// constraints.
11844     ///
11845     /// \code
11846     /// template<C1 T> void f(T);
11847     /// template<C2 T> void f(T);
11848     /// \endcode
11849     TPL_TemplateParamsEquivalent,
11850   };
11851 
11852   // A struct to represent the 'new' declaration, which is either itself just
11853   // the named decl, or the important information we need about it in order to
11854   // do constraint comparisons.
11855   class TemplateCompareNewDeclInfo {
11856     const NamedDecl *ND = nullptr;
11857     const DeclContext *DC = nullptr;
11858     const DeclContext *LexicalDC = nullptr;
11859     SourceLocation Loc;
11860 
11861   public:
11862     TemplateCompareNewDeclInfo(const NamedDecl *ND) : ND(ND) {}
11863     TemplateCompareNewDeclInfo(const DeclContext *DeclCtx,
11864                                const DeclContext *LexicalDeclCtx,
11865                                SourceLocation Loc)
11866 
11867         : DC(DeclCtx), LexicalDC(LexicalDeclCtx), Loc(Loc) {
11868       assert(DC && LexicalDC &&
11869              "Constructor only for cases where we have the information to put "
11870              "in here");
11871     }
11872 
11873     // If this was constructed with no information, we cannot do substitution
11874     // for constraint comparison, so make sure we can check that.
11875     bool isInvalid() const { return !ND && !DC; }
11876 
11877     const NamedDecl *getDecl() const { return ND; }
11878 
11879     bool ContainsDecl(const NamedDecl *ND) const { return this->ND == ND; }
11880 
11881     const DeclContext *getLexicalDeclContext() const {
11882       return ND ? ND->getLexicalDeclContext() : LexicalDC;
11883     }
11884 
11885     const DeclContext *getDeclContext() const {
11886       return ND ? ND->getDeclContext() : DC;
11887     }
11888 
11889     SourceLocation getLocation() const { return ND ? ND->getLocation() : Loc; }
11890   };
11891 
11892   /// Determine whether the given template parameter lists are
11893   /// equivalent.
11894   ///
11895   /// \param New  The new template parameter list, typically written in the
11896   /// source code as part of a new template declaration.
11897   ///
11898   /// \param Old  The old template parameter list, typically found via
11899   /// name lookup of the template declared with this template parameter
11900   /// list.
11901   ///
11902   /// \param Complain  If true, this routine will produce a diagnostic if
11903   /// the template parameter lists are not equivalent.
11904   ///
11905   /// \param Kind describes how we are to match the template parameter lists.
11906   ///
11907   /// \param TemplateArgLoc If this source location is valid, then we
11908   /// are actually checking the template parameter list of a template
11909   /// argument (New) against the template parameter list of its
11910   /// corresponding template template parameter (Old). We produce
11911   /// slightly different diagnostics in this scenario.
11912   ///
11913   /// \returns True if the template parameter lists are equal, false
11914   /// otherwise.
11915   bool TemplateParameterListsAreEqual(
11916       const TemplateCompareNewDeclInfo &NewInstFrom, TemplateParameterList *New,
11917       const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain,
11918       TemplateParameterListEqualKind Kind,
11919       SourceLocation TemplateArgLoc = SourceLocation());
11920 
11921   bool TemplateParameterListsAreEqual(
11922       TemplateParameterList *New, TemplateParameterList *Old, bool Complain,
11923       TemplateParameterListEqualKind Kind,
11924       SourceLocation TemplateArgLoc = SourceLocation()) {
11925     return TemplateParameterListsAreEqual(nullptr, New, nullptr, Old, Complain,
11926                                           Kind, TemplateArgLoc);
11927   }
11928 
11929   /// Check whether a template can be declared within this scope.
11930   ///
11931   /// If the template declaration is valid in this scope, returns
11932   /// false. Otherwise, issues a diagnostic and returns true.
11933   bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams);
11934 
11935   /// Called when the parser has parsed a C++ typename
11936   /// specifier, e.g., "typename T::type".
11937   ///
11938   /// \param S The scope in which this typename type occurs.
11939   /// \param TypenameLoc the location of the 'typename' keyword
11940   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
11941   /// \param II the identifier we're retrieving (e.g., 'type' in the example).
11942   /// \param IdLoc the location of the identifier.
11943   /// \param IsImplicitTypename context where T::type refers to a type.
11944   TypeResult ActOnTypenameType(
11945       Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS,
11946       const IdentifierInfo &II, SourceLocation IdLoc,
11947       ImplicitTypenameContext IsImplicitTypename = ImplicitTypenameContext::No);
11948 
11949   /// Called when the parser has parsed a C++ typename
11950   /// specifier that ends in a template-id, e.g.,
11951   /// "typename MetaFun::template apply<T1, T2>".
11952   ///
11953   /// \param S The scope in which this typename type occurs.
11954   /// \param TypenameLoc the location of the 'typename' keyword
11955   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
11956   /// \param TemplateLoc the location of the 'template' keyword, if any.
11957   /// \param TemplateName The template name.
11958   /// \param TemplateII The identifier used to name the template.
11959   /// \param TemplateIILoc The location of the template name.
11960   /// \param LAngleLoc The location of the opening angle bracket  ('<').
11961   /// \param TemplateArgs The template arguments.
11962   /// \param RAngleLoc The location of the closing angle bracket  ('>').
11963   TypeResult
11964   ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
11965                     const CXXScopeSpec &SS, SourceLocation TemplateLoc,
11966                     TemplateTy TemplateName, const IdentifierInfo *TemplateII,
11967                     SourceLocation TemplateIILoc, SourceLocation LAngleLoc,
11968                     ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc);
11969 
11970   QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
11971                              SourceLocation KeywordLoc,
11972                              NestedNameSpecifierLoc QualifierLoc,
11973                              const IdentifierInfo &II, SourceLocation IILoc,
11974                              TypeSourceInfo **TSI, bool DeducedTSTContext);
11975 
11976   QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
11977                              SourceLocation KeywordLoc,
11978                              NestedNameSpecifierLoc QualifierLoc,
11979                              const IdentifierInfo &II, SourceLocation IILoc,
11980                              bool DeducedTSTContext = true);
11981 
11982   /// Rebuilds a type within the context of the current instantiation.
11983   ///
11984   /// The type \p T is part of the type of an out-of-line member definition of
11985   /// a class template (or class template partial specialization) that was
11986   /// parsed and constructed before we entered the scope of the class template
11987   /// (or partial specialization thereof). This routine will rebuild that type
11988   /// now that we have entered the declarator's scope, which may produce
11989   /// different canonical types, e.g.,
11990   ///
11991   /// \code
11992   /// template<typename T>
11993   /// struct X {
11994   ///   typedef T* pointer;
11995   ///   pointer data();
11996   /// };
11997   ///
11998   /// template<typename T>
11999   /// typename X<T>::pointer X<T>::data() { ... }
12000   /// \endcode
12001   ///
12002   /// Here, the type "typename X<T>::pointer" will be created as a
12003   /// DependentNameType, since we do not know that we can look into X<T> when we
12004   /// parsed the type. This function will rebuild the type, performing the
12005   /// lookup of "pointer" in X<T> and returning an ElaboratedType whose
12006   /// canonical type is the same as the canonical type of T*, allowing the
12007   /// return types of the out-of-line definition and the declaration to match.
12008   TypeSourceInfo *RebuildTypeInCurrentInstantiation(TypeSourceInfo *T,
12009                                                     SourceLocation Loc,
12010                                                     DeclarationName Name);
12011   bool RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS);
12012 
12013   ExprResult RebuildExprInCurrentInstantiation(Expr *E);
12014 
12015   /// Rebuild the template parameters now that we know we're in a current
12016   /// instantiation.
12017   bool
12018   RebuildTemplateParamsInCurrentInstantiation(TemplateParameterList *Params);
12019 
12020   /// Produces a formatted string that describes the binding of
12021   /// template parameters to template arguments.
12022   std::string
12023   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
12024                                   const TemplateArgumentList &Args);
12025 
12026   std::string
12027   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
12028                                   const TemplateArgument *Args,
12029                                   unsigned NumArgs);
12030 
12031   void diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName,
12032                                           SourceLocation Less,
12033                                           SourceLocation Greater);
12034 
12035   /// ActOnDependentIdExpression - Handle a dependent id-expression that
12036   /// was just parsed.  This is only possible with an explicit scope
12037   /// specifier naming a dependent type.
12038   ExprResult ActOnDependentIdExpression(
12039       const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
12040       const DeclarationNameInfo &NameInfo, bool isAddressOfOperand,
12041       const TemplateArgumentListInfo *TemplateArgs);
12042 
12043   ExprResult
12044   BuildDependentDeclRefExpr(const CXXScopeSpec &SS,
12045                             SourceLocation TemplateKWLoc,
12046                             const DeclarationNameInfo &NameInfo,
12047                             const TemplateArgumentListInfo *TemplateArgs);
12048 
12049   // Calculates whether the expression Constraint depends on an enclosing
12050   // template, for the purposes of [temp.friend] p9.
12051   // TemplateDepth is the 'depth' of the friend function, which is used to
12052   // compare whether a declaration reference is referring to a containing
12053   // template, or just the current friend function. A 'lower' TemplateDepth in
12054   // the AST refers to a 'containing' template. As the constraint is
12055   // uninstantiated, this is relative to the 'top' of the TU.
12056   bool
12057   ConstraintExpressionDependsOnEnclosingTemplate(const FunctionDecl *Friend,
12058                                                  unsigned TemplateDepth,
12059                                                  const Expr *Constraint);
12060 
12061   /// Find the failed Boolean condition within a given Boolean
12062   /// constant expression, and describe it with a string.
12063   std::pair<Expr *, std::string> findFailedBooleanCondition(Expr *Cond);
12064 
12065   void CheckDeductionGuideTemplate(FunctionTemplateDecl *TD);
12066 
12067   ConceptDecl *ActOnStartConceptDefinition(
12068       Scope *S, MultiTemplateParamsArg TemplateParameterLists,
12069       const IdentifierInfo *Name, SourceLocation NameLoc);
12070 
12071   ConceptDecl *ActOnFinishConceptDefinition(Scope *S, ConceptDecl *C,
12072                                             Expr *ConstraintExpr,
12073                                             const ParsedAttributesView &Attrs);
12074 
12075   void CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous,
12076                                 bool &AddToScope);
12077   bool CheckConceptUseInDefinition(ConceptDecl *Concept, SourceLocation Loc);
12078 
12079   TypeResult ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
12080                                const CXXScopeSpec &SS,
12081                                const IdentifierInfo *Name,
12082                                SourceLocation TagLoc, SourceLocation NameLoc);
12083 
12084   void MarkAsLateParsedTemplate(FunctionDecl *FD, Decl *FnD,
12085                                 CachedTokens &Toks);
12086   void UnmarkAsLateParsedTemplate(FunctionDecl *FD);
12087   bool IsInsideALocalClassWithinATemplateFunction();
12088 
12089   /// We've found a use of a templated declaration that would trigger an
12090   /// implicit instantiation. Check that any relevant explicit specializations
12091   /// and partial specializations are visible/reachable, and diagnose if not.
12092   void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec);
12093   void checkSpecializationReachability(SourceLocation Loc, NamedDecl *Spec);
12094 
12095   ///@}
12096 
12097   //
12098   //
12099   // -------------------------------------------------------------------------
12100   //
12101   //
12102 
12103   /// \name C++ Template Argument Deduction
12104   /// Implementations are in SemaTemplateDeduction.cpp
12105   ///@{
12106 
12107 public:
12108   /// When true, access checking violations are treated as SFINAE
12109   /// failures rather than hard errors.
12110   bool AccessCheckingSFINAE;
12111 
12112   /// RAII class used to determine whether SFINAE has
12113   /// trapped any errors that occur during template argument
12114   /// deduction.
12115   class SFINAETrap {
12116     Sema &SemaRef;
12117     unsigned PrevSFINAEErrors;
12118     bool PrevInNonInstantiationSFINAEContext;
12119     bool PrevAccessCheckingSFINAE;
12120     bool PrevLastDiagnosticIgnored;
12121 
12122   public:
12123     explicit SFINAETrap(Sema &SemaRef, bool AccessCheckingSFINAE = false)
12124         : SemaRef(SemaRef), PrevSFINAEErrors(SemaRef.NumSFINAEErrors),
12125           PrevInNonInstantiationSFINAEContext(
12126               SemaRef.InNonInstantiationSFINAEContext),
12127           PrevAccessCheckingSFINAE(SemaRef.AccessCheckingSFINAE),
12128           PrevLastDiagnosticIgnored(
12129               SemaRef.getDiagnostics().isLastDiagnosticIgnored()) {
12130       if (!SemaRef.isSFINAEContext())
12131         SemaRef.InNonInstantiationSFINAEContext = true;
12132       SemaRef.AccessCheckingSFINAE = AccessCheckingSFINAE;
12133     }
12134 
12135     ~SFINAETrap() {
12136       SemaRef.NumSFINAEErrors = PrevSFINAEErrors;
12137       SemaRef.InNonInstantiationSFINAEContext =
12138           PrevInNonInstantiationSFINAEContext;
12139       SemaRef.AccessCheckingSFINAE = PrevAccessCheckingSFINAE;
12140       SemaRef.getDiagnostics().setLastDiagnosticIgnored(
12141           PrevLastDiagnosticIgnored);
12142     }
12143 
12144     /// Determine whether any SFINAE errors have been trapped.
12145     bool hasErrorOccurred() const {
12146       return SemaRef.NumSFINAEErrors > PrevSFINAEErrors;
12147     }
12148   };
12149 
12150   /// RAII class used to indicate that we are performing provisional
12151   /// semantic analysis to determine the validity of a construct, so
12152   /// typo-correction and diagnostics in the immediate context (not within
12153   /// implicitly-instantiated templates) should be suppressed.
12154   class TentativeAnalysisScope {
12155     Sema &SemaRef;
12156     // FIXME: Using a SFINAETrap for this is a hack.
12157     SFINAETrap Trap;
12158     bool PrevDisableTypoCorrection;
12159 
12160   public:
12161     explicit TentativeAnalysisScope(Sema &SemaRef)
12162         : SemaRef(SemaRef), Trap(SemaRef, true),
12163           PrevDisableTypoCorrection(SemaRef.DisableTypoCorrection) {
12164       SemaRef.DisableTypoCorrection = true;
12165     }
12166     ~TentativeAnalysisScope() {
12167       SemaRef.DisableTypoCorrection = PrevDisableTypoCorrection;
12168     }
12169   };
12170 
12171   /// For each declaration that involved template argument deduction, the
12172   /// set of diagnostics that were suppressed during that template argument
12173   /// deduction.
12174   ///
12175   /// FIXME: Serialize this structure to the AST file.
12176   typedef llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1>>
12177       SuppressedDiagnosticsMap;
12178   SuppressedDiagnosticsMap SuppressedDiagnostics;
12179 
12180   /// Compare types for equality with respect to possibly compatible
12181   /// function types (noreturn adjustment, implicit calling conventions). If any
12182   /// of parameter and argument is not a function, just perform type comparison.
12183   ///
12184   /// \param P the template parameter type.
12185   ///
12186   /// \param A the argument type.
12187   bool isSameOrCompatibleFunctionType(QualType Param, QualType Arg);
12188 
12189   /// Allocate a TemplateArgumentLoc where all locations have
12190   /// been initialized to the given location.
12191   ///
12192   /// \param Arg The template argument we are producing template argument
12193   /// location information for.
12194   ///
12195   /// \param NTTPType For a declaration template argument, the type of
12196   /// the non-type template parameter that corresponds to this template
12197   /// argument. Can be null if no type sugar is available to add to the
12198   /// type from the template argument.
12199   ///
12200   /// \param Loc The source location to use for the resulting template
12201   /// argument.
12202   TemplateArgumentLoc
12203   getTrivialTemplateArgumentLoc(const TemplateArgument &Arg, QualType NTTPType,
12204                                 SourceLocation Loc,
12205                                 NamedDecl *TemplateParam = nullptr);
12206 
12207   /// Get a template argument mapping the given template parameter to itself,
12208   /// e.g. for X in \c template<int X>, this would return an expression template
12209   /// argument referencing X.
12210   TemplateArgumentLoc getIdentityTemplateArgumentLoc(NamedDecl *Param,
12211                                                      SourceLocation Location);
12212 
12213   /// Adjust the type \p ArgFunctionType to match the calling convention,
12214   /// noreturn, and optionally the exception specification of \p FunctionType.
12215   /// Deduction often wants to ignore these properties when matching function
12216   /// types.
12217   QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType,
12218                                bool AdjustExceptionSpec = false);
12219 
12220   TemplateDeductionResult
12221   DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
12222                           ArrayRef<TemplateArgument> TemplateArgs,
12223                           sema::TemplateDeductionInfo &Info);
12224 
12225   TemplateDeductionResult
12226   DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial,
12227                           ArrayRef<TemplateArgument> TemplateArgs,
12228                           sema::TemplateDeductionInfo &Info);
12229 
12230   /// Deduce the template arguments of the given template from \p FromType.
12231   /// Used to implement the IsDeducible constraint for alias CTAD per C++
12232   /// [over.match.class.deduct]p4.
12233   ///
12234   /// It only supports class or type alias templates.
12235   TemplateDeductionResult
12236   DeduceTemplateArgumentsFromType(TemplateDecl *TD, QualType FromType,
12237                                   sema::TemplateDeductionInfo &Info);
12238 
12239   TemplateDeductionResult DeduceTemplateArguments(
12240       TemplateParameterList *TemplateParams, ArrayRef<TemplateArgument> Ps,
12241       ArrayRef<TemplateArgument> As, sema::TemplateDeductionInfo &Info,
12242       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
12243       bool NumberOfArgumentsMustMatch);
12244 
12245   /// Substitute the explicitly-provided template arguments into the
12246   /// given function template according to C++ [temp.arg.explicit].
12247   ///
12248   /// \param FunctionTemplate the function template into which the explicit
12249   /// template arguments will be substituted.
12250   ///
12251   /// \param ExplicitTemplateArgs the explicitly-specified template
12252   /// arguments.
12253   ///
12254   /// \param Deduced the deduced template arguments, which will be populated
12255   /// with the converted and checked explicit template arguments.
12256   ///
12257   /// \param ParamTypes will be populated with the instantiated function
12258   /// parameters.
12259   ///
12260   /// \param FunctionType if non-NULL, the result type of the function template
12261   /// will also be instantiated and the pointed-to value will be updated with
12262   /// the instantiated function type.
12263   ///
12264   /// \param Info if substitution fails for any reason, this object will be
12265   /// populated with more information about the failure.
12266   ///
12267   /// \returns TemplateDeductionResult::Success if substitution was successful,
12268   /// or some failure condition.
12269   TemplateDeductionResult SubstituteExplicitTemplateArguments(
12270       FunctionTemplateDecl *FunctionTemplate,
12271       TemplateArgumentListInfo &ExplicitTemplateArgs,
12272       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
12273       SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType,
12274       sema::TemplateDeductionInfo &Info);
12275 
12276   /// brief A function argument from which we performed template argument
12277   // deduction for a call.
12278   struct OriginalCallArg {
12279     OriginalCallArg(QualType OriginalParamType, bool DecomposedParam,
12280                     unsigned ArgIdx, QualType OriginalArgType)
12281         : OriginalParamType(OriginalParamType),
12282           DecomposedParam(DecomposedParam), ArgIdx(ArgIdx),
12283           OriginalArgType(OriginalArgType) {}
12284 
12285     QualType OriginalParamType;
12286     bool DecomposedParam;
12287     unsigned ArgIdx;
12288     QualType OriginalArgType;
12289   };
12290 
12291   /// Finish template argument deduction for a function template,
12292   /// checking the deduced template arguments for completeness and forming
12293   /// the function template specialization.
12294   ///
12295   /// \param OriginalCallArgs If non-NULL, the original call arguments against
12296   /// which the deduced argument types should be compared.
12297   TemplateDeductionResult FinishTemplateArgumentDeduction(
12298       FunctionTemplateDecl *FunctionTemplate,
12299       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
12300       unsigned NumExplicitlySpecified, FunctionDecl *&Specialization,
12301       sema::TemplateDeductionInfo &Info,
12302       SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs,
12303       bool PartialOverloading, bool PartialOrdering,
12304       llvm::function_ref<bool()> CheckNonDependent = [] { return false; });
12305 
12306   /// Perform template argument deduction from a function call
12307   /// (C++ [temp.deduct.call]).
12308   ///
12309   /// \param FunctionTemplate the function template for which we are performing
12310   /// template argument deduction.
12311   ///
12312   /// \param ExplicitTemplateArgs the explicit template arguments provided
12313   /// for this call.
12314   ///
12315   /// \param Args the function call arguments
12316   ///
12317   /// \param Specialization if template argument deduction was successful,
12318   /// this will be set to the function template specialization produced by
12319   /// template argument deduction.
12320   ///
12321   /// \param Info the argument will be updated to provide additional information
12322   /// about template argument deduction.
12323   ///
12324   /// \param CheckNonDependent A callback to invoke to check conversions for
12325   /// non-dependent parameters, between deduction and substitution, per DR1391.
12326   /// If this returns true, substitution will be skipped and we return
12327   /// TemplateDeductionResult::NonDependentConversionFailure. The callback is
12328   /// passed the parameter types (after substituting explicit template
12329   /// arguments).
12330   ///
12331   /// \returns the result of template argument deduction.
12332   TemplateDeductionResult DeduceTemplateArguments(
12333       FunctionTemplateDecl *FunctionTemplate,
12334       TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
12335       FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info,
12336       bool PartialOverloading, bool AggregateDeductionCandidate,
12337       bool PartialOrdering, QualType ObjectType,
12338       Expr::Classification ObjectClassification,
12339       llvm::function_ref<bool(ArrayRef<QualType>)> CheckNonDependent);
12340 
12341   /// Deduce template arguments when taking the address of a function
12342   /// template (C++ [temp.deduct.funcaddr]) or matching a specialization to
12343   /// a template.
12344   ///
12345   /// \param FunctionTemplate the function template for which we are performing
12346   /// template argument deduction.
12347   ///
12348   /// \param ExplicitTemplateArgs the explicitly-specified template
12349   /// arguments.
12350   ///
12351   /// \param ArgFunctionType the function type that will be used as the
12352   /// "argument" type (A) when performing template argument deduction from the
12353   /// function template's function type. This type may be NULL, if there is no
12354   /// argument type to compare against, in C++0x [temp.arg.explicit]p3.
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 per [temp.deduct.funcaddr] and
12365   /// [over.over]. If \c false, we are looking up a function template
12366   /// specialization based on its signature, per [temp.deduct.decl].
12367   ///
12368   /// \returns the result of template argument deduction.
12369   TemplateDeductionResult DeduceTemplateArguments(
12370       FunctionTemplateDecl *FunctionTemplate,
12371       TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ArgFunctionType,
12372       FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info,
12373       bool IsAddressOfFunction = false);
12374 
12375   /// Deduce template arguments for a templated conversion
12376   /// function (C++ [temp.deduct.conv]) and, if successful, produce a
12377   /// conversion function template specialization.
12378   TemplateDeductionResult DeduceTemplateArguments(
12379       FunctionTemplateDecl *FunctionTemplate, QualType ObjectType,
12380       Expr::Classification ObjectClassification, QualType ToType,
12381       CXXConversionDecl *&Specialization, sema::TemplateDeductionInfo &Info);
12382 
12383   /// Deduce template arguments for a function template when there is
12384   /// nothing to deduce against (C++0x [temp.arg.explicit]p3).
12385   ///
12386   /// \param FunctionTemplate the function template for which we are performing
12387   /// template argument deduction.
12388   ///
12389   /// \param ExplicitTemplateArgs the explicitly-specified template
12390   /// arguments.
12391   ///
12392   /// \param Specialization if template argument deduction was successful,
12393   /// this will be set to the function template specialization produced by
12394   /// template argument deduction.
12395   ///
12396   /// \param Info the argument will be updated to provide additional information
12397   /// about template argument deduction.
12398   ///
12399   /// \param IsAddressOfFunction If \c true, we are deducing as part of taking
12400   /// the address of a function template in a context where we do not have a
12401   /// target type, per [over.over]. If \c false, we are looking up a function
12402   /// template specialization based on its signature, which only happens when
12403   /// deducing a function parameter type from an argument that is a template-id
12404   /// naming a function template specialization.
12405   ///
12406   /// \returns the result of template argument deduction.
12407   TemplateDeductionResult
12408   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
12409                           TemplateArgumentListInfo *ExplicitTemplateArgs,
12410                           FunctionDecl *&Specialization,
12411                           sema::TemplateDeductionInfo &Info,
12412                           bool IsAddressOfFunction = false);
12413 
12414   /// Substitute Replacement for \p auto in \p TypeWithAuto
12415   QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement);
12416   /// Substitute Replacement for auto in TypeWithAuto
12417   TypeSourceInfo *SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
12418                                           QualType Replacement);
12419 
12420   // Substitute auto in TypeWithAuto for a Dependent auto type
12421   QualType SubstAutoTypeDependent(QualType TypeWithAuto);
12422 
12423   // Substitute auto in TypeWithAuto for a Dependent auto type
12424   TypeSourceInfo *
12425   SubstAutoTypeSourceInfoDependent(TypeSourceInfo *TypeWithAuto);
12426 
12427   /// Completely replace the \c auto in \p TypeWithAuto by
12428   /// \p Replacement. This does not retain any \c auto type sugar.
12429   QualType ReplaceAutoType(QualType TypeWithAuto, QualType Replacement);
12430   TypeSourceInfo *ReplaceAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
12431                                             QualType Replacement);
12432 
12433   /// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)
12434   ///
12435   /// Note that this is done even if the initializer is dependent. (This is
12436   /// necessary to support partial ordering of templates using 'auto'.)
12437   /// A dependent type will be produced when deducing from a dependent type.
12438   ///
12439   /// \param Type the type pattern using the auto type-specifier.
12440   /// \param Init the initializer for the variable whose type is to be deduced.
12441   /// \param Result if type deduction was successful, this will be set to the
12442   ///        deduced type.
12443   /// \param Info the argument will be updated to provide additional information
12444   ///        about template argument deduction.
12445   /// \param DependentDeduction Set if we should permit deduction in
12446   ///        dependent cases. This is necessary for template partial ordering
12447   ///        with 'auto' template parameters. The template parameter depth to be
12448   ///        used should be specified in the 'Info' parameter.
12449   /// \param IgnoreConstraints Set if we should not fail if the deduced type
12450   ///                          does not satisfy the type-constraint in the auto
12451   ///                          type.
12452   TemplateDeductionResult
12453   DeduceAutoType(TypeLoc AutoTypeLoc, Expr *Initializer, QualType &Result,
12454                  sema::TemplateDeductionInfo &Info,
12455                  bool DependentDeduction = false,
12456                  bool IgnoreConstraints = false,
12457                  TemplateSpecCandidateSet *FailedTSC = nullptr);
12458   void DiagnoseAutoDeductionFailure(const VarDecl *VDecl, const Expr *Init);
12459   bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc,
12460                         bool Diagnose = true);
12461 
12462   bool CheckIfFunctionSpecializationIsImmediate(FunctionDecl *FD,
12463                                                 SourceLocation Loc);
12464 
12465   /// Returns the more specialized class template partial specialization
12466   /// according to the rules of partial ordering of class template partial
12467   /// specializations (C++ [temp.class.order]).
12468   ///
12469   /// \param PS1 the first class template partial specialization
12470   ///
12471   /// \param PS2 the second class template partial specialization
12472   ///
12473   /// \returns the more specialized class template partial specialization. If
12474   /// neither partial specialization is more specialized, returns NULL.
12475   ClassTemplatePartialSpecializationDecl *
12476   getMoreSpecializedPartialSpecialization(
12477       ClassTemplatePartialSpecializationDecl *PS1,
12478       ClassTemplatePartialSpecializationDecl *PS2, SourceLocation Loc);
12479 
12480   bool isMoreSpecializedThanPrimary(ClassTemplatePartialSpecializationDecl *T,
12481                                     sema::TemplateDeductionInfo &Info);
12482 
12483   VarTemplatePartialSpecializationDecl *getMoreSpecializedPartialSpecialization(
12484       VarTemplatePartialSpecializationDecl *PS1,
12485       VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc);
12486 
12487   bool isMoreSpecializedThanPrimary(VarTemplatePartialSpecializationDecl *T,
12488                                     sema::TemplateDeductionInfo &Info);
12489 
12490   bool isTemplateTemplateParameterAtLeastAsSpecializedAs(
12491       TemplateParameterList *PParam, TemplateDecl *PArg, TemplateDecl *AArg,
12492       const DefaultArguments &DefaultArgs, SourceLocation ArgLoc,
12493       bool PartialOrdering, bool *MatchedPackOnParmToNonPackOnArg);
12494 
12495   /// Mark which template parameters are used in a given expression.
12496   ///
12497   /// \param E the expression from which template parameters will be deduced.
12498   ///
12499   /// \param Used a bit vector whose elements will be set to \c true
12500   /// to indicate when the corresponding template parameter will be
12501   /// deduced.
12502   void MarkUsedTemplateParameters(const Expr *E, bool OnlyDeduced,
12503                                   unsigned Depth, llvm::SmallBitVector &Used);
12504 
12505   /// Mark which template parameters can be deduced from a given
12506   /// template argument list.
12507   ///
12508   /// \param TemplateArgs the template argument list from which template
12509   /// parameters will be deduced.
12510   ///
12511   /// \param Used a bit vector whose elements will be set to \c true
12512   /// to indicate when the corresponding template parameter will be
12513   /// deduced.
12514   void MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs,
12515                                   bool OnlyDeduced, unsigned Depth,
12516                                   llvm::SmallBitVector &Used);
12517   void
12518   MarkDeducedTemplateParameters(const FunctionTemplateDecl *FunctionTemplate,
12519                                 llvm::SmallBitVector &Deduced) {
12520     return MarkDeducedTemplateParameters(Context, FunctionTemplate, Deduced);
12521   }
12522 
12523   /// Marks all of the template parameters that will be deduced by a
12524   /// call to the given function template.
12525   static void
12526   MarkDeducedTemplateParameters(ASTContext &Ctx,
12527                                 const FunctionTemplateDecl *FunctionTemplate,
12528                                 llvm::SmallBitVector &Deduced);
12529 
12530   /// Returns the more specialized function template according
12531   /// to the rules of function template partial ordering (C++
12532   /// [temp.func.order]).
12533   ///
12534   /// \param FT1 the first function template
12535   ///
12536   /// \param FT2 the second function template
12537   ///
12538   /// \param TPOC the context in which we are performing partial ordering of
12539   /// function templates.
12540   ///
12541   /// \param NumCallArguments1 The number of arguments in the call to FT1, used
12542   /// only when \c TPOC is \c TPOC_Call. Does not include the object argument
12543   /// when calling a member function.
12544   ///
12545   /// \param RawObj1Ty The type of the object parameter of FT1 if a member
12546   /// function only used if \c TPOC is \c TPOC_Call and FT1 is a Function
12547   /// template from a member function
12548   ///
12549   /// \param RawObj2Ty The type of the object parameter of FT2 if a member
12550   /// function only used if \c TPOC is \c TPOC_Call and FT2 is a Function
12551   /// template from a member function
12552   ///
12553   /// \param Reversed If \c true, exactly one of FT1 and FT2 is an overload
12554   /// candidate with a reversed parameter order. In this case, the corresponding
12555   /// P/A pairs between FT1 and FT2 are reversed.
12556   ///
12557   /// \returns the more specialized function template. If neither
12558   /// template is more specialized, returns NULL.
12559   FunctionTemplateDecl *getMoreSpecializedTemplate(
12560       FunctionTemplateDecl *FT1, FunctionTemplateDecl *FT2, SourceLocation Loc,
12561       TemplatePartialOrderingContext TPOC, unsigned NumCallArguments1,
12562       QualType RawObj1Ty = {}, QualType RawObj2Ty = {}, bool Reversed = false);
12563 
12564   /// Retrieve the most specialized of the given function template
12565   /// specializations.
12566   ///
12567   /// \param SpecBegin the start iterator of the function template
12568   /// specializations that we will be comparing.
12569   ///
12570   /// \param SpecEnd the end iterator of the function template
12571   /// specializations, paired with \p SpecBegin.
12572   ///
12573   /// \param Loc the location where the ambiguity or no-specializations
12574   /// diagnostic should occur.
12575   ///
12576   /// \param NoneDiag partial diagnostic used to diagnose cases where there are
12577   /// no matching candidates.
12578   ///
12579   /// \param AmbigDiag partial diagnostic used to diagnose an ambiguity, if one
12580   /// occurs.
12581   ///
12582   /// \param CandidateDiag partial diagnostic used for each function template
12583   /// specialization that is a candidate in the ambiguous ordering. One
12584   /// parameter in this diagnostic should be unbound, which will correspond to
12585   /// the string describing the template arguments for the function template
12586   /// specialization.
12587   ///
12588   /// \returns the most specialized function template specialization, if
12589   /// found. Otherwise, returns SpecEnd.
12590   UnresolvedSetIterator
12591   getMostSpecialized(UnresolvedSetIterator SBegin, UnresolvedSetIterator SEnd,
12592                      TemplateSpecCandidateSet &FailedCandidates,
12593                      SourceLocation Loc, const PartialDiagnostic &NoneDiag,
12594                      const PartialDiagnostic &AmbigDiag,
12595                      const PartialDiagnostic &CandidateDiag,
12596                      bool Complain = true, QualType TargetType = QualType());
12597 
12598   /// Returns the more constrained function according to the rules of
12599   /// partial ordering by constraints (C++ [temp.constr.order]).
12600   ///
12601   /// \param FD1 the first function
12602   ///
12603   /// \param FD2 the second function
12604   ///
12605   /// \returns the more constrained function. If neither function is
12606   /// more constrained, returns NULL.
12607   FunctionDecl *getMoreConstrainedFunction(FunctionDecl *FD1,
12608                                            FunctionDecl *FD2);
12609 
12610   ///@}
12611 
12612   //
12613   //
12614   // -------------------------------------------------------------------------
12615   //
12616   //
12617 
12618   /// \name C++ Template Deduction Guide
12619   /// Implementations are in SemaTemplateDeductionGuide.cpp
12620   ///@{
12621 
12622   /// Declare implicit deduction guides for a class template if we've
12623   /// not already done so.
12624   void DeclareImplicitDeductionGuides(TemplateDecl *Template,
12625                                       SourceLocation Loc);
12626 
12627   FunctionTemplateDecl *DeclareAggregateDeductionGuideFromInitList(
12628       TemplateDecl *Template, MutableArrayRef<QualType> ParamTypes,
12629       SourceLocation Loc);
12630 
12631   ///@}
12632 
12633   //
12634   //
12635   // -------------------------------------------------------------------------
12636   //
12637   //
12638 
12639   /// \name C++ Template Instantiation
12640   /// Implementations are in SemaTemplateInstantiate.cpp
12641   ///@{
12642 
12643 public:
12644   /// A helper class for building up ExtParameterInfos.
12645   class ExtParameterInfoBuilder {
12646     SmallVector<FunctionProtoType::ExtParameterInfo, 16> Infos;
12647     bool HasInteresting = false;
12648 
12649   public:
12650     /// Set the ExtParameterInfo for the parameter at the given index,
12651     ///
12652     void set(unsigned index, FunctionProtoType::ExtParameterInfo info) {
12653       assert(Infos.size() <= index);
12654       Infos.resize(index);
12655       Infos.push_back(info);
12656 
12657       if (!HasInteresting)
12658         HasInteresting = (info != FunctionProtoType::ExtParameterInfo());
12659     }
12660 
12661     /// Return a pointer (suitable for setting in an ExtProtoInfo) to the
12662     /// ExtParameterInfo array we've built up.
12663     const FunctionProtoType::ExtParameterInfo *
12664     getPointerOrNull(unsigned numParams) {
12665       if (!HasInteresting)
12666         return nullptr;
12667       Infos.resize(numParams);
12668       return Infos.data();
12669     }
12670   };
12671 
12672   /// The current instantiation scope used to store local
12673   /// variables.
12674   LocalInstantiationScope *CurrentInstantiationScope;
12675 
12676   typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>>
12677       UnparsedDefaultArgInstantiationsMap;
12678 
12679   /// A mapping from parameters with unparsed default arguments to the
12680   /// set of instantiations of each parameter.
12681   ///
12682   /// This mapping is a temporary data structure used when parsing
12683   /// nested class templates or nested classes of class templates,
12684   /// where we might end up instantiating an inner class before the
12685   /// default arguments of its methods have been parsed.
12686   UnparsedDefaultArgInstantiationsMap UnparsedDefaultArgInstantiations;
12687 
12688   /// A context in which code is being synthesized (where a source location
12689   /// alone is not sufficient to identify the context). This covers template
12690   /// instantiation and various forms of implicitly-generated functions.
12691   struct CodeSynthesisContext {
12692     /// The kind of template instantiation we are performing
12693     enum SynthesisKind {
12694       /// We are instantiating a template declaration. The entity is
12695       /// the declaration we're instantiating (e.g., a CXXRecordDecl).
12696       TemplateInstantiation,
12697 
12698       /// We are instantiating a default argument for a template
12699       /// parameter. The Entity is the template parameter whose argument is
12700       /// being instantiated, the Template is the template, and the
12701       /// TemplateArgs/NumTemplateArguments provide the template arguments as
12702       /// specified.
12703       DefaultTemplateArgumentInstantiation,
12704 
12705       /// We are instantiating a default argument for a function.
12706       /// The Entity is the ParmVarDecl, and TemplateArgs/NumTemplateArgs
12707       /// provides the template arguments as specified.
12708       DefaultFunctionArgumentInstantiation,
12709 
12710       /// We are substituting explicit template arguments provided for
12711       /// a function template. The entity is a FunctionTemplateDecl.
12712       ExplicitTemplateArgumentSubstitution,
12713 
12714       /// We are substituting template argument determined as part of
12715       /// template argument deduction for either a class template
12716       /// partial specialization or a function template. The
12717       /// Entity is either a {Class|Var}TemplatePartialSpecializationDecl or
12718       /// a TemplateDecl.
12719       DeducedTemplateArgumentSubstitution,
12720 
12721       /// We are substituting into a lambda expression.
12722       LambdaExpressionSubstitution,
12723 
12724       /// We are substituting prior template arguments into a new
12725       /// template parameter. The template parameter itself is either a
12726       /// NonTypeTemplateParmDecl or a TemplateTemplateParmDecl.
12727       PriorTemplateArgumentSubstitution,
12728 
12729       /// We are checking the validity of a default template argument that
12730       /// has been used when naming a template-id.
12731       DefaultTemplateArgumentChecking,
12732 
12733       /// We are computing the exception specification for a defaulted special
12734       /// member function.
12735       ExceptionSpecEvaluation,
12736 
12737       /// We are instantiating the exception specification for a function
12738       /// template which was deferred until it was needed.
12739       ExceptionSpecInstantiation,
12740 
12741       /// We are instantiating a requirement of a requires expression.
12742       RequirementInstantiation,
12743 
12744       /// We are checking the satisfaction of a nested requirement of a requires
12745       /// expression.
12746       NestedRequirementConstraintsCheck,
12747 
12748       /// We are declaring an implicit special member function.
12749       DeclaringSpecialMember,
12750 
12751       /// We are declaring an implicit 'operator==' for a defaulted
12752       /// 'operator<=>'.
12753       DeclaringImplicitEqualityComparison,
12754 
12755       /// We are defining a synthesized function (such as a defaulted special
12756       /// member).
12757       DefiningSynthesizedFunction,
12758 
12759       // We are checking the constraints associated with a constrained entity or
12760       // the constraint expression of a concept. This includes the checks that
12761       // atomic constraints have the type 'bool' and that they can be constant
12762       // evaluated.
12763       ConstraintsCheck,
12764 
12765       // We are substituting template arguments into a constraint expression.
12766       ConstraintSubstitution,
12767 
12768       // We are normalizing a constraint expression.
12769       ConstraintNormalization,
12770 
12771       // Instantiating a Requires Expression parameter clause.
12772       RequirementParameterInstantiation,
12773 
12774       // We are substituting into the parameter mapping of an atomic constraint
12775       // during normalization.
12776       ParameterMappingSubstitution,
12777 
12778       /// We are rewriting a comparison operator in terms of an operator<=>.
12779       RewritingOperatorAsSpaceship,
12780 
12781       /// We are initializing a structured binding.
12782       InitializingStructuredBinding,
12783 
12784       /// We are marking a class as __dllexport.
12785       MarkingClassDllexported,
12786 
12787       /// We are building an implied call from __builtin_dump_struct. The
12788       /// arguments are in CallArgs.
12789       BuildingBuiltinDumpStructCall,
12790 
12791       /// Added for Template instantiation observation.
12792       /// Memoization means we are _not_ instantiating a template because
12793       /// it is already instantiated (but we entered a context where we
12794       /// would have had to if it was not already instantiated).
12795       Memoization,
12796 
12797       /// We are building deduction guides for a class.
12798       BuildingDeductionGuides,
12799 
12800       /// We are instantiating a type alias template declaration.
12801       TypeAliasTemplateInstantiation,
12802 
12803       /// We are performing partial ordering for template template parameters.
12804       PartialOrderingTTP,
12805     } Kind;
12806 
12807     /// Was the enclosing context a non-instantiation SFINAE context?
12808     bool SavedInNonInstantiationSFINAEContext;
12809 
12810     /// The point of instantiation or synthesis within the source code.
12811     SourceLocation PointOfInstantiation;
12812 
12813     /// The entity that is being synthesized.
12814     Decl *Entity;
12815 
12816     /// The template (or partial specialization) in which we are
12817     /// performing the instantiation, for substitutions of prior template
12818     /// arguments.
12819     NamedDecl *Template;
12820 
12821     union {
12822       /// The list of template arguments we are substituting, if they
12823       /// are not part of the entity.
12824       const TemplateArgument *TemplateArgs;
12825 
12826       /// The list of argument expressions in a synthesized call.
12827       const Expr *const *CallArgs;
12828     };
12829 
12830     // FIXME: Wrap this union around more members, or perhaps store the
12831     // kind-specific members in the RAII object owning the context.
12832     union {
12833       /// The number of template arguments in TemplateArgs.
12834       unsigned NumTemplateArgs;
12835 
12836       /// The number of expressions in CallArgs.
12837       unsigned NumCallArgs;
12838 
12839       /// The special member being declared or defined.
12840       CXXSpecialMemberKind SpecialMember;
12841     };
12842 
12843     ArrayRef<TemplateArgument> template_arguments() const {
12844       assert(Kind != DeclaringSpecialMember);
12845       return {TemplateArgs, NumTemplateArgs};
12846     }
12847 
12848     /// The template deduction info object associated with the
12849     /// substitution or checking of explicit or deduced template arguments.
12850     sema::TemplateDeductionInfo *DeductionInfo;
12851 
12852     /// The source range that covers the construct that cause
12853     /// the instantiation, e.g., the template-id that causes a class
12854     /// template instantiation.
12855     SourceRange InstantiationRange;
12856 
12857     CodeSynthesisContext()
12858         : Kind(TemplateInstantiation),
12859           SavedInNonInstantiationSFINAEContext(false), Entity(nullptr),
12860           Template(nullptr), TemplateArgs(nullptr), NumTemplateArgs(0),
12861           DeductionInfo(nullptr) {}
12862 
12863     /// Determines whether this template is an actual instantiation
12864     /// that should be counted toward the maximum instantiation depth.
12865     bool isInstantiationRecord() const;
12866   };
12867 
12868   /// A stack object to be created when performing template
12869   /// instantiation.
12870   ///
12871   /// Construction of an object of type \c InstantiatingTemplate
12872   /// pushes the current instantiation onto the stack of active
12873   /// instantiations. If the size of this stack exceeds the maximum
12874   /// number of recursive template instantiations, construction
12875   /// produces an error and evaluates true.
12876   ///
12877   /// Destruction of this object will pop the named instantiation off
12878   /// the stack.
12879   struct InstantiatingTemplate {
12880     /// Note that we are instantiating a class template,
12881     /// function template, variable template, alias template,
12882     /// or a member thereof.
12883     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12884                           Decl *Entity,
12885                           SourceRange InstantiationRange = SourceRange());
12886 
12887     struct ExceptionSpecification {};
12888     /// Note that we are instantiating an exception specification
12889     /// of a function template.
12890     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12891                           FunctionDecl *Entity, ExceptionSpecification,
12892                           SourceRange InstantiationRange = SourceRange());
12893 
12894     /// Note that we are instantiating a type alias template declaration.
12895     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12896                           TypeAliasTemplateDecl *Entity,
12897                           ArrayRef<TemplateArgument> TemplateArgs,
12898                           SourceRange InstantiationRange = SourceRange());
12899 
12900     /// Note that we are instantiating a default argument in a
12901     /// template-id.
12902     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12903                           TemplateParameter Param, TemplateDecl *Template,
12904                           ArrayRef<TemplateArgument> TemplateArgs,
12905                           SourceRange InstantiationRange = SourceRange());
12906 
12907     /// Note that we are substituting either explicitly-specified or
12908     /// deduced template arguments during function template argument deduction.
12909     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12910                           FunctionTemplateDecl *FunctionTemplate,
12911                           ArrayRef<TemplateArgument> TemplateArgs,
12912                           CodeSynthesisContext::SynthesisKind Kind,
12913                           sema::TemplateDeductionInfo &DeductionInfo,
12914                           SourceRange InstantiationRange = SourceRange());
12915 
12916     /// Note that we are instantiating as part of template
12917     /// argument deduction for a class template declaration.
12918     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12919                           TemplateDecl *Template,
12920                           ArrayRef<TemplateArgument> TemplateArgs,
12921                           sema::TemplateDeductionInfo &DeductionInfo,
12922                           SourceRange InstantiationRange = SourceRange());
12923 
12924     /// Note that we are instantiating as part of template
12925     /// argument deduction for a class template partial
12926     /// specialization.
12927     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12928                           ClassTemplatePartialSpecializationDecl *PartialSpec,
12929                           ArrayRef<TemplateArgument> TemplateArgs,
12930                           sema::TemplateDeductionInfo &DeductionInfo,
12931                           SourceRange InstantiationRange = SourceRange());
12932 
12933     /// Note that we are instantiating as part of template
12934     /// argument deduction for a variable template partial
12935     /// specialization.
12936     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12937                           VarTemplatePartialSpecializationDecl *PartialSpec,
12938                           ArrayRef<TemplateArgument> TemplateArgs,
12939                           sema::TemplateDeductionInfo &DeductionInfo,
12940                           SourceRange InstantiationRange = SourceRange());
12941 
12942     /// Note that we are instantiating a default argument for a function
12943     /// parameter.
12944     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12945                           ParmVarDecl *Param,
12946                           ArrayRef<TemplateArgument> TemplateArgs,
12947                           SourceRange InstantiationRange = SourceRange());
12948 
12949     /// Note that we are substituting prior template arguments into a
12950     /// non-type parameter.
12951     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12952                           NamedDecl *Template, NonTypeTemplateParmDecl *Param,
12953                           ArrayRef<TemplateArgument> TemplateArgs,
12954                           SourceRange InstantiationRange);
12955 
12956     /// Note that we are substituting prior template arguments into a
12957     /// template template parameter.
12958     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12959                           NamedDecl *Template, TemplateTemplateParmDecl *Param,
12960                           ArrayRef<TemplateArgument> TemplateArgs,
12961                           SourceRange InstantiationRange);
12962 
12963     /// Note that we are checking the default template argument
12964     /// against the template parameter for a given template-id.
12965     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12966                           TemplateDecl *Template, NamedDecl *Param,
12967                           ArrayRef<TemplateArgument> TemplateArgs,
12968                           SourceRange InstantiationRange);
12969 
12970     struct ConstraintsCheck {};
12971     /// \brief Note that we are checking the constraints associated with some
12972     /// constrained entity (a concept declaration or a template with associated
12973     /// constraints).
12974     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12975                           ConstraintsCheck, NamedDecl *Template,
12976                           ArrayRef<TemplateArgument> TemplateArgs,
12977                           SourceRange InstantiationRange);
12978 
12979     struct ConstraintSubstitution {};
12980     /// \brief Note that we are checking a constraint expression associated
12981     /// with a template declaration or as part of the satisfaction check of a
12982     /// concept.
12983     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12984                           ConstraintSubstitution, NamedDecl *Template,
12985                           sema::TemplateDeductionInfo &DeductionInfo,
12986                           SourceRange InstantiationRange);
12987 
12988     struct ConstraintNormalization {};
12989     /// \brief Note that we are normalizing a constraint expression.
12990     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12991                           ConstraintNormalization, NamedDecl *Template,
12992                           SourceRange InstantiationRange);
12993 
12994     struct ParameterMappingSubstitution {};
12995     /// \brief Note that we are subtituting into the parameter mapping of an
12996     /// atomic constraint during constraint normalization.
12997     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12998                           ParameterMappingSubstitution, NamedDecl *Template,
12999                           SourceRange InstantiationRange);
13000 
13001     /// \brief Note that we are substituting template arguments into a part of
13002     /// a requirement of a requires expression.
13003     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
13004                           concepts::Requirement *Req,
13005                           sema::TemplateDeductionInfo &DeductionInfo,
13006                           SourceRange InstantiationRange = SourceRange());
13007 
13008     /// \brief Note that we are checking the satisfaction of the constraint
13009     /// expression inside of a nested requirement.
13010     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
13011                           concepts::NestedRequirement *Req, ConstraintsCheck,
13012                           SourceRange InstantiationRange = SourceRange());
13013 
13014     /// \brief Note that we are checking a requires clause.
13015     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
13016                           const RequiresExpr *E,
13017                           sema::TemplateDeductionInfo &DeductionInfo,
13018                           SourceRange InstantiationRange);
13019 
13020     struct BuildingDeductionGuidesTag {};
13021     /// \brief Note that we are building deduction guides.
13022     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
13023                           TemplateDecl *Entity, BuildingDeductionGuidesTag,
13024                           SourceRange InstantiationRange = SourceRange());
13025 
13026     struct PartialOrderingTTP {};
13027     /// \brief Note that we are partial ordering template template parameters.
13028     InstantiatingTemplate(Sema &SemaRef, SourceLocation ArgLoc,
13029                           PartialOrderingTTP, TemplateDecl *PArg,
13030                           SourceRange InstantiationRange = SourceRange());
13031 
13032     /// Note that we have finished instantiating this template.
13033     void Clear();
13034 
13035     ~InstantiatingTemplate() { Clear(); }
13036 
13037     /// Determines whether we have exceeded the maximum
13038     /// recursive template instantiations.
13039     bool isInvalid() const { return Invalid; }
13040 
13041     /// Determine whether we are already instantiating this
13042     /// specialization in some surrounding active instantiation.
13043     bool isAlreadyInstantiating() const { return AlreadyInstantiating; }
13044 
13045   private:
13046     Sema &SemaRef;
13047     bool Invalid;
13048     bool AlreadyInstantiating;
13049     bool CheckInstantiationDepth(SourceLocation PointOfInstantiation,
13050                                  SourceRange InstantiationRange);
13051 
13052     InstantiatingTemplate(Sema &SemaRef,
13053                           CodeSynthesisContext::SynthesisKind Kind,
13054                           SourceLocation PointOfInstantiation,
13055                           SourceRange InstantiationRange, Decl *Entity,
13056                           NamedDecl *Template = nullptr,
13057                           ArrayRef<TemplateArgument> TemplateArgs = {},
13058                           sema::TemplateDeductionInfo *DeductionInfo = nullptr);
13059 
13060     InstantiatingTemplate(const InstantiatingTemplate &) = delete;
13061 
13062     InstantiatingTemplate &operator=(const InstantiatingTemplate &) = delete;
13063   };
13064 
13065   bool SubstTemplateArgument(const TemplateArgumentLoc &Input,
13066                              const MultiLevelTemplateArgumentList &TemplateArgs,
13067                              TemplateArgumentLoc &Output,
13068                              SourceLocation Loc = {},
13069                              const DeclarationName &Entity = {});
13070   bool
13071   SubstTemplateArguments(ArrayRef<TemplateArgumentLoc> Args,
13072                          const MultiLevelTemplateArgumentList &TemplateArgs,
13073                          TemplateArgumentListInfo &Outputs);
13074 
13075   /// Retrieve the template argument list(s) that should be used to
13076   /// instantiate the definition of the given declaration.
13077   ///
13078   /// \param ND the declaration for which we are computing template
13079   /// instantiation arguments.
13080   ///
13081   /// \param DC In the event we don't HAVE a declaration yet, we instead provide
13082   ///  the decl context where it will be created.  In this case, the `Innermost`
13083   ///  should likely be provided.  If ND is non-null, this is ignored.
13084   ///
13085   /// \param Innermost if non-NULL, specifies a template argument list for the
13086   /// template declaration passed as ND.
13087   ///
13088   /// \param RelativeToPrimary true if we should get the template
13089   /// arguments relative to the primary template, even when we're
13090   /// dealing with a specialization. This is only relevant for function
13091   /// template specializations.
13092   ///
13093   /// \param Pattern If non-NULL, indicates the pattern from which we will be
13094   /// instantiating the definition of the given declaration, \p ND. This is
13095   /// used to determine the proper set of template instantiation arguments for
13096   /// friend function template specializations.
13097   ///
13098   /// \param ForConstraintInstantiation when collecting arguments,
13099   /// ForConstraintInstantiation indicates we should continue looking when
13100   /// encountering a lambda generic call operator, and continue looking for
13101   /// arguments on an enclosing class template.
13102   ///
13103   /// \param SkipForSpecialization when specified, any template specializations
13104   /// in a traversal would be ignored.
13105   /// \param ForDefaultArgumentSubstitution indicates we should continue looking
13106   /// when encountering a specialized member function template, rather than
13107   /// returning immediately.
13108   MultiLevelTemplateArgumentList getTemplateInstantiationArgs(
13109       const NamedDecl *D, const DeclContext *DC = nullptr, bool Final = false,
13110       std::optional<ArrayRef<TemplateArgument>> Innermost = std::nullopt,
13111       bool RelativeToPrimary = false, const FunctionDecl *Pattern = nullptr,
13112       bool ForConstraintInstantiation = false,
13113       bool SkipForSpecialization = false,
13114       bool ForDefaultArgumentSubstitution = false);
13115 
13116   /// RAII object to handle the state changes required to synthesize
13117   /// a function body.
13118   class SynthesizedFunctionScope {
13119     Sema &S;
13120     Sema::ContextRAII SavedContext;
13121     bool PushedCodeSynthesisContext = false;
13122 
13123   public:
13124     SynthesizedFunctionScope(Sema &S, DeclContext *DC)
13125         : S(S), SavedContext(S, DC) {
13126       auto *FD = dyn_cast<FunctionDecl>(DC);
13127       S.PushFunctionScope();
13128       S.PushExpressionEvaluationContext(
13129           (FD && FD->isImmediateFunction())
13130               ? ExpressionEvaluationContext::ImmediateFunctionContext
13131               : ExpressionEvaluationContext::PotentiallyEvaluated);
13132       if (FD) {
13133         auto &Current = S.currentEvaluationContext();
13134         const auto &Parent = S.parentEvaluationContext();
13135 
13136         FD->setWillHaveBody(true);
13137         Current.InImmediateFunctionContext =
13138             FD->isImmediateFunction() ||
13139             (isLambdaMethod(FD) && (Parent.isConstantEvaluated() ||
13140                                     Parent.isImmediateFunctionContext()));
13141 
13142         Current.InImmediateEscalatingFunctionContext =
13143             S.getLangOpts().CPlusPlus20 && FD->isImmediateEscalating();
13144       } else
13145         assert(isa<ObjCMethodDecl>(DC));
13146     }
13147 
13148     void addContextNote(SourceLocation UseLoc) {
13149       assert(!PushedCodeSynthesisContext);
13150 
13151       Sema::CodeSynthesisContext Ctx;
13152       Ctx.Kind = Sema::CodeSynthesisContext::DefiningSynthesizedFunction;
13153       Ctx.PointOfInstantiation = UseLoc;
13154       Ctx.Entity = cast<Decl>(S.CurContext);
13155       S.pushCodeSynthesisContext(Ctx);
13156 
13157       PushedCodeSynthesisContext = true;
13158     }
13159 
13160     ~SynthesizedFunctionScope() {
13161       if (PushedCodeSynthesisContext)
13162         S.popCodeSynthesisContext();
13163       if (auto *FD = dyn_cast<FunctionDecl>(S.CurContext)) {
13164         FD->setWillHaveBody(false);
13165         S.CheckImmediateEscalatingFunctionDefinition(FD, S.getCurFunction());
13166       }
13167       S.PopExpressionEvaluationContext();
13168       S.PopFunctionScopeInfo();
13169     }
13170   };
13171 
13172   /// List of active code synthesis contexts.
13173   ///
13174   /// This vector is treated as a stack. As synthesis of one entity requires
13175   /// synthesis of another, additional contexts are pushed onto the stack.
13176   SmallVector<CodeSynthesisContext, 16> CodeSynthesisContexts;
13177 
13178   /// Specializations whose definitions are currently being instantiated.
13179   llvm::DenseSet<std::pair<Decl *, unsigned>> InstantiatingSpecializations;
13180 
13181   /// Non-dependent types used in templates that have already been instantiated
13182   /// by some template instantiation.
13183   llvm::DenseSet<QualType> InstantiatedNonDependentTypes;
13184 
13185   /// Extra modules inspected when performing a lookup during a template
13186   /// instantiation. Computed lazily.
13187   SmallVector<Module *, 16> CodeSynthesisContextLookupModules;
13188 
13189   /// Cache of additional modules that should be used for name lookup
13190   /// within the current template instantiation. Computed lazily; use
13191   /// getLookupModules() to get a complete set.
13192   llvm::DenseSet<Module *> LookupModulesCache;
13193 
13194   /// Map from the most recent declaration of a namespace to the most
13195   /// recent visible declaration of that namespace.
13196   llvm::DenseMap<NamedDecl *, NamedDecl *> VisibleNamespaceCache;
13197 
13198   /// Whether we are in a SFINAE context that is not associated with
13199   /// template instantiation.
13200   ///
13201   /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside
13202   /// of a template instantiation or template argument deduction.
13203   bool InNonInstantiationSFINAEContext;
13204 
13205   /// The number of \p CodeSynthesisContexts that are not template
13206   /// instantiations and, therefore, should not be counted as part of the
13207   /// instantiation depth.
13208   ///
13209   /// When the instantiation depth reaches the user-configurable limit
13210   /// \p LangOptions::InstantiationDepth we will abort instantiation.
13211   // FIXME: Should we have a similar limit for other forms of synthesis?
13212   unsigned NonInstantiationEntries;
13213 
13214   /// The depth of the context stack at the point when the most recent
13215   /// error or warning was produced.
13216   ///
13217   /// This value is used to suppress printing of redundant context stacks
13218   /// when there are multiple errors or warnings in the same instantiation.
13219   // FIXME: Does this belong in Sema? It's tough to implement it anywhere else.
13220   unsigned LastEmittedCodeSynthesisContextDepth = 0;
13221 
13222   /// The template instantiation callbacks to trace or track
13223   /// instantiations (objects can be chained).
13224   ///
13225   /// This callbacks is used to print, trace or track template
13226   /// instantiations as they are being constructed.
13227   std::vector<std::unique_ptr<TemplateInstantiationCallback>>
13228       TemplateInstCallbacks;
13229 
13230   /// The current index into pack expansion arguments that will be
13231   /// used for substitution of parameter packs.
13232   ///
13233   /// The pack expansion index will be -1 to indicate that parameter packs
13234   /// should be instantiated as themselves. Otherwise, the index specifies
13235   /// which argument within the parameter pack will be used for substitution.
13236   int ArgumentPackSubstitutionIndex;
13237 
13238   /// RAII object used to change the argument pack substitution index
13239   /// within a \c Sema object.
13240   ///
13241   /// See \c ArgumentPackSubstitutionIndex for more information.
13242   class ArgumentPackSubstitutionIndexRAII {
13243     Sema &Self;
13244     int OldSubstitutionIndex;
13245 
13246   public:
13247     ArgumentPackSubstitutionIndexRAII(Sema &Self, int NewSubstitutionIndex)
13248         : Self(Self), OldSubstitutionIndex(Self.ArgumentPackSubstitutionIndex) {
13249       Self.ArgumentPackSubstitutionIndex = NewSubstitutionIndex;
13250     }
13251 
13252     ~ArgumentPackSubstitutionIndexRAII() {
13253       Self.ArgumentPackSubstitutionIndex = OldSubstitutionIndex;
13254     }
13255   };
13256 
13257   friend class ArgumentPackSubstitutionRAII;
13258 
13259   void pushCodeSynthesisContext(CodeSynthesisContext Ctx);
13260   void popCodeSynthesisContext();
13261 
13262   void PrintContextStack() {
13263     if (!CodeSynthesisContexts.empty() &&
13264         CodeSynthesisContexts.size() != LastEmittedCodeSynthesisContextDepth) {
13265       PrintInstantiationStack();
13266       LastEmittedCodeSynthesisContextDepth = CodeSynthesisContexts.size();
13267     }
13268     if (PragmaAttributeCurrentTargetDecl)
13269       PrintPragmaAttributeInstantiationPoint();
13270   }
13271   /// Prints the current instantiation stack through a series of
13272   /// notes.
13273   void PrintInstantiationStack();
13274 
13275   /// Determines whether we are currently in a context where
13276   /// template argument substitution failures are not considered
13277   /// errors.
13278   ///
13279   /// \returns An empty \c Optional if we're not in a SFINAE context.
13280   /// Otherwise, contains a pointer that, if non-NULL, contains the nearest
13281   /// template-deduction context object, which can be used to capture
13282   /// diagnostics that will be suppressed.
13283   std::optional<sema::TemplateDeductionInfo *> isSFINAEContext() const;
13284 
13285   /// Perform substitution on the type T with a given set of template
13286   /// arguments.
13287   ///
13288   /// This routine substitutes the given template arguments into the
13289   /// type T and produces the instantiated type.
13290   ///
13291   /// \param T the type into which the template arguments will be
13292   /// substituted. If this type is not dependent, it will be returned
13293   /// immediately.
13294   ///
13295   /// \param Args the template arguments that will be
13296   /// substituted for the top-level template parameters within T.
13297   ///
13298   /// \param Loc the location in the source code where this substitution
13299   /// is being performed. It will typically be the location of the
13300   /// declarator (if we're instantiating the type of some declaration)
13301   /// or the location of the type in the source code (if, e.g., we're
13302   /// instantiating the type of a cast expression).
13303   ///
13304   /// \param Entity the name of the entity associated with a declaration
13305   /// being instantiated (if any). May be empty to indicate that there
13306   /// is no such entity (if, e.g., this is a type that occurs as part of
13307   /// a cast expression) or that the entity has no name (e.g., an
13308   /// unnamed function parameter).
13309   ///
13310   /// \param AllowDeducedTST Whether a DeducedTemplateSpecializationType is
13311   /// acceptable as the top level type of the result.
13312   ///
13313   /// \param IsIncompleteSubstitution If provided, the pointee will be set
13314   /// whenever substitution would perform a replacement with a null or
13315   /// non-existent template argument.
13316   ///
13317   /// \returns If the instantiation succeeds, the instantiated
13318   /// type. Otherwise, produces diagnostics and returns a NULL type.
13319   TypeSourceInfo *SubstType(TypeSourceInfo *T,
13320                             const MultiLevelTemplateArgumentList &TemplateArgs,
13321                             SourceLocation Loc, DeclarationName Entity,
13322                             bool AllowDeducedTST = false);
13323 
13324   QualType SubstType(QualType T,
13325                      const MultiLevelTemplateArgumentList &TemplateArgs,
13326                      SourceLocation Loc, DeclarationName Entity,
13327                      bool *IsIncompleteSubstitution = nullptr);
13328 
13329   TypeSourceInfo *SubstType(TypeLoc TL,
13330                             const MultiLevelTemplateArgumentList &TemplateArgs,
13331                             SourceLocation Loc, DeclarationName Entity);
13332 
13333   /// A form of SubstType intended specifically for instantiating the
13334   /// type of a FunctionDecl.  Its purpose is solely to force the
13335   /// instantiation of default-argument expressions and to avoid
13336   /// instantiating an exception-specification.
13337   TypeSourceInfo *SubstFunctionDeclType(
13338       TypeSourceInfo *T, const MultiLevelTemplateArgumentList &TemplateArgs,
13339       SourceLocation Loc, DeclarationName Entity, CXXRecordDecl *ThisContext,
13340       Qualifiers ThisTypeQuals, bool EvaluateConstraints = true);
13341   void SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto,
13342                           const MultiLevelTemplateArgumentList &Args);
13343   bool SubstExceptionSpec(SourceLocation Loc,
13344                           FunctionProtoType::ExceptionSpecInfo &ESI,
13345                           SmallVectorImpl<QualType> &ExceptionStorage,
13346                           const MultiLevelTemplateArgumentList &Args);
13347   ParmVarDecl *
13348   SubstParmVarDecl(ParmVarDecl *D,
13349                    const MultiLevelTemplateArgumentList &TemplateArgs,
13350                    int indexAdjustment, std::optional<unsigned> NumExpansions,
13351                    bool ExpectParameterPack, bool EvaluateConstraints = true);
13352 
13353   /// Substitute the given template arguments into the given set of
13354   /// parameters, producing the set of parameter types that would be generated
13355   /// from such a substitution.
13356   bool SubstParmTypes(SourceLocation Loc, ArrayRef<ParmVarDecl *> Params,
13357                       const FunctionProtoType::ExtParameterInfo *ExtParamInfos,
13358                       const MultiLevelTemplateArgumentList &TemplateArgs,
13359                       SmallVectorImpl<QualType> &ParamTypes,
13360                       SmallVectorImpl<ParmVarDecl *> *OutParams,
13361                       ExtParameterInfoBuilder &ParamInfos);
13362 
13363   /// Substitute the given template arguments into the default argument.
13364   bool SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param,
13365                             const MultiLevelTemplateArgumentList &TemplateArgs,
13366                             bool ForCallExpr = false);
13367   ExprResult SubstExpr(Expr *E,
13368                        const MultiLevelTemplateArgumentList &TemplateArgs);
13369 
13370   // A RAII type used by the TemplateDeclInstantiator and TemplateInstantiator
13371   // to disable constraint evaluation, then restore the state.
13372   template <typename InstTy> struct ConstraintEvalRAII {
13373     InstTy &TI;
13374     bool OldValue;
13375 
13376     ConstraintEvalRAII(InstTy &TI)
13377         : TI(TI), OldValue(TI.getEvaluateConstraints()) {
13378       TI.setEvaluateConstraints(false);
13379     }
13380     ~ConstraintEvalRAII() { TI.setEvaluateConstraints(OldValue); }
13381   };
13382 
13383   // Must be used instead of SubstExpr at 'constraint checking' time.
13384   ExprResult
13385   SubstConstraintExpr(Expr *E,
13386                       const MultiLevelTemplateArgumentList &TemplateArgs);
13387   // Unlike the above, this does not evaluates constraints.
13388   ExprResult SubstConstraintExprWithoutSatisfaction(
13389       Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs);
13390 
13391   /// Substitute the given template arguments into a list of
13392   /// expressions, expanding pack expansions if required.
13393   ///
13394   /// \param Exprs The list of expressions to substitute into.
13395   ///
13396   /// \param IsCall Whether this is some form of call, in which case
13397   /// default arguments will be dropped.
13398   ///
13399   /// \param TemplateArgs The set of template arguments to substitute.
13400   ///
13401   /// \param Outputs Will receive all of the substituted arguments.
13402   ///
13403   /// \returns true if an error occurred, false otherwise.
13404   bool SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall,
13405                   const MultiLevelTemplateArgumentList &TemplateArgs,
13406                   SmallVectorImpl<Expr *> &Outputs);
13407 
13408   StmtResult SubstStmt(Stmt *S,
13409                        const MultiLevelTemplateArgumentList &TemplateArgs);
13410 
13411   ExprResult
13412   SubstInitializer(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs,
13413                    bool CXXDirectInit);
13414 
13415   /// Perform substitution on the base class specifiers of the
13416   /// given class template specialization.
13417   ///
13418   /// Produces a diagnostic and returns true on error, returns false and
13419   /// attaches the instantiated base classes to the class template
13420   /// specialization if successful.
13421   bool SubstBaseSpecifiers(CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
13422                            const MultiLevelTemplateArgumentList &TemplateArgs);
13423 
13424   /// Instantiate the definition of a class from a given pattern.
13425   ///
13426   /// \param PointOfInstantiation The point of instantiation within the
13427   /// source code.
13428   ///
13429   /// \param Instantiation is the declaration whose definition is being
13430   /// instantiated. This will be either a class template specialization
13431   /// or a member class of a class template specialization.
13432   ///
13433   /// \param Pattern is the pattern from which the instantiation
13434   /// occurs. This will be either the declaration of a class template or
13435   /// the declaration of a member class of a class template.
13436   ///
13437   /// \param TemplateArgs The template arguments to be substituted into
13438   /// the pattern.
13439   ///
13440   /// \param TSK the kind of implicit or explicit instantiation to perform.
13441   ///
13442   /// \param Complain whether to complain if the class cannot be instantiated
13443   /// due to the lack of a definition.
13444   ///
13445   /// \returns true if an error occurred, false otherwise.
13446   bool InstantiateClass(SourceLocation PointOfInstantiation,
13447                         CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
13448                         const MultiLevelTemplateArgumentList &TemplateArgs,
13449                         TemplateSpecializationKind TSK, bool Complain = true);
13450 
13451   /// Instantiate the definition of an enum from a given pattern.
13452   ///
13453   /// \param PointOfInstantiation The point of instantiation within the
13454   ///        source code.
13455   /// \param Instantiation is the declaration whose definition is being
13456   ///        instantiated. This will be a member enumeration of a class
13457   ///        temploid specialization, or a local enumeration within a
13458   ///        function temploid specialization.
13459   /// \param Pattern The templated declaration from which the instantiation
13460   ///        occurs.
13461   /// \param TemplateArgs The template arguments to be substituted into
13462   ///        the pattern.
13463   /// \param TSK The kind of implicit or explicit instantiation to perform.
13464   ///
13465   /// \return \c true if an error occurred, \c false otherwise.
13466   bool InstantiateEnum(SourceLocation PointOfInstantiation,
13467                        EnumDecl *Instantiation, EnumDecl *Pattern,
13468                        const MultiLevelTemplateArgumentList &TemplateArgs,
13469                        TemplateSpecializationKind TSK);
13470 
13471   /// Instantiate the definition of a field from the given pattern.
13472   ///
13473   /// \param PointOfInstantiation The point of instantiation within the
13474   ///        source code.
13475   /// \param Instantiation is the declaration whose definition is being
13476   ///        instantiated. This will be a class of a class temploid
13477   ///        specialization, or a local enumeration within a function temploid
13478   ///        specialization.
13479   /// \param Pattern The templated declaration from which the instantiation
13480   ///        occurs.
13481   /// \param TemplateArgs The template arguments to be substituted into
13482   ///        the pattern.
13483   ///
13484   /// \return \c true if an error occurred, \c false otherwise.
13485   bool InstantiateInClassInitializer(
13486       SourceLocation PointOfInstantiation, FieldDecl *Instantiation,
13487       FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs);
13488 
13489   bool usesPartialOrExplicitSpecialization(
13490       SourceLocation Loc, ClassTemplateSpecializationDecl *ClassTemplateSpec);
13491 
13492   bool InstantiateClassTemplateSpecialization(
13493       SourceLocation PointOfInstantiation,
13494       ClassTemplateSpecializationDecl *ClassTemplateSpec,
13495       TemplateSpecializationKind TSK, bool Complain,
13496       bool PrimaryHasMatchedPackOnParmToNonPackOnArg);
13497 
13498   /// Instantiates the definitions of all of the member
13499   /// of the given class, which is an instantiation of a class template
13500   /// or a member class of a template.
13501   void
13502   InstantiateClassMembers(SourceLocation PointOfInstantiation,
13503                           CXXRecordDecl *Instantiation,
13504                           const MultiLevelTemplateArgumentList &TemplateArgs,
13505                           TemplateSpecializationKind TSK);
13506 
13507   /// Instantiate the definitions of all of the members of the
13508   /// given class template specialization, which was named as part of an
13509   /// explicit instantiation.
13510   void InstantiateClassTemplateSpecializationMembers(
13511       SourceLocation PointOfInstantiation,
13512       ClassTemplateSpecializationDecl *ClassTemplateSpec,
13513       TemplateSpecializationKind TSK);
13514 
13515   NestedNameSpecifierLoc SubstNestedNameSpecifierLoc(
13516       NestedNameSpecifierLoc NNS,
13517       const MultiLevelTemplateArgumentList &TemplateArgs);
13518 
13519   /// Do template substitution on declaration name info.
13520   DeclarationNameInfo
13521   SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
13522                            const MultiLevelTemplateArgumentList &TemplateArgs);
13523   TemplateName
13524   SubstTemplateName(NestedNameSpecifierLoc QualifierLoc, TemplateName Name,
13525                     SourceLocation Loc,
13526                     const MultiLevelTemplateArgumentList &TemplateArgs);
13527 
13528   bool SubstTypeConstraint(TemplateTypeParmDecl *Inst, const TypeConstraint *TC,
13529                            const MultiLevelTemplateArgumentList &TemplateArgs,
13530                            bool EvaluateConstraint);
13531 
13532   /// Determine whether we are currently performing template instantiation.
13533   bool inTemplateInstantiation() const {
13534     return CodeSynthesisContexts.size() > NonInstantiationEntries;
13535   }
13536 
13537   using EntityPrinter = llvm::function_ref<void(llvm::raw_ostream &)>;
13538 
13539   /// \brief create a Requirement::SubstitutionDiagnostic with only a
13540   /// SubstitutedEntity and DiagLoc using ASTContext's allocator.
13541   concepts::Requirement::SubstitutionDiagnostic *
13542   createSubstDiagAt(SourceLocation Location, EntityPrinter Printer);
13543 
13544   ///@}
13545 
13546   //
13547   //
13548   // -------------------------------------------------------------------------
13549   //
13550   //
13551 
13552   /// \name C++ Template Declaration Instantiation
13553   /// Implementations are in SemaTemplateInstantiateDecl.cpp
13554   ///@{
13555 
13556 public:
13557   /// An entity for which implicit template instantiation is required.
13558   ///
13559   /// The source location associated with the declaration is the first place in
13560   /// the source code where the declaration was "used". It is not necessarily
13561   /// the point of instantiation (which will be either before or after the
13562   /// namespace-scope declaration that triggered this implicit instantiation),
13563   /// However, it is the location that diagnostics should generally refer to,
13564   /// because users will need to know what code triggered the instantiation.
13565   typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation;
13566 
13567   /// The queue of implicit template instantiations that are required
13568   /// but have not yet been performed.
13569   std::deque<PendingImplicitInstantiation> PendingInstantiations;
13570 
13571   /// Queue of implicit template instantiations that cannot be performed
13572   /// eagerly.
13573   SmallVector<PendingImplicitInstantiation, 1> LateParsedInstantiations;
13574 
13575   SmallVector<SmallVector<VTableUse, 16>, 8> SavedVTableUses;
13576   SmallVector<std::deque<PendingImplicitInstantiation>, 8>
13577       SavedPendingInstantiations;
13578 
13579   /// The queue of implicit template instantiations that are required
13580   /// and must be performed within the current local scope.
13581   ///
13582   /// This queue is only used for member functions of local classes in
13583   /// templates, which must be instantiated in the same scope as their
13584   /// enclosing function, so that they can reference function-local
13585   /// types, static variables, enumerators, etc.
13586   std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations;
13587 
13588   class LocalEagerInstantiationScope {
13589   public:
13590     LocalEagerInstantiationScope(Sema &S) : S(S) {
13591       SavedPendingLocalImplicitInstantiations.swap(
13592           S.PendingLocalImplicitInstantiations);
13593     }
13594 
13595     void perform() { S.PerformPendingInstantiations(/*LocalOnly=*/true); }
13596 
13597     ~LocalEagerInstantiationScope() {
13598       assert(S.PendingLocalImplicitInstantiations.empty() &&
13599              "there shouldn't be any pending local implicit instantiations");
13600       SavedPendingLocalImplicitInstantiations.swap(
13601           S.PendingLocalImplicitInstantiations);
13602     }
13603 
13604   private:
13605     Sema &S;
13606     std::deque<PendingImplicitInstantiation>
13607         SavedPendingLocalImplicitInstantiations;
13608   };
13609 
13610   /// Records and restores the CurFPFeatures state on entry/exit of compound
13611   /// statements.
13612   class FPFeaturesStateRAII {
13613   public:
13614     FPFeaturesStateRAII(Sema &S);
13615     ~FPFeaturesStateRAII();
13616     FPOptionsOverride getOverrides() { return OldOverrides; }
13617 
13618   private:
13619     Sema &S;
13620     FPOptions OldFPFeaturesState;
13621     FPOptionsOverride OldOverrides;
13622     LangOptions::FPEvalMethodKind OldEvalMethod;
13623     SourceLocation OldFPPragmaLocation;
13624   };
13625 
13626   class GlobalEagerInstantiationScope {
13627   public:
13628     GlobalEagerInstantiationScope(Sema &S, bool Enabled)
13629         : S(S), Enabled(Enabled) {
13630       if (!Enabled)
13631         return;
13632 
13633       S.SavedPendingInstantiations.emplace_back();
13634       S.SavedPendingInstantiations.back().swap(S.PendingInstantiations);
13635 
13636       S.SavedVTableUses.emplace_back();
13637       S.SavedVTableUses.back().swap(S.VTableUses);
13638     }
13639 
13640     void perform() {
13641       if (Enabled) {
13642         S.DefineUsedVTables();
13643         S.PerformPendingInstantiations();
13644       }
13645     }
13646 
13647     ~GlobalEagerInstantiationScope() {
13648       if (!Enabled)
13649         return;
13650 
13651       // Restore the set of pending vtables.
13652       assert(S.VTableUses.empty() &&
13653              "VTableUses should be empty before it is discarded.");
13654       S.VTableUses.swap(S.SavedVTableUses.back());
13655       S.SavedVTableUses.pop_back();
13656 
13657       // Restore the set of pending implicit instantiations.
13658       if (S.TUKind != TU_Prefix || !S.LangOpts.PCHInstantiateTemplates) {
13659         assert(S.PendingInstantiations.empty() &&
13660                "PendingInstantiations should be empty before it is discarded.");
13661         S.PendingInstantiations.swap(S.SavedPendingInstantiations.back());
13662         S.SavedPendingInstantiations.pop_back();
13663       } else {
13664         // Template instantiations in the PCH may be delayed until the TU.
13665         S.PendingInstantiations.swap(S.SavedPendingInstantiations.back());
13666         S.PendingInstantiations.insert(
13667             S.PendingInstantiations.end(),
13668             S.SavedPendingInstantiations.back().begin(),
13669             S.SavedPendingInstantiations.back().end());
13670         S.SavedPendingInstantiations.pop_back();
13671       }
13672     }
13673 
13674   private:
13675     Sema &S;
13676     bool Enabled;
13677   };
13678 
13679   ExplicitSpecifier instantiateExplicitSpecifier(
13680       const MultiLevelTemplateArgumentList &TemplateArgs, ExplicitSpecifier ES);
13681 
13682   struct LateInstantiatedAttribute {
13683     const Attr *TmplAttr;
13684     LocalInstantiationScope *Scope;
13685     Decl *NewDecl;
13686 
13687     LateInstantiatedAttribute(const Attr *A, LocalInstantiationScope *S,
13688                               Decl *D)
13689         : TmplAttr(A), Scope(S), NewDecl(D) {}
13690   };
13691   typedef SmallVector<LateInstantiatedAttribute, 16> LateInstantiatedAttrVec;
13692 
13693   void InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
13694                         const Decl *Pattern, Decl *Inst,
13695                         LateInstantiatedAttrVec *LateAttrs = nullptr,
13696                         LocalInstantiationScope *OuterMostScope = nullptr);
13697 
13698   /// Update instantiation attributes after template was late parsed.
13699   ///
13700   /// Some attributes are evaluated based on the body of template. If it is
13701   /// late parsed, such attributes cannot be evaluated when declaration is
13702   /// instantiated. This function is used to update instantiation attributes
13703   /// when template definition is ready.
13704   void updateAttrsForLateParsedTemplate(const Decl *Pattern, Decl *Inst);
13705 
13706   void
13707   InstantiateAttrsForDecl(const MultiLevelTemplateArgumentList &TemplateArgs,
13708                           const Decl *Pattern, Decl *Inst,
13709                           LateInstantiatedAttrVec *LateAttrs = nullptr,
13710                           LocalInstantiationScope *OuterMostScope = nullptr);
13711 
13712   /// In the MS ABI, we need to instantiate default arguments of dllexported
13713   /// default constructors along with the constructor definition. This allows IR
13714   /// gen to emit a constructor closure which calls the default constructor with
13715   /// its default arguments.
13716   void InstantiateDefaultCtorDefaultArgs(CXXConstructorDecl *Ctor);
13717 
13718   bool InstantiateDefaultArgument(SourceLocation CallLoc, FunctionDecl *FD,
13719                                   ParmVarDecl *Param);
13720   void InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
13721                                 FunctionDecl *Function);
13722 
13723   /// Instantiate (or find existing instantiation of) a function template with a
13724   /// given set of template arguments.
13725   ///
13726   /// Usually this should not be used, and template argument deduction should be
13727   /// used in its place.
13728   FunctionDecl *InstantiateFunctionDeclaration(
13729       FunctionTemplateDecl *FTD, const TemplateArgumentList *Args,
13730       SourceLocation Loc,
13731       CodeSynthesisContext::SynthesisKind CSC =
13732           CodeSynthesisContext::ExplicitTemplateArgumentSubstitution);
13733 
13734   /// Instantiate the definition of the given function from its
13735   /// template.
13736   ///
13737   /// \param PointOfInstantiation the point at which the instantiation was
13738   /// required. Note that this is not precisely a "point of instantiation"
13739   /// for the function, but it's close.
13740   ///
13741   /// \param Function the already-instantiated declaration of a
13742   /// function template specialization or member function of a class template
13743   /// specialization.
13744   ///
13745   /// \param Recursive if true, recursively instantiates any functions that
13746   /// are required by this instantiation.
13747   ///
13748   /// \param DefinitionRequired if true, then we are performing an explicit
13749   /// instantiation where the body of the function is required. Complain if
13750   /// there is no such body.
13751   void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
13752                                      FunctionDecl *Function,
13753                                      bool Recursive = false,
13754                                      bool DefinitionRequired = false,
13755                                      bool AtEndOfTU = false);
13756   VarTemplateSpecializationDecl *BuildVarTemplateInstantiation(
13757       VarTemplateDecl *VarTemplate, VarDecl *FromVar,
13758       const TemplateArgumentList *PartialSpecArgs,
13759       const TemplateArgumentListInfo &TemplateArgsInfo,
13760       SmallVectorImpl<TemplateArgument> &Converted,
13761       SourceLocation PointOfInstantiation,
13762       LateInstantiatedAttrVec *LateAttrs = nullptr,
13763       LocalInstantiationScope *StartingScope = nullptr);
13764 
13765   /// Instantiates a variable template specialization by completing it
13766   /// with appropriate type information and initializer.
13767   VarTemplateSpecializationDecl *CompleteVarTemplateSpecializationDecl(
13768       VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
13769       const MultiLevelTemplateArgumentList &TemplateArgs);
13770 
13771   /// BuildVariableInstantiation - Used after a new variable has been created.
13772   /// Sets basic variable data and decides whether to postpone the
13773   /// variable instantiation.
13774   void
13775   BuildVariableInstantiation(VarDecl *NewVar, VarDecl *OldVar,
13776                              const MultiLevelTemplateArgumentList &TemplateArgs,
13777                              LateInstantiatedAttrVec *LateAttrs,
13778                              DeclContext *Owner,
13779                              LocalInstantiationScope *StartingScope,
13780                              bool InstantiatingVarTemplate = false,
13781                              VarTemplateSpecializationDecl *PrevVTSD = nullptr);
13782 
13783   /// Instantiate the initializer of a variable.
13784   void InstantiateVariableInitializer(
13785       VarDecl *Var, VarDecl *OldVar,
13786       const MultiLevelTemplateArgumentList &TemplateArgs);
13787 
13788   /// Instantiate the definition of the given variable from its
13789   /// template.
13790   ///
13791   /// \param PointOfInstantiation the point at which the instantiation was
13792   /// required. Note that this is not precisely a "point of instantiation"
13793   /// for the variable, but it's close.
13794   ///
13795   /// \param Var the already-instantiated declaration of a templated variable.
13796   ///
13797   /// \param Recursive if true, recursively instantiates any functions that
13798   /// are required by this instantiation.
13799   ///
13800   /// \param DefinitionRequired if true, then we are performing an explicit
13801   /// instantiation where a definition of the variable is required. Complain
13802   /// if there is no such definition.
13803   void InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
13804                                      VarDecl *Var, bool Recursive = false,
13805                                      bool DefinitionRequired = false,
13806                                      bool AtEndOfTU = false);
13807 
13808   void InstantiateMemInitializers(
13809       CXXConstructorDecl *New, const CXXConstructorDecl *Tmpl,
13810       const MultiLevelTemplateArgumentList &TemplateArgs);
13811 
13812   /// Find the instantiation of the given declaration within the
13813   /// current instantiation.
13814   ///
13815   /// This routine is intended to be used when \p D is a declaration
13816   /// referenced from within a template, that needs to mapped into the
13817   /// corresponding declaration within an instantiation. For example,
13818   /// given:
13819   ///
13820   /// \code
13821   /// template<typename T>
13822   /// struct X {
13823   ///   enum Kind {
13824   ///     KnownValue = sizeof(T)
13825   ///   };
13826   ///
13827   ///   bool getKind() const { return KnownValue; }
13828   /// };
13829   ///
13830   /// template struct X<int>;
13831   /// \endcode
13832   ///
13833   /// In the instantiation of X<int>::getKind(), we need to map the \p
13834   /// EnumConstantDecl for \p KnownValue (which refers to
13835   /// X<T>::<Kind>::KnownValue) to its instantiation
13836   /// (X<int>::<Kind>::KnownValue).
13837   /// \p FindInstantiatedDecl performs this mapping from within the
13838   /// instantiation of X<int>.
13839   NamedDecl *
13840   FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
13841                        const MultiLevelTemplateArgumentList &TemplateArgs,
13842                        bool FindingInstantiatedContext = false);
13843 
13844   /// Finds the instantiation of the given declaration context
13845   /// within the current instantiation.
13846   ///
13847   /// \returns NULL if there was an error
13848   DeclContext *
13849   FindInstantiatedContext(SourceLocation Loc, DeclContext *DC,
13850                           const MultiLevelTemplateArgumentList &TemplateArgs);
13851 
13852   Decl *SubstDecl(Decl *D, DeclContext *Owner,
13853                   const MultiLevelTemplateArgumentList &TemplateArgs);
13854 
13855   /// Substitute the name and return type of a defaulted 'operator<=>' to form
13856   /// an implicit 'operator=='.
13857   FunctionDecl *SubstSpaceshipAsEqualEqual(CXXRecordDecl *RD,
13858                                            FunctionDecl *Spaceship);
13859 
13860   /// Performs template instantiation for all implicit template
13861   /// instantiations we have seen until this point.
13862   void PerformPendingInstantiations(bool LocalOnly = false);
13863 
13864   TemplateParameterList *
13865   SubstTemplateParams(TemplateParameterList *Params, DeclContext *Owner,
13866                       const MultiLevelTemplateArgumentList &TemplateArgs,
13867                       bool EvaluateConstraints = true);
13868 
13869   void PerformDependentDiagnostics(
13870       const DeclContext *Pattern,
13871       const MultiLevelTemplateArgumentList &TemplateArgs);
13872 
13873 private:
13874   /// Introduce the instantiated local variables into the local
13875   /// instantiation scope.
13876   void addInstantiatedLocalVarsToScope(FunctionDecl *Function,
13877                                        const FunctionDecl *PatternDecl,
13878                                        LocalInstantiationScope &Scope);
13879   /// Introduce the instantiated function parameters into the local
13880   /// instantiation scope, and set the parameter names to those used
13881   /// in the template.
13882   bool addInstantiatedParametersToScope(
13883       FunctionDecl *Function, const FunctionDecl *PatternDecl,
13884       LocalInstantiationScope &Scope,
13885       const MultiLevelTemplateArgumentList &TemplateArgs);
13886 
13887   /// Introduce the instantiated captures of the lambda into the local
13888   /// instantiation scope.
13889   bool addInstantiatedCapturesToScope(
13890       FunctionDecl *Function, const FunctionDecl *PatternDecl,
13891       LocalInstantiationScope &Scope,
13892       const MultiLevelTemplateArgumentList &TemplateArgs);
13893 
13894   int ParsingClassDepth = 0;
13895 
13896   class SavePendingParsedClassStateRAII {
13897   public:
13898     SavePendingParsedClassStateRAII(Sema &S) : S(S) { swapSavedState(); }
13899 
13900     ~SavePendingParsedClassStateRAII() {
13901       assert(S.DelayedOverridingExceptionSpecChecks.empty() &&
13902              "there shouldn't be any pending delayed exception spec checks");
13903       assert(S.DelayedEquivalentExceptionSpecChecks.empty() &&
13904              "there shouldn't be any pending delayed exception spec checks");
13905       swapSavedState();
13906     }
13907 
13908   private:
13909     Sema &S;
13910     decltype(DelayedOverridingExceptionSpecChecks)
13911         SavedOverridingExceptionSpecChecks;
13912     decltype(DelayedEquivalentExceptionSpecChecks)
13913         SavedEquivalentExceptionSpecChecks;
13914 
13915     void swapSavedState() {
13916       SavedOverridingExceptionSpecChecks.swap(
13917           S.DelayedOverridingExceptionSpecChecks);
13918       SavedEquivalentExceptionSpecChecks.swap(
13919           S.DelayedEquivalentExceptionSpecChecks);
13920     }
13921   };
13922 
13923   ///@}
13924 
13925   //
13926   //
13927   // -------------------------------------------------------------------------
13928   //
13929   //
13930 
13931   /// \name C++ Variadic Templates
13932   /// Implementations are in SemaTemplateVariadic.cpp
13933   ///@{
13934 
13935 public:
13936   /// Determine whether an unexpanded parameter pack might be permitted in this
13937   /// location. Useful for error recovery.
13938   bool isUnexpandedParameterPackPermitted();
13939 
13940   /// The context in which an unexpanded parameter pack is
13941   /// being diagnosed.
13942   ///
13943   /// Note that the values of this enumeration line up with the first
13944   /// argument to the \c err_unexpanded_parameter_pack diagnostic.
13945   enum UnexpandedParameterPackContext {
13946     /// An arbitrary expression.
13947     UPPC_Expression = 0,
13948 
13949     /// The base type of a class type.
13950     UPPC_BaseType,
13951 
13952     /// The type of an arbitrary declaration.
13953     UPPC_DeclarationType,
13954 
13955     /// The type of a data member.
13956     UPPC_DataMemberType,
13957 
13958     /// The size of a bit-field.
13959     UPPC_BitFieldWidth,
13960 
13961     /// The expression in a static assertion.
13962     UPPC_StaticAssertExpression,
13963 
13964     /// The fixed underlying type of an enumeration.
13965     UPPC_FixedUnderlyingType,
13966 
13967     /// The enumerator value.
13968     UPPC_EnumeratorValue,
13969 
13970     /// A using declaration.
13971     UPPC_UsingDeclaration,
13972 
13973     /// A friend declaration.
13974     UPPC_FriendDeclaration,
13975 
13976     /// A declaration qualifier.
13977     UPPC_DeclarationQualifier,
13978 
13979     /// An initializer.
13980     UPPC_Initializer,
13981 
13982     /// A default argument.
13983     UPPC_DefaultArgument,
13984 
13985     /// The type of a non-type template parameter.
13986     UPPC_NonTypeTemplateParameterType,
13987 
13988     /// The type of an exception.
13989     UPPC_ExceptionType,
13990 
13991     /// Explicit specialization.
13992     UPPC_ExplicitSpecialization,
13993 
13994     /// Partial specialization.
13995     UPPC_PartialSpecialization,
13996 
13997     /// Microsoft __if_exists.
13998     UPPC_IfExists,
13999 
14000     /// Microsoft __if_not_exists.
14001     UPPC_IfNotExists,
14002 
14003     /// Lambda expression.
14004     UPPC_Lambda,
14005 
14006     /// Block expression.
14007     UPPC_Block,
14008 
14009     /// A type constraint.
14010     UPPC_TypeConstraint,
14011 
14012     // A requirement in a requires-expression.
14013     UPPC_Requirement,
14014 
14015     // A requires-clause.
14016     UPPC_RequiresClause,
14017   };
14018 
14019   /// Diagnose unexpanded parameter packs.
14020   ///
14021   /// \param Loc The location at which we should emit the diagnostic.
14022   ///
14023   /// \param UPPC The context in which we are diagnosing unexpanded
14024   /// parameter packs.
14025   ///
14026   /// \param Unexpanded the set of unexpanded parameter packs.
14027   ///
14028   /// \returns true if an error occurred, false otherwise.
14029   bool DiagnoseUnexpandedParameterPacks(
14030       SourceLocation Loc, UnexpandedParameterPackContext UPPC,
14031       ArrayRef<UnexpandedParameterPack> Unexpanded);
14032 
14033   /// If the given type contains an unexpanded parameter pack,
14034   /// diagnose the error.
14035   ///
14036   /// \param Loc The source location where a diagnostc should be emitted.
14037   ///
14038   /// \param T The type that is being checked for unexpanded parameter
14039   /// packs.
14040   ///
14041   /// \returns true if an error occurred, false otherwise.
14042   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T,
14043                                        UnexpandedParameterPackContext UPPC);
14044 
14045   /// If the given expression contains an unexpanded parameter
14046   /// pack, diagnose the error.
14047   ///
14048   /// \param E The expression that is being checked for unexpanded
14049   /// parameter packs.
14050   ///
14051   /// \returns true if an error occurred, false otherwise.
14052   bool DiagnoseUnexpandedParameterPack(
14053       Expr *E, UnexpandedParameterPackContext UPPC = UPPC_Expression);
14054 
14055   /// If the given requirees-expression contains an unexpanded reference to one
14056   /// of its own parameter packs, diagnose the error.
14057   ///
14058   /// \param RE The requiress-expression that is being checked for unexpanded
14059   /// parameter packs.
14060   ///
14061   /// \returns true if an error occurred, false otherwise.
14062   bool DiagnoseUnexpandedParameterPackInRequiresExpr(RequiresExpr *RE);
14063 
14064   /// If the given nested-name-specifier contains an unexpanded
14065   /// parameter pack, diagnose the error.
14066   ///
14067   /// \param SS The nested-name-specifier that is being checked for
14068   /// unexpanded parameter packs.
14069   ///
14070   /// \returns true if an error occurred, false otherwise.
14071   bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS,
14072                                        UnexpandedParameterPackContext UPPC);
14073 
14074   /// If the given name contains an unexpanded parameter pack,
14075   /// diagnose the error.
14076   ///
14077   /// \param NameInfo The name (with source location information) that
14078   /// is being checked for unexpanded parameter packs.
14079   ///
14080   /// \returns true if an error occurred, false otherwise.
14081   bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo,
14082                                        UnexpandedParameterPackContext UPPC);
14083 
14084   /// If the given template name contains an unexpanded parameter pack,
14085   /// diagnose the error.
14086   ///
14087   /// \param Loc The location of the template name.
14088   ///
14089   /// \param Template The template name that is being checked for unexpanded
14090   /// parameter packs.
14091   ///
14092   /// \returns true if an error occurred, false otherwise.
14093   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc,
14094                                        TemplateName Template,
14095                                        UnexpandedParameterPackContext UPPC);
14096 
14097   /// If the given template argument contains an unexpanded parameter
14098   /// pack, diagnose the error.
14099   ///
14100   /// \param Arg The template argument that is being checked for unexpanded
14101   /// parameter packs.
14102   ///
14103   /// \returns true if an error occurred, false otherwise.
14104   bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg,
14105                                        UnexpandedParameterPackContext UPPC);
14106 
14107   /// Collect the set of unexpanded parameter packs within the given
14108   /// template argument.
14109   ///
14110   /// \param Arg The template argument that will be traversed to find
14111   /// unexpanded parameter packs.
14112   void collectUnexpandedParameterPacks(
14113       TemplateArgument Arg,
14114       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14115 
14116   /// Collect the set of unexpanded parameter packs within the given
14117   /// template argument.
14118   ///
14119   /// \param Arg The template argument that will be traversed to find
14120   /// unexpanded parameter packs.
14121   void collectUnexpandedParameterPacks(
14122       TemplateArgumentLoc Arg,
14123       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14124 
14125   /// Collect the set of unexpanded parameter packs within the given
14126   /// type.
14127   ///
14128   /// \param T The type that will be traversed to find
14129   /// unexpanded parameter packs.
14130   void collectUnexpandedParameterPacks(
14131       QualType T, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14132 
14133   /// Collect the set of unexpanded parameter packs within the given
14134   /// type.
14135   ///
14136   /// \param TL The type that will be traversed to find
14137   /// unexpanded parameter packs.
14138   void collectUnexpandedParameterPacks(
14139       TypeLoc TL, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14140 
14141   /// Collect the set of unexpanded parameter packs within the given
14142   /// nested-name-specifier.
14143   ///
14144   /// \param NNS The nested-name-specifier that will be traversed to find
14145   /// unexpanded parameter packs.
14146   void collectUnexpandedParameterPacks(
14147       NestedNameSpecifierLoc NNS,
14148       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14149 
14150   /// Collect the set of unexpanded parameter packs within the given
14151   /// name.
14152   ///
14153   /// \param NameInfo The name that will be traversed to find
14154   /// unexpanded parameter packs.
14155   void collectUnexpandedParameterPacks(
14156       const DeclarationNameInfo &NameInfo,
14157       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14158 
14159   /// Collect the set of unexpanded parameter packs within the given
14160   /// expression.
14161   static void collectUnexpandedParameterPacks(
14162       Expr *E, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14163 
14164   /// Invoked when parsing a template argument followed by an
14165   /// ellipsis, which creates a pack expansion.
14166   ///
14167   /// \param Arg The template argument preceding the ellipsis, which
14168   /// may already be invalid.
14169   ///
14170   /// \param EllipsisLoc The location of the ellipsis.
14171   ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg,
14172                                             SourceLocation EllipsisLoc);
14173 
14174   /// Invoked when parsing a type followed by an ellipsis, which
14175   /// creates a pack expansion.
14176   ///
14177   /// \param Type The type preceding the ellipsis, which will become
14178   /// the pattern of the pack expansion.
14179   ///
14180   /// \param EllipsisLoc The location of the ellipsis.
14181   TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc);
14182 
14183   /// Construct a pack expansion type from the pattern of the pack
14184   /// expansion.
14185   TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern,
14186                                      SourceLocation EllipsisLoc,
14187                                      std::optional<unsigned> NumExpansions);
14188 
14189   /// Construct a pack expansion type from the pattern of the pack
14190   /// expansion.
14191   QualType CheckPackExpansion(QualType Pattern, SourceRange PatternRange,
14192                               SourceLocation EllipsisLoc,
14193                               std::optional<unsigned> NumExpansions);
14194 
14195   /// Invoked when parsing an expression followed by an ellipsis, which
14196   /// creates a pack expansion.
14197   ///
14198   /// \param Pattern The expression preceding the ellipsis, which will become
14199   /// the pattern of the pack expansion.
14200   ///
14201   /// \param EllipsisLoc The location of the ellipsis.
14202   ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc);
14203 
14204   /// Invoked when parsing an expression followed by an ellipsis, which
14205   /// creates a pack expansion.
14206   ///
14207   /// \param Pattern The expression preceding the ellipsis, which will become
14208   /// the pattern of the pack expansion.
14209   ///
14210   /// \param EllipsisLoc The location of the ellipsis.
14211   ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc,
14212                                 std::optional<unsigned> NumExpansions);
14213 
14214   /// Determine whether we could expand a pack expansion with the
14215   /// given set of parameter packs into separate arguments by repeatedly
14216   /// transforming the pattern.
14217   ///
14218   /// \param EllipsisLoc The location of the ellipsis that identifies the
14219   /// pack expansion.
14220   ///
14221   /// \param PatternRange The source range that covers the entire pattern of
14222   /// the pack expansion.
14223   ///
14224   /// \param Unexpanded The set of unexpanded parameter packs within the
14225   /// pattern.
14226   ///
14227   /// \param ShouldExpand Will be set to \c true if the transformer should
14228   /// expand the corresponding pack expansions into separate arguments. When
14229   /// set, \c NumExpansions must also be set.
14230   ///
14231   /// \param RetainExpansion Whether the caller should add an unexpanded
14232   /// pack expansion after all of the expanded arguments. This is used
14233   /// when extending explicitly-specified template argument packs per
14234   /// C++0x [temp.arg.explicit]p9.
14235   ///
14236   /// \param NumExpansions The number of separate arguments that will be in
14237   /// the expanded form of the corresponding pack expansion. This is both an
14238   /// input and an output parameter, which can be set by the caller if the
14239   /// number of expansions is known a priori (e.g., due to a prior substitution)
14240   /// and will be set by the callee when the number of expansions is known.
14241   /// The callee must set this value when \c ShouldExpand is \c true; it may
14242   /// set this value in other cases.
14243   ///
14244   /// \returns true if an error occurred (e.g., because the parameter packs
14245   /// are to be instantiated with arguments of different lengths), false
14246   /// otherwise. If false, \c ShouldExpand (and possibly \c NumExpansions)
14247   /// must be set.
14248   bool CheckParameterPacksForExpansion(
14249       SourceLocation EllipsisLoc, SourceRange PatternRange,
14250       ArrayRef<UnexpandedParameterPack> Unexpanded,
14251       const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand,
14252       bool &RetainExpansion, std::optional<unsigned> &NumExpansions);
14253 
14254   /// Determine the number of arguments in the given pack expansion
14255   /// type.
14256   ///
14257   /// This routine assumes that the number of arguments in the expansion is
14258   /// consistent across all of the unexpanded parameter packs in its pattern.
14259   ///
14260   /// Returns an empty Optional if the type can't be expanded.
14261   std::optional<unsigned> getNumArgumentsInExpansion(
14262       QualType T, const MultiLevelTemplateArgumentList &TemplateArgs);
14263 
14264   std::optional<unsigned> getNumArgumentsInExpansionFromUnexpanded(
14265       llvm::ArrayRef<UnexpandedParameterPack> Unexpanded,
14266       const MultiLevelTemplateArgumentList &TemplateArgs);
14267 
14268   /// Determine whether the given declarator contains any unexpanded
14269   /// parameter packs.
14270   ///
14271   /// This routine is used by the parser to disambiguate function declarators
14272   /// with an ellipsis prior to the ')', e.g.,
14273   ///
14274   /// \code
14275   ///   void f(T...);
14276   /// \endcode
14277   ///
14278   /// To determine whether we have an (unnamed) function parameter pack or
14279   /// a variadic function.
14280   ///
14281   /// \returns true if the declarator contains any unexpanded parameter packs,
14282   /// false otherwise.
14283   bool containsUnexpandedParameterPacks(Declarator &D);
14284 
14285   /// Returns the pattern of the pack expansion for a template argument.
14286   ///
14287   /// \param OrigLoc The template argument to expand.
14288   ///
14289   /// \param Ellipsis Will be set to the location of the ellipsis.
14290   ///
14291   /// \param NumExpansions Will be set to the number of expansions that will
14292   /// be generated from this pack expansion, if known a priori.
14293   TemplateArgumentLoc getTemplateArgumentPackExpansionPattern(
14294       TemplateArgumentLoc OrigLoc, SourceLocation &Ellipsis,
14295       std::optional<unsigned> &NumExpansions) const;
14296 
14297   /// Given a template argument that contains an unexpanded parameter pack, but
14298   /// which has already been substituted, attempt to determine the number of
14299   /// elements that will be produced once this argument is fully-expanded.
14300   ///
14301   /// This is intended for use when transforming 'sizeof...(Arg)' in order to
14302   /// avoid actually expanding the pack where possible.
14303   std::optional<unsigned> getFullyPackExpandedSize(TemplateArgument Arg);
14304 
14305   /// Called when an expression computing the size of a parameter pack
14306   /// is parsed.
14307   ///
14308   /// \code
14309   /// template<typename ...Types> struct count {
14310   ///   static const unsigned value = sizeof...(Types);
14311   /// };
14312   /// \endcode
14313   ///
14314   //
14315   /// \param OpLoc The location of the "sizeof" keyword.
14316   /// \param Name The name of the parameter pack whose size will be determined.
14317   /// \param NameLoc The source location of the name of the parameter pack.
14318   /// \param RParenLoc The location of the closing parentheses.
14319   ExprResult ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc,
14320                                           IdentifierInfo &Name,
14321                                           SourceLocation NameLoc,
14322                                           SourceLocation RParenLoc);
14323 
14324   ExprResult ActOnPackIndexingExpr(Scope *S, Expr *PackExpression,
14325                                    SourceLocation EllipsisLoc,
14326                                    SourceLocation LSquareLoc, Expr *IndexExpr,
14327                                    SourceLocation RSquareLoc);
14328 
14329   ExprResult BuildPackIndexingExpr(Expr *PackExpression,
14330                                    SourceLocation EllipsisLoc, Expr *IndexExpr,
14331                                    SourceLocation RSquareLoc,
14332                                    ArrayRef<Expr *> ExpandedExprs = {},
14333                                    bool FullySubstituted = false);
14334 
14335   /// Handle a C++1z fold-expression: ( expr op ... op expr ).
14336   ExprResult ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS,
14337                               tok::TokenKind Operator,
14338                               SourceLocation EllipsisLoc, Expr *RHS,
14339                               SourceLocation RParenLoc);
14340   ExprResult BuildCXXFoldExpr(UnresolvedLookupExpr *Callee,
14341                               SourceLocation LParenLoc, Expr *LHS,
14342                               BinaryOperatorKind Operator,
14343                               SourceLocation EllipsisLoc, Expr *RHS,
14344                               SourceLocation RParenLoc,
14345                               std::optional<unsigned> NumExpansions);
14346   ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc,
14347                                    BinaryOperatorKind Operator);
14348 
14349   ///@}
14350 
14351   //
14352   //
14353   // -------------------------------------------------------------------------
14354   //
14355   //
14356 
14357   /// \name Constraints and Concepts
14358   /// Implementations are in SemaConcept.cpp
14359   ///@{
14360 
14361 public:
14362   void PushSatisfactionStackEntry(const NamedDecl *D,
14363                                   const llvm::FoldingSetNodeID &ID) {
14364     const NamedDecl *Can = cast<NamedDecl>(D->getCanonicalDecl());
14365     SatisfactionStack.emplace_back(Can, ID);
14366   }
14367 
14368   void PopSatisfactionStackEntry() { SatisfactionStack.pop_back(); }
14369 
14370   bool SatisfactionStackContains(const NamedDecl *D,
14371                                  const llvm::FoldingSetNodeID &ID) const {
14372     const NamedDecl *Can = cast<NamedDecl>(D->getCanonicalDecl());
14373     return llvm::find(SatisfactionStack, SatisfactionStackEntryTy{Can, ID}) !=
14374            SatisfactionStack.end();
14375   }
14376 
14377   using SatisfactionStackEntryTy =
14378       std::pair<const NamedDecl *, llvm::FoldingSetNodeID>;
14379 
14380   // Resets the current SatisfactionStack for cases where we are instantiating
14381   // constraints as a 'side effect' of normal instantiation in a way that is not
14382   // indicative of recursive definition.
14383   class SatisfactionStackResetRAII {
14384     llvm::SmallVector<SatisfactionStackEntryTy, 10> BackupSatisfactionStack;
14385     Sema &SemaRef;
14386 
14387   public:
14388     SatisfactionStackResetRAII(Sema &S) : SemaRef(S) {
14389       SemaRef.SwapSatisfactionStack(BackupSatisfactionStack);
14390     }
14391 
14392     ~SatisfactionStackResetRAII() {
14393       SemaRef.SwapSatisfactionStack(BackupSatisfactionStack);
14394     }
14395   };
14396 
14397   void SwapSatisfactionStack(
14398       llvm::SmallVectorImpl<SatisfactionStackEntryTy> &NewSS) {
14399     SatisfactionStack.swap(NewSS);
14400   }
14401 
14402   /// Check whether the given expression is a valid constraint expression.
14403   /// A diagnostic is emitted if it is not, false is returned, and
14404   /// PossibleNonPrimary will be set to true if the failure might be due to a
14405   /// non-primary expression being used as an atomic constraint.
14406   bool CheckConstraintExpression(const Expr *CE, Token NextToken = Token(),
14407                                  bool *PossibleNonPrimary = nullptr,
14408                                  bool IsTrailingRequiresClause = false);
14409 
14410   /// \brief Check whether the given list of constraint expressions are
14411   /// satisfied (as if in a 'conjunction') given template arguments.
14412   /// \param Template the template-like entity that triggered the constraints
14413   /// check (either a concept or a constrained entity).
14414   /// \param ConstraintExprs a list of constraint expressions, treated as if
14415   /// they were 'AND'ed together.
14416   /// \param TemplateArgLists the list of template arguments to substitute into
14417   /// the constraint expression.
14418   /// \param TemplateIDRange The source range of the template id that
14419   /// caused the constraints check.
14420   /// \param Satisfaction if true is returned, will contain details of the
14421   /// satisfaction, with enough information to diagnose an unsatisfied
14422   /// expression.
14423   /// \returns true if an error occurred and satisfaction could not be checked,
14424   /// false otherwise.
14425   bool CheckConstraintSatisfaction(
14426       const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs,
14427       const MultiLevelTemplateArgumentList &TemplateArgLists,
14428       SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction) {
14429     llvm::SmallVector<Expr *, 4> Converted;
14430     return CheckConstraintSatisfaction(Template, ConstraintExprs, Converted,
14431                                        TemplateArgLists, TemplateIDRange,
14432                                        Satisfaction);
14433   }
14434 
14435   /// \brief Check whether the given list of constraint expressions are
14436   /// satisfied (as if in a 'conjunction') given template arguments.
14437   /// Additionally, takes an empty list of Expressions which is populated with
14438   /// the instantiated versions of the ConstraintExprs.
14439   /// \param Template the template-like entity that triggered the constraints
14440   /// check (either a concept or a constrained entity).
14441   /// \param ConstraintExprs a list of constraint expressions, treated as if
14442   /// they were 'AND'ed together.
14443   /// \param ConvertedConstraints a out parameter that will get populated with
14444   /// the instantiated version of the ConstraintExprs if we successfully checked
14445   /// satisfaction.
14446   /// \param TemplateArgList the multi-level list of template arguments to
14447   /// substitute into the constraint expression. This should be relative to the
14448   /// top-level (hence multi-level), since we need to instantiate fully at the
14449   /// time of checking.
14450   /// \param TemplateIDRange The source range of the template id that
14451   /// caused the constraints check.
14452   /// \param Satisfaction if true is returned, will contain details of the
14453   /// satisfaction, with enough information to diagnose an unsatisfied
14454   /// expression.
14455   /// \returns true if an error occurred and satisfaction could not be checked,
14456   /// false otherwise.
14457   bool CheckConstraintSatisfaction(
14458       const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs,
14459       llvm::SmallVectorImpl<Expr *> &ConvertedConstraints,
14460       const MultiLevelTemplateArgumentList &TemplateArgList,
14461       SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction);
14462 
14463   /// \brief Check whether the given non-dependent constraint expression is
14464   /// satisfied. Returns false and updates Satisfaction with the satisfaction
14465   /// verdict if successful, emits a diagnostic and returns true if an error
14466   /// occurred and satisfaction could not be determined.
14467   ///
14468   /// \returns true if an error occurred, false otherwise.
14469   bool CheckConstraintSatisfaction(const Expr *ConstraintExpr,
14470                                    ConstraintSatisfaction &Satisfaction);
14471 
14472   /// Check whether the given function decl's trailing requires clause is
14473   /// satisfied, if any. Returns false and updates Satisfaction with the
14474   /// satisfaction verdict if successful, emits a diagnostic and returns true if
14475   /// an error occurred and satisfaction could not be determined.
14476   ///
14477   /// \returns true if an error occurred, false otherwise.
14478   bool CheckFunctionConstraints(const FunctionDecl *FD,
14479                                 ConstraintSatisfaction &Satisfaction,
14480                                 SourceLocation UsageLoc = SourceLocation(),
14481                                 bool ForOverloadResolution = false);
14482 
14483   // Calculates whether two constraint expressions are equal irrespective of a
14484   // difference in 'depth'. This takes a pair of optional 'NamedDecl's 'Old' and
14485   // 'New', which are the "source" of the constraint, since this is necessary
14486   // for figuring out the relative 'depth' of the constraint. The depth of the
14487   // 'primary template' and the 'instantiated from' templates aren't necessarily
14488   // the same, such as a case when one is a 'friend' defined in a class.
14489   bool AreConstraintExpressionsEqual(const NamedDecl *Old,
14490                                      const Expr *OldConstr,
14491                                      const TemplateCompareNewDeclInfo &New,
14492                                      const Expr *NewConstr);
14493 
14494   // Calculates whether the friend function depends on an enclosing template for
14495   // the purposes of [temp.friend] p9.
14496   bool FriendConstraintsDependOnEnclosingTemplate(const FunctionDecl *FD);
14497 
14498   /// \brief Ensure that the given template arguments satisfy the constraints
14499   /// associated with the given template, emitting a diagnostic if they do not.
14500   ///
14501   /// \param Template The template to which the template arguments are being
14502   /// provided.
14503   ///
14504   /// \param TemplateArgs The converted, canonicalized template arguments.
14505   ///
14506   /// \param TemplateIDRange The source range of the template id that
14507   /// caused the constraints check.
14508   ///
14509   /// \returns true if the constrains are not satisfied or could not be checked
14510   /// for satisfaction, false if the constraints are satisfied.
14511   bool EnsureTemplateArgumentListConstraints(
14512       TemplateDecl *Template,
14513       const MultiLevelTemplateArgumentList &TemplateArgs,
14514       SourceRange TemplateIDRange);
14515 
14516   bool CheckInstantiatedFunctionTemplateConstraints(
14517       SourceLocation PointOfInstantiation, FunctionDecl *Decl,
14518       ArrayRef<TemplateArgument> TemplateArgs,
14519       ConstraintSatisfaction &Satisfaction);
14520 
14521   /// \brief Emit diagnostics explaining why a constraint expression was deemed
14522   /// unsatisfied.
14523   /// \param First whether this is the first time an unsatisfied constraint is
14524   /// diagnosed for this error.
14525   void DiagnoseUnsatisfiedConstraint(const ConstraintSatisfaction &Satisfaction,
14526                                      bool First = true);
14527 
14528   /// \brief Emit diagnostics explaining why a constraint expression was deemed
14529   /// unsatisfied.
14530   void
14531   DiagnoseUnsatisfiedConstraint(const ASTConstraintSatisfaction &Satisfaction,
14532                                 bool First = true);
14533 
14534   const NormalizedConstraint *getNormalizedAssociatedConstraints(
14535       NamedDecl *ConstrainedDecl, ArrayRef<const Expr *> AssociatedConstraints);
14536 
14537   /// \brief Check whether the given declaration's associated constraints are
14538   /// at least as constrained than another declaration's according to the
14539   /// partial ordering of constraints.
14540   ///
14541   /// \param Result If no error occurred, receives the result of true if D1 is
14542   /// at least constrained than D2, and false otherwise.
14543   ///
14544   /// \returns true if an error occurred, false otherwise.
14545   bool IsAtLeastAsConstrained(NamedDecl *D1, MutableArrayRef<const Expr *> AC1,
14546                               NamedDecl *D2, MutableArrayRef<const Expr *> AC2,
14547                               bool &Result);
14548 
14549   /// If D1 was not at least as constrained as D2, but would've been if a pair
14550   /// of atomic constraints involved had been declared in a concept and not
14551   /// repeated in two separate places in code.
14552   /// \returns true if such a diagnostic was emitted, false otherwise.
14553   bool MaybeEmitAmbiguousAtomicConstraintsDiagnostic(
14554       NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2,
14555       ArrayRef<const Expr *> AC2);
14556 
14557 private:
14558   /// Caches pairs of template-like decls whose associated constraints were
14559   /// checked for subsumption and whether or not the first's constraints did in
14560   /// fact subsume the second's.
14561   llvm::DenseMap<std::pair<NamedDecl *, NamedDecl *>, bool> SubsumptionCache;
14562   /// Caches the normalized associated constraints of declarations (concepts or
14563   /// constrained declarations). If an error occurred while normalizing the
14564   /// associated constraints of the template or concept, nullptr will be cached
14565   /// here.
14566   llvm::DenseMap<NamedDecl *, NormalizedConstraint *> NormalizationCache;
14567 
14568   llvm::ContextualFoldingSet<ConstraintSatisfaction, const ASTContext &>
14569       SatisfactionCache;
14570 
14571   // The current stack of constraint satisfactions, so we can exit-early.
14572   llvm::SmallVector<SatisfactionStackEntryTy, 10> SatisfactionStack;
14573 
14574   /// Used by SetupConstraintCheckingTemplateArgumentsAndScope to set up the
14575   /// LocalInstantiationScope of the current non-lambda function. For lambdas,
14576   /// use LambdaScopeForCallOperatorInstantiationRAII.
14577   bool
14578   SetupConstraintScope(FunctionDecl *FD,
14579                        std::optional<ArrayRef<TemplateArgument>> TemplateArgs,
14580                        const MultiLevelTemplateArgumentList &MLTAL,
14581                        LocalInstantiationScope &Scope);
14582 
14583   /// Used during constraint checking, sets up the constraint template argument
14584   /// lists, and calls SetupConstraintScope to set up the
14585   /// LocalInstantiationScope to have the proper set of ParVarDecls configured.
14586   std::optional<MultiLevelTemplateArgumentList>
14587   SetupConstraintCheckingTemplateArgumentsAndScope(
14588       FunctionDecl *FD, std::optional<ArrayRef<TemplateArgument>> TemplateArgs,
14589       LocalInstantiationScope &Scope);
14590 
14591   ///@}
14592 
14593   //
14594   //
14595   // -------------------------------------------------------------------------
14596   //
14597   //
14598 
14599   /// \name Types
14600   /// Implementations are in SemaType.cpp
14601   ///@{
14602 
14603 public:
14604   /// A mapping that describes the nullability we've seen in each header file.
14605   FileNullabilityMap NullabilityMap;
14606 
14607   static int getPrintable(int I) { return I; }
14608   static unsigned getPrintable(unsigned I) { return I; }
14609   static bool getPrintable(bool B) { return B; }
14610   static const char *getPrintable(const char *S) { return S; }
14611   static StringRef getPrintable(StringRef S) { return S; }
14612   static const std::string &getPrintable(const std::string &S) { return S; }
14613   static const IdentifierInfo *getPrintable(const IdentifierInfo *II) {
14614     return II;
14615   }
14616   static DeclarationName getPrintable(DeclarationName N) { return N; }
14617   static QualType getPrintable(QualType T) { return T; }
14618   static SourceRange getPrintable(SourceRange R) { return R; }
14619   static SourceRange getPrintable(SourceLocation L) { return L; }
14620   static SourceRange getPrintable(const Expr *E) { return E->getSourceRange(); }
14621   static SourceRange getPrintable(TypeLoc TL) { return TL.getSourceRange(); }
14622 
14623   enum class CompleteTypeKind {
14624     /// Apply the normal rules for complete types.  In particular,
14625     /// treat all sizeless types as incomplete.
14626     Normal,
14627 
14628     /// Relax the normal rules for complete types so that they include
14629     /// sizeless built-in types.
14630     AcceptSizeless,
14631 
14632     // FIXME: Eventually we should flip the default to Normal and opt in
14633     // to AcceptSizeless rather than opt out of it.
14634     Default = AcceptSizeless
14635   };
14636 
14637   QualType BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs,
14638                               const DeclSpec *DS = nullptr);
14639   QualType BuildQualifiedType(QualType T, SourceLocation Loc, unsigned CVRA,
14640                               const DeclSpec *DS = nullptr);
14641 
14642   /// Build a pointer type.
14643   ///
14644   /// \param T The type to which we'll be building a pointer.
14645   ///
14646   /// \param Loc The location of the entity whose type involves this
14647   /// pointer type or, if there is no such entity, the location of the
14648   /// type that will have pointer type.
14649   ///
14650   /// \param Entity The name of the entity that involves the pointer
14651   /// type, if known.
14652   ///
14653   /// \returns A suitable pointer type, if there are no
14654   /// errors. Otherwise, returns a NULL type.
14655   QualType BuildPointerType(QualType T, SourceLocation Loc,
14656                             DeclarationName Entity);
14657 
14658   /// Build a reference type.
14659   ///
14660   /// \param T The type to which we'll be building a reference.
14661   ///
14662   /// \param Loc The location of the entity whose type involves this
14663   /// reference type or, if there is no such entity, the location of the
14664   /// type that will have reference type.
14665   ///
14666   /// \param Entity The name of the entity that involves the reference
14667   /// type, if known.
14668   ///
14669   /// \returns A suitable reference type, if there are no
14670   /// errors. Otherwise, returns a NULL type.
14671   QualType BuildReferenceType(QualType T, bool LValueRef, SourceLocation Loc,
14672                               DeclarationName Entity);
14673 
14674   /// Build an array type.
14675   ///
14676   /// \param T The type of each element in the array.
14677   ///
14678   /// \param ASM C99 array size modifier (e.g., '*', 'static').
14679   ///
14680   /// \param ArraySize Expression describing the size of the array.
14681   ///
14682   /// \param Brackets The range from the opening '[' to the closing ']'.
14683   ///
14684   /// \param Entity The name of the entity that involves the array
14685   /// type, if known.
14686   ///
14687   /// \returns A suitable array type, if there are no errors. Otherwise,
14688   /// returns a NULL type.
14689   QualType BuildArrayType(QualType T, ArraySizeModifier ASM, Expr *ArraySize,
14690                           unsigned Quals, SourceRange Brackets,
14691                           DeclarationName Entity);
14692   QualType BuildVectorType(QualType T, Expr *VecSize, SourceLocation AttrLoc);
14693 
14694   /// Build an ext-vector type.
14695   ///
14696   /// Run the required checks for the extended vector type.
14697   QualType BuildExtVectorType(QualType T, Expr *ArraySize,
14698                               SourceLocation AttrLoc);
14699   QualType BuildMatrixType(QualType T, Expr *NumRows, Expr *NumColumns,
14700                            SourceLocation AttrLoc);
14701 
14702   QualType BuildCountAttributedArrayOrPointerType(QualType WrappedTy,
14703                                                   Expr *CountExpr,
14704                                                   bool CountInBytes,
14705                                                   bool OrNull);
14706 
14707   /// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an
14708   /// expression is uninstantiated. If instantiated it will apply the
14709   /// appropriate address space to the type. This function allows dependent
14710   /// template variables to be used in conjunction with the address_space
14711   /// attribute
14712   QualType BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace,
14713                                  SourceLocation AttrLoc);
14714 
14715   /// Same as above, but constructs the AddressSpace index if not provided.
14716   QualType BuildAddressSpaceAttr(QualType &T, Expr *AddrSpace,
14717                                  SourceLocation AttrLoc);
14718 
14719   bool CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc);
14720 
14721   bool CheckFunctionReturnType(QualType T, SourceLocation Loc);
14722 
14723   /// Build a function type.
14724   ///
14725   /// This routine checks the function type according to C++ rules and
14726   /// under the assumption that the result type and parameter types have
14727   /// just been instantiated from a template. It therefore duplicates
14728   /// some of the behavior of GetTypeForDeclarator, but in a much
14729   /// simpler form that is only suitable for this narrow use case.
14730   ///
14731   /// \param T The return type of the function.
14732   ///
14733   /// \param ParamTypes The parameter types of the function. This array
14734   /// will be modified to account for adjustments to the types of the
14735   /// function parameters.
14736   ///
14737   /// \param Loc The location of the entity whose type involves this
14738   /// function type or, if there is no such entity, the location of the
14739   /// type that will have function type.
14740   ///
14741   /// \param Entity The name of the entity that involves the function
14742   /// type, if known.
14743   ///
14744   /// \param EPI Extra information about the function type. Usually this will
14745   /// be taken from an existing function with the same prototype.
14746   ///
14747   /// \returns A suitable function type, if there are no errors. The
14748   /// unqualified type will always be a FunctionProtoType.
14749   /// Otherwise, returns a NULL type.
14750   QualType BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes,
14751                              SourceLocation Loc, DeclarationName Entity,
14752                              const FunctionProtoType::ExtProtoInfo &EPI);
14753 
14754   /// Build a member pointer type \c T Class::*.
14755   ///
14756   /// \param T the type to which the member pointer refers.
14757   /// \param Class the class type into which the member pointer points.
14758   /// \param Loc the location where this type begins
14759   /// \param Entity the name of the entity that will have this member pointer
14760   /// type
14761   ///
14762   /// \returns a member pointer type, if successful, or a NULL type if there was
14763   /// an error.
14764   QualType BuildMemberPointerType(QualType T, QualType Class,
14765                                   SourceLocation Loc, DeclarationName Entity);
14766 
14767   /// Build a block pointer type.
14768   ///
14769   /// \param T The type to which we'll be building a block pointer.
14770   ///
14771   /// \param Loc The source location, used for diagnostics.
14772   ///
14773   /// \param Entity The name of the entity that involves the block pointer
14774   /// type, if known.
14775   ///
14776   /// \returns A suitable block pointer type, if there are no
14777   /// errors. Otherwise, returns a NULL type.
14778   QualType BuildBlockPointerType(QualType T, SourceLocation Loc,
14779                                  DeclarationName Entity);
14780 
14781   /// Build a paren type including \p T.
14782   QualType BuildParenType(QualType T);
14783   QualType BuildAtomicType(QualType T, SourceLocation Loc);
14784 
14785   /// Build a Read-only Pipe type.
14786   ///
14787   /// \param T The type to which we'll be building a Pipe.
14788   ///
14789   /// \param Loc We do not use it for now.
14790   ///
14791   /// \returns A suitable pipe type, if there are no errors. Otherwise, returns
14792   /// a NULL type.
14793   QualType BuildReadPipeType(QualType T, SourceLocation Loc);
14794 
14795   /// Build a Write-only Pipe type.
14796   ///
14797   /// \param T The type to which we'll be building a Pipe.
14798   ///
14799   /// \param Loc We do not use it for now.
14800   ///
14801   /// \returns A suitable pipe type, if there are no errors. Otherwise, returns
14802   /// a NULL type.
14803   QualType BuildWritePipeType(QualType T, SourceLocation Loc);
14804 
14805   /// Build a bit-precise integer type.
14806   ///
14807   /// \param IsUnsigned Boolean representing the signedness of the type.
14808   ///
14809   /// \param BitWidth Size of this int type in bits, or an expression
14810   /// representing that.
14811   ///
14812   /// \param Loc Location of the keyword.
14813   QualType BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc);
14814 
14815   /// GetTypeForDeclarator - Convert the type for the specified
14816   /// declarator to Type instances.
14817   ///
14818   /// The result of this call will never be null, but the associated
14819   /// type may be a null type if there's an unrecoverable error.
14820   TypeSourceInfo *GetTypeForDeclarator(Declarator &D);
14821   TypeSourceInfo *GetTypeForDeclaratorCast(Declarator &D, QualType FromTy);
14822 
14823   /// Package the given type and TSI into a ParsedType.
14824   ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo);
14825   static QualType GetTypeFromParser(ParsedType Ty,
14826                                     TypeSourceInfo **TInfo = nullptr);
14827 
14828   TypeResult ActOnTypeName(Declarator &D);
14829 
14830   // Check whether the size of array element of type \p EltTy is a multiple of
14831   // its alignment and return false if it isn't.
14832   bool checkArrayElementAlignment(QualType EltTy, SourceLocation Loc);
14833 
14834   void
14835   diagnoseIgnoredQualifiers(unsigned DiagID, unsigned Quals,
14836                             SourceLocation FallbackLoc,
14837                             SourceLocation ConstQualLoc = SourceLocation(),
14838                             SourceLocation VolatileQualLoc = SourceLocation(),
14839                             SourceLocation RestrictQualLoc = SourceLocation(),
14840                             SourceLocation AtomicQualLoc = SourceLocation(),
14841                             SourceLocation UnalignedQualLoc = SourceLocation());
14842 
14843   /// Retrieve the keyword associated
14844   IdentifierInfo *getNullabilityKeyword(NullabilityKind nullability);
14845 
14846   /// Adjust the calling convention of a method to be the ABI default if it
14847   /// wasn't specified explicitly.  This handles method types formed from
14848   /// function type typedefs and typename template arguments.
14849   void adjustMemberFunctionCC(QualType &T, bool HasThisPointer,
14850                               bool IsCtorOrDtor, SourceLocation Loc);
14851 
14852   // Check if there is an explicit attribute, but only look through parens.
14853   // The intent is to look for an attribute on the current declarator, but not
14854   // one that came from a typedef.
14855   bool hasExplicitCallingConv(QualType T);
14856 
14857   /// Check whether a nullability type specifier can be added to the given
14858   /// type through some means not written in source (e.g. API notes).
14859   ///
14860   /// \param Type The type to which the nullability specifier will be
14861   /// added. On success, this type will be updated appropriately.
14862   ///
14863   /// \param Nullability The nullability specifier to add.
14864   ///
14865   /// \param DiagLoc The location to use for diagnostics.
14866   ///
14867   /// \param AllowArrayTypes Whether to accept nullability specifiers on an
14868   /// array type (e.g., because it will decay to a pointer).
14869   ///
14870   /// \param OverrideExisting Whether to override an existing, locally-specified
14871   /// nullability specifier rather than complaining about the conflict.
14872   ///
14873   /// \returns true if nullability cannot be applied, false otherwise.
14874   bool CheckImplicitNullabilityTypeSpecifier(QualType &Type,
14875                                              NullabilityKind Nullability,
14876                                              SourceLocation DiagLoc,
14877                                              bool AllowArrayTypes,
14878                                              bool OverrideExisting);
14879 
14880   /// Get the type of expression E, triggering instantiation to complete the
14881   /// type if necessary -- that is, if the expression refers to a templated
14882   /// static data member of incomplete array type.
14883   ///
14884   /// May still return an incomplete type if instantiation was not possible or
14885   /// if the type is incomplete for a different reason. Use
14886   /// RequireCompleteExprType instead if a diagnostic is expected for an
14887   /// incomplete expression type.
14888   QualType getCompletedType(Expr *E);
14889 
14890   void completeExprArrayBound(Expr *E);
14891 
14892   /// Ensure that the type of the given expression is complete.
14893   ///
14894   /// This routine checks whether the expression \p E has a complete type. If
14895   /// the expression refers to an instantiable construct, that instantiation is
14896   /// performed as needed to complete its type. Furthermore
14897   /// Sema::RequireCompleteType is called for the expression's type (or in the
14898   /// case of a reference type, the referred-to type).
14899   ///
14900   /// \param E The expression whose type is required to be complete.
14901   /// \param Kind Selects which completeness rules should be applied.
14902   /// \param Diagnoser The object that will emit a diagnostic if the type is
14903   /// incomplete.
14904   ///
14905   /// \returns \c true if the type of \p E is incomplete and diagnosed, \c false
14906   /// otherwise.
14907   bool RequireCompleteExprType(Expr *E, CompleteTypeKind Kind,
14908                                TypeDiagnoser &Diagnoser);
14909   bool RequireCompleteExprType(Expr *E, unsigned DiagID);
14910 
14911   template <typename... Ts>
14912   bool RequireCompleteExprType(Expr *E, unsigned DiagID, const Ts &...Args) {
14913     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
14914     return RequireCompleteExprType(E, CompleteTypeKind::Default, Diagnoser);
14915   }
14916 
14917   /// Retrieve a version of the type 'T' that is elaborated by Keyword,
14918   /// qualified by the nested-name-specifier contained in SS, and that is
14919   /// (re)declared by OwnedTagDecl, which is nullptr if this is not a
14920   /// (re)declaration.
14921   QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
14922                              const CXXScopeSpec &SS, QualType T,
14923                              TagDecl *OwnedTagDecl = nullptr);
14924 
14925   // Returns the underlying type of a decltype with the given expression.
14926   QualType getDecltypeForExpr(Expr *E);
14927 
14928   QualType BuildTypeofExprType(Expr *E, TypeOfKind Kind);
14929   /// If AsUnevaluated is false, E is treated as though it were an evaluated
14930   /// context, such as when building a type for decltype(auto).
14931   QualType BuildDecltypeType(Expr *E, bool AsUnevaluated = true);
14932 
14933   QualType ActOnPackIndexingType(QualType Pattern, Expr *IndexExpr,
14934                                  SourceLocation Loc,
14935                                  SourceLocation EllipsisLoc);
14936   QualType BuildPackIndexingType(QualType Pattern, Expr *IndexExpr,
14937                                  SourceLocation Loc, SourceLocation EllipsisLoc,
14938                                  bool FullySubstituted = false,
14939                                  ArrayRef<QualType> Expansions = {});
14940 
14941   using UTTKind = UnaryTransformType::UTTKind;
14942   QualType BuildUnaryTransformType(QualType BaseType, UTTKind UKind,
14943                                    SourceLocation Loc);
14944   QualType BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc);
14945   QualType BuiltinAddPointer(QualType BaseType, SourceLocation Loc);
14946   QualType BuiltinRemovePointer(QualType BaseType, SourceLocation Loc);
14947   QualType BuiltinDecay(QualType BaseType, SourceLocation Loc);
14948   QualType BuiltinAddReference(QualType BaseType, UTTKind UKind,
14949                                SourceLocation Loc);
14950   QualType BuiltinRemoveExtent(QualType BaseType, UTTKind UKind,
14951                                SourceLocation Loc);
14952   QualType BuiltinRemoveReference(QualType BaseType, UTTKind UKind,
14953                                   SourceLocation Loc);
14954   QualType BuiltinChangeCVRQualifiers(QualType BaseType, UTTKind UKind,
14955                                       SourceLocation Loc);
14956   QualType BuiltinChangeSignedness(QualType BaseType, UTTKind UKind,
14957                                    SourceLocation Loc);
14958 
14959   /// Ensure that the type T is a literal type.
14960   ///
14961   /// This routine checks whether the type @p T is a literal type. If @p T is an
14962   /// incomplete type, an attempt is made to complete it. If @p T is a literal
14963   /// type, or @p AllowIncompleteType is true and @p T is an incomplete type,
14964   /// returns false. Otherwise, this routine issues the diagnostic @p PD (giving
14965   /// it the type @p T), along with notes explaining why the type is not a
14966   /// literal type, and returns true.
14967   ///
14968   /// @param Loc  The location in the source that the non-literal type
14969   /// diagnostic should refer to.
14970   ///
14971   /// @param T  The type that this routine is examining for literalness.
14972   ///
14973   /// @param Diagnoser Emits a diagnostic if T is not a literal type.
14974   ///
14975   /// @returns @c true if @p T is not a literal type and a diagnostic was
14976   /// emitted, @c false otherwise.
14977   bool RequireLiteralType(SourceLocation Loc, QualType T,
14978                           TypeDiagnoser &Diagnoser);
14979   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID);
14980 
14981   template <typename... Ts>
14982   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID,
14983                           const Ts &...Args) {
14984     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
14985     return RequireLiteralType(Loc, T, Diagnoser);
14986   }
14987 
14988   bool isCompleteType(SourceLocation Loc, QualType T,
14989                       CompleteTypeKind Kind = CompleteTypeKind::Default) {
14990     return !RequireCompleteTypeImpl(Loc, T, Kind, nullptr);
14991   }
14992 
14993   /// Ensure that the type T is a complete type.
14994   ///
14995   /// This routine checks whether the type @p T is complete in any
14996   /// context where a complete type is required. If @p T is a complete
14997   /// type, returns false. If @p T is a class template specialization,
14998   /// this routine then attempts to perform class template
14999   /// instantiation. If instantiation fails, or if @p T is incomplete
15000   /// and cannot be completed, issues the diagnostic @p diag (giving it
15001   /// the type @p T) and returns true.
15002   ///
15003   /// @param Loc  The location in the source that the incomplete type
15004   /// diagnostic should refer to.
15005   ///
15006   /// @param T  The type that this routine is examining for completeness.
15007   ///
15008   /// @param Kind Selects which completeness rules should be applied.
15009   ///
15010   /// @returns @c true if @p T is incomplete and a diagnostic was emitted,
15011   /// @c false otherwise.
15012   bool RequireCompleteType(SourceLocation Loc, QualType T,
15013                            CompleteTypeKind Kind, TypeDiagnoser &Diagnoser);
15014   bool RequireCompleteType(SourceLocation Loc, QualType T,
15015                            CompleteTypeKind Kind, unsigned DiagID);
15016 
15017   bool RequireCompleteType(SourceLocation Loc, QualType T,
15018                            TypeDiagnoser &Diagnoser) {
15019     return RequireCompleteType(Loc, T, CompleteTypeKind::Default, Diagnoser);
15020   }
15021   bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID) {
15022     return RequireCompleteType(Loc, T, CompleteTypeKind::Default, DiagID);
15023   }
15024 
15025   template <typename... Ts>
15026   bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID,
15027                            const Ts &...Args) {
15028     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
15029     return RequireCompleteType(Loc, T, Diagnoser);
15030   }
15031 
15032   /// Determine whether a declaration is visible to name lookup.
15033   bool isVisible(const NamedDecl *D) {
15034     return D->isUnconditionallyVisible() ||
15035            isAcceptableSlow(D, AcceptableKind::Visible);
15036   }
15037 
15038   /// Determine whether a declaration is reachable.
15039   bool isReachable(const NamedDecl *D) {
15040     // All visible declarations are reachable.
15041     return D->isUnconditionallyVisible() ||
15042            isAcceptableSlow(D, AcceptableKind::Reachable);
15043   }
15044 
15045   /// Determine whether a declaration is acceptable (visible/reachable).
15046   bool isAcceptable(const NamedDecl *D, AcceptableKind Kind) {
15047     return Kind == AcceptableKind::Visible ? isVisible(D) : isReachable(D);
15048   }
15049 
15050   /// Determine if \p D and \p Suggested have a structurally compatible
15051   /// layout as described in C11 6.2.7/1.
15052   bool hasStructuralCompatLayout(Decl *D, Decl *Suggested);
15053 
15054   /// Determine if \p D has a visible definition. If not, suggest a declaration
15055   /// that should be made visible to expose the definition.
15056   bool hasVisibleDefinition(NamedDecl *D, NamedDecl **Suggested,
15057                             bool OnlyNeedComplete = false);
15058   bool hasVisibleDefinition(const NamedDecl *D) {
15059     NamedDecl *Hidden;
15060     return hasVisibleDefinition(const_cast<NamedDecl *>(D), &Hidden);
15061   }
15062 
15063   /// Determine if \p D has a reachable definition. If not, suggest a
15064   /// declaration that should be made reachable to expose the definition.
15065   bool hasReachableDefinition(NamedDecl *D, NamedDecl **Suggested,
15066                               bool OnlyNeedComplete = false);
15067   bool hasReachableDefinition(NamedDecl *D) {
15068     NamedDecl *Hidden;
15069     return hasReachableDefinition(D, &Hidden);
15070   }
15071 
15072   bool hasAcceptableDefinition(NamedDecl *D, NamedDecl **Suggested,
15073                                AcceptableKind Kind,
15074                                bool OnlyNeedComplete = false);
15075   bool hasAcceptableDefinition(NamedDecl *D, AcceptableKind Kind) {
15076     NamedDecl *Hidden;
15077     return hasAcceptableDefinition(D, &Hidden, Kind);
15078   }
15079 
15080   /// Try to parse the conditional expression attached to an effect attribute
15081   /// (e.g. 'nonblocking'). (c.f. Sema::ActOnNoexceptSpec). Return an empty
15082   /// optional on error.
15083   std::optional<FunctionEffectMode>
15084   ActOnEffectExpression(Expr *CondExpr, StringRef AttributeName);
15085 
15086 private:
15087   /// The implementation of RequireCompleteType
15088   bool RequireCompleteTypeImpl(SourceLocation Loc, QualType T,
15089                                CompleteTypeKind Kind, TypeDiagnoser *Diagnoser);
15090 
15091   /// Nullability type specifiers.
15092   IdentifierInfo *Ident__Nonnull = nullptr;
15093   IdentifierInfo *Ident__Nullable = nullptr;
15094   IdentifierInfo *Ident__Nullable_result = nullptr;
15095   IdentifierInfo *Ident__Null_unspecified = nullptr;
15096 
15097   ///@}
15098 
15099   //
15100   //
15101   // -------------------------------------------------------------------------
15102   //
15103   //
15104 
15105   /// \name FixIt Helpers
15106   /// Implementations are in SemaFixItUtils.cpp
15107   ///@{
15108 
15109 public:
15110   /// Get a string to suggest for zero-initialization of a type.
15111   std::string getFixItZeroInitializerForType(QualType T,
15112                                              SourceLocation Loc) const;
15113   std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const;
15114 
15115   ///@}
15116 
15117   //
15118   //
15119   // -------------------------------------------------------------------------
15120   //
15121   //
15122 
15123   /// \name Function Effects
15124   /// Implementations are in SemaFunctionEffects.cpp
15125   ///@{
15126 public:
15127   struct FunctionEffectDiff {
15128     enum class Kind { Added, Removed, ConditionMismatch };
15129 
15130     FunctionEffect::Kind EffectKind;
15131     Kind DiffKind;
15132     std::optional<FunctionEffectWithCondition>
15133         Old; // Invalid when 'Kind' is 'Added'.
15134     std::optional<FunctionEffectWithCondition>
15135         New; // Invalid when 'Kind' is 'Removed'.
15136 
15137     StringRef effectName() const {
15138       if (Old)
15139         return Old.value().Effect.name();
15140       return New.value().Effect.name();
15141     }
15142 
15143     /// Describes the result of effects differing between a base class's virtual
15144     /// method and an overriding method in a subclass.
15145     enum class OverrideResult {
15146       NoAction,
15147       Warn,
15148       Merge // Merge missing effect from base to derived.
15149     };
15150 
15151     /// Return true if adding or removing the effect as part of a type
15152     /// conversion should generate a diagnostic.
15153     bool shouldDiagnoseConversion(QualType SrcType,
15154                                   const FunctionEffectsRef &SrcFX,
15155                                   QualType DstType,
15156                                   const FunctionEffectsRef &DstFX) const;
15157 
15158     /// Return true if adding or removing the effect in a redeclaration should
15159     /// generate a diagnostic.
15160     bool shouldDiagnoseRedeclaration(const FunctionDecl &OldFunction,
15161                                      const FunctionEffectsRef &OldFX,
15162                                      const FunctionDecl &NewFunction,
15163                                      const FunctionEffectsRef &NewFX) const;
15164 
15165     /// Return true if adding or removing the effect in a C++ virtual method
15166     /// override should generate a diagnostic.
15167     OverrideResult shouldDiagnoseMethodOverride(
15168         const CXXMethodDecl &OldMethod, const FunctionEffectsRef &OldFX,
15169         const CXXMethodDecl &NewMethod, const FunctionEffectsRef &NewFX) const;
15170   };
15171 
15172   struct FunctionEffectDiffVector : public SmallVector<FunctionEffectDiff> {
15173     /// Caller should short-circuit by checking for equality first.
15174     FunctionEffectDiffVector(const FunctionEffectsRef &Old,
15175                              const FunctionEffectsRef &New);
15176   };
15177 
15178   /// All functions/lambdas/blocks which have bodies and which have a non-empty
15179   /// FunctionEffectsRef to be verified.
15180   SmallVector<const Decl *> DeclsWithEffectsToVerify;
15181 
15182   /// The union of all effects present on DeclsWithEffectsToVerify. Conditions
15183   /// are all null.
15184   FunctionEffectKindSet AllEffectsToVerify;
15185 
15186 public:
15187   /// Warn and return true if adding a function effect to a set would create a
15188   /// conflict.
15189   bool diagnoseConflictingFunctionEffect(const FunctionEffectsRef &FX,
15190                                          const FunctionEffectWithCondition &EC,
15191                                          SourceLocation NewAttrLoc);
15192 
15193   // Report a failure to merge function effects between declarations due to a
15194   // conflict.
15195   void
15196   diagnoseFunctionEffectMergeConflicts(const FunctionEffectSet::Conflicts &Errs,
15197                                        SourceLocation NewLoc,
15198                                        SourceLocation OldLoc);
15199 
15200   /// Inline checks from the start of maybeAddDeclWithEffects, to
15201   /// minimize performance impact on code not using effects.
15202   template <class FuncOrBlockDecl>
15203   void maybeAddDeclWithEffects(FuncOrBlockDecl *D) {
15204     if (Context.hasAnyFunctionEffects())
15205       if (FunctionEffectsRef FX = D->getFunctionEffects(); !FX.empty())
15206         maybeAddDeclWithEffects(D, FX);
15207   }
15208 
15209   /// Potentially add a FunctionDecl or BlockDecl to DeclsWithEffectsToVerify.
15210   void maybeAddDeclWithEffects(const Decl *D, const FunctionEffectsRef &FX);
15211 
15212   /// Unconditionally add a Decl to DeclsWithEfffectsToVerify.
15213   void addDeclWithEffects(const Decl *D, const FunctionEffectsRef &FX);
15214 
15215   void performFunctionEffectAnalysis(TranslationUnitDecl *TU);
15216 
15217   ///@}
15218 };
15219 
15220 DeductionFailureInfo
15221 MakeDeductionFailureInfo(ASTContext &Context, TemplateDeductionResult TDK,
15222                          sema::TemplateDeductionInfo &Info);
15223 
15224 /// Contains a late templated function.
15225 /// Will be parsed at the end of the translation unit, used by Sema & Parser.
15226 struct LateParsedTemplate {
15227   CachedTokens Toks;
15228   /// The template function declaration to be late parsed.
15229   Decl *D;
15230   /// Floating-point options in the point of definition.
15231   FPOptions FPO;
15232 };
15233 
15234 template <>
15235 void Sema::PragmaStack<Sema::AlignPackInfo>::Act(SourceLocation PragmaLocation,
15236                                                  PragmaMsStackAction Action,
15237                                                  llvm::StringRef StackSlotLabel,
15238                                                  AlignPackInfo Value);
15239 } // end namespace clang
15240 
15241 #endif