xref: /freebsd/contrib/llvm-project/clang/include/clang/Sema/Sema.h (revision 36b606ae6aa4b24061096ba18582e0a08ccd5dba)
1 //===--- Sema.h - Semantic Analysis & AST Building --------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the Sema class, which performs semantic analysis and
10 // builds ASTs.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CLANG_SEMA_SEMA_H
15 #define LLVM_CLANG_SEMA_SEMA_H
16 
17 #include "clang/APINotes/APINotesManager.h"
18 #include "clang/AST/ASTConcept.h"
19 #include "clang/AST/ASTFwd.h"
20 #include "clang/AST/Attr.h"
21 #include "clang/AST/Availability.h"
22 #include "clang/AST/ComparisonCategories.h"
23 #include "clang/AST/DeclTemplate.h"
24 #include "clang/AST/DeclarationName.h"
25 #include "clang/AST/Expr.h"
26 #include "clang/AST/ExprCXX.h"
27 #include "clang/AST/ExprConcepts.h"
28 #include "clang/AST/ExprObjC.h"
29 #include "clang/AST/ExternalASTSource.h"
30 #include "clang/AST/LocInfoType.h"
31 #include "clang/AST/MangleNumberingContext.h"
32 #include "clang/AST/NSAPI.h"
33 #include "clang/AST/PrettyPrinter.h"
34 #include "clang/AST/StmtCXX.h"
35 #include "clang/AST/TypeLoc.h"
36 #include "clang/AST/TypeOrdering.h"
37 #include "clang/Basic/BitmaskEnum.h"
38 #include "clang/Basic/Builtins.h"
39 #include "clang/Basic/Cuda.h"
40 #include "clang/Basic/DarwinSDKInfo.h"
41 #include "clang/Basic/ExpressionTraits.h"
42 #include "clang/Basic/IdentifierTable.h"
43 #include "clang/Basic/Module.h"
44 #include "clang/Basic/OpenCLOptions.h"
45 #include "clang/Basic/PragmaKinds.h"
46 #include "clang/Basic/Specifiers.h"
47 #include "clang/Basic/TemplateKinds.h"
48 #include "clang/Basic/TypeTraits.h"
49 #include "clang/Sema/AnalysisBasedWarnings.h"
50 #include "clang/Sema/Attr.h"
51 #include "clang/Sema/CleanupInfo.h"
52 #include "clang/Sema/DeclSpec.h"
53 #include "clang/Sema/ExternalSemaSource.h"
54 #include "clang/Sema/IdentifierResolver.h"
55 #include "clang/Sema/ObjCMethodList.h"
56 #include "clang/Sema/Ownership.h"
57 #include "clang/Sema/Redeclaration.h"
58 #include "clang/Sema/Scope.h"
59 #include "clang/Sema/SemaBase.h"
60 #include "clang/Sema/SemaConcept.h"
61 #include "clang/Sema/SemaDiagnostic.h"
62 #include "clang/Sema/TypoCorrection.h"
63 #include "clang/Sema/Weak.h"
64 #include "llvm/ADT/ArrayRef.h"
65 #include "llvm/ADT/STLForwardCompat.h"
66 #include "llvm/ADT/SetVector.h"
67 #include "llvm/ADT/SmallBitVector.h"
68 #include "llvm/ADT/SmallPtrSet.h"
69 #include "llvm/ADT/SmallSet.h"
70 #include "llvm/ADT/SmallVector.h"
71 #include "llvm/ADT/StringExtras.h"
72 #include "llvm/ADT/TinyPtrVector.h"
73 #include <deque>
74 #include <memory>
75 #include <optional>
76 #include <string>
77 #include <tuple>
78 #include <vector>
79 
80 namespace llvm {
81 class APSInt;
82 template <typename ValueT, typename ValueInfoT> class DenseSet;
83 class SmallBitVector;
84 struct InlineAsmIdentifierInfo;
85 } // namespace llvm
86 
87 namespace clang {
88 class ADLResult;
89 class ASTConsumer;
90 class ASTContext;
91 class ASTMutationListener;
92 class ASTReader;
93 class ASTWriter;
94 class ArrayType;
95 class ParsedAttr;
96 class BindingDecl;
97 class BlockDecl;
98 class CapturedDecl;
99 class CXXBasePath;
100 class CXXBasePaths;
101 class CXXBindTemporaryExpr;
102 typedef SmallVector<CXXBaseSpecifier *, 4> CXXCastPath;
103 class CXXConstructorDecl;
104 class CXXConversionDecl;
105 class CXXDeleteExpr;
106 class CXXDestructorDecl;
107 class CXXFieldCollector;
108 class CXXMemberCallExpr;
109 class CXXMethodDecl;
110 class CXXScopeSpec;
111 class CXXTemporary;
112 class CXXTryStmt;
113 class CallExpr;
114 class ClassTemplateDecl;
115 class ClassTemplatePartialSpecializationDecl;
116 class ClassTemplateSpecializationDecl;
117 class VarTemplatePartialSpecializationDecl;
118 class CodeCompleteConsumer;
119 class CodeCompletionAllocator;
120 class CodeCompletionTUInfo;
121 class CodeCompletionResult;
122 class CoroutineBodyStmt;
123 class Decl;
124 class DeclAccessPair;
125 class DeclContext;
126 class DeclRefExpr;
127 class DeclaratorDecl;
128 class DeducedTemplateArgument;
129 class DependentDiagnostic;
130 class DesignatedInitExpr;
131 class Designation;
132 class EnableIfAttr;
133 class EnumConstantDecl;
134 class Expr;
135 class ExtVectorType;
136 class FormatAttr;
137 class FriendDecl;
138 class FunctionDecl;
139 class FunctionProtoType;
140 class FunctionTemplateDecl;
141 class ImplicitConversionSequence;
142 typedef MutableArrayRef<ImplicitConversionSequence> ConversionSequenceList;
143 class InitListExpr;
144 class InitializationKind;
145 class InitializationSequence;
146 class InitializedEntity;
147 class IntegerLiteral;
148 class LabelStmt;
149 class LambdaExpr;
150 class LangOptions;
151 class LocalInstantiationScope;
152 class LookupResult;
153 class MacroInfo;
154 typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath;
155 class ModuleLoader;
156 class MultiLevelTemplateArgumentList;
157 class NamedDecl;
158 class ObjCImplementationDecl;
159 class ObjCInterfaceDecl;
160 class ObjCMethodDecl;
161 class ObjCProtocolDecl;
162 struct OverloadCandidate;
163 enum class OverloadCandidateParamOrder : char;
164 enum OverloadCandidateRewriteKind : unsigned;
165 class OverloadCandidateSet;
166 class OverloadExpr;
167 class ParenListExpr;
168 class ParmVarDecl;
169 class Preprocessor;
170 class PseudoDestructorTypeStorage;
171 class PseudoObjectExpr;
172 class QualType;
173 class SemaAMDGPU;
174 class SemaARM;
175 class SemaAVR;
176 class SemaBPF;
177 class SemaCodeCompletion;
178 class SemaCUDA;
179 class SemaHLSL;
180 class SemaHexagon;
181 class SemaLoongArch;
182 class SemaM68k;
183 class SemaMIPS;
184 class SemaMSP430;
185 class SemaNVPTX;
186 class SemaObjC;
187 class SemaOpenACC;
188 class SemaOpenCL;
189 class SemaOpenMP;
190 class SemaPPC;
191 class SemaPseudoObject;
192 class SemaRISCV;
193 class SemaSYCL;
194 class SemaSwift;
195 class SemaSystemZ;
196 class SemaWasm;
197 class SemaX86;
198 class StandardConversionSequence;
199 class Stmt;
200 class StringLiteral;
201 class SwitchStmt;
202 class TemplateArgument;
203 class TemplateArgumentList;
204 class TemplateArgumentLoc;
205 class TemplateDecl;
206 class TemplateInstantiationCallback;
207 class TemplateParameterList;
208 class TemplatePartialOrderingContext;
209 class TemplateTemplateParmDecl;
210 class Token;
211 class TypeAliasDecl;
212 class TypedefDecl;
213 class TypedefNameDecl;
214 class TypeLoc;
215 class TypoCorrectionConsumer;
216 class UnqualifiedId;
217 class UnresolvedLookupExpr;
218 class UnresolvedMemberExpr;
219 class UnresolvedSetImpl;
220 class UnresolvedSetIterator;
221 class UsingDecl;
222 class UsingShadowDecl;
223 class ValueDecl;
224 class VarDecl;
225 class VarTemplateSpecializationDecl;
226 class VisibilityAttr;
227 class VisibleDeclConsumer;
228 class IndirectFieldDecl;
229 struct DeductionFailureInfo;
230 class TemplateSpecCandidateSet;
231 
232 namespace sema {
233 class AccessedEntity;
234 class BlockScopeInfo;
235 class Capture;
236 class CapturedRegionScopeInfo;
237 class CapturingScopeInfo;
238 class CompoundScopeInfo;
239 class DelayedDiagnostic;
240 class DelayedDiagnosticPool;
241 class FunctionScopeInfo;
242 class LambdaScopeInfo;
243 class PossiblyUnreachableDiag;
244 class RISCVIntrinsicManager;
245 class SemaPPCallbacks;
246 class TemplateDeductionInfo;
247 } // namespace sema
248 
249 namespace threadSafety {
250 class BeforeSet;
251 void threadSafetyCleanup(BeforeSet *Cache);
252 } // namespace threadSafety
253 
254 // FIXME: No way to easily map from TemplateTypeParmTypes to
255 // TemplateTypeParmDecls, so we have this horrible PointerUnion.
256 typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType *, NamedDecl *>,
257                   SourceLocation>
258     UnexpandedParameterPack;
259 
260 /// Describes whether we've seen any nullability information for the given
261 /// file.
262 struct FileNullability {
263   /// The first pointer declarator (of any pointer kind) in the file that does
264   /// not have a corresponding nullability annotation.
265   SourceLocation PointerLoc;
266 
267   /// The end location for the first pointer declarator in the file. Used for
268   /// placing fix-its.
269   SourceLocation PointerEndLoc;
270 
271   /// Which kind of pointer declarator we saw.
272   uint8_t PointerKind;
273 
274   /// Whether we saw any type nullability annotations in the given file.
275   bool SawTypeNullability = false;
276 };
277 
278 /// A mapping from file IDs to a record of whether we've seen nullability
279 /// information in that file.
280 class FileNullabilityMap {
281   /// A mapping from file IDs to the nullability information for each file ID.
282   llvm::DenseMap<FileID, FileNullability> Map;
283 
284   /// A single-element cache based on the file ID.
285   struct {
286     FileID File;
287     FileNullability Nullability;
288   } Cache;
289 
290 public:
291   FileNullability &operator[](FileID file) {
292     // Check the single-element cache.
293     if (file == Cache.File)
294       return Cache.Nullability;
295 
296     // It's not in the single-element cache; flush the cache if we have one.
297     if (!Cache.File.isInvalid()) {
298       Map[Cache.File] = Cache.Nullability;
299     }
300 
301     // Pull this entry into the cache.
302     Cache.File = file;
303     Cache.Nullability = Map[file];
304     return Cache.Nullability;
305   }
306 };
307 
308 /// Tracks expected type during expression parsing, for use in code completion.
309 /// The type is tied to a particular token, all functions that update or consume
310 /// the type take a start location of the token they are looking at as a
311 /// parameter. This avoids updating the type on hot paths in the parser.
312 class PreferredTypeBuilder {
313 public:
PreferredTypeBuilder(bool Enabled)314   PreferredTypeBuilder(bool Enabled) : Enabled(Enabled) {}
315 
316   void enterCondition(Sema &S, SourceLocation Tok);
317   void enterReturn(Sema &S, SourceLocation Tok);
318   void enterVariableInit(SourceLocation Tok, Decl *D);
319   /// Handles e.g. BaseType{ .D = Tok...
320   void enterDesignatedInitializer(SourceLocation Tok, QualType BaseType,
321                                   const Designation &D);
322   /// Computing a type for the function argument may require running
323   /// overloading, so we postpone its computation until it is actually needed.
324   ///
325   /// Clients should be very careful when using this function, as it stores a
326   /// function_ref, clients should make sure all calls to get() with the same
327   /// location happen while function_ref is alive.
328   ///
329   /// The callback should also emit signature help as a side-effect, but only
330   /// if the completion point has been reached.
331   void enterFunctionArgument(SourceLocation Tok,
332                              llvm::function_ref<QualType()> ComputeType);
333 
334   void enterParenExpr(SourceLocation Tok, SourceLocation LParLoc);
335   void enterUnary(Sema &S, SourceLocation Tok, tok::TokenKind OpKind,
336                   SourceLocation OpLoc);
337   void enterBinary(Sema &S, SourceLocation Tok, Expr *LHS, tok::TokenKind Op);
338   void enterMemAccess(Sema &S, SourceLocation Tok, Expr *Base);
339   void enterSubscript(Sema &S, SourceLocation Tok, Expr *LHS);
340   /// Handles all type casts, including C-style cast, C++ casts, etc.
341   void enterTypeCast(SourceLocation Tok, QualType CastType);
342 
343   /// Get the expected type associated with this location, if any.
344   ///
345   /// If the location is a function argument, determining the expected type
346   /// involves considering all function overloads and the arguments so far.
347   /// In this case, signature help for these function overloads will be reported
348   /// as a side-effect (only if the completion point has been reached).
get(SourceLocation Tok)349   QualType get(SourceLocation Tok) const {
350     if (!Enabled || Tok != ExpectedLoc)
351       return QualType();
352     if (!Type.isNull())
353       return Type;
354     if (ComputeType)
355       return ComputeType();
356     return QualType();
357   }
358 
359 private:
360   bool Enabled;
361   /// Start position of a token for which we store expected type.
362   SourceLocation ExpectedLoc;
363   /// Expected type for a token starting at ExpectedLoc.
364   QualType Type;
365   /// A function to compute expected type at ExpectedLoc. It is only considered
366   /// if Type is null.
367   llvm::function_ref<QualType()> ComputeType;
368 };
369 
370 struct SkipBodyInfo {
371   SkipBodyInfo() = default;
372   bool ShouldSkip = false;
373   bool CheckSameAsPrevious = false;
374   NamedDecl *Previous = nullptr;
375   NamedDecl *New = nullptr;
376 };
377 
378 /// Describes the result of template argument deduction.
379 ///
380 /// The TemplateDeductionResult enumeration describes the result of
381 /// template argument deduction, as returned from
382 /// DeduceTemplateArguments(). The separate TemplateDeductionInfo
383 /// structure provides additional information about the results of
384 /// template argument deduction, e.g., the deduced template argument
385 /// list (if successful) or the specific template parameters or
386 /// deduced arguments that were involved in the failure.
387 enum class TemplateDeductionResult {
388   /// Template argument deduction was successful.
389   Success = 0,
390   /// The declaration was invalid; do nothing.
391   Invalid,
392   /// Template argument deduction exceeded the maximum template
393   /// instantiation depth (which has already been diagnosed).
394   InstantiationDepth,
395   /// Template argument deduction did not deduce a value
396   /// for every template parameter.
397   Incomplete,
398   /// Template argument deduction did not deduce a value for every
399   /// expansion of an expanded template parameter pack.
400   IncompletePack,
401   /// Template argument deduction produced inconsistent
402   /// deduced values for the given template parameter.
403   Inconsistent,
404   /// Template argument deduction failed due to inconsistent
405   /// cv-qualifiers on a template parameter type that would
406   /// otherwise be deduced, e.g., we tried to deduce T in "const T"
407   /// but were given a non-const "X".
408   Underqualified,
409   /// Substitution of the deduced template argument values
410   /// resulted in an error.
411   SubstitutionFailure,
412   /// After substituting deduced template arguments, a dependent
413   /// parameter type did not match the corresponding argument.
414   DeducedMismatch,
415   /// After substituting deduced template arguments, an element of
416   /// a dependent parameter type did not match the corresponding element
417   /// of the corresponding argument (when deducing from an initializer list).
418   DeducedMismatchNested,
419   /// A non-depnedent component of the parameter did not match the
420   /// corresponding component of the argument.
421   NonDeducedMismatch,
422   /// When performing template argument deduction for a function
423   /// template, there were too many call arguments.
424   TooManyArguments,
425   /// When performing template argument deduction for a function
426   /// template, there were too few call arguments.
427   TooFewArguments,
428   /// The explicitly-specified template arguments were not valid
429   /// template arguments for the given template.
430   InvalidExplicitArguments,
431   /// Checking non-dependent argument conversions failed.
432   NonDependentConversionFailure,
433   /// The deduced arguments did not satisfy the constraints associated
434   /// with the template.
435   ConstraintsNotSatisfied,
436   /// Deduction failed; that's all we know.
437   MiscellaneousDeductionFailure,
438   /// CUDA Target attributes do not match.
439   CUDATargetMismatch,
440   /// Some error which was already diagnosed.
441   AlreadyDiagnosed
442 };
443 
444 /// Kinds of C++ special members.
445 enum class CXXSpecialMemberKind {
446   DefaultConstructor,
447   CopyConstructor,
448   MoveConstructor,
449   CopyAssignment,
450   MoveAssignment,
451   Destructor,
452   Invalid
453 };
454 
455 /// The kind of conversion being performed.
456 enum class CheckedConversionKind {
457   /// An implicit conversion.
458   Implicit,
459   /// A C-style cast.
460   CStyleCast,
461   /// A functional-style cast.
462   FunctionalCast,
463   /// A cast other than a C-style cast.
464   OtherCast,
465   /// A conversion for an operand of a builtin overloaded operator.
466   ForBuiltinOverloadedOp
467 };
468 
469 enum class TagUseKind {
470   Reference,   // Reference to a tag:  'struct foo *X;'
471   Declaration, // Fwd decl of a tag:   'struct foo;'
472   Definition,  // Definition of a tag: 'struct foo { int X; } Y;'
473   Friend       // Friend declaration:  'friend struct foo;'
474 };
475 
476 /// Used with attributes/effects with a boolean condition, e.g. `nonblocking`.
477 enum class FunctionEffectMode : uint8_t {
478   None,     // effect is not present.
479   False,    // effect(false).
480   True,     // effect(true).
481   Dependent // effect(expr) where expr is dependent.
482 };
483 
484 struct FunctionEffectDiff {
485   enum class Kind { Added, Removed, ConditionMismatch };
486 
487   FunctionEffect::Kind EffectKind;
488   Kind DiffKind;
489   FunctionEffectWithCondition Old; // invalid when Added.
490   FunctionEffectWithCondition New; // invalid when Removed.
491 
effectNameFunctionEffectDiff492   StringRef effectName() const {
493     if (Old.Effect.kind() != FunctionEffect::Kind::None)
494       return Old.Effect.name();
495     return New.Effect.name();
496   }
497 
498   /// Describes the result of effects differing between a base class's virtual
499   /// method and an overriding method in a subclass.
500   enum class OverrideResult {
501     NoAction,
502     Warn,
503     Merge // Merge missing effect from base to derived.
504   };
505 
506   /// Return true if adding or removing the effect as part of a type conversion
507   /// should generate a diagnostic.
508   bool shouldDiagnoseConversion(QualType SrcType,
509                                 const FunctionEffectsRef &SrcFX,
510                                 QualType DstType,
511                                 const FunctionEffectsRef &DstFX) const;
512 
513   /// Return true if adding or removing the effect in a redeclaration should
514   /// generate a diagnostic.
515   bool shouldDiagnoseRedeclaration(const FunctionDecl &OldFunction,
516                                    const FunctionEffectsRef &OldFX,
517                                    const FunctionDecl &NewFunction,
518                                    const FunctionEffectsRef &NewFX) const;
519 
520   /// Return true if adding or removing the effect in a C++ virtual method
521   /// override should generate a diagnostic.
522   OverrideResult shouldDiagnoseMethodOverride(
523       const CXXMethodDecl &OldMethod, const FunctionEffectsRef &OldFX,
524       const CXXMethodDecl &NewMethod, const FunctionEffectsRef &NewFX) const;
525 };
526 
527 struct FunctionEffectDifferences : public SmallVector<FunctionEffectDiff> {
528   /// Caller should short-circuit by checking for equality first.
529   FunctionEffectDifferences(const FunctionEffectsRef &Old,
530                             const FunctionEffectsRef &New);
531 };
532 
533 /// Sema - This implements semantic analysis and AST building for C.
534 /// \nosubgrouping
535 class Sema final : public SemaBase {
536   // Table of Contents
537   // -----------------
538   // 1. Semantic Analysis (Sema.cpp)
539   // 2. C++ Access Control (SemaAccess.cpp)
540   // 3. Attributes (SemaAttr.cpp)
541   // 4. Availability Attribute Handling (SemaAvailability.cpp)
542   // 5. Casts (SemaCast.cpp)
543   // 6. Extra Semantic Checking (SemaChecking.cpp)
544   // 7. C++ Coroutines (SemaCoroutine.cpp)
545   // 8. C++ Scope Specifiers (SemaCXXScopeSpec.cpp)
546   // 9. Declarations (SemaDecl.cpp)
547   // 10. Declaration Attribute Handling (SemaDeclAttr.cpp)
548   // 11. C++ Declarations (SemaDeclCXX.cpp)
549   // 12. C++ Exception Specifications (SemaExceptionSpec.cpp)
550   // 13. Expressions (SemaExpr.cpp)
551   // 14. C++ Expressions (SemaExprCXX.cpp)
552   // 15. Member Access Expressions (SemaExprMember.cpp)
553   // 16. Initializers (SemaInit.cpp)
554   // 17. C++ Lambda Expressions (SemaLambda.cpp)
555   // 18. Name Lookup (SemaLookup.cpp)
556   // 19. Modules (SemaModule.cpp)
557   // 20. C++ Overloading (SemaOverload.cpp)
558   // 21. Statements (SemaStmt.cpp)
559   // 22. `inline asm` Statement (SemaStmtAsm.cpp)
560   // 23. Statement Attribute Handling (SemaStmtAttr.cpp)
561   // 24. C++ Templates (SemaTemplate.cpp)
562   // 25. C++ Template Argument Deduction (SemaTemplateDeduction.cpp)
563   // 26. C++ Template Deduction Guide (SemaTemplateDeductionGuide.cpp)
564   // 27. C++ Template Instantiation (SemaTemplateInstantiate.cpp)
565   // 28. C++ Template Declaration Instantiation
566   //     (SemaTemplateInstantiateDecl.cpp)
567   // 29. C++ Variadic Templates (SemaTemplateVariadic.cpp)
568   // 30. Constraints and Concepts (SemaConcept.cpp)
569   // 31. Types (SemaType.cpp)
570   // 32. FixIt Helpers (SemaFixItUtils.cpp)
571 
572   /// \name Semantic Analysis
573   /// Implementations are in Sema.cpp
574   ///@{
575 
576 public:
577   Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
578        TranslationUnitKind TUKind = TU_Complete,
579        CodeCompleteConsumer *CompletionConsumer = nullptr);
580   ~Sema();
581 
582   /// Perform initialization that occurs after the parser has been
583   /// initialized but before it parses anything.
584   void Initialize();
585 
586   /// This virtual key function only exists to limit the emission of debug info
587   /// describing the Sema class. GCC and Clang only emit debug info for a class
588   /// with a vtable when the vtable is emitted. Sema is final and not
589   /// polymorphic, but the debug info size savings are so significant that it is
590   /// worth adding a vtable just to take advantage of this optimization.
591   virtual void anchor();
592 
getLangOpts()593   const LangOptions &getLangOpts() const { return LangOpts; }
getOpenCLOptions()594   OpenCLOptions &getOpenCLOptions() { return OpenCLFeatures; }
getCurFPFeatures()595   FPOptions &getCurFPFeatures() { return CurFPFeatures; }
596 
getDiagnostics()597   DiagnosticsEngine &getDiagnostics() const { return Diags; }
getSourceManager()598   SourceManager &getSourceManager() const { return SourceMgr; }
getPreprocessor()599   Preprocessor &getPreprocessor() const { return PP; }
getASTContext()600   ASTContext &getASTContext() const { return Context; }
getASTConsumer()601   ASTConsumer &getASTConsumer() const { return Consumer; }
602   ASTMutationListener *getASTMutationListener() const;
getExternalSource()603   ExternalSemaSource *getExternalSource() const { return ExternalSource.get(); }
604 
605   DarwinSDKInfo *getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc,
606                                                          StringRef Platform);
607   DarwinSDKInfo *getDarwinSDKInfoForAvailabilityChecking();
608 
609   /// Registers an external source. If an external source already exists,
610   ///  creates a multiplex external source and appends to it.
611   ///
612   ///\param[in] E - A non-null external sema source.
613   ///
614   void addExternalSource(ExternalSemaSource *E);
615 
616   /// Print out statistics about the semantic analysis.
617   void PrintStats() const;
618 
619   /// Warn that the stack is nearly exhausted.
620   void warnStackExhausted(SourceLocation Loc);
621 
622   /// Run some code with "sufficient" stack space. (Currently, at least 256K is
623   /// guaranteed). Produces a warning if we're low on stack space and allocates
624   /// more in that case. Use this in code that may recurse deeply (for example,
625   /// in template instantiation) to avoid stack overflow.
626   void runWithSufficientStackSpace(SourceLocation Loc,
627                                    llvm::function_ref<void()> Fn);
628 
629   /// Returns default addr space for method qualifiers.
630   LangAS getDefaultCXXMethodAddrSpace() const;
631 
632   /// Load weak undeclared identifiers from the external source.
633   void LoadExternalWeakUndeclaredIdentifiers();
634 
635   /// Determine if VD, which must be a variable or function, is an external
636   /// symbol that nonetheless can't be referenced from outside this translation
637   /// unit because its type has no linkage and it's not extern "C".
638   bool isExternalWithNoLinkageType(const ValueDecl *VD) const;
639 
640   /// Obtain a sorted list of functions that are undefined but ODR-used.
641   void getUndefinedButUsed(
642       SmallVectorImpl<std::pair<NamedDecl *, SourceLocation>> &Undefined);
643 
644   typedef std::pair<SourceLocation, bool> DeleteExprLoc;
645   typedef llvm::SmallVector<DeleteExprLoc, 4> DeleteLocs;
646   /// Retrieves list of suspicious delete-expressions that will be checked at
647   /// the end of translation unit.
648   const llvm::MapVector<FieldDecl *, DeleteLocs> &
649   getMismatchingDeleteExpressions() const;
650 
651   /// Cause the active diagnostic on the DiagosticsEngine to be
652   /// emitted. This is closely coupled to the SemaDiagnosticBuilder class and
653   /// should not be used elsewhere.
654   void EmitCurrentDiagnostic(unsigned DiagID);
655 
656   void addImplicitTypedef(StringRef Name, QualType T);
657 
658   /// Whether uncompilable error has occurred. This includes error happens
659   /// in deferred diagnostics.
660   bool hasUncompilableErrorOccurred() const;
661 
662   /// Looks through the macro-expansion chain for the given
663   /// location, looking for a macro expansion with the given name.
664   /// If one is found, returns true and sets the location to that
665   /// expansion loc.
666   bool findMacroSpelling(SourceLocation &loc, StringRef name);
667 
668   /// Calls \c Lexer::getLocForEndOfToken()
669   SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0);
670 
671   /// Retrieve the module loader associated with the preprocessor.
672   ModuleLoader &getModuleLoader() const;
673 
674   /// Invent a new identifier for parameters of abbreviated templates.
675   IdentifierInfo *
676   InventAbbreviatedTemplateParameterTypeName(const IdentifierInfo *ParamName,
677                                              unsigned Index);
678 
679   void emitAndClearUnusedLocalTypedefWarnings();
680 
681   // Emit all deferred diagnostics.
682   void emitDeferredDiags();
683 
684   enum TUFragmentKind {
685     /// The global module fragment, between 'module;' and a module-declaration.
686     Global,
687     /// A normal translation unit fragment. For a non-module unit, this is the
688     /// entire translation unit. Otherwise, it runs from the module-declaration
689     /// to the private-module-fragment (if any) or the end of the TU (if not).
690     Normal,
691     /// The private module fragment, between 'module :private;' and the end of
692     /// the translation unit.
693     Private
694   };
695 
696   /// This is called before the very first declaration in the translation unit
697   /// is parsed. Note that the ASTContext may have already injected some
698   /// declarations.
699   void ActOnStartOfTranslationUnit();
700   /// ActOnEndOfTranslationUnit - This is called at the very end of the
701   /// translation unit when EOF is reached and all but the top-level scope is
702   /// popped.
703   void ActOnEndOfTranslationUnit();
704   void ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind);
705 
706   /// Determines the active Scope associated with the given declaration
707   /// context.
708   ///
709   /// This routine maps a declaration context to the active Scope object that
710   /// represents that declaration context in the parser. It is typically used
711   /// from "scope-less" code (e.g., template instantiation, lazy creation of
712   /// declarations) that injects a name for name-lookup purposes and, therefore,
713   /// must update the Scope.
714   ///
715   /// \returns The scope corresponding to the given declaraion context, or NULL
716   /// if no such scope is open.
717   Scope *getScopeForContext(DeclContext *Ctx);
718 
719   void PushFunctionScope();
720   void PushBlockScope(Scope *BlockScope, BlockDecl *Block);
721   sema::LambdaScopeInfo *PushLambdaScope();
722 
723   /// This is used to inform Sema what the current TemplateParameterDepth
724   /// is during Parsing.  Currently it is used to pass on the depth
725   /// when parsing generic lambda 'auto' parameters.
726   void RecordParsingTemplateParameterDepth(unsigned Depth);
727 
728   void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD,
729                                RecordDecl *RD, CapturedRegionKind K,
730                                unsigned OpenMPCaptureLevel = 0);
731 
732   /// Custom deleter to allow FunctionScopeInfos to be kept alive for a short
733   /// time after they've been popped.
734   class PoppedFunctionScopeDeleter {
735     Sema *Self;
736 
737   public:
PoppedFunctionScopeDeleter(Sema * Self)738     explicit PoppedFunctionScopeDeleter(Sema *Self) : Self(Self) {}
739     void operator()(sema::FunctionScopeInfo *Scope) const;
740   };
741 
742   using PoppedFunctionScopePtr =
743       std::unique_ptr<sema::FunctionScopeInfo, PoppedFunctionScopeDeleter>;
744 
745   /// Pop a function (or block or lambda or captured region) scope from the
746   /// stack.
747   ///
748   /// \param WP The warning policy to use for CFG-based warnings, or null if
749   ///        such warnings should not be produced.
750   /// \param D The declaration corresponding to this function scope, if
751   ///        producing CFG-based warnings.
752   /// \param BlockType The type of the block expression, if D is a BlockDecl.
753   PoppedFunctionScopePtr
754   PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr,
755                        const Decl *D = nullptr,
756                        QualType BlockType = QualType());
757 
758   sema::FunctionScopeInfo *getEnclosingFunction() const;
759 
760   void setFunctionHasBranchIntoScope();
761   void setFunctionHasBranchProtectedScope();
762   void setFunctionHasIndirectGoto();
763   void setFunctionHasMustTail();
764 
765   void PushCompoundScope(bool IsStmtExpr);
766   void PopCompoundScope();
767 
768   /// Determine whether any errors occurred within this function/method/
769   /// block.
770   bool hasAnyUnrecoverableErrorsInThisFunction() const;
771 
772   /// Retrieve the current block, if any.
773   sema::BlockScopeInfo *getCurBlock();
774 
775   /// Get the innermost lambda enclosing the current location, if any. This
776   /// looks through intervening non-lambda scopes such as local functions and
777   /// blocks.
778   sema::LambdaScopeInfo *getEnclosingLambda() const;
779 
780   /// Retrieve the current lambda scope info, if any.
781   /// \param IgnoreNonLambdaCapturingScope true if should find the top-most
782   /// lambda scope info ignoring all inner capturing scopes that are not
783   /// lambda scopes.
784   sema::LambdaScopeInfo *
785   getCurLambda(bool IgnoreNonLambdaCapturingScope = false);
786 
787   /// Retrieve the current generic lambda info, if any.
788   sema::LambdaScopeInfo *getCurGenericLambda();
789 
790   /// Retrieve the current captured region, if any.
791   sema::CapturedRegionScopeInfo *getCurCapturedRegion();
792 
793   void ActOnComment(SourceRange Comment);
794 
795   /// Retrieve the parser's current scope.
796   ///
797   /// This routine must only be used when it is certain that semantic analysis
798   /// and the parser are in precisely the same context, which is not the case
799   /// when, e.g., we are performing any kind of template instantiation.
800   /// Therefore, the only safe places to use this scope are in the parser
801   /// itself and in routines directly invoked from the parser and *never* from
802   /// template substitution or instantiation.
getCurScope()803   Scope *getCurScope() const { return CurScope; }
804 
805   IdentifierInfo *getSuperIdentifier() const;
806 
getCurLexicalContext()807   DeclContext *getCurLexicalContext() const {
808     return OriginalLexicalContext ? OriginalLexicalContext : CurContext;
809   }
810 
811   SemaDiagnosticBuilder targetDiag(SourceLocation Loc, unsigned DiagID,
812                                    const FunctionDecl *FD = nullptr);
813   SemaDiagnosticBuilder targetDiag(SourceLocation Loc,
814                                    const PartialDiagnostic &PD,
815                                    const FunctionDecl *FD = nullptr) {
816     return targetDiag(Loc, PD.getDiagID(), FD) << PD;
817   }
818 
819   /// Check if the type is allowed to be used for the current target.
820   void checkTypeSupport(QualType Ty, SourceLocation Loc,
821                         ValueDecl *D = nullptr);
822 
823   // /// The kind of conversion being performed.
824   // enum CheckedConversionKind {
825   //   /// An implicit conversion.
826   //   CCK_ImplicitConversion,
827   //   /// A C-style cast.
828   //   CCK_CStyleCast,
829   //   /// A functional-style cast.
830   //   CCK_FunctionalCast,
831   //   /// A cast other than a C-style cast.
832   //   CCK_OtherCast,
833   //   /// A conversion for an operand of a builtin overloaded operator.
834   //   CCK_ForBuiltinOverloadedOp
835   // };
836 
837   /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit
838   /// cast.  If there is already an implicit cast, merge into the existing one.
839   /// If isLvalue, the result of the cast is an lvalue.
840   ExprResult ImpCastExprToType(
841       Expr *E, QualType Type, CastKind CK, ExprValueKind VK = VK_PRValue,
842       const CXXCastPath *BasePath = nullptr,
843       CheckedConversionKind CCK = CheckedConversionKind::Implicit);
844 
845   /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
846   /// to the conversion from scalar type ScalarTy to the Boolean type.
847   static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy);
848 
849   /// If \p AllowLambda is true, treat lambda as function.
850   DeclContext *getFunctionLevelDeclContext(bool AllowLambda = false) const;
851 
852   /// Returns a pointer to the innermost enclosing function, or nullptr if the
853   /// current context is not inside a function. If \p AllowLambda is true,
854   /// this can return the call operator of an enclosing lambda, otherwise
855   /// lambdas are skipped when looking for an enclosing function.
856   FunctionDecl *getCurFunctionDecl(bool AllowLambda = false) const;
857 
858   /// getCurMethodDecl - If inside of a method body, this returns a pointer to
859   /// the method decl for the method being parsed.  If we're currently
860   /// in a 'block', this returns the containing context.
861   ObjCMethodDecl *getCurMethodDecl();
862 
863   /// getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method
864   /// or C function we're in, otherwise return null.  If we're currently
865   /// in a 'block', this returns the containing context.
866   NamedDecl *getCurFunctionOrMethodDecl() const;
867 
868   /// Warn if we're implicitly casting from a _Nullable pointer type to a
869   /// _Nonnull one.
870   void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType,
871                                            SourceLocation Loc);
872 
873   /// Warn when implicitly casting 0 to nullptr.
874   void diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E);
875 
876   // ----- function effects ---
877 
878   /// Warn when implicitly changing function effects.
879   void diagnoseFunctionEffectConversion(QualType DstType, QualType SrcType,
880                                         SourceLocation Loc);
881 
882   /// Warn and return true if adding an effect to a set would create a conflict.
883   bool diagnoseConflictingFunctionEffect(const FunctionEffectsRef &FX,
884                                          const FunctionEffectWithCondition &EC,
885                                          SourceLocation NewAttrLoc);
886 
887   // Report a failure to merge function effects between declarations due to a
888   // conflict.
889   void
890   diagnoseFunctionEffectMergeConflicts(const FunctionEffectSet::Conflicts &Errs,
891                                        SourceLocation NewLoc,
892                                        SourceLocation OldLoc);
893 
894   /// Try to parse the conditional expression attached to an effect attribute
895   /// (e.g. 'nonblocking'). (c.f. Sema::ActOnNoexceptSpec). Return an empty
896   /// optional on error.
897   std::optional<FunctionEffectMode>
898   ActOnEffectExpression(Expr *CondExpr, StringRef AttributeName);
899 
900   /// makeUnavailableInSystemHeader - There is an error in the current
901   /// context.  If we're still in a system header, and we can plausibly
902   /// make the relevant declaration unavailable instead of erroring, do
903   /// so and return true.
904   bool makeUnavailableInSystemHeader(SourceLocation loc,
905                                      UnavailableAttr::ImplicitReason reason);
906 
907   /// Retrieve a suitable printing policy for diagnostics.
getPrintingPolicy()908   PrintingPolicy getPrintingPolicy() const {
909     return getPrintingPolicy(Context, PP);
910   }
911 
912   /// Retrieve a suitable printing policy for diagnostics.
913   static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx,
914                                           const Preprocessor &PP);
915 
916   /// Scope actions.
917   void ActOnTranslationUnitScope(Scope *S);
918 
919   /// Determine whether \param D is function like (function or function
920   /// template) for parsing.
921   bool isDeclaratorFunctionLike(Declarator &D);
922 
923   /// The maximum alignment, same as in llvm::Value. We duplicate them here
924   /// because that allows us not to duplicate the constants in clang code,
925   /// which we must to since we can't directly use the llvm constants.
926   /// The value is verified against llvm here: lib/CodeGen/CGDecl.cpp
927   ///
928   /// This is the greatest alignment value supported by load, store, and alloca
929   /// instructions, and global values.
930   static const unsigned MaxAlignmentExponent = 32;
931   static const uint64_t MaximumAlignment = 1ull << MaxAlignmentExponent;
932 
933   /// Flag indicating whether or not to collect detailed statistics.
934   bool CollectStats;
935 
936   std::unique_ptr<sema::FunctionScopeInfo> CachedFunctionScope;
937 
938   /// Stack containing information about each of the nested
939   /// function, block, and method scopes that are currently active.
940   SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes;
941 
942   /// The index of the first FunctionScope that corresponds to the current
943   /// context.
944   unsigned FunctionScopesStart = 0;
945 
946   /// Track the number of currently active capturing scopes.
947   unsigned CapturingFunctionScopes = 0;
948 
949   llvm::BumpPtrAllocator BumpAlloc;
950 
951   /// The kind of translation unit we are processing.
952   ///
953   /// When we're processing a complete translation unit, Sema will perform
954   /// end-of-translation-unit semantic tasks (such as creating
955   /// initializers for tentative definitions in C) once parsing has
956   /// completed. Modules and precompiled headers perform different kinds of
957   /// checks.
958   const TranslationUnitKind TUKind;
959 
960   /// Translation Unit Scope - useful to Objective-C actions that need
961   /// to lookup file scope declarations in the "ordinary" C decl namespace.
962   /// For example, user-defined classes, built-in "id" type, etc.
963   Scope *TUScope;
964 
965   bool WarnedStackExhausted = false;
966 
incrementMSManglingNumber()967   void incrementMSManglingNumber() const {
968     return CurScope->incrementMSManglingNumber();
969   }
970 
971   /// Try to recover by turning the given expression into a
972   /// call.  Returns true if recovery was attempted or an error was
973   /// emitted; this may also leave the ExprResult invalid.
974   bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
975                             bool ForceComplain = false,
976                             bool (*IsPlausibleResult)(QualType) = nullptr);
977 
978   /// Figure out if an expression could be turned into a call.
979   ///
980   /// Use this when trying to recover from an error where the programmer may
981   /// have written just the name of a function instead of actually calling it.
982   ///
983   /// \param E - The expression to examine.
984   /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
985   ///  with no arguments, this parameter is set to the type returned by such a
986   ///  call; otherwise, it is set to an empty QualType.
987   /// \param OverloadSet - If the expression is an overloaded function
988   ///  name, this parameter is populated with the decls of the various
989   ///  overloads.
990   bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
991                      UnresolvedSetImpl &NonTemplateOverloads);
992 
993   typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
994   typedef OpaquePtr<TemplateName> TemplateTy;
995   typedef OpaquePtr<QualType> TypeTy;
996 
997   OpenCLOptions OpenCLFeatures;
998   FPOptions CurFPFeatures;
999 
1000   const LangOptions &LangOpts;
1001   Preprocessor &PP;
1002   ASTContext &Context;
1003   ASTConsumer &Consumer;
1004   DiagnosticsEngine &Diags;
1005   SourceManager &SourceMgr;
1006   api_notes::APINotesManager APINotes;
1007 
1008   /// A RAII object to enter scope of a compound statement.
1009   class CompoundScopeRAII {
1010   public:
S(S)1011     CompoundScopeRAII(Sema &S, bool IsStmtExpr = false) : S(S) {
1012       S.ActOnStartOfCompoundStmt(IsStmtExpr);
1013     }
1014 
~CompoundScopeRAII()1015     ~CompoundScopeRAII() { S.ActOnFinishOfCompoundStmt(); }
1016 
1017   private:
1018     Sema &S;
1019   };
1020 
1021   /// An RAII helper that pops function a function scope on exit.
1022   struct FunctionScopeRAII {
1023     Sema &S;
1024     bool Active;
FunctionScopeRAIIFunctionScopeRAII1025     FunctionScopeRAII(Sema &S) : S(S), Active(true) {}
~FunctionScopeRAIIFunctionScopeRAII1026     ~FunctionScopeRAII() {
1027       if (Active)
1028         S.PopFunctionScopeInfo();
1029     }
disableFunctionScopeRAII1030     void disable() { Active = false; }
1031   };
1032 
getCurFunction()1033   sema::FunctionScopeInfo *getCurFunction() const {
1034     return FunctionScopes.empty() ? nullptr : FunctionScopes.back();
1035   }
1036 
1037   /// Worker object for performing CFG-based warnings.
1038   sema::AnalysisBasedWarnings AnalysisWarnings;
1039   threadSafety::BeforeSet *ThreadSafetyDeclCache;
1040 
1041   /// Callback to the parser to parse templated functions when needed.
1042   typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT);
1043   typedef void LateTemplateParserCleanupCB(void *P);
1044   LateTemplateParserCB *LateTemplateParser;
1045   LateTemplateParserCleanupCB *LateTemplateParserCleanup;
1046   void *OpaqueParser;
1047 
SetLateTemplateParser(LateTemplateParserCB * LTP,LateTemplateParserCleanupCB * LTPCleanup,void * P)1048   void SetLateTemplateParser(LateTemplateParserCB *LTP,
1049                              LateTemplateParserCleanupCB *LTPCleanup, void *P) {
1050     LateTemplateParser = LTP;
1051     LateTemplateParserCleanup = LTPCleanup;
1052     OpaqueParser = P;
1053   }
1054 
1055   /// Callback to the parser to parse a type expressed as a string.
1056   std::function<TypeResult(StringRef, StringRef, SourceLocation)>
1057       ParseTypeFromStringCallback;
1058 
1059   /// VAListTagName - The declaration name corresponding to __va_list_tag.
1060   /// This is used as part of a hack to omit that class from ADL results.
1061   DeclarationName VAListTagName;
1062 
1063   /// Is the last error level diagnostic immediate. This is used to determined
1064   /// whether the next info diagnostic should be immediate.
1065   bool IsLastErrorImmediate = true;
1066 
1067   class DelayedDiagnostics;
1068 
1069   class DelayedDiagnosticsState {
1070     sema::DelayedDiagnosticPool *SavedPool = nullptr;
1071     friend class Sema::DelayedDiagnostics;
1072   };
1073   typedef DelayedDiagnosticsState ParsingDeclState;
1074   typedef DelayedDiagnosticsState ProcessingContextState;
1075 
1076   /// A class which encapsulates the logic for delaying diagnostics
1077   /// during parsing and other processing.
1078   class DelayedDiagnostics {
1079     /// The current pool of diagnostics into which delayed
1080     /// diagnostics should go.
1081     sema::DelayedDiagnosticPool *CurPool = nullptr;
1082 
1083   public:
1084     DelayedDiagnostics() = default;
1085 
1086     /// Adds a delayed diagnostic.
1087     void add(const sema::DelayedDiagnostic &diag); // in DelayedDiagnostic.h
1088 
1089     /// Determines whether diagnostics should be delayed.
shouldDelayDiagnostics()1090     bool shouldDelayDiagnostics() { return CurPool != nullptr; }
1091 
1092     /// Returns the current delayed-diagnostics pool.
getCurrentPool()1093     sema::DelayedDiagnosticPool *getCurrentPool() const { return CurPool; }
1094 
1095     /// Enter a new scope.  Access and deprecation diagnostics will be
1096     /// collected in this pool.
push(sema::DelayedDiagnosticPool & pool)1097     DelayedDiagnosticsState push(sema::DelayedDiagnosticPool &pool) {
1098       DelayedDiagnosticsState state;
1099       state.SavedPool = CurPool;
1100       CurPool = &pool;
1101       return state;
1102     }
1103 
1104     /// Leave a delayed-diagnostic state that was previously pushed.
1105     /// Do not emit any of the diagnostics.  This is performed as part
1106     /// of the bookkeeping of popping a pool "properly".
popWithoutEmitting(DelayedDiagnosticsState state)1107     void popWithoutEmitting(DelayedDiagnosticsState state) {
1108       CurPool = state.SavedPool;
1109     }
1110 
1111     /// Enter a new scope where access and deprecation diagnostics are
1112     /// not delayed.
pushUndelayed()1113     DelayedDiagnosticsState pushUndelayed() {
1114       DelayedDiagnosticsState state;
1115       state.SavedPool = CurPool;
1116       CurPool = nullptr;
1117       return state;
1118     }
1119 
1120     /// Undo a previous pushUndelayed().
popUndelayed(DelayedDiagnosticsState state)1121     void popUndelayed(DelayedDiagnosticsState state) {
1122       assert(CurPool == nullptr);
1123       CurPool = state.SavedPool;
1124     }
1125   } DelayedDiagnostics;
1126 
PushParsingDeclaration(sema::DelayedDiagnosticPool & pool)1127   ParsingDeclState PushParsingDeclaration(sema::DelayedDiagnosticPool &pool) {
1128     return DelayedDiagnostics.push(pool);
1129   }
1130 
1131   /// Diagnostics that are emitted only if we discover that the given function
1132   /// must be codegen'ed.  Because handling these correctly adds overhead to
1133   /// compilation, this is currently only enabled for CUDA compilations.
1134   SemaDiagnosticBuilder::DeferredDiagnosticsType DeviceDeferredDiags;
1135 
1136   /// CurContext - This is the current declaration context of parsing.
1137   DeclContext *CurContext;
1138 
AMDGPU()1139   SemaAMDGPU &AMDGPU() {
1140     assert(AMDGPUPtr);
1141     return *AMDGPUPtr;
1142   }
1143 
ARM()1144   SemaARM &ARM() {
1145     assert(ARMPtr);
1146     return *ARMPtr;
1147   }
1148 
AVR()1149   SemaAVR &AVR() {
1150     assert(AVRPtr);
1151     return *AVRPtr;
1152   }
1153 
BPF()1154   SemaBPF &BPF() {
1155     assert(BPFPtr);
1156     return *BPFPtr;
1157   }
1158 
CodeCompletion()1159   SemaCodeCompletion &CodeCompletion() {
1160     assert(CodeCompletionPtr);
1161     return *CodeCompletionPtr;
1162   }
1163 
CUDA()1164   SemaCUDA &CUDA() {
1165     assert(CUDAPtr);
1166     return *CUDAPtr;
1167   }
1168 
HLSL()1169   SemaHLSL &HLSL() {
1170     assert(HLSLPtr);
1171     return *HLSLPtr;
1172   }
1173 
Hexagon()1174   SemaHexagon &Hexagon() {
1175     assert(HexagonPtr);
1176     return *HexagonPtr;
1177   }
1178 
LoongArch()1179   SemaLoongArch &LoongArch() {
1180     assert(LoongArchPtr);
1181     return *LoongArchPtr;
1182   }
1183 
M68k()1184   SemaM68k &M68k() {
1185     assert(M68kPtr);
1186     return *M68kPtr;
1187   }
1188 
MIPS()1189   SemaMIPS &MIPS() {
1190     assert(MIPSPtr);
1191     return *MIPSPtr;
1192   }
1193 
MSP430()1194   SemaMSP430 &MSP430() {
1195     assert(MSP430Ptr);
1196     return *MSP430Ptr;
1197   }
1198 
NVPTX()1199   SemaNVPTX &NVPTX() {
1200     assert(NVPTXPtr);
1201     return *NVPTXPtr;
1202   }
1203 
ObjC()1204   SemaObjC &ObjC() {
1205     assert(ObjCPtr);
1206     return *ObjCPtr;
1207   }
1208 
OpenACC()1209   SemaOpenACC &OpenACC() {
1210     assert(OpenACCPtr);
1211     return *OpenACCPtr;
1212   }
1213 
OpenCL()1214   SemaOpenCL &OpenCL() {
1215     assert(OpenCLPtr);
1216     return *OpenCLPtr;
1217   }
1218 
OpenMP()1219   SemaOpenMP &OpenMP() {
1220     assert(OpenMPPtr && "SemaOpenMP is dead");
1221     return *OpenMPPtr;
1222   }
1223 
PPC()1224   SemaPPC &PPC() {
1225     assert(PPCPtr);
1226     return *PPCPtr;
1227   }
1228 
PseudoObject()1229   SemaPseudoObject &PseudoObject() {
1230     assert(PseudoObjectPtr);
1231     return *PseudoObjectPtr;
1232   }
1233 
RISCV()1234   SemaRISCV &RISCV() {
1235     assert(RISCVPtr);
1236     return *RISCVPtr;
1237   }
1238 
SYCL()1239   SemaSYCL &SYCL() {
1240     assert(SYCLPtr);
1241     return *SYCLPtr;
1242   }
1243 
Swift()1244   SemaSwift &Swift() {
1245     assert(SwiftPtr);
1246     return *SwiftPtr;
1247   }
1248 
SystemZ()1249   SemaSystemZ &SystemZ() {
1250     assert(SystemZPtr);
1251     return *SystemZPtr;
1252   }
1253 
Wasm()1254   SemaWasm &Wasm() {
1255     assert(WasmPtr);
1256     return *WasmPtr;
1257   }
1258 
X86()1259   SemaX86 &X86() {
1260     assert(X86Ptr);
1261     return *X86Ptr;
1262   }
1263 
1264   /// Source of additional semantic information.
1265   IntrusiveRefCntPtr<ExternalSemaSource> ExternalSource;
1266 
1267 protected:
1268   friend class Parser;
1269   friend class InitializationSequence;
1270   friend class ASTReader;
1271   friend class ASTDeclReader;
1272   friend class ASTWriter;
1273 
1274 private:
1275   std::optional<std::unique_ptr<DarwinSDKInfo>> CachedDarwinSDKInfo;
1276   bool WarnedDarwinSDKInfoMissing = false;
1277 
1278   Sema(const Sema &) = delete;
1279   void operator=(const Sema &) = delete;
1280 
1281   /// The handler for the FileChanged preprocessor events.
1282   ///
1283   /// Used for diagnostics that implement custom semantic analysis for #include
1284   /// directives, like -Wpragma-pack.
1285   sema::SemaPPCallbacks *SemaPPCallbackHandler;
1286 
1287   /// The parser's current scope.
1288   ///
1289   /// The parser maintains this state here.
1290   Scope *CurScope;
1291 
1292   mutable IdentifierInfo *Ident_super;
1293 
1294   std::unique_ptr<SemaAMDGPU> AMDGPUPtr;
1295   std::unique_ptr<SemaARM> ARMPtr;
1296   std::unique_ptr<SemaAVR> AVRPtr;
1297   std::unique_ptr<SemaBPF> BPFPtr;
1298   std::unique_ptr<SemaCodeCompletion> CodeCompletionPtr;
1299   std::unique_ptr<SemaCUDA> CUDAPtr;
1300   std::unique_ptr<SemaHLSL> HLSLPtr;
1301   std::unique_ptr<SemaHexagon> HexagonPtr;
1302   std::unique_ptr<SemaLoongArch> LoongArchPtr;
1303   std::unique_ptr<SemaM68k> M68kPtr;
1304   std::unique_ptr<SemaMIPS> MIPSPtr;
1305   std::unique_ptr<SemaMSP430> MSP430Ptr;
1306   std::unique_ptr<SemaNVPTX> NVPTXPtr;
1307   std::unique_ptr<SemaObjC> ObjCPtr;
1308   std::unique_ptr<SemaOpenACC> OpenACCPtr;
1309   std::unique_ptr<SemaOpenCL> OpenCLPtr;
1310   std::unique_ptr<SemaOpenMP> OpenMPPtr;
1311   std::unique_ptr<SemaPPC> PPCPtr;
1312   std::unique_ptr<SemaPseudoObject> PseudoObjectPtr;
1313   std::unique_ptr<SemaRISCV> RISCVPtr;
1314   std::unique_ptr<SemaSYCL> SYCLPtr;
1315   std::unique_ptr<SemaSwift> SwiftPtr;
1316   std::unique_ptr<SemaSystemZ> SystemZPtr;
1317   std::unique_ptr<SemaWasm> WasmPtr;
1318   std::unique_ptr<SemaX86> X86Ptr;
1319 
1320   ///@}
1321 
1322   //
1323   //
1324   // -------------------------------------------------------------------------
1325   //
1326   //
1327 
1328   /// \name C++ Access Control
1329   /// Implementations are in SemaAccess.cpp
1330   ///@{
1331 
1332 public:
1333   enum AccessResult {
1334     AR_accessible,
1335     AR_inaccessible,
1336     AR_dependent,
1337     AR_delayed
1338   };
1339 
1340   /// SetMemberAccessSpecifier - Set the access specifier of a member.
1341   /// Returns true on error (when the previous member decl access specifier
1342   /// is different from the new member decl access specifier).
1343   bool SetMemberAccessSpecifier(NamedDecl *MemberDecl,
1344                                 NamedDecl *PrevMemberDecl,
1345                                 AccessSpecifier LexicalAS);
1346 
1347   /// Perform access-control checking on a previously-unresolved member
1348   /// access which has now been resolved to a member.
1349   AccessResult CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E,
1350                                            DeclAccessPair FoundDecl);
1351   AccessResult CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E,
1352                                            DeclAccessPair FoundDecl);
1353 
1354   /// Checks access to an overloaded operator new or delete.
1355   AccessResult CheckAllocationAccess(SourceLocation OperatorLoc,
1356                                      SourceRange PlacementRange,
1357                                      CXXRecordDecl *NamingClass,
1358                                      DeclAccessPair FoundDecl,
1359                                      bool Diagnose = true);
1360 
1361   /// Checks access to a constructor.
1362   AccessResult CheckConstructorAccess(SourceLocation Loc, CXXConstructorDecl *D,
1363                                       DeclAccessPair FoundDecl,
1364                                       const InitializedEntity &Entity,
1365                                       bool IsCopyBindingRefToTemp = false);
1366 
1367   /// Checks access to a constructor.
1368   AccessResult CheckConstructorAccess(SourceLocation Loc, CXXConstructorDecl *D,
1369                                       DeclAccessPair FoundDecl,
1370                                       const InitializedEntity &Entity,
1371                                       const PartialDiagnostic &PDiag);
1372   AccessResult CheckDestructorAccess(SourceLocation Loc,
1373                                      CXXDestructorDecl *Dtor,
1374                                      const PartialDiagnostic &PDiag,
1375                                      QualType objectType = QualType());
1376 
1377   /// Checks access to the target of a friend declaration.
1378   AccessResult CheckFriendAccess(NamedDecl *D);
1379 
1380   /// Checks access to a member.
1381   AccessResult CheckMemberAccess(SourceLocation UseLoc,
1382                                  CXXRecordDecl *NamingClass,
1383                                  DeclAccessPair Found);
1384 
1385   /// Checks implicit access to a member in a structured binding.
1386   AccessResult
1387   CheckStructuredBindingMemberAccess(SourceLocation UseLoc,
1388                                      CXXRecordDecl *DecomposedClass,
1389                                      DeclAccessPair Field);
1390   AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr,
1391                                          const SourceRange &,
1392                                          DeclAccessPair FoundDecl);
1393 
1394   /// Checks access to an overloaded member operator, including
1395   /// conversion operators.
1396   AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr,
1397                                          Expr *ArgExpr,
1398                                          DeclAccessPair FoundDecl);
1399   AccessResult CheckMemberOperatorAccess(SourceLocation Loc, Expr *ObjectExpr,
1400                                          ArrayRef<Expr *> ArgExprs,
1401                                          DeclAccessPair FoundDecl);
1402   AccessResult CheckAddressOfMemberAccess(Expr *OvlExpr,
1403                                           DeclAccessPair FoundDecl);
1404 
1405   /// Checks access for a hierarchy conversion.
1406   ///
1407   /// \param ForceCheck true if this check should be performed even if access
1408   ///     control is disabled;  some things rely on this for semantics
1409   /// \param ForceUnprivileged true if this check should proceed as if the
1410   ///     context had no special privileges
1411   AccessResult CheckBaseClassAccess(SourceLocation AccessLoc, QualType Base,
1412                                     QualType Derived, const CXXBasePath &Path,
1413                                     unsigned DiagID, bool ForceCheck = false,
1414                                     bool ForceUnprivileged = false);
1415 
1416   /// Checks access to all the declarations in the given result set.
1417   void CheckLookupAccess(const LookupResult &R);
1418 
1419   /// Checks access to Target from the given class. The check will take access
1420   /// specifiers into account, but no member access expressions and such.
1421   ///
1422   /// \param Target the declaration to check if it can be accessed
1423   /// \param NamingClass the class in which the lookup was started.
1424   /// \param BaseType type of the left side of member access expression.
1425   ///        \p BaseType and \p NamingClass are used for C++ access control.
1426   ///        Depending on the lookup case, they should be set to the following:
1427   ///        - lhs.target (member access without a qualifier):
1428   ///          \p BaseType and \p NamingClass are both the type of 'lhs'.
1429   ///        - lhs.X::target (member access with a qualifier):
1430   ///          BaseType is the type of 'lhs', NamingClass is 'X'
1431   ///        - X::target (qualified lookup without member access):
1432   ///          BaseType is null, NamingClass is 'X'.
1433   ///        - target (unqualified lookup).
1434   ///          BaseType is null, NamingClass is the parent class of 'target'.
1435   /// \return true if the Target is accessible from the Class, false otherwise.
1436   bool IsSimplyAccessible(NamedDecl *Decl, CXXRecordDecl *NamingClass,
1437                           QualType BaseType);
1438 
1439   /// Is the given member accessible for the purposes of deciding whether to
1440   /// define a special member function as deleted?
1441   bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass,
1442                                      DeclAccessPair Found, QualType ObjectType,
1443                                      SourceLocation Loc,
1444                                      const PartialDiagnostic &Diag);
isMemberAccessibleForDeletion(CXXRecordDecl * NamingClass,DeclAccessPair Found,QualType ObjectType)1445   bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass,
1446                                      DeclAccessPair Found,
1447                                      QualType ObjectType) {
1448     return isMemberAccessibleForDeletion(NamingClass, Found, ObjectType,
1449                                          SourceLocation(), PDiag());
1450   }
1451 
1452   void HandleDependentAccessCheck(
1453       const DependentDiagnostic &DD,
1454       const MultiLevelTemplateArgumentList &TemplateArgs);
1455   void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
1456 
1457   ///@}
1458 
1459   //
1460   //
1461   // -------------------------------------------------------------------------
1462   //
1463   //
1464 
1465   /// \name Attributes
1466   /// Implementations are in SemaAttr.cpp
1467   ///@{
1468 
1469 public:
1470   /// Controls member pointer representation format under the MS ABI.
1471   LangOptions::PragmaMSPointersToMembersKind
1472       MSPointerToMemberRepresentationMethod;
1473 
1474   bool MSStructPragmaOn; // True when \#pragma ms_struct on
1475 
1476   /// Source location for newly created implicit MSInheritanceAttrs
1477   SourceLocation ImplicitMSInheritanceAttrLoc;
1478 
1479   /// pragma clang section kind
1480   enum PragmaClangSectionKind {
1481     PCSK_Invalid = 0,
1482     PCSK_BSS = 1,
1483     PCSK_Data = 2,
1484     PCSK_Rodata = 3,
1485     PCSK_Text = 4,
1486     PCSK_Relro = 5
1487   };
1488 
1489   enum PragmaClangSectionAction { PCSA_Set = 0, PCSA_Clear = 1 };
1490 
1491   struct PragmaClangSection {
1492     std::string SectionName;
1493     bool Valid = false;
1494     SourceLocation PragmaLocation;
1495   };
1496 
1497   PragmaClangSection PragmaClangBSSSection;
1498   PragmaClangSection PragmaClangDataSection;
1499   PragmaClangSection PragmaClangRodataSection;
1500   PragmaClangSection PragmaClangRelroSection;
1501   PragmaClangSection PragmaClangTextSection;
1502 
1503   enum PragmaMsStackAction {
1504     PSK_Reset = 0x0,                   // #pragma ()
1505     PSK_Set = 0x1,                     // #pragma (value)
1506     PSK_Push = 0x2,                    // #pragma (push[, id])
1507     PSK_Pop = 0x4,                     // #pragma (pop[, id])
1508     PSK_Show = 0x8,                    // #pragma (show) -- only for "pack"!
1509     PSK_Push_Set = PSK_Push | PSK_Set, // #pragma (push[, id], value)
1510     PSK_Pop_Set = PSK_Pop | PSK_Set,   // #pragma (pop[, id], value)
1511   };
1512 
1513   struct PragmaPackInfo {
1514     PragmaMsStackAction Action;
1515     StringRef SlotLabel;
1516     Token Alignment;
1517   };
1518 
1519   // #pragma pack and align.
1520   class AlignPackInfo {
1521   public:
1522     // `Native` represents default align mode, which may vary based on the
1523     // platform.
1524     enum Mode : unsigned char { Native, Natural, Packed, Mac68k };
1525 
1526     // #pragma pack info constructor
AlignPackInfo(AlignPackInfo::Mode M,unsigned Num,bool IsXL)1527     AlignPackInfo(AlignPackInfo::Mode M, unsigned Num, bool IsXL)
1528         : PackAttr(true), AlignMode(M), PackNumber(Num), XLStack(IsXL) {
1529       assert(Num == PackNumber && "The pack number has been truncated.");
1530     }
1531 
1532     // #pragma align info constructor
AlignPackInfo(AlignPackInfo::Mode M,bool IsXL)1533     AlignPackInfo(AlignPackInfo::Mode M, bool IsXL)
1534         : PackAttr(false), AlignMode(M),
1535           PackNumber(M == Packed ? 1 : UninitPackVal), XLStack(IsXL) {}
1536 
AlignPackInfo(bool IsXL)1537     explicit AlignPackInfo(bool IsXL) : AlignPackInfo(Native, IsXL) {}
1538 
AlignPackInfo()1539     AlignPackInfo() : AlignPackInfo(Native, false) {}
1540 
1541     // When a AlignPackInfo itself cannot be used, this returns an 32-bit
1542     // integer encoding for it. This should only be passed to
1543     // AlignPackInfo::getFromRawEncoding, it should not be inspected directly.
getRawEncoding(const AlignPackInfo & Info)1544     static uint32_t getRawEncoding(const AlignPackInfo &Info) {
1545       std::uint32_t Encoding{};
1546       if (Info.IsXLStack())
1547         Encoding |= IsXLMask;
1548 
1549       Encoding |= static_cast<uint32_t>(Info.getAlignMode()) << 1;
1550 
1551       if (Info.IsPackAttr())
1552         Encoding |= PackAttrMask;
1553 
1554       Encoding |= static_cast<uint32_t>(Info.getPackNumber()) << 4;
1555 
1556       return Encoding;
1557     }
1558 
getFromRawEncoding(unsigned Encoding)1559     static AlignPackInfo getFromRawEncoding(unsigned Encoding) {
1560       bool IsXL = static_cast<bool>(Encoding & IsXLMask);
1561       AlignPackInfo::Mode M =
1562           static_cast<AlignPackInfo::Mode>((Encoding & AlignModeMask) >> 1);
1563       int PackNumber = (Encoding & PackNumMask) >> 4;
1564 
1565       if (Encoding & PackAttrMask)
1566         return AlignPackInfo(M, PackNumber, IsXL);
1567 
1568       return AlignPackInfo(M, IsXL);
1569     }
1570 
IsPackAttr()1571     bool IsPackAttr() const { return PackAttr; }
1572 
IsAlignAttr()1573     bool IsAlignAttr() const { return !PackAttr; }
1574 
getAlignMode()1575     Mode getAlignMode() const { return AlignMode; }
1576 
getPackNumber()1577     unsigned getPackNumber() const { return PackNumber; }
1578 
IsPackSet()1579     bool IsPackSet() const {
1580       // #pragma align, #pragma pack(), and #pragma pack(0) do not set the pack
1581       // attriute on a decl.
1582       return PackNumber != UninitPackVal && PackNumber != 0;
1583     }
1584 
IsXLStack()1585     bool IsXLStack() const { return XLStack; }
1586 
1587     bool operator==(const AlignPackInfo &Info) const {
1588       return std::tie(AlignMode, PackNumber, PackAttr, XLStack) ==
1589              std::tie(Info.AlignMode, Info.PackNumber, Info.PackAttr,
1590                       Info.XLStack);
1591     }
1592 
1593     bool operator!=(const AlignPackInfo &Info) const {
1594       return !(*this == Info);
1595     }
1596 
1597   private:
1598     /// \brief True if this is a pragma pack attribute,
1599     ///         not a pragma align attribute.
1600     bool PackAttr;
1601 
1602     /// \brief The alignment mode that is in effect.
1603     Mode AlignMode;
1604 
1605     /// \brief The pack number of the stack.
1606     unsigned char PackNumber;
1607 
1608     /// \brief True if it is a XL #pragma align/pack stack.
1609     bool XLStack;
1610 
1611     /// \brief Uninitialized pack value.
1612     static constexpr unsigned char UninitPackVal = -1;
1613 
1614     // Masks to encode and decode an AlignPackInfo.
1615     static constexpr uint32_t IsXLMask{0x0000'0001};
1616     static constexpr uint32_t AlignModeMask{0x0000'0006};
1617     static constexpr uint32_t PackAttrMask{0x00000'0008};
1618     static constexpr uint32_t PackNumMask{0x0000'01F0};
1619   };
1620 
1621   template <typename ValueType> struct PragmaStack {
1622     struct Slot {
1623       llvm::StringRef StackSlotLabel;
1624       ValueType Value;
1625       SourceLocation PragmaLocation;
1626       SourceLocation PragmaPushLocation;
SlotPragmaStack::Slot1627       Slot(llvm::StringRef StackSlotLabel, ValueType Value,
1628            SourceLocation PragmaLocation, SourceLocation PragmaPushLocation)
1629           : StackSlotLabel(StackSlotLabel), Value(Value),
1630             PragmaLocation(PragmaLocation),
1631             PragmaPushLocation(PragmaPushLocation) {}
1632     };
1633 
ActPragmaStack1634     void Act(SourceLocation PragmaLocation, PragmaMsStackAction Action,
1635              llvm::StringRef StackSlotLabel, ValueType Value) {
1636       if (Action == PSK_Reset) {
1637         CurrentValue = DefaultValue;
1638         CurrentPragmaLocation = PragmaLocation;
1639         return;
1640       }
1641       if (Action & PSK_Push)
1642         Stack.emplace_back(StackSlotLabel, CurrentValue, CurrentPragmaLocation,
1643                            PragmaLocation);
1644       else if (Action & PSK_Pop) {
1645         if (!StackSlotLabel.empty()) {
1646           // If we've got a label, try to find it and jump there.
1647           auto I = llvm::find_if(llvm::reverse(Stack), [&](const Slot &x) {
1648             return x.StackSlotLabel == StackSlotLabel;
1649           });
1650           // If we found the label so pop from there.
1651           if (I != Stack.rend()) {
1652             CurrentValue = I->Value;
1653             CurrentPragmaLocation = I->PragmaLocation;
1654             Stack.erase(std::prev(I.base()), Stack.end());
1655           }
1656         } else if (!Stack.empty()) {
1657           // We do not have a label, just pop the last entry.
1658           CurrentValue = Stack.back().Value;
1659           CurrentPragmaLocation = Stack.back().PragmaLocation;
1660           Stack.pop_back();
1661         }
1662       }
1663       if (Action & PSK_Set) {
1664         CurrentValue = Value;
1665         CurrentPragmaLocation = PragmaLocation;
1666       }
1667     }
1668 
1669     // MSVC seems to add artificial slots to #pragma stacks on entering a C++
1670     // method body to restore the stacks on exit, so it works like this:
1671     //
1672     //   struct S {
1673     //     #pragma <name>(push, InternalPragmaSlot, <current_pragma_value>)
1674     //     void Method {}
1675     //     #pragma <name>(pop, InternalPragmaSlot)
1676     //   };
1677     //
1678     // It works even with #pragma vtordisp, although MSVC doesn't support
1679     //   #pragma vtordisp(push [, id], n)
1680     // syntax.
1681     //
1682     // Push / pop a named sentinel slot.
SentinelActionPragmaStack1683     void SentinelAction(PragmaMsStackAction Action, StringRef Label) {
1684       assert((Action == PSK_Push || Action == PSK_Pop) &&
1685              "Can only push / pop #pragma stack sentinels!");
1686       Act(CurrentPragmaLocation, Action, Label, CurrentValue);
1687     }
1688 
1689     // Constructors.
PragmaStackPragmaStack1690     explicit PragmaStack(const ValueType &Default)
1691         : DefaultValue(Default), CurrentValue(Default) {}
1692 
hasValuePragmaStack1693     bool hasValue() const { return CurrentValue != DefaultValue; }
1694 
1695     SmallVector<Slot, 2> Stack;
1696     ValueType DefaultValue; // Value used for PSK_Reset action.
1697     ValueType CurrentValue;
1698     SourceLocation CurrentPragmaLocation;
1699   };
1700   // FIXME: We should serialize / deserialize these if they occur in a PCH (but
1701   // we shouldn't do so if they're in a module).
1702 
1703   /// Whether to insert vtordisps prior to virtual bases in the Microsoft
1704   /// C++ ABI.  Possible values are 0, 1, and 2, which mean:
1705   ///
1706   /// 0: Suppress all vtordisps
1707   /// 1: Insert vtordisps in the presence of vbase overrides and non-trivial
1708   ///    structors
1709   /// 2: Always insert vtordisps to support RTTI on partially constructed
1710   ///    objects
1711   PragmaStack<MSVtorDispMode> VtorDispStack;
1712   PragmaStack<AlignPackInfo> AlignPackStack;
1713   // The current #pragma align/pack values and locations at each #include.
1714   struct AlignPackIncludeState {
1715     AlignPackInfo CurrentValue;
1716     SourceLocation CurrentPragmaLocation;
1717     bool HasNonDefaultValue, ShouldWarnOnInclude;
1718   };
1719   SmallVector<AlignPackIncludeState, 8> AlignPackIncludeStack;
1720   // Segment #pragmas.
1721   PragmaStack<StringLiteral *> DataSegStack;
1722   PragmaStack<StringLiteral *> BSSSegStack;
1723   PragmaStack<StringLiteral *> ConstSegStack;
1724   PragmaStack<StringLiteral *> CodeSegStack;
1725 
1726   // #pragma strict_gs_check.
1727   PragmaStack<bool> StrictGuardStackCheckStack;
1728 
1729   // This stack tracks the current state of Sema.CurFPFeatures.
1730   PragmaStack<FPOptionsOverride> FpPragmaStack;
CurFPFeatureOverrides()1731   FPOptionsOverride CurFPFeatureOverrides() {
1732     FPOptionsOverride result;
1733     if (!FpPragmaStack.hasValue()) {
1734       result = FPOptionsOverride();
1735     } else {
1736       result = FpPragmaStack.CurrentValue;
1737     }
1738     return result;
1739   }
1740 
1741   enum PragmaSectionKind {
1742     PSK_DataSeg,
1743     PSK_BSSSeg,
1744     PSK_ConstSeg,
1745     PSK_CodeSeg,
1746   };
1747 
1748   // RAII object to push / pop sentinel slots for all MS #pragma stacks.
1749   // Actions should be performed only if we enter / exit a C++ method body.
1750   class PragmaStackSentinelRAII {
1751   public:
1752     PragmaStackSentinelRAII(Sema &S, StringRef SlotLabel, bool ShouldAct);
1753     ~PragmaStackSentinelRAII();
1754 
1755   private:
1756     Sema &S;
1757     StringRef SlotLabel;
1758     bool ShouldAct;
1759   };
1760 
1761   /// Last section used with #pragma init_seg.
1762   StringLiteral *CurInitSeg;
1763   SourceLocation CurInitSegLoc;
1764 
1765   /// Sections used with #pragma alloc_text.
1766   llvm::StringMap<std::tuple<StringRef, SourceLocation>> FunctionToSectionMap;
1767 
1768   /// VisContext - Manages the stack for \#pragma GCC visibility.
1769   void *VisContext; // Really a "PragmaVisStack*"
1770 
1771   /// This an attribute introduced by \#pragma clang attribute.
1772   struct PragmaAttributeEntry {
1773     SourceLocation Loc;
1774     ParsedAttr *Attribute;
1775     SmallVector<attr::SubjectMatchRule, 4> MatchRules;
1776     bool IsUsed;
1777   };
1778 
1779   /// A push'd group of PragmaAttributeEntries.
1780   struct PragmaAttributeGroup {
1781     /// The location of the push attribute.
1782     SourceLocation Loc;
1783     /// The namespace of this push group.
1784     const IdentifierInfo *Namespace;
1785     SmallVector<PragmaAttributeEntry, 2> Entries;
1786   };
1787 
1788   SmallVector<PragmaAttributeGroup, 2> PragmaAttributeStack;
1789 
1790   /// The declaration that is currently receiving an attribute from the
1791   /// #pragma attribute stack.
1792   const Decl *PragmaAttributeCurrentTargetDecl;
1793 
1794   /// This represents the last location of a "#pragma clang optimize off"
1795   /// directive if such a directive has not been closed by an "on" yet. If
1796   /// optimizations are currently "on", this is set to an invalid location.
1797   SourceLocation OptimizeOffPragmaLocation;
1798 
1799   /// Get the location for the currently active "\#pragma clang optimize
1800   /// off". If this location is invalid, then the state of the pragma is "on".
getOptimizeOffPragmaLocation()1801   SourceLocation getOptimizeOffPragmaLocation() const {
1802     return OptimizeOffPragmaLocation;
1803   }
1804 
1805   /// The "on" or "off" argument passed by \#pragma optimize, that denotes
1806   /// whether the optimizations in the list passed to the pragma should be
1807   /// turned off or on. This boolean is true by default because command line
1808   /// options are honored when `#pragma optimize("", on)`.
1809   /// (i.e. `ModifyFnAttributeMSPragmaOptimze()` does nothing)
1810   bool MSPragmaOptimizeIsOn = true;
1811 
1812   /// Set of no-builtin functions listed by \#pragma function.
1813   llvm::SmallSetVector<StringRef, 4> MSFunctionNoBuiltins;
1814 
1815   /// AddAlignmentAttributesForRecord - Adds any needed alignment attributes to
1816   /// a the record decl, to handle '\#pragma pack' and '\#pragma options align'.
1817   void AddAlignmentAttributesForRecord(RecordDecl *RD);
1818 
1819   /// AddMsStructLayoutForRecord - Adds ms_struct layout attribute to record.
1820   void AddMsStructLayoutForRecord(RecordDecl *RD);
1821 
1822   /// Add gsl::Pointer attribute to std::container::iterator
1823   /// \param ND The declaration that introduces the name
1824   /// std::container::iterator. \param UnderlyingRecord The record named by ND.
1825   void inferGslPointerAttribute(NamedDecl *ND, CXXRecordDecl *UnderlyingRecord);
1826 
1827   /// Add [[gsl::Owner]] and [[gsl::Pointer]] attributes for std:: types.
1828   void inferGslOwnerPointerAttribute(CXXRecordDecl *Record);
1829 
1830   /// Add [[gsl::Pointer]] attributes for std:: types.
1831   void inferGslPointerAttribute(TypedefNameDecl *TD);
1832 
1833   /// Add _Nullable attributes for std:: types.
1834   void inferNullableClassAttribute(CXXRecordDecl *CRD);
1835 
1836   enum PragmaOptionsAlignKind {
1837     POAK_Native,  // #pragma options align=native
1838     POAK_Natural, // #pragma options align=natural
1839     POAK_Packed,  // #pragma options align=packed
1840     POAK_Power,   // #pragma options align=power
1841     POAK_Mac68k,  // #pragma options align=mac68k
1842     POAK_Reset    // #pragma options align=reset
1843   };
1844 
1845   /// ActOnPragmaClangSection - Called on well formed \#pragma clang section
1846   void ActOnPragmaClangSection(SourceLocation PragmaLoc,
1847                                PragmaClangSectionAction Action,
1848                                PragmaClangSectionKind SecKind,
1849                                StringRef SecName);
1850 
1851   /// ActOnPragmaOptionsAlign - Called on well formed \#pragma options align.
1852   void ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind,
1853                                SourceLocation PragmaLoc);
1854 
1855   /// ActOnPragmaPack - Called on well formed \#pragma pack(...).
1856   void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action,
1857                        StringRef SlotLabel, Expr *Alignment);
1858 
1859   /// ConstantFoldAttrArgs - Folds attribute arguments into ConstantExprs
1860   /// (unless they are value dependent or type dependent). Returns false
1861   /// and emits a diagnostic if one or more of the arguments could not be
1862   /// folded into a constant.
1863   bool ConstantFoldAttrArgs(const AttributeCommonInfo &CI,
1864                             MutableArrayRef<Expr *> Args);
1865 
1866   enum class PragmaAlignPackDiagnoseKind {
1867     NonDefaultStateAtInclude,
1868     ChangedStateAtExit
1869   };
1870 
1871   void DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind,
1872                                          SourceLocation IncludeLoc);
1873   void DiagnoseUnterminatedPragmaAlignPack();
1874 
1875   /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off].
1876   void ActOnPragmaMSStruct(PragmaMSStructKind Kind);
1877 
1878   /// ActOnPragmaMSComment - Called on well formed
1879   /// \#pragma comment(kind, "arg").
1880   void ActOnPragmaMSComment(SourceLocation CommentLoc, PragmaMSCommentKind Kind,
1881                             StringRef Arg);
1882 
1883   /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch
1884   void ActOnPragmaDetectMismatch(SourceLocation Loc, StringRef Name,
1885                                  StringRef Value);
1886 
1887   /// Are precise floating point semantics currently enabled?
isPreciseFPEnabled()1888   bool isPreciseFPEnabled() {
1889     return !CurFPFeatures.getAllowFPReassociate() &&
1890            !CurFPFeatures.getNoSignedZero() &&
1891            !CurFPFeatures.getAllowReciprocal() &&
1892            !CurFPFeatures.getAllowApproxFunc();
1893   }
1894 
1895   void ActOnPragmaFPEvalMethod(SourceLocation Loc,
1896                                LangOptions::FPEvalMethodKind Value);
1897 
1898   /// ActOnPragmaFloatControl - Call on well-formed \#pragma float_control
1899   void ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action,
1900                                PragmaFloatControlKind Value);
1901 
1902   /// ActOnPragmaMSPointersToMembers - called on well formed \#pragma
1903   /// pointers_to_members(representation method[, general purpose
1904   /// representation]).
1905   void ActOnPragmaMSPointersToMembers(
1906       LangOptions::PragmaMSPointersToMembersKind Kind,
1907       SourceLocation PragmaLoc);
1908 
1909   /// Called on well formed \#pragma vtordisp().
1910   void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action,
1911                              SourceLocation PragmaLoc, MSVtorDispMode Value);
1912 
1913   bool UnifySection(StringRef SectionName, int SectionFlags,
1914                     NamedDecl *TheDecl);
1915   bool UnifySection(StringRef SectionName, int SectionFlags,
1916                     SourceLocation PragmaSectionLocation);
1917 
1918   /// Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg.
1919   void ActOnPragmaMSSeg(SourceLocation PragmaLocation,
1920                         PragmaMsStackAction Action,
1921                         llvm::StringRef StackSlotLabel,
1922                         StringLiteral *SegmentName, llvm::StringRef PragmaName);
1923 
1924   /// Called on well formed \#pragma section().
1925   void ActOnPragmaMSSection(SourceLocation PragmaLocation, int SectionFlags,
1926                             StringLiteral *SegmentName);
1927 
1928   /// Called on well-formed \#pragma init_seg().
1929   void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation,
1930                             StringLiteral *SegmentName);
1931 
1932   /// Called on well-formed \#pragma alloc_text().
1933   void ActOnPragmaMSAllocText(
1934       SourceLocation PragmaLocation, StringRef Section,
1935       const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>>
1936           &Functions);
1937 
1938   /// ActOnPragmaMSStrictGuardStackCheck - Called on well formed \#pragma
1939   /// strict_gs_check.
1940   void ActOnPragmaMSStrictGuardStackCheck(SourceLocation PragmaLocation,
1941                                           PragmaMsStackAction Action,
1942                                           bool Value);
1943 
1944   /// ActOnPragmaUnused - Called on well-formed '\#pragma unused'.
1945   void ActOnPragmaUnused(const Token &Identifier, Scope *curScope,
1946                          SourceLocation PragmaLoc);
1947 
1948   void ActOnPragmaAttributeAttribute(ParsedAttr &Attribute,
1949                                      SourceLocation PragmaLoc,
1950                                      attr::ParsedSubjectMatchRuleSet Rules);
1951   void ActOnPragmaAttributeEmptyPush(SourceLocation PragmaLoc,
1952                                      const IdentifierInfo *Namespace);
1953 
1954   /// Called on well-formed '\#pragma clang attribute pop'.
1955   void ActOnPragmaAttributePop(SourceLocation PragmaLoc,
1956                                const IdentifierInfo *Namespace);
1957 
1958   /// Adds the attributes that have been specified using the
1959   /// '\#pragma clang attribute push' directives to the given declaration.
1960   void AddPragmaAttributes(Scope *S, Decl *D);
1961 
1962   void PrintPragmaAttributeInstantiationPoint();
1963 
1964   void DiagnoseUnterminatedPragmaAttribute();
1965 
1966   /// Called on well formed \#pragma clang optimize.
1967   void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc);
1968 
1969   /// #pragma optimize("[optimization-list]", on | off).
1970   void ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn);
1971 
1972   /// Call on well formed \#pragma function.
1973   void
1974   ActOnPragmaMSFunction(SourceLocation Loc,
1975                         const llvm::SmallVectorImpl<StringRef> &NoBuiltins);
1976 
1977   /// Only called on function definitions; if there is a pragma in scope
1978   /// with the effect of a range-based optnone, consider marking the function
1979   /// with attribute optnone.
1980   void AddRangeBasedOptnone(FunctionDecl *FD);
1981 
1982   /// Only called on function definitions; if there is a `#pragma alloc_text`
1983   /// that decides which code section the function should be in, add
1984   /// attribute section to the function.
1985   void AddSectionMSAllocText(FunctionDecl *FD);
1986 
1987   /// Adds the 'optnone' attribute to the function declaration if there
1988   /// are no conflicts; Loc represents the location causing the 'optnone'
1989   /// attribute to be added (usually because of a pragma).
1990   void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc);
1991 
1992   /// Only called on function definitions; if there is a MSVC #pragma optimize
1993   /// in scope, consider changing the function's attributes based on the
1994   /// optimization list passed to the pragma.
1995   void ModifyFnAttributesMSPragmaOptimize(FunctionDecl *FD);
1996 
1997   /// Only called on function definitions; if there is a pragma in scope
1998   /// with the effect of a range-based no_builtin, consider marking the function
1999   /// with attribute no_builtin.
2000   void AddImplicitMSFunctionNoBuiltinAttr(FunctionDecl *FD);
2001 
2002   /// AddPushedVisibilityAttribute - If '\#pragma GCC visibility' was used,
2003   /// add an appropriate visibility attribute.
2004   void AddPushedVisibilityAttribute(Decl *RD);
2005 
2006   /// FreeVisContext - Deallocate and null out VisContext.
2007   void FreeVisContext();
2008 
2009   /// ActOnPragmaVisibility - Called on well formed \#pragma GCC visibility... .
2010   void ActOnPragmaVisibility(const IdentifierInfo *VisType,
2011                              SourceLocation PragmaLoc);
2012 
2013   /// ActOnPragmaFPContract - Called on well formed
2014   /// \#pragma {STDC,OPENCL} FP_CONTRACT and
2015   /// \#pragma clang fp contract
2016   void ActOnPragmaFPContract(SourceLocation Loc, LangOptions::FPModeKind FPC);
2017 
2018   /// Called on well formed
2019   /// \#pragma clang fp reassociate
2020   /// or
2021   /// \#pragma clang fp reciprocal
2022   void ActOnPragmaFPValueChangingOption(SourceLocation Loc, PragmaFPKind Kind,
2023                                         bool IsEnabled);
2024 
2025   /// ActOnPragmaFenvAccess - Called on well formed
2026   /// \#pragma STDC FENV_ACCESS
2027   void ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled);
2028 
2029   /// ActOnPragmaCXLimitedRange - Called on well formed
2030   /// \#pragma STDC CX_LIMITED_RANGE
2031   void ActOnPragmaCXLimitedRange(SourceLocation Loc,
2032                                  LangOptions::ComplexRangeKind Range);
2033 
2034   /// Called on well formed '\#pragma clang fp' that has option 'exceptions'.
2035   void ActOnPragmaFPExceptions(SourceLocation Loc,
2036                                LangOptions::FPExceptionModeKind);
2037 
2038   /// Called to set constant rounding mode for floating point operations.
2039   void ActOnPragmaFEnvRound(SourceLocation Loc, llvm::RoundingMode);
2040 
2041   /// Called to set exception behavior for floating point operations.
2042   void setExceptionMode(SourceLocation Loc, LangOptions::FPExceptionModeKind);
2043 
2044   /// PushNamespaceVisibilityAttr - Note that we've entered a
2045   /// namespace with a visibility attribute.
2046   void PushNamespaceVisibilityAttr(const VisibilityAttr *Attr,
2047                                    SourceLocation Loc);
2048 
2049   /// PopPragmaVisibility - Pop the top element of the visibility stack; used
2050   /// for '\#pragma GCC visibility' and visibility attributes on namespaces.
2051   void PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc);
2052 
2053   /// Handles semantic checking for features that are common to all attributes,
2054   /// such as checking whether a parameter was properly specified, or the
2055   /// correct number of arguments were passed, etc. Returns true if the
2056   /// attribute has been diagnosed.
2057   bool checkCommonAttributeFeatures(const Decl *D, const ParsedAttr &A,
2058                                     bool SkipArgCountCheck = false);
2059   bool checkCommonAttributeFeatures(const Stmt *S, const ParsedAttr &A,
2060                                     bool SkipArgCountCheck = false);
2061 
2062   ///@}
2063 
2064   //
2065   //
2066   // -------------------------------------------------------------------------
2067   //
2068   //
2069 
2070   /// \name Availability Attribute Handling
2071   /// Implementations are in SemaAvailability.cpp
2072   ///@{
2073 
2074 public:
2075   /// Issue any -Wunguarded-availability warnings in \c FD
2076   void DiagnoseUnguardedAvailabilityViolations(Decl *FD);
2077 
2078   void handleDelayedAvailabilityCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
2079 
2080   /// Retrieve the current function, if any, that should be analyzed for
2081   /// potential availability violations.
2082   sema::FunctionScopeInfo *getCurFunctionAvailabilityContext();
2083 
2084   void DiagnoseAvailabilityOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs,
2085                                   const ObjCInterfaceDecl *UnknownObjCClass,
2086                                   bool ObjCPropertyAccess,
2087                                   bool AvoidPartialAvailabilityChecks = false,
2088                                   ObjCInterfaceDecl *ClassReceiver = nullptr);
2089 
2090   ///@}
2091 
2092   //
2093   //
2094   // -------------------------------------------------------------------------
2095   //
2096   //
2097 
2098   /// \name Casts
2099   /// Implementations are in SemaCast.cpp
2100   ///@{
2101 
2102 public:
isCast(CheckedConversionKind CCK)2103   static bool isCast(CheckedConversionKind CCK) {
2104     return CCK == CheckedConversionKind::CStyleCast ||
2105            CCK == CheckedConversionKind::FunctionalCast ||
2106            CCK == CheckedConversionKind::OtherCast;
2107   }
2108 
2109   /// ActOnCXXNamedCast - Parse
2110   /// {dynamic,static,reinterpret,const,addrspace}_cast's.
2111   ExprResult ActOnCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind,
2112                                SourceLocation LAngleBracketLoc, Declarator &D,
2113                                SourceLocation RAngleBracketLoc,
2114                                SourceLocation LParenLoc, Expr *E,
2115                                SourceLocation RParenLoc);
2116 
2117   ExprResult BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind,
2118                                TypeSourceInfo *Ty, Expr *E,
2119                                SourceRange AngleBrackets, SourceRange Parens);
2120 
2121   ExprResult ActOnBuiltinBitCastExpr(SourceLocation KWLoc, Declarator &Dcl,
2122                                      ExprResult Operand,
2123                                      SourceLocation RParenLoc);
2124 
2125   ExprResult BuildBuiltinBitCastExpr(SourceLocation KWLoc, TypeSourceInfo *TSI,
2126                                      Expr *Operand, SourceLocation RParenLoc);
2127 
2128   // Checks that reinterpret casts don't have undefined behavior.
2129   void CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType,
2130                                       bool IsDereference, SourceRange Range);
2131 
2132   // Checks that the vector type should be initialized from a scalar
2133   // by splatting the value rather than populating a single element.
2134   // This is the case for AltiVecVector types as well as with
2135   // AltiVecPixel and AltiVecBool when -faltivec-src-compat=xl is specified.
2136   bool ShouldSplatAltivecScalarInCast(const VectorType *VecTy);
2137 
2138   // Checks if the -faltivec-src-compat=gcc option is specified.
2139   // If so, AltiVecVector, AltiVecBool and AltiVecPixel types are
2140   // treated the same way as they are when trying to initialize
2141   // these vectors on gcc (an error is emitted).
2142   bool CheckAltivecInitFromScalar(SourceRange R, QualType VecTy,
2143                                   QualType SrcTy);
2144 
2145   ExprResult BuildCStyleCastExpr(SourceLocation LParenLoc, TypeSourceInfo *Ty,
2146                                  SourceLocation RParenLoc, Expr *Op);
2147 
2148   ExprResult BuildCXXFunctionalCastExpr(TypeSourceInfo *TInfo, QualType Type,
2149                                         SourceLocation LParenLoc,
2150                                         Expr *CastExpr,
2151                                         SourceLocation RParenLoc);
2152 
2153   ///@}
2154 
2155   //
2156   //
2157   // -------------------------------------------------------------------------
2158   //
2159   //
2160 
2161   /// \name Extra Semantic Checking
2162   /// Implementations are in SemaChecking.cpp
2163   ///@{
2164 
2165 public:
2166   /// Used to change context to isConstantEvaluated without pushing a heavy
2167   /// ExpressionEvaluationContextRecord object.
2168   bool isConstantEvaluatedOverride = false;
2169 
isConstantEvaluatedContext()2170   bool isConstantEvaluatedContext() const {
2171     return currentEvaluationContext().isConstantEvaluated() ||
2172            isConstantEvaluatedOverride;
2173   }
2174 
2175   SourceLocation getLocationOfStringLiteralByte(const StringLiteral *SL,
2176                                                 unsigned ByteNo) const;
2177 
2178   enum FormatArgumentPassingKind {
2179     FAPK_Fixed,    // values to format are fixed (no C-style variadic arguments)
2180     FAPK_Variadic, // values to format are passed as variadic arguments
2181     FAPK_VAList,   // values to format are passed in a va_list
2182   };
2183 
2184   // Used to grab the relevant information from a FormatAttr and a
2185   // FunctionDeclaration.
2186   struct FormatStringInfo {
2187     unsigned FormatIdx;
2188     unsigned FirstDataArg;
2189     FormatArgumentPassingKind ArgPassingKind;
2190   };
2191 
2192   /// Given a FunctionDecl's FormatAttr, attempts to populate the
2193   /// FomatStringInfo parameter with the FormatAttr's correct format_idx and
2194   /// firstDataArg. Returns true when the format fits the function and the
2195   /// FormatStringInfo has been populated.
2196   static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember,
2197                                   bool IsVariadic, FormatStringInfo *FSI);
2198 
2199   // Used by C++ template instantiation.
2200   ExprResult BuiltinShuffleVector(CallExpr *TheCall);
2201 
2202   /// ConvertVectorExpr - Handle __builtin_convertvector
2203   ExprResult ConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo,
2204                                SourceLocation BuiltinLoc,
2205                                SourceLocation RParenLoc);
2206 
2207   enum FormatStringType {
2208     FST_Scanf,
2209     FST_Printf,
2210     FST_NSString,
2211     FST_Strftime,
2212     FST_Strfmon,
2213     FST_Kprintf,
2214     FST_FreeBSDKPrintf,
2215     FST_OSTrace,
2216     FST_OSLog,
2217     FST_Unknown
2218   };
2219   static FormatStringType GetFormatStringType(const FormatAttr *Format);
2220 
2221   bool FormatStringHasSArg(const StringLiteral *FExpr);
2222 
2223   /// Check for comparisons of floating-point values using == and !=. Issue a
2224   /// warning if the comparison is not likely to do what the programmer
2225   /// intended.
2226   void CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS,
2227                             BinaryOperatorKind Opcode);
2228 
2229   /// Register a magic integral constant to be used as a type tag.
2230   void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind,
2231                                   uint64_t MagicValue, QualType Type,
2232                                   bool LayoutCompatible, bool MustBeNull);
2233 
2234   struct TypeTagData {
TypeTagDataTypeTagData2235     TypeTagData() {}
2236 
TypeTagDataTypeTagData2237     TypeTagData(QualType Type, bool LayoutCompatible, bool MustBeNull)
2238         : Type(Type), LayoutCompatible(LayoutCompatible),
2239           MustBeNull(MustBeNull) {}
2240 
2241     QualType Type;
2242 
2243     /// If true, \c Type should be compared with other expression's types for
2244     /// layout-compatibility.
2245     LLVM_PREFERRED_TYPE(bool)
2246     unsigned LayoutCompatible : 1;
2247     LLVM_PREFERRED_TYPE(bool)
2248     unsigned MustBeNull : 1;
2249   };
2250 
2251   /// A pair of ArgumentKind identifier and magic value.  This uniquely
2252   /// identifies the magic value.
2253   typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue;
2254 
2255   /// Diagnoses the current set of gathered accesses. This typically
2256   /// happens at full expression level. The set is cleared after emitting the
2257   /// diagnostics.
2258   void DiagnoseMisalignedMembers();
2259 
2260   /// This function checks if the expression is in the sef of potentially
2261   /// misaligned members and it is converted to some pointer type T with lower
2262   /// or equal alignment requirements. If so it removes it. This is used when
2263   /// we do not want to diagnose such misaligned access (e.g. in conversions to
2264   /// void*).
2265   void DiscardMisalignedMemberAddress(const Type *T, Expr *E);
2266 
2267   /// This function calls Action when it determines that E designates a
2268   /// misaligned member due to the packed attribute. This is used to emit
2269   /// local diagnostics like in reference binding.
2270   void RefersToMemberWithReducedAlignment(
2271       Expr *E,
2272       llvm::function_ref<void(Expr *, RecordDecl *, FieldDecl *, CharUnits)>
2273           Action);
2274 
2275   enum class AtomicArgumentOrder { API, AST };
2276   ExprResult
2277   BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange,
2278                   SourceLocation RParenLoc, MultiExprArg Args,
2279                   AtomicExpr::AtomicOp Op,
2280                   AtomicArgumentOrder ArgOrder = AtomicArgumentOrder::API);
2281 
2282   /// Check to see if a given expression could have '.c_str()' called on it.
2283   bool hasCStrMethod(const Expr *E);
2284 
2285   /// Diagnose pointers that are always non-null.
2286   /// \param E the expression containing the pointer
2287   /// \param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is
2288   /// compared to a null pointer
2289   /// \param IsEqual True when the comparison is equal to a null pointer
2290   /// \param Range Extra SourceRange to highlight in the diagnostic
2291   void DiagnoseAlwaysNonNullPointer(Expr *E,
2292                                     Expr::NullPointerConstantKind NullType,
2293                                     bool IsEqual, SourceRange Range);
2294 
2295   /// CheckParmsForFunctionDef - Check that the parameters of the given
2296   /// function are appropriate for the definition of a function. This
2297   /// takes care of any checks that cannot be performed on the
2298   /// declaration itself, e.g., that the types of each of the function
2299   /// parameters are complete.
2300   bool CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters,
2301                                 bool CheckParameterNames);
2302 
2303   /// CheckCastAlign - Implements -Wcast-align, which warns when a
2304   /// pointer cast increases the alignment requirements.
2305   void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange);
2306 
2307   /// checkUnsafeAssigns - Check whether +1 expr is being assigned
2308   /// to weak/__unsafe_unretained type.
2309   bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS);
2310 
2311   /// checkUnsafeExprAssigns - Check whether +1 expr is being assigned
2312   /// to weak/__unsafe_unretained expression.
2313   void checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS);
2314 
2315   /// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null
2316   /// statement as a \p Body, and it is located on the same line.
2317   ///
2318   /// This helps prevent bugs due to typos, such as:
2319   ///     if (condition);
2320   ///       do_stuff();
2321   void DiagnoseEmptyStmtBody(SourceLocation StmtLoc, const Stmt *Body,
2322                              unsigned DiagID);
2323 
2324   /// Warn if a for/while loop statement \p S, which is followed by
2325   /// \p PossibleBody, has a suspicious null statement as a body.
2326   void DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody);
2327 
2328   /// DiagnoseSelfMove - Emits a warning if a value is moved to itself.
2329   void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr,
2330                         SourceLocation OpLoc);
2331 
2332   // Used for emitting the right warning by DefaultVariadicArgumentPromotion
2333   enum VariadicCallType {
2334     VariadicFunction,
2335     VariadicBlock,
2336     VariadicMethod,
2337     VariadicConstructor,
2338     VariadicDoesNotApply
2339   };
2340 
2341   bool IsLayoutCompatible(QualType T1, QualType T2) const;
2342   bool IsPointerInterconvertibleBaseOf(const TypeSourceInfo *Base,
2343                                        const TypeSourceInfo *Derived);
2344 
2345   /// CheckFunctionCall - Check a direct function call for various correctness
2346   /// and safety properties not strictly enforced by the C type system.
2347   bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,
2348                          const FunctionProtoType *Proto);
2349 
2350   bool BuiltinVectorMath(CallExpr *TheCall, QualType &Res);
2351   bool BuiltinVectorToScalarMath(CallExpr *TheCall);
2352 
2353   /// Handles the checks for format strings, non-POD arguments to vararg
2354   /// functions, NULL arguments passed to non-NULL parameters, diagnose_if
2355   /// attributes and AArch64 SME attributes.
2356   void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
2357                  const Expr *ThisArg, ArrayRef<const Expr *> Args,
2358                  bool IsMemberFunction, SourceLocation Loc, SourceRange Range,
2359                  VariadicCallType CallType);
2360 
2361   /// \brief Enforce the bounds of a TCB
2362   /// CheckTCBEnforcement - Enforces that every function in a named TCB only
2363   /// directly calls other functions in the same TCB as marked by the
2364   /// enforce_tcb and enforce_tcb_leaf attributes.
2365   void CheckTCBEnforcement(const SourceLocation CallExprLoc,
2366                            const NamedDecl *Callee);
2367 
2368   void CheckConstrainedAuto(const AutoType *AutoT, SourceLocation Loc);
2369 
2370   /// BuiltinConstantArg - Handle a check if argument ArgNum of CallExpr
2371   /// TheCall is a constant expression.
2372   bool BuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result);
2373 
2374   /// BuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr
2375   /// TheCall is a constant expression in the range [Low, High].
2376   bool BuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High,
2377                                bool RangeIsError = true);
2378 
2379   /// BuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr
2380   /// TheCall is a constant expression is a multiple of Num..
2381   bool BuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum,
2382                                   unsigned Multiple);
2383 
2384   /// BuiltinConstantArgPower2 - Check if argument ArgNum of TheCall is a
2385   /// constant expression representing a power of 2.
2386   bool BuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum);
2387 
2388   /// BuiltinConstantArgShiftedByte - Check if argument ArgNum of TheCall is
2389   /// a constant expression representing an arbitrary byte value shifted left by
2390   /// a multiple of 8 bits.
2391   bool BuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum,
2392                                      unsigned ArgBits);
2393 
2394   /// BuiltinConstantArgShiftedByteOr0xFF - Check if argument ArgNum of
2395   /// TheCall is a constant expression representing either a shifted byte value,
2396   /// or a value of the form 0x??FF (i.e. a member of the arithmetic progression
2397   /// 0x00FF, 0x01FF, ..., 0xFFFF). This strange range check is needed for some
2398   /// Arm MVE intrinsics.
2399   bool BuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum,
2400                                            unsigned ArgBits);
2401 
2402   /// Checks that a call expression's argument count is at least the desired
2403   /// number. This is useful when doing custom type-checking on a variadic
2404   /// function. Returns true on error.
2405   bool checkArgCountAtLeast(CallExpr *Call, unsigned MinArgCount);
2406 
2407   /// Checks that a call expression's argument count is at most the desired
2408   /// number. This is useful when doing custom type-checking on a variadic
2409   /// function. Returns true on error.
2410   bool checkArgCountAtMost(CallExpr *Call, unsigned MaxArgCount);
2411 
2412   /// Checks that a call expression's argument count is in the desired range.
2413   /// This is useful when doing custom type-checking on a variadic function.
2414   /// Returns true on error.
2415   bool checkArgCountRange(CallExpr *Call, unsigned MinArgCount,
2416                           unsigned MaxArgCount);
2417 
2418   /// Checks that a call expression's argument count is the desired number.
2419   /// This is useful when doing custom type-checking.  Returns true on error.
2420   bool checkArgCount(CallExpr *Call, unsigned DesiredArgCount);
2421 
2422   /// Returns true if the argument consists of one contiguous run of 1s with any
2423   /// number of 0s on either side. The 1s are allowed to wrap from LSB to MSB,
2424   /// so 0x000FFF0, 0x0000FFFF, 0xFF0000FF, 0x0 are all runs. 0x0F0F0000 is not,
2425   /// since all 1s are not contiguous.
2426   bool ValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum);
2427 
2428   void CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC,
2429                                bool *ICContext = nullptr,
2430                                bool IsListInit = false);
2431 
2432   bool BuiltinElementwiseTernaryMath(CallExpr *TheCall,
2433                                      bool CheckForFloatArgs = true);
2434   bool PrepareBuiltinElementwiseMathOneArgCall(CallExpr *TheCall);
2435 
2436 private:
2437   void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
2438                         const ArraySubscriptExpr *ASE = nullptr,
2439                         bool AllowOnePastEnd = true, bool IndexNegated = false);
2440   void CheckArrayAccess(const Expr *E);
2441 
2442   bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
2443                         const FunctionProtoType *Proto);
2444 
2445   /// Checks function calls when a FunctionDecl or a NamedDecl is not available,
2446   /// such as function pointers returned from functions.
2447   bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto);
2448 
2449   /// CheckConstructorCall - Check a constructor call for correctness and safety
2450   /// properties not enforced by the C type system.
2451   void CheckConstructorCall(FunctionDecl *FDecl, QualType ThisType,
2452                             ArrayRef<const Expr *> Args,
2453                             const FunctionProtoType *Proto, SourceLocation Loc);
2454 
2455   /// Warn if a pointer or reference argument passed to a function points to an
2456   /// object that is less aligned than the parameter. This can happen when
2457   /// creating a typedef with a lower alignment than the original type and then
2458   /// calling functions defined in terms of the original type.
2459   void CheckArgAlignment(SourceLocation Loc, NamedDecl *FDecl,
2460                          StringRef ParamName, QualType ArgTy, QualType ParamTy);
2461 
2462   ExprResult CheckOSLogFormatStringArg(Expr *Arg);
2463 
2464   ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
2465                                       CallExpr *TheCall);
2466 
2467   bool CheckTSBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
2468                                   CallExpr *TheCall);
2469 
2470   void checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall);
2471 
2472   /// Check the arguments to '__builtin_va_start' or '__builtin_ms_va_start'
2473   /// for validity.  Emit an error and return true on failure; return false
2474   /// on success.
2475   bool BuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall);
2476   bool BuiltinVAStartARMMicrosoft(CallExpr *Call);
2477 
2478   /// BuiltinUnorderedCompare - Handle functions like __builtin_isgreater and
2479   /// friends.  This is declared to take (...), so we have to check everything.
2480   bool BuiltinUnorderedCompare(CallExpr *TheCall, unsigned BuiltinID);
2481 
2482   /// BuiltinSemaBuiltinFPClassification - Handle functions like
2483   /// __builtin_isnan and friends.  This is declared to take (...), so we have
2484   /// to check everything.
2485   bool BuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs,
2486                                unsigned BuiltinID);
2487 
2488   /// Perform semantic analysis for a call to __builtin_complex.
2489   bool BuiltinComplex(CallExpr *TheCall);
2490   bool BuiltinOSLogFormat(CallExpr *TheCall);
2491 
2492   /// BuiltinPrefetch - Handle __builtin_prefetch.
2493   /// This is declared to take (const void*, ...) and can take two
2494   /// optional constant int args.
2495   bool BuiltinPrefetch(CallExpr *TheCall);
2496 
2497   /// Handle __builtin_alloca_with_align. This is declared
2498   /// as (size_t, size_t) where the second size_t must be a power of 2 greater
2499   /// than 8.
2500   bool BuiltinAllocaWithAlign(CallExpr *TheCall);
2501 
2502   /// BuiltinArithmeticFence - Handle __arithmetic_fence.
2503   bool BuiltinArithmeticFence(CallExpr *TheCall);
2504 
2505   /// BuiltinAssume - Handle __assume (MS Extension).
2506   /// __assume does not evaluate its arguments, and should warn if its argument
2507   /// has side effects.
2508   bool BuiltinAssume(CallExpr *TheCall);
2509 
2510   /// Handle __builtin_assume_aligned. This is declared
2511   /// as (const void*, size_t, ...) and can take one optional constant int arg.
2512   bool BuiltinAssumeAligned(CallExpr *TheCall);
2513 
2514   /// BuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).
2515   /// This checks that the target supports __builtin_longjmp and
2516   /// that val is a constant 1.
2517   bool BuiltinLongjmp(CallExpr *TheCall);
2518 
2519   /// BuiltinSetjmp - Handle __builtin_setjmp(void *env[5]).
2520   /// This checks that the target supports __builtin_setjmp.
2521   bool BuiltinSetjmp(CallExpr *TheCall);
2522 
2523   /// We have a call to a function like __sync_fetch_and_add, which is an
2524   /// overloaded function based on the pointer type of its first argument.
2525   /// The main BuildCallExpr routines have already promoted the types of
2526   /// arguments because all of these calls are prototyped as void(...).
2527   ///
2528   /// This function goes through and does final semantic checking for these
2529   /// builtins, as well as generating any warnings.
2530   ExprResult BuiltinAtomicOverloaded(ExprResult TheCallResult);
2531 
2532   /// BuiltinNontemporalOverloaded - We have a call to
2533   /// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an
2534   /// overloaded function based on the pointer type of its last argument.
2535   ///
2536   /// This function goes through and does final semantic checking for these
2537   /// builtins.
2538   ExprResult BuiltinNontemporalOverloaded(ExprResult TheCallResult);
2539   ExprResult AtomicOpsOverloaded(ExprResult TheCallResult,
2540                                  AtomicExpr::AtomicOp Op);
2541 
2542   bool BuiltinElementwiseMath(CallExpr *TheCall);
2543   bool PrepareBuiltinReduceMathOneArgCall(CallExpr *TheCall);
2544 
2545   bool BuiltinNonDeterministicValue(CallExpr *TheCall);
2546 
2547   // Matrix builtin handling.
2548   ExprResult BuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult);
2549   ExprResult BuiltinMatrixColumnMajorLoad(CallExpr *TheCall,
2550                                           ExprResult CallResult);
2551   ExprResult BuiltinMatrixColumnMajorStore(CallExpr *TheCall,
2552                                            ExprResult CallResult);
2553 
2554   /// CheckFormatArguments - Check calls to printf and scanf (and similar
2555   /// functions) for correct use of format strings.
2556   /// Returns true if a format string has been fully checked.
2557   bool CheckFormatArguments(const FormatAttr *Format,
2558                             ArrayRef<const Expr *> Args, bool IsCXXMember,
2559                             VariadicCallType CallType, SourceLocation Loc,
2560                             SourceRange Range,
2561                             llvm::SmallBitVector &CheckedVarArgs);
2562   bool CheckFormatArguments(ArrayRef<const Expr *> Args,
2563                             FormatArgumentPassingKind FAPK, unsigned format_idx,
2564                             unsigned firstDataArg, FormatStringType Type,
2565                             VariadicCallType CallType, SourceLocation Loc,
2566                             SourceRange range,
2567                             llvm::SmallBitVector &CheckedVarArgs);
2568 
2569   void CheckInfNaNFunction(const CallExpr *Call, const FunctionDecl *FDecl);
2570 
2571   /// Warn when using the wrong abs() function.
2572   void CheckAbsoluteValueFunction(const CallExpr *Call,
2573                                   const FunctionDecl *FDecl);
2574 
2575   void CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl);
2576 
2577   /// Check for dangerous or invalid arguments to memset().
2578   ///
2579   /// This issues warnings on known problematic, dangerous or unspecified
2580   /// arguments to the standard 'memset', 'memcpy', 'memmove', and 'memcmp'
2581   /// function calls.
2582   ///
2583   /// \param Call The call expression to diagnose.
2584   void CheckMemaccessArguments(const CallExpr *Call, unsigned BId,
2585                                IdentifierInfo *FnName);
2586 
2587   // Warn if the user has made the 'size' argument to strlcpy or strlcat
2588   // be the size of the source, instead of the destination.
2589   void CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName);
2590 
2591   // Warn on anti-patterns as the 'size' argument to strncat.
2592   // The correct size argument should look like following:
2593   //   strncat(dst, src, sizeof(dst) - strlen(dest) - 1);
2594   void CheckStrncatArguments(const CallExpr *Call, IdentifierInfo *FnName);
2595 
2596   /// Alerts the user that they are attempting to free a non-malloc'd object.
2597   void CheckFreeArguments(const CallExpr *E);
2598 
2599   void CheckReturnValExpr(Expr *RetValExp, QualType lhsType,
2600                           SourceLocation ReturnLoc, bool isObjCMethod = false,
2601                           const AttrVec *Attrs = nullptr,
2602                           const FunctionDecl *FD = nullptr);
2603 
2604   /// Diagnoses "dangerous" implicit conversions within the given
2605   /// expression (which is a full expression).  Implements -Wconversion
2606   /// and -Wsign-compare.
2607   ///
2608   /// \param CC the "context" location of the implicit conversion, i.e.
2609   ///   the most location of the syntactic entity requiring the implicit
2610   ///   conversion
2611   void CheckImplicitConversions(Expr *E, SourceLocation CC = SourceLocation());
2612 
2613   /// CheckBoolLikeConversion - Check conversion of given expression to boolean.
2614   /// Input argument E is a logical expression.
2615   void CheckBoolLikeConversion(Expr *E, SourceLocation CC);
2616 
2617   /// Diagnose when expression is an integer constant expression and its
2618   /// evaluation results in integer overflow
2619   void CheckForIntOverflow(const Expr *E);
2620   void CheckUnsequencedOperations(const Expr *E);
2621 
2622   /// Perform semantic checks on a completed expression. This will either
2623   /// be a full-expression or a default argument expression.
2624   void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(),
2625                           bool IsConstexpr = false);
2626 
2627   void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field,
2628                                    Expr *Init);
2629 
2630   /// A map from magic value to type information.
2631   std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>>
2632       TypeTagForDatatypeMagicValues;
2633 
2634   /// Peform checks on a call of a function with argument_with_type_tag
2635   /// or pointer_with_type_tag attributes.
2636   void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr,
2637                                 const ArrayRef<const Expr *> ExprArgs,
2638                                 SourceLocation CallSiteLoc);
2639 
2640   /// Check if we are taking the address of a packed field
2641   /// as this may be a problem if the pointer value is dereferenced.
2642   void CheckAddressOfPackedMember(Expr *rhs);
2643 
2644   /// Helper class that collects misaligned member designations and
2645   /// their location info for delayed diagnostics.
2646   struct MisalignedMember {
2647     Expr *E;
2648     RecordDecl *RD;
2649     ValueDecl *MD;
2650     CharUnits Alignment;
2651 
MisalignedMemberMisalignedMember2652     MisalignedMember() : E(), RD(), MD() {}
MisalignedMemberMisalignedMember2653     MisalignedMember(Expr *E, RecordDecl *RD, ValueDecl *MD,
2654                      CharUnits Alignment)
2655         : E(E), RD(RD), MD(MD), Alignment(Alignment) {}
MisalignedMemberMisalignedMember2656     explicit MisalignedMember(Expr *E)
2657         : MisalignedMember(E, nullptr, nullptr, CharUnits()) {}
2658 
2659     bool operator==(const MisalignedMember &m) { return this->E == m.E; }
2660   };
2661   /// Small set of gathered accesses to potentially misaligned members
2662   /// due to the packed attribute.
2663   SmallVector<MisalignedMember, 4> MisalignedMembers;
2664 
2665   /// Adds an expression to the set of gathered misaligned members.
2666   void AddPotentialMisalignedMembers(Expr *E, RecordDecl *RD, ValueDecl *MD,
2667                                      CharUnits Alignment);
2668   ///@}
2669 
2670   //
2671   //
2672   // -------------------------------------------------------------------------
2673   //
2674   //
2675 
2676   /// \name C++ Coroutines
2677   /// Implementations are in SemaCoroutine.cpp
2678   ///@{
2679 
2680 public:
2681   /// The C++ "std::coroutine_traits" template, which is defined in
2682   /// \<coroutine_traits>
2683   ClassTemplateDecl *StdCoroutineTraitsCache;
2684 
2685   bool ActOnCoroutineBodyStart(Scope *S, SourceLocation KwLoc,
2686                                StringRef Keyword);
2687   ExprResult ActOnCoawaitExpr(Scope *S, SourceLocation KwLoc, Expr *E);
2688   ExprResult ActOnCoyieldExpr(Scope *S, SourceLocation KwLoc, Expr *E);
2689   StmtResult ActOnCoreturnStmt(Scope *S, SourceLocation KwLoc, Expr *E);
2690 
2691   ExprResult BuildOperatorCoawaitLookupExpr(Scope *S, SourceLocation Loc);
2692   ExprResult BuildOperatorCoawaitCall(SourceLocation Loc, Expr *E,
2693                                       UnresolvedLookupExpr *Lookup);
2694   ExprResult BuildResolvedCoawaitExpr(SourceLocation KwLoc, Expr *Operand,
2695                                       Expr *Awaiter, bool IsImplicit = false);
2696   ExprResult BuildUnresolvedCoawaitExpr(SourceLocation KwLoc, Expr *Operand,
2697                                         UnresolvedLookupExpr *Lookup);
2698   ExprResult BuildCoyieldExpr(SourceLocation KwLoc, Expr *E);
2699   StmtResult BuildCoreturnStmt(SourceLocation KwLoc, Expr *E,
2700                                bool IsImplicit = false);
2701   StmtResult BuildCoroutineBodyStmt(CoroutineBodyStmt::CtorArgs);
2702   bool buildCoroutineParameterMoves(SourceLocation Loc);
2703   VarDecl *buildCoroutinePromise(SourceLocation Loc);
2704   void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body);
2705 
2706   // As a clang extension, enforces that a non-coroutine function must be marked
2707   // with [[clang::coro_wrapper]] if it returns a type marked with
2708   // [[clang::coro_return_type]].
2709   // Expects that FD is not a coroutine.
2710   void CheckCoroutineWrapper(FunctionDecl *FD);
2711   /// Lookup 'coroutine_traits' in std namespace and std::experimental
2712   /// namespace. The namespace found is recorded in Namespace.
2713   ClassTemplateDecl *lookupCoroutineTraits(SourceLocation KwLoc,
2714                                            SourceLocation FuncLoc);
2715   /// Check that the expression co_await promise.final_suspend() shall not be
2716   /// potentially-throwing.
2717   bool checkFinalSuspendNoThrow(const Stmt *FinalSuspend);
2718 
2719   ///@}
2720 
2721   //
2722   //
2723   // -------------------------------------------------------------------------
2724   //
2725   //
2726 
2727   /// \name C++ Scope Specifiers
2728   /// Implementations are in SemaCXXScopeSpec.cpp
2729   ///@{
2730 
2731 public:
2732   // Marks SS invalid if it represents an incomplete type.
2733   bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC);
2734   // Complete an enum decl, maybe without a scope spec.
2735   bool RequireCompleteEnumDecl(EnumDecl *D, SourceLocation L,
2736                                CXXScopeSpec *SS = nullptr);
2737 
2738   /// Compute the DeclContext that is associated with the given type.
2739   ///
2740   /// \param T the type for which we are attempting to find a DeclContext.
2741   ///
2742   /// \returns the declaration context represented by the type T,
2743   /// or NULL if the declaration context cannot be computed (e.g., because it is
2744   /// dependent and not the current instantiation).
2745   DeclContext *computeDeclContext(QualType T);
2746 
2747   /// Compute the DeclContext that is associated with the given
2748   /// scope specifier.
2749   ///
2750   /// \param SS the C++ scope specifier as it appears in the source
2751   ///
2752   /// \param EnteringContext when true, we will be entering the context of
2753   /// this scope specifier, so we can retrieve the declaration context of a
2754   /// class template or class template partial specialization even if it is
2755   /// not the current instantiation.
2756   ///
2757   /// \returns the declaration context represented by the scope specifier @p SS,
2758   /// or NULL if the declaration context cannot be computed (e.g., because it is
2759   /// dependent and not the current instantiation).
2760   DeclContext *computeDeclContext(const CXXScopeSpec &SS,
2761                                   bool EnteringContext = false);
2762   bool isDependentScopeSpecifier(const CXXScopeSpec &SS);
2763 
2764   /// If the given nested name specifier refers to the current
2765   /// instantiation, return the declaration that corresponds to that
2766   /// current instantiation (C++0x [temp.dep.type]p1).
2767   ///
2768   /// \param NNS a dependent nested name specifier.
2769   CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS);
2770 
2771   /// The parser has parsed a global nested-name-specifier '::'.
2772   ///
2773   /// \param CCLoc The location of the '::'.
2774   ///
2775   /// \param SS The nested-name-specifier, which will be updated in-place
2776   /// to reflect the parsed nested-name-specifier.
2777   ///
2778   /// \returns true if an error occurred, false otherwise.
2779   bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS);
2780 
2781   /// The parser has parsed a '__super' nested-name-specifier.
2782   ///
2783   /// \param SuperLoc The location of the '__super' keyword.
2784   ///
2785   /// \param ColonColonLoc The location of the '::'.
2786   ///
2787   /// \param SS The nested-name-specifier, which will be updated in-place
2788   /// to reflect the parsed nested-name-specifier.
2789   ///
2790   /// \returns true if an error occurred, false otherwise.
2791   bool ActOnSuperScopeSpecifier(SourceLocation SuperLoc,
2792                                 SourceLocation ColonColonLoc, CXXScopeSpec &SS);
2793 
2794   /// Determines whether the given declaration is an valid acceptable
2795   /// result for name lookup of a nested-name-specifier.
2796   /// \param SD Declaration checked for nested-name-specifier.
2797   /// \param IsExtension If not null and the declaration is accepted as an
2798   /// extension, the pointed variable is assigned true.
2799   bool isAcceptableNestedNameSpecifier(const NamedDecl *SD,
2800                                        bool *CanCorrect = nullptr);
2801 
2802   /// If the given nested-name-specifier begins with a bare identifier
2803   /// (e.g., Base::), perform name lookup for that identifier as a
2804   /// nested-name-specifier within the given scope, and return the result of
2805   /// that name lookup.
2806   NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS);
2807 
2808   /// Keeps information about an identifier in a nested-name-spec.
2809   ///
2810   struct NestedNameSpecInfo {
2811     /// The type of the object, if we're parsing nested-name-specifier in
2812     /// a member access expression.
2813     ParsedType ObjectType;
2814 
2815     /// The identifier preceding the '::'.
2816     IdentifierInfo *Identifier;
2817 
2818     /// The location of the identifier.
2819     SourceLocation IdentifierLoc;
2820 
2821     /// The location of the '::'.
2822     SourceLocation CCLoc;
2823 
2824     /// Creates info object for the most typical case.
2825     NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
2826                        SourceLocation ColonColonLoc,
2827                        ParsedType ObjectType = ParsedType())
ObjectTypeNestedNameSpecInfo2828         : ObjectType(ObjectType), Identifier(II), IdentifierLoc(IdLoc),
2829           CCLoc(ColonColonLoc) {}
2830 
NestedNameSpecInfoNestedNameSpecInfo2831     NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
2832                        SourceLocation ColonColonLoc, QualType ObjectType)
2833         : ObjectType(ParsedType::make(ObjectType)), Identifier(II),
2834           IdentifierLoc(IdLoc), CCLoc(ColonColonLoc) {}
2835   };
2836 
2837   /// Build a new nested-name-specifier for "identifier::", as described
2838   /// by ActOnCXXNestedNameSpecifier.
2839   ///
2840   /// \param S Scope in which the nested-name-specifier occurs.
2841   /// \param IdInfo Parser information about an identifier in the
2842   ///        nested-name-spec.
2843   /// \param EnteringContext If true, enter the context specified by the
2844   ///        nested-name-specifier.
2845   /// \param SS Optional nested name specifier preceding the identifier.
2846   /// \param ScopeLookupResult Provides the result of name lookup within the
2847   ///        scope of the nested-name-specifier that was computed at template
2848   ///        definition time.
2849   /// \param ErrorRecoveryLookup Specifies if the method is called to improve
2850   ///        error recovery and what kind of recovery is performed.
2851   /// \param IsCorrectedToColon If not null, suggestion of replace '::' -> ':'
2852   ///        are allowed.  The bool value pointed by this parameter is set to
2853   ///       'true' if the identifier is treated as if it was followed by ':',
2854   ///        not '::'.
2855   /// \param OnlyNamespace If true, only considers namespaces in lookup.
2856   ///
2857   /// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in
2858   /// that it contains an extra parameter \p ScopeLookupResult, which provides
2859   /// the result of name lookup within the scope of the nested-name-specifier
2860   /// that was computed at template definition time.
2861   ///
2862   /// If ErrorRecoveryLookup is true, then this call is used to improve error
2863   /// recovery.  This means that it should not emit diagnostics, it should
2864   /// just return true on failure.  It also means it should only return a valid
2865   /// scope if it *knows* that the result is correct.  It should not return in a
2866   /// dependent context, for example. Nor will it extend \p SS with the scope
2867   /// specifier.
2868   bool BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo,
2869                                    bool EnteringContext, CXXScopeSpec &SS,
2870                                    NamedDecl *ScopeLookupResult,
2871                                    bool ErrorRecoveryLookup,
2872                                    bool *IsCorrectedToColon = nullptr,
2873                                    bool OnlyNamespace = false);
2874 
2875   /// The parser has parsed a nested-name-specifier 'identifier::'.
2876   ///
2877   /// \param S The scope in which this nested-name-specifier occurs.
2878   ///
2879   /// \param IdInfo Parser information about an identifier in the
2880   /// nested-name-spec.
2881   ///
2882   /// \param EnteringContext Whether we're entering the context nominated by
2883   /// this nested-name-specifier.
2884   ///
2885   /// \param SS The nested-name-specifier, which is both an input
2886   /// parameter (the nested-name-specifier before this type) and an
2887   /// output parameter (containing the full nested-name-specifier,
2888   /// including this new type).
2889   ///
2890   /// \param IsCorrectedToColon If not null, suggestions to replace '::' -> ':'
2891   /// are allowed.  The bool value pointed by this parameter is set to 'true'
2892   /// if the identifier is treated as if it was followed by ':', not '::'.
2893   ///
2894   /// \param OnlyNamespace If true, only considers namespaces in lookup.
2895   ///
2896   /// \returns true if an error occurred, false otherwise.
2897   bool ActOnCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo,
2898                                    bool EnteringContext, CXXScopeSpec &SS,
2899                                    bool *IsCorrectedToColon = nullptr,
2900                                    bool OnlyNamespace = false);
2901 
2902   /// The parser has parsed a nested-name-specifier
2903   /// 'template[opt] template-name < template-args >::'.
2904   ///
2905   /// \param S The scope in which this nested-name-specifier occurs.
2906   ///
2907   /// \param SS The nested-name-specifier, which is both an input
2908   /// parameter (the nested-name-specifier before this type) and an
2909   /// output parameter (containing the full nested-name-specifier,
2910   /// including this new type).
2911   ///
2912   /// \param TemplateKWLoc the location of the 'template' keyword, if any.
2913   /// \param TemplateName the template name.
2914   /// \param TemplateNameLoc The location of the template name.
2915   /// \param LAngleLoc The location of the opening angle bracket  ('<').
2916   /// \param TemplateArgs The template arguments.
2917   /// \param RAngleLoc The location of the closing angle bracket  ('>').
2918   /// \param CCLoc The location of the '::'.
2919   ///
2920   /// \param EnteringContext Whether we're entering the context of the
2921   /// nested-name-specifier.
2922   ///
2923   ///
2924   /// \returns true if an error occurred, false otherwise.
2925   bool ActOnCXXNestedNameSpecifier(
2926       Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
2927       TemplateTy TemplateName, SourceLocation TemplateNameLoc,
2928       SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs,
2929       SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext);
2930 
2931   bool ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS, const DeclSpec &DS,
2932                                            SourceLocation ColonColonLoc);
2933 
2934   bool ActOnCXXNestedNameSpecifierIndexedPack(CXXScopeSpec &SS,
2935                                               const DeclSpec &DS,
2936                                               SourceLocation ColonColonLoc,
2937                                               QualType Type);
2938 
2939   /// IsInvalidUnlessNestedName - This method is used for error recovery
2940   /// purposes to determine whether the specified identifier is only valid as
2941   /// a nested name specifier, for example a namespace name.  It is
2942   /// conservatively correct to always return false from this method.
2943   ///
2944   /// The arguments are the same as those passed to ActOnCXXNestedNameSpecifier.
2945   bool IsInvalidUnlessNestedName(Scope *S, CXXScopeSpec &SS,
2946                                  NestedNameSpecInfo &IdInfo,
2947                                  bool EnteringContext);
2948 
2949   /// Given a C++ nested-name-specifier, produce an annotation value
2950   /// that the parser can use later to reconstruct the given
2951   /// nested-name-specifier.
2952   ///
2953   /// \param SS A nested-name-specifier.
2954   ///
2955   /// \returns A pointer containing all of the information in the
2956   /// nested-name-specifier \p SS.
2957   void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS);
2958 
2959   /// Given an annotation pointer for a nested-name-specifier, restore
2960   /// the nested-name-specifier structure.
2961   ///
2962   /// \param Annotation The annotation pointer, produced by
2963   /// \c SaveNestedNameSpecifierAnnotation().
2964   ///
2965   /// \param AnnotationRange The source range corresponding to the annotation.
2966   ///
2967   /// \param SS The nested-name-specifier that will be updated with the contents
2968   /// of the annotation pointer.
2969   void RestoreNestedNameSpecifierAnnotation(void *Annotation,
2970                                             SourceRange AnnotationRange,
2971                                             CXXScopeSpec &SS);
2972 
2973   bool ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
2974 
2975   /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global
2976   /// scope or nested-name-specifier) is parsed, part of a declarator-id.
2977   /// After this method is called, according to [C++ 3.4.3p3], names should be
2978   /// looked up in the declarator-id's scope, until the declarator is parsed and
2979   /// ActOnCXXExitDeclaratorScope is called.
2980   /// The 'SS' should be a non-empty valid CXXScopeSpec.
2981   bool ActOnCXXEnterDeclaratorScope(Scope *S, CXXScopeSpec &SS);
2982 
2983   /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously
2984   /// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same
2985   /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.
2986   /// Used to indicate that names should revert to being looked up in the
2987   /// defining scope.
2988   void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
2989 
2990   ///@}
2991 
2992   //
2993   //
2994   // -------------------------------------------------------------------------
2995   //
2996   //
2997 
2998   /// \name Declarations
2999   /// Implementations are in SemaDecl.cpp
3000   ///@{
3001 
3002 public:
3003   IdentifierResolver IdResolver;
3004 
3005   /// The index of the first InventedParameterInfo that refers to the current
3006   /// context.
3007   unsigned InventedParameterInfosStart = 0;
3008 
3009   /// A RAII object to temporarily push a declaration context.
3010   class ContextRAII {
3011   private:
3012     Sema &S;
3013     DeclContext *SavedContext;
3014     ProcessingContextState SavedContextState;
3015     QualType SavedCXXThisTypeOverride;
3016     unsigned SavedFunctionScopesStart;
3017     unsigned SavedInventedParameterInfosStart;
3018 
3019   public:
3020     ContextRAII(Sema &S, DeclContext *ContextToPush, bool NewThisContext = true)
S(S)3021         : S(S), SavedContext(S.CurContext),
3022           SavedContextState(S.DelayedDiagnostics.pushUndelayed()),
3023           SavedCXXThisTypeOverride(S.CXXThisTypeOverride),
3024           SavedFunctionScopesStart(S.FunctionScopesStart),
3025           SavedInventedParameterInfosStart(S.InventedParameterInfosStart) {
3026       assert(ContextToPush && "pushing null context");
3027       S.CurContext = ContextToPush;
3028       if (NewThisContext)
3029         S.CXXThisTypeOverride = QualType();
3030       // Any saved FunctionScopes do not refer to this context.
3031       S.FunctionScopesStart = S.FunctionScopes.size();
3032       S.InventedParameterInfosStart = S.InventedParameterInfos.size();
3033     }
3034 
pop()3035     void pop() {
3036       if (!SavedContext)
3037         return;
3038       S.CurContext = SavedContext;
3039       S.DelayedDiagnostics.popUndelayed(SavedContextState);
3040       S.CXXThisTypeOverride = SavedCXXThisTypeOverride;
3041       S.FunctionScopesStart = SavedFunctionScopesStart;
3042       S.InventedParameterInfosStart = SavedInventedParameterInfosStart;
3043       SavedContext = nullptr;
3044     }
3045 
~ContextRAII()3046     ~ContextRAII() { pop(); }
3047   };
3048 
3049   void DiagnoseInvalidJumps(Stmt *Body);
3050 
3051   /// The function definitions which were renamed as part of typo-correction
3052   /// to match their respective declarations. We want to keep track of them
3053   /// to ensure that we don't emit a "redefinition" error if we encounter a
3054   /// correctly named definition after the renamed definition.
3055   llvm::SmallPtrSet<const NamedDecl *, 4> TypoCorrectedFunctionDefinitions;
3056 
3057   /// A cache of the flags available in enumerations with the flag_bits
3058   /// attribute.
3059   mutable llvm::DenseMap<const EnumDecl *, llvm::APInt> FlagBitsCache;
3060 
3061   /// WeakUndeclaredIdentifiers - Identifiers contained in \#pragma weak before
3062   /// declared. Rare. May alias another identifier, declared or undeclared.
3063   ///
3064   /// For aliases, the target identifier is used as a key for eventual
3065   /// processing when the target is declared. For the single-identifier form,
3066   /// the sole identifier is used as the key. Each entry is a `SetVector`
3067   /// (ordered by parse order) of aliases (identified by the alias name) in case
3068   /// of multiple aliases to the same undeclared identifier.
3069   llvm::MapVector<
3070       IdentifierInfo *,
3071       llvm::SetVector<
3072           WeakInfo, llvm::SmallVector<WeakInfo, 1u>,
3073           llvm::SmallDenseSet<WeakInfo, 2u, WeakInfo::DenseMapInfoByAliasOnly>>>
3074       WeakUndeclaredIdentifiers;
3075 
3076   /// ExtnameUndeclaredIdentifiers - Identifiers contained in
3077   /// \#pragma redefine_extname before declared.  Used in Solaris system headers
3078   /// to define functions that occur in multiple standards to call the version
3079   /// in the currently selected standard.
3080   llvm::DenseMap<IdentifierInfo *, AsmLabelAttr *> ExtnameUndeclaredIdentifiers;
3081 
3082   /// Set containing all typedefs that are likely unused.
3083   llvm::SmallSetVector<const TypedefNameDecl *, 4>
3084       UnusedLocalTypedefNameCandidates;
3085 
3086   typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource,
3087                      &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2>
3088       UnusedFileScopedDeclsType;
3089 
3090   /// The set of file scoped decls seen so far that have not been used
3091   /// and must warn if not used. Only contains the first declaration.
3092   UnusedFileScopedDeclsType UnusedFileScopedDecls;
3093 
3094   typedef LazyVector<VarDecl *, ExternalSemaSource,
3095                      &ExternalSemaSource::ReadTentativeDefinitions, 2, 2>
3096       TentativeDefinitionsType;
3097 
3098   /// All the tentative definitions encountered in the TU.
3099   TentativeDefinitionsType TentativeDefinitions;
3100 
3101   /// All the external declarations encoutered and used in the TU.
3102   SmallVector<DeclaratorDecl *, 4> ExternalDeclarations;
3103 
3104   /// Generally null except when we temporarily switch decl contexts,
3105   /// like in \see SemaObjC::ActOnObjCTemporaryExitContainerContext.
3106   DeclContext *OriginalLexicalContext;
3107 
3108   /// Is the module scope we are in a C++ Header Unit?
currentModuleIsHeaderUnit()3109   bool currentModuleIsHeaderUnit() const {
3110     return ModuleScopes.empty() ? false
3111                                 : ModuleScopes.back().Module->isHeaderUnit();
3112   }
3113 
3114   /// Get the module owning an entity.
getOwningModule(const Decl * Entity)3115   Module *getOwningModule(const Decl *Entity) {
3116     return Entity->getOwningModule();
3117   }
3118 
3119   DeclGroupPtrTy ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType = nullptr);
3120 
3121   /// If the identifier refers to a type name within this scope,
3122   /// return the declaration of that type.
3123   ///
3124   /// This routine performs ordinary name lookup of the identifier II
3125   /// within the given scope, with optional C++ scope specifier SS, to
3126   /// determine whether the name refers to a type. If so, returns an
3127   /// opaque pointer (actually a QualType) corresponding to that
3128   /// type. Otherwise, returns NULL.
3129   ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
3130                          Scope *S, CXXScopeSpec *SS = nullptr,
3131                          bool isClassName = false, bool HasTrailingDot = false,
3132                          ParsedType ObjectType = nullptr,
3133                          bool IsCtorOrDtorName = false,
3134                          bool WantNontrivialTypeSourceInfo = false,
3135                          bool IsClassTemplateDeductionContext = true,
3136                          ImplicitTypenameContext AllowImplicitTypename =
3137                              ImplicitTypenameContext::No,
3138                          IdentifierInfo **CorrectedII = nullptr);
3139 
3140   /// isTagName() - This method is called *for error recovery purposes only*
3141   /// to determine if the specified name is a valid tag name ("struct foo").  If
3142   /// so, this returns the TST for the tag corresponding to it (TST_enum,
3143   /// TST_union, TST_struct, TST_interface, TST_class).  This is used to
3144   /// diagnose cases in C where the user forgot to specify the tag.
3145   TypeSpecifierType isTagName(IdentifierInfo &II, Scope *S);
3146 
3147   /// isMicrosoftMissingTypename - In Microsoft mode, within class scope,
3148   /// if a CXXScopeSpec's type is equal to the type of one of the base classes
3149   /// then downgrade the missing typename error to a warning.
3150   /// This is needed for MSVC compatibility; Example:
3151   /// @code
3152   /// template<class T> class A {
3153   /// public:
3154   ///   typedef int TYPE;
3155   /// };
3156   /// template<class T> class B : public A<T> {
3157   /// public:
3158   ///   A<T>::TYPE a; // no typename required because A<T> is a base class.
3159   /// };
3160   /// @endcode
3161   bool isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S);
3162   void DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc,
3163                                Scope *S, CXXScopeSpec *SS,
3164                                ParsedType &SuggestedType,
3165                                bool IsTemplateName = false);
3166 
3167   /// Attempt to behave like MSVC in situations where lookup of an unqualified
3168   /// type name has failed in a dependent context. In these situations, we
3169   /// automatically form a DependentTypeName that will retry lookup in a related
3170   /// scope during instantiation.
3171   ParsedType ActOnMSVCUnknownTypeName(const IdentifierInfo &II,
3172                                       SourceLocation NameLoc,
3173                                       bool IsTemplateTypeArg);
3174 
3175   /// Describes the result of the name lookup and resolution performed
3176   /// by \c ClassifyName().
3177   enum NameClassificationKind {
3178     /// This name is not a type or template in this context, but might be
3179     /// something else.
3180     NC_Unknown,
3181     /// Classification failed; an error has been produced.
3182     NC_Error,
3183     /// The name has been typo-corrected to a keyword.
3184     NC_Keyword,
3185     /// The name was classified as a type.
3186     NC_Type,
3187     /// The name was classified as a specific non-type, non-template
3188     /// declaration. ActOnNameClassifiedAsNonType should be called to
3189     /// convert the declaration to an expression.
3190     NC_NonType,
3191     /// The name was classified as an ADL-only function name.
3192     /// ActOnNameClassifiedAsUndeclaredNonType should be called to convert the
3193     /// result to an expression.
3194     NC_UndeclaredNonType,
3195     /// The name denotes a member of a dependent type that could not be
3196     /// resolved. ActOnNameClassifiedAsDependentNonType should be called to
3197     /// convert the result to an expression.
3198     NC_DependentNonType,
3199     /// The name was classified as an overload set, and an expression
3200     /// representing that overload set has been formed.
3201     /// ActOnNameClassifiedAsOverloadSet should be called to form a suitable
3202     /// expression referencing the overload set.
3203     NC_OverloadSet,
3204     /// The name was classified as a template whose specializations are types.
3205     NC_TypeTemplate,
3206     /// The name was classified as a variable template name.
3207     NC_VarTemplate,
3208     /// The name was classified as a function template name.
3209     NC_FunctionTemplate,
3210     /// The name was classified as an ADL-only function template name.
3211     NC_UndeclaredTemplate,
3212     /// The name was classified as a concept name.
3213     NC_Concept,
3214   };
3215 
3216   class NameClassification {
3217     NameClassificationKind Kind;
3218     union {
3219       ExprResult Expr;
3220       NamedDecl *NonTypeDecl;
3221       TemplateName Template;
3222       ParsedType Type;
3223     };
3224 
NameClassification(NameClassificationKind Kind)3225     explicit NameClassification(NameClassificationKind Kind) : Kind(Kind) {}
3226 
3227   public:
NameClassification(ParsedType Type)3228     NameClassification(ParsedType Type) : Kind(NC_Type), Type(Type) {}
3229 
NameClassification(const IdentifierInfo * Keyword)3230     NameClassification(const IdentifierInfo *Keyword) : Kind(NC_Keyword) {}
3231 
Error()3232     static NameClassification Error() { return NameClassification(NC_Error); }
3233 
Unknown()3234     static NameClassification Unknown() {
3235       return NameClassification(NC_Unknown);
3236     }
3237 
OverloadSet(ExprResult E)3238     static NameClassification OverloadSet(ExprResult E) {
3239       NameClassification Result(NC_OverloadSet);
3240       Result.Expr = E;
3241       return Result;
3242     }
3243 
NonType(NamedDecl * D)3244     static NameClassification NonType(NamedDecl *D) {
3245       NameClassification Result(NC_NonType);
3246       Result.NonTypeDecl = D;
3247       return Result;
3248     }
3249 
UndeclaredNonType()3250     static NameClassification UndeclaredNonType() {
3251       return NameClassification(NC_UndeclaredNonType);
3252     }
3253 
DependentNonType()3254     static NameClassification DependentNonType() {
3255       return NameClassification(NC_DependentNonType);
3256     }
3257 
TypeTemplate(TemplateName Name)3258     static NameClassification TypeTemplate(TemplateName Name) {
3259       NameClassification Result(NC_TypeTemplate);
3260       Result.Template = Name;
3261       return Result;
3262     }
3263 
VarTemplate(TemplateName Name)3264     static NameClassification VarTemplate(TemplateName Name) {
3265       NameClassification Result(NC_VarTemplate);
3266       Result.Template = Name;
3267       return Result;
3268     }
3269 
FunctionTemplate(TemplateName Name)3270     static NameClassification FunctionTemplate(TemplateName Name) {
3271       NameClassification Result(NC_FunctionTemplate);
3272       Result.Template = Name;
3273       return Result;
3274     }
3275 
Concept(TemplateName Name)3276     static NameClassification Concept(TemplateName Name) {
3277       NameClassification Result(NC_Concept);
3278       Result.Template = Name;
3279       return Result;
3280     }
3281 
UndeclaredTemplate(TemplateName Name)3282     static NameClassification UndeclaredTemplate(TemplateName Name) {
3283       NameClassification Result(NC_UndeclaredTemplate);
3284       Result.Template = Name;
3285       return Result;
3286     }
3287 
getKind()3288     NameClassificationKind getKind() const { return Kind; }
3289 
getExpression()3290     ExprResult getExpression() const {
3291       assert(Kind == NC_OverloadSet);
3292       return Expr;
3293     }
3294 
getType()3295     ParsedType getType() const {
3296       assert(Kind == NC_Type);
3297       return Type;
3298     }
3299 
getNonTypeDecl()3300     NamedDecl *getNonTypeDecl() const {
3301       assert(Kind == NC_NonType);
3302       return NonTypeDecl;
3303     }
3304 
getTemplateName()3305     TemplateName getTemplateName() const {
3306       assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate ||
3307              Kind == NC_VarTemplate || Kind == NC_Concept ||
3308              Kind == NC_UndeclaredTemplate);
3309       return Template;
3310     }
3311 
getTemplateNameKind()3312     TemplateNameKind getTemplateNameKind() const {
3313       switch (Kind) {
3314       case NC_TypeTemplate:
3315         return TNK_Type_template;
3316       case NC_FunctionTemplate:
3317         return TNK_Function_template;
3318       case NC_VarTemplate:
3319         return TNK_Var_template;
3320       case NC_Concept:
3321         return TNK_Concept_template;
3322       case NC_UndeclaredTemplate:
3323         return TNK_Undeclared_template;
3324       default:
3325         llvm_unreachable("unsupported name classification.");
3326       }
3327     }
3328   };
3329 
3330   /// Perform name lookup on the given name, classifying it based on
3331   /// the results of name lookup and the following token.
3332   ///
3333   /// This routine is used by the parser to resolve identifiers and help direct
3334   /// parsing. When the identifier cannot be found, this routine will attempt
3335   /// to correct the typo and classify based on the resulting name.
3336   ///
3337   /// \param S The scope in which we're performing name lookup.
3338   ///
3339   /// \param SS The nested-name-specifier that precedes the name.
3340   ///
3341   /// \param Name The identifier. If typo correction finds an alternative name,
3342   /// this pointer parameter will be updated accordingly.
3343   ///
3344   /// \param NameLoc The location of the identifier.
3345   ///
3346   /// \param NextToken The token following the identifier. Used to help
3347   /// disambiguate the name.
3348   ///
3349   /// \param CCC The correction callback, if typo correction is desired.
3350   NameClassification ClassifyName(Scope *S, CXXScopeSpec &SS,
3351                                   IdentifierInfo *&Name, SourceLocation NameLoc,
3352                                   const Token &NextToken,
3353                                   CorrectionCandidateCallback *CCC = nullptr);
3354 
3355   /// Act on the result of classifying a name as an undeclared (ADL-only)
3356   /// non-type declaration.
3357   ExprResult ActOnNameClassifiedAsUndeclaredNonType(IdentifierInfo *Name,
3358                                                     SourceLocation NameLoc);
3359   /// Act on the result of classifying a name as an undeclared member of a
3360   /// dependent base class.
3361   ExprResult ActOnNameClassifiedAsDependentNonType(const CXXScopeSpec &SS,
3362                                                    IdentifierInfo *Name,
3363                                                    SourceLocation NameLoc,
3364                                                    bool IsAddressOfOperand);
3365   /// Act on the result of classifying a name as a specific non-type
3366   /// declaration.
3367   ExprResult ActOnNameClassifiedAsNonType(Scope *S, const CXXScopeSpec &SS,
3368                                           NamedDecl *Found,
3369                                           SourceLocation NameLoc,
3370                                           const Token &NextToken);
3371   /// Act on the result of classifying a name as an overload set.
3372   ExprResult ActOnNameClassifiedAsOverloadSet(Scope *S, Expr *OverloadSet);
3373 
3374   /// Describes the detailed kind of a template name. Used in diagnostics.
3375   enum class TemplateNameKindForDiagnostics {
3376     ClassTemplate,
3377     FunctionTemplate,
3378     VarTemplate,
3379     AliasTemplate,
3380     TemplateTemplateParam,
3381     Concept,
3382     DependentTemplate
3383   };
3384   TemplateNameKindForDiagnostics
3385   getTemplateNameKindForDiagnostics(TemplateName Name);
3386 
3387   /// Determine whether it's plausible that E was intended to be a
3388   /// template-name.
mightBeIntendedToBeTemplateName(ExprResult E,bool & Dependent)3389   bool mightBeIntendedToBeTemplateName(ExprResult E, bool &Dependent) {
3390     if (!getLangOpts().CPlusPlus || E.isInvalid())
3391       return false;
3392     Dependent = false;
3393     if (auto *DRE = dyn_cast<DeclRefExpr>(E.get()))
3394       return !DRE->hasExplicitTemplateArgs();
3395     if (auto *ME = dyn_cast<MemberExpr>(E.get()))
3396       return !ME->hasExplicitTemplateArgs();
3397     Dependent = true;
3398     if (auto *DSDRE = dyn_cast<DependentScopeDeclRefExpr>(E.get()))
3399       return !DSDRE->hasExplicitTemplateArgs();
3400     if (auto *DSME = dyn_cast<CXXDependentScopeMemberExpr>(E.get()))
3401       return !DSME->hasExplicitTemplateArgs();
3402     // Any additional cases recognized here should also be handled by
3403     // diagnoseExprIntendedAsTemplateName.
3404     return false;
3405   }
3406 
3407   void warnOnReservedIdentifier(const NamedDecl *D);
3408 
3409   Decl *ActOnDeclarator(Scope *S, Declarator &D);
3410 
3411   NamedDecl *HandleDeclarator(Scope *S, Declarator &D,
3412                               MultiTemplateParamsArg TemplateParameterLists);
3413 
3414   /// Attempt to fold a variable-sized type to a constant-sized type, returning
3415   /// true if we were successful.
3416   bool tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T,
3417                                        SourceLocation Loc,
3418                                        unsigned FailedFoldDiagID);
3419 
3420   /// Register the given locally-scoped extern "C" declaration so
3421   /// that it can be found later for redeclarations. We include any extern "C"
3422   /// declaration that is not visible in the translation unit here, not just
3423   /// function-scope declarations.
3424   void RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S);
3425 
3426   /// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:
3427   ///   If T is the name of a class, then each of the following shall have a
3428   ///   name different from T:
3429   ///     - every static data member of class T;
3430   ///     - every member function of class T
3431   ///     - every member of class T that is itself a type;
3432   /// \returns true if the declaration name violates these rules.
3433   bool DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo Info);
3434 
3435   /// Diagnose a declaration whose declarator-id has the given
3436   /// nested-name-specifier.
3437   ///
3438   /// \param SS The nested-name-specifier of the declarator-id.
3439   ///
3440   /// \param DC The declaration context to which the nested-name-specifier
3441   /// resolves.
3442   ///
3443   /// \param Name The name of the entity being declared.
3444   ///
3445   /// \param Loc The location of the name of the entity being declared.
3446   ///
3447   /// \param IsMemberSpecialization Whether we are declaring a member
3448   /// specialization.
3449   ///
3450   /// \param TemplateId The template-id, if any.
3451   ///
3452   /// \returns true if we cannot safely recover from this error, false
3453   /// otherwise.
3454   bool diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
3455                                     DeclarationName Name, SourceLocation Loc,
3456                                     TemplateIdAnnotation *TemplateId,
3457                                     bool IsMemberSpecialization);
3458 
3459   bool checkPointerAuthEnabled(SourceLocation Loc, SourceRange Range);
3460 
3461   bool checkConstantPointerAuthKey(Expr *keyExpr, unsigned &key);
3462 
3463   /// Diagnose function specifiers on a declaration of an identifier that
3464   /// does not identify a function.
3465   void DiagnoseFunctionSpecifiers(const DeclSpec &DS);
3466 
3467   /// Return the declaration shadowed by the given typedef \p D, or null
3468   /// if it doesn't shadow any declaration or shadowing warnings are disabled.
3469   NamedDecl *getShadowedDeclaration(const TypedefNameDecl *D,
3470                                     const LookupResult &R);
3471 
3472   /// Return the declaration shadowed by the given variable \p D, or null
3473   /// if it doesn't shadow any declaration or shadowing warnings are disabled.
3474   NamedDecl *getShadowedDeclaration(const VarDecl *D, const LookupResult &R);
3475 
3476   /// Return the declaration shadowed by the given variable \p D, or null
3477   /// if it doesn't shadow any declaration or shadowing warnings are disabled.
3478   NamedDecl *getShadowedDeclaration(const BindingDecl *D,
3479                                     const LookupResult &R);
3480   /// Diagnose variable or built-in function shadowing.  Implements
3481   /// -Wshadow.
3482   ///
3483   /// This method is called whenever a VarDecl is added to a "useful"
3484   /// scope.
3485   ///
3486   /// \param ShadowedDecl the declaration that is shadowed by the given variable
3487   /// \param R the lookup of the name
3488   void CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl,
3489                    const LookupResult &R);
3490 
3491   /// Check -Wshadow without the advantage of a previous lookup.
3492   void CheckShadow(Scope *S, VarDecl *D);
3493 
3494   /// Warn if 'E', which is an expression that is about to be modified, refers
3495   /// to a shadowing declaration.
3496   void CheckShadowingDeclModification(Expr *E, SourceLocation Loc);
3497 
3498   /// Diagnose shadowing for variables shadowed in the lambda record \p LambdaRD
3499   /// when these variables are captured by the lambda.
3500   void DiagnoseShadowingLambdaDecls(const sema::LambdaScopeInfo *LSI);
3501 
3502   void handleTagNumbering(const TagDecl *Tag, Scope *TagScope);
3503   void setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec,
3504                                     TypedefNameDecl *NewTD);
3505   void CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *D);
3506   NamedDecl *ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC,
3507                                     TypeSourceInfo *TInfo,
3508                                     LookupResult &Previous);
3509 
3510   /// ActOnTypedefNameDecl - Perform semantic checking for a declaration which
3511   /// declares a typedef-name, either using the 'typedef' type specifier or via
3512   /// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'.
3513   NamedDecl *ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *D,
3514                                   LookupResult &Previous, bool &Redeclaration);
3515   NamedDecl *ActOnVariableDeclarator(
3516       Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo,
3517       LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists,
3518       bool &AddToScope, ArrayRef<BindingDecl *> Bindings = std::nullopt);
3519 
3520   /// Perform semantic checking on a newly-created variable
3521   /// declaration.
3522   ///
3523   /// This routine performs all of the type-checking required for a
3524   /// variable declaration once it has been built. It is used both to
3525   /// check variables after they have been parsed and their declarators
3526   /// have been translated into a declaration, and to check variables
3527   /// that have been instantiated from a template.
3528   ///
3529   /// Sets NewVD->isInvalidDecl() if an error was encountered.
3530   ///
3531   /// Returns true if the variable declaration is a redeclaration.
3532   bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous);
3533   void CheckVariableDeclarationType(VarDecl *NewVD);
3534   void CheckCompleteVariableDeclaration(VarDecl *VD);
3535 
3536   NamedDecl *ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
3537                                      TypeSourceInfo *TInfo,
3538                                      LookupResult &Previous,
3539                                      MultiTemplateParamsArg TemplateParamLists,
3540                                      bool &AddToScope);
3541 
3542   /// AddOverriddenMethods - See if a method overrides any in the base classes,
3543   /// and if so, check that it's a valid override and remember it.
3544   bool AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD);
3545 
3546   /// Perform semantic checking of a new function declaration.
3547   ///
3548   /// Performs semantic analysis of the new function declaration
3549   /// NewFD. This routine performs all semantic checking that does not
3550   /// require the actual declarator involved in the declaration, and is
3551   /// used both for the declaration of functions as they are parsed
3552   /// (called via ActOnDeclarator) and for the declaration of functions
3553   /// that have been instantiated via C++ template instantiation (called
3554   /// via InstantiateDecl).
3555   ///
3556   /// \param IsMemberSpecialization whether this new function declaration is
3557   /// a member specialization (that replaces any definition provided by the
3558   /// previous declaration).
3559   ///
3560   /// This sets NewFD->isInvalidDecl() to true if there was an error.
3561   ///
3562   /// \returns true if the function declaration is a redeclaration.
3563   bool CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
3564                                 LookupResult &Previous,
3565                                 bool IsMemberSpecialization, bool DeclIsDefn);
3566 
3567   /// Checks if the new declaration declared in dependent context must be
3568   /// put in the same redeclaration chain as the specified declaration.
3569   ///
3570   /// \param D Declaration that is checked.
3571   /// \param PrevDecl Previous declaration found with proper lookup method for
3572   ///                 the same declaration name.
3573   /// \returns True if D must be added to the redeclaration chain which PrevDecl
3574   ///          belongs to.
3575   bool shouldLinkDependentDeclWithPrevious(Decl *D, Decl *OldDecl);
3576 
3577   /// Determines if we can perform a correct type check for \p D as a
3578   /// redeclaration of \p PrevDecl. If not, we can generally still perform a
3579   /// best-effort check.
3580   ///
3581   /// \param NewD The new declaration.
3582   /// \param OldD The old declaration.
3583   /// \param NewT The portion of the type of the new declaration to check.
3584   /// \param OldT The portion of the type of the old declaration to check.
3585   bool canFullyTypeCheckRedeclaration(ValueDecl *NewD, ValueDecl *OldD,
3586                                       QualType NewT, QualType OldT);
3587   void CheckMain(FunctionDecl *FD, const DeclSpec &D);
3588   void CheckMSVCRTEntryPoint(FunctionDecl *FD);
3589 
3590   /// Returns an implicit CodeSegAttr if a __declspec(code_seg) is found on a
3591   /// containing class. Otherwise it will return implicit SectionAttr if the
3592   /// function is a definition and there is an active value on CodeSegStack
3593   /// (from the current #pragma code-seg value).
3594   ///
3595   /// \param FD Function being declared.
3596   /// \param IsDefinition Whether it is a definition or just a declaration.
3597   /// \returns A CodeSegAttr or SectionAttr to apply to the function or
3598   ///          nullptr if no attribute should be added.
3599   Attr *getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD,
3600                                                    bool IsDefinition);
3601 
3602   /// Common checks for a parameter-declaration that should apply to both
3603   /// function parameters and non-type template parameters.
3604   void CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D);
3605 
3606   /// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()
3607   /// to introduce parameters into function prototype scope.
3608   Decl *ActOnParamDeclarator(Scope *S, Declarator &D,
3609                              SourceLocation ExplicitThisLoc = {});
3610 
3611   /// Synthesizes a variable for a parameter arising from a
3612   /// typedef.
3613   ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC, SourceLocation Loc,
3614                                           QualType T);
3615   ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc,
3616                               SourceLocation NameLoc,
3617                               const IdentifierInfo *Name, QualType T,
3618                               TypeSourceInfo *TSInfo, StorageClass SC);
3619 
3620   // Contexts where using non-trivial C union types can be disallowed. This is
3621   // passed to err_non_trivial_c_union_in_invalid_context.
3622   enum NonTrivialCUnionContext {
3623     // Function parameter.
3624     NTCUC_FunctionParam,
3625     // Function return.
3626     NTCUC_FunctionReturn,
3627     // Default-initialized object.
3628     NTCUC_DefaultInitializedObject,
3629     // Variable with automatic storage duration.
3630     NTCUC_AutoVar,
3631     // Initializer expression that might copy from another object.
3632     NTCUC_CopyInit,
3633     // Assignment.
3634     NTCUC_Assignment,
3635     // Compound literal.
3636     NTCUC_CompoundLiteral,
3637     // Block capture.
3638     NTCUC_BlockCapture,
3639     // lvalue-to-rvalue conversion of volatile type.
3640     NTCUC_LValueToRValueVolatile,
3641   };
3642 
3643   /// Emit diagnostics if the initializer or any of its explicit or
3644   /// implicitly-generated subexpressions require copying or
3645   /// default-initializing a type that is or contains a C union type that is
3646   /// non-trivial to copy or default-initialize.
3647   void checkNonTrivialCUnionInInitializer(const Expr *Init, SourceLocation Loc);
3648 
3649   // These flags are passed to checkNonTrivialCUnion.
3650   enum NonTrivialCUnionKind {
3651     NTCUK_Init = 0x1,
3652     NTCUK_Destruct = 0x2,
3653     NTCUK_Copy = 0x4,
3654   };
3655 
3656   /// Emit diagnostics if a non-trivial C union type or a struct that contains
3657   /// a non-trivial C union is used in an invalid context.
3658   void checkNonTrivialCUnion(QualType QT, SourceLocation Loc,
3659                              NonTrivialCUnionContext UseContext,
3660                              unsigned NonTrivialKind);
3661 
3662   /// AddInitializerToDecl - Adds the initializer Init to the
3663   /// declaration dcl. If DirectInit is true, this is C++ direct
3664   /// initialization rather than copy initialization.
3665   void AddInitializerToDecl(Decl *dcl, Expr *init, bool DirectInit);
3666   void ActOnUninitializedDecl(Decl *dcl);
3667 
3668   /// ActOnInitializerError - Given that there was an error parsing an
3669   /// initializer for the given declaration, try to at least re-establish
3670   /// invariants such as whether a variable's type is either dependent or
3671   /// complete.
3672   void ActOnInitializerError(Decl *Dcl);
3673 
3674   void ActOnCXXForRangeDecl(Decl *D);
3675   StmtResult ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc,
3676                                         IdentifierInfo *Ident,
3677                                         ParsedAttributes &Attrs);
3678 
3679   /// Check if VD needs to be dllexport/dllimport due to being in a
3680   /// dllexport/import function.
3681   void CheckStaticLocalForDllExport(VarDecl *VD);
3682   void CheckThreadLocalForLargeAlignment(VarDecl *VD);
3683 
3684   /// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform
3685   /// any semantic actions necessary after any initializer has been attached.
3686   void FinalizeDeclaration(Decl *D);
3687   DeclGroupPtrTy FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
3688                                          ArrayRef<Decl *> Group);
3689 
3690   /// BuildDeclaratorGroup - convert a list of declarations into a declaration
3691   /// group, performing any necessary semantic checking.
3692   DeclGroupPtrTy BuildDeclaratorGroup(MutableArrayRef<Decl *> Group);
3693 
3694   /// Should be called on all declarations that might have attached
3695   /// documentation comments.
3696   void ActOnDocumentableDecl(Decl *D);
3697   void ActOnDocumentableDecls(ArrayRef<Decl *> Group);
3698 
3699   enum class FnBodyKind {
3700     /// C++26 [dcl.fct.def.general]p1
3701     /// function-body:
3702     ///   ctor-initializer[opt] compound-statement
3703     ///   function-try-block
3704     Other,
3705     ///   = default ;
3706     Default,
3707     ///   deleted-function-body
3708     ///
3709     /// deleted-function-body:
3710     ///   = delete ;
3711     ///   = delete ( unevaluated-string ) ;
3712     Delete
3713   };
3714 
3715   void ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
3716                                        SourceLocation LocAfterDecls);
3717   void CheckForFunctionRedefinition(
3718       FunctionDecl *FD, const FunctionDecl *EffectiveDefinition = nullptr,
3719       SkipBodyInfo *SkipBody = nullptr);
3720   Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D,
3721                                 MultiTemplateParamsArg TemplateParamLists,
3722                                 SkipBodyInfo *SkipBody = nullptr,
3723                                 FnBodyKind BodyKind = FnBodyKind::Other);
3724   Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D,
3725                                 SkipBodyInfo *SkipBody = nullptr,
3726                                 FnBodyKind BodyKind = FnBodyKind::Other);
3727   void applyFunctionAttributesBeforeParsingBody(Decl *FD);
3728 
3729   /// Determine whether we can delay parsing the body of a function or
3730   /// function template until it is used, assuming we don't care about emitting
3731   /// code for that function.
3732   ///
3733   /// This will be \c false if we may need the body of the function in the
3734   /// middle of parsing an expression (where it's impractical to switch to
3735   /// parsing a different function), for instance, if it's constexpr in C++11
3736   /// or has an 'auto' return type in C++14. These cases are essentially bugs.
3737   bool canDelayFunctionBody(const Declarator &D);
3738 
3739   /// Determine whether we can skip parsing the body of a function
3740   /// definition, assuming we don't care about analyzing its body or emitting
3741   /// code for that function.
3742   ///
3743   /// This will be \c false only if we may need the body of the function in
3744   /// order to parse the rest of the program (for instance, if it is
3745   /// \c constexpr in C++11 or has an 'auto' return type in C++14).
3746   bool canSkipFunctionBody(Decl *D);
3747 
3748   /// Given the set of return statements within a function body,
3749   /// compute the variables that are subject to the named return value
3750   /// optimization.
3751   ///
3752   /// Each of the variables that is subject to the named return value
3753   /// optimization will be marked as NRVO variables in the AST, and any
3754   /// return statement that has a marked NRVO variable as its NRVO candidate can
3755   /// use the named return value optimization.
3756   ///
3757   /// This function applies a very simplistic algorithm for NRVO: if every
3758   /// return statement in the scope of a variable has the same NRVO candidate,
3759   /// that candidate is an NRVO variable.
3760   void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope);
3761   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body);
3762   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation);
3763   Decl *ActOnSkippedFunctionBody(Decl *Decl);
3764   void ActOnFinishInlineFunctionDef(FunctionDecl *D);
3765 
3766   /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an
3767   /// attribute for which parsing is delayed.
3768   void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs);
3769 
3770   /// Diagnose any unused parameters in the given sequence of
3771   /// ParmVarDecl pointers.
3772   void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters);
3773 
3774   /// Diagnose whether the size of parameters or return value of a
3775   /// function or obj-c method definition is pass-by-value and larger than a
3776   /// specified threshold.
3777   void
3778   DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters,
3779                                          QualType ReturnTy, NamedDecl *D);
3780 
3781   Decl *ActOnFileScopeAsmDecl(Expr *expr, SourceLocation AsmLoc,
3782                               SourceLocation RParenLoc);
3783 
3784   TopLevelStmtDecl *ActOnStartTopLevelStmtDecl(Scope *S);
3785   void ActOnFinishTopLevelStmtDecl(TopLevelStmtDecl *D, Stmt *Statement);
3786 
3787   void ActOnPopScope(SourceLocation Loc, Scope *S);
3788 
3789   /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
3790   /// no declarator (e.g. "struct foo;") is parsed.
3791   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
3792                                    const ParsedAttributesView &DeclAttrs,
3793                                    RecordDecl *&AnonRecord);
3794 
3795   /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
3796   /// no declarator (e.g. "struct foo;") is parsed. It also accepts template
3797   /// parameters to cope with template friend declarations.
3798   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
3799                                    const ParsedAttributesView &DeclAttrs,
3800                                    MultiTemplateParamsArg TemplateParams,
3801                                    bool IsExplicitInstantiation,
3802                                    RecordDecl *&AnonRecord);
3803 
3804   /// BuildAnonymousStructOrUnion - Handle the declaration of an
3805   /// anonymous structure or union. Anonymous unions are a C++ feature
3806   /// (C++ [class.union]) and a C11 feature; anonymous structures
3807   /// are a C11 feature and GNU C++ extension.
3808   Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS,
3809                                     RecordDecl *Record,
3810                                     const PrintingPolicy &Policy);
3811 
3812   /// Called once it is known whether
3813   /// a tag declaration is an anonymous union or struct.
3814   void ActOnDefinedDeclarationSpecifier(Decl *D);
3815 
3816   /// Emit diagnostic warnings for placeholder members.
3817   /// We can only do that after the class is fully constructed,
3818   /// as anonymous union/structs can insert placeholders
3819   /// in their parent scope (which might be a Record).
3820   void DiagPlaceholderFieldDeclDefinitions(RecordDecl *Record);
3821 
3822   /// BuildMicrosoftCAnonymousStruct - Handle the declaration of an
3823   /// Microsoft C anonymous structure.
3824   /// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx
3825   /// Example:
3826   ///
3827   /// struct A { int a; };
3828   /// struct B { struct A; int b; };
3829   ///
3830   /// void foo() {
3831   ///   B var;
3832   ///   var.a = 3;
3833   /// }
3834   Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
3835                                        RecordDecl *Record);
3836 
3837   /// Common ways to introduce type names without a tag for use in diagnostics.
3838   /// Keep in sync with err_tag_reference_non_tag.
3839   enum NonTagKind {
3840     NTK_NonStruct,
3841     NTK_NonClass,
3842     NTK_NonUnion,
3843     NTK_NonEnum,
3844     NTK_Typedef,
3845     NTK_TypeAlias,
3846     NTK_Template,
3847     NTK_TypeAliasTemplate,
3848     NTK_TemplateTemplateArgument,
3849   };
3850 
3851   /// Given a non-tag type declaration, returns an enum useful for indicating
3852   /// what kind of non-tag type this is.
3853   NonTagKind getNonTagTypeDeclKind(const Decl *D, TagTypeKind TTK);
3854 
3855   /// Determine whether a tag with a given kind is acceptable
3856   /// as a redeclaration of the given tag declaration.
3857   ///
3858   /// \returns true if the new tag kind is acceptable, false otherwise.
3859   bool isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag,
3860                                     bool isDefinition, SourceLocation NewTagLoc,
3861                                     const IdentifierInfo *Name);
3862 
3863   enum OffsetOfKind {
3864     // Not parsing a type within __builtin_offsetof.
3865     OOK_Outside,
3866     // Parsing a type within __builtin_offsetof.
3867     OOK_Builtin,
3868     // Parsing a type within macro "offsetof", defined in __buitin_offsetof
3869     // To improve our diagnostic message.
3870     OOK_Macro,
3871   };
3872 
3873   /// This is invoked when we see 'struct foo' or 'struct {'.  In the
3874   /// former case, Name will be non-null.  In the later case, Name will be null.
3875   /// TagSpec indicates what kind of tag this is. TUK indicates whether this is
3876   /// a reference/declaration/definition of a tag.
3877   ///
3878   /// \param IsTypeSpecifier \c true if this is a type-specifier (or
3879   /// trailing-type-specifier) other than one in an alias-declaration.
3880   ///
3881   /// \param SkipBody If non-null, will be set to indicate if the caller should
3882   /// skip the definition of this tag and treat it as if it were a declaration.
3883   DeclResult ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
3884                       SourceLocation KWLoc, CXXScopeSpec &SS,
3885                       IdentifierInfo *Name, SourceLocation NameLoc,
3886                       const ParsedAttributesView &Attr, AccessSpecifier AS,
3887                       SourceLocation ModulePrivateLoc,
3888                       MultiTemplateParamsArg TemplateParameterLists,
3889                       bool &OwnedDecl, bool &IsDependent,
3890                       SourceLocation ScopedEnumKWLoc,
3891                       bool ScopedEnumUsesClassTag, TypeResult UnderlyingType,
3892                       bool IsTypeSpecifier, bool IsTemplateParamOrArg,
3893                       OffsetOfKind OOK, SkipBodyInfo *SkipBody = nullptr);
3894 
3895   /// ActOnField - Each field of a C struct/union is passed into this in order
3896   /// to create a FieldDecl object for it.
3897   Decl *ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
3898                    Declarator &D, Expr *BitfieldWidth);
3899 
3900   /// HandleField - Analyze a field of a C struct or a C++ data member.
3901   FieldDecl *HandleField(Scope *S, RecordDecl *TagD, SourceLocation DeclStart,
3902                          Declarator &D, Expr *BitfieldWidth,
3903                          InClassInitStyle InitStyle, AccessSpecifier AS);
3904 
3905   /// Build a new FieldDecl and check its well-formedness.
3906   ///
3907   /// This routine builds a new FieldDecl given the fields name, type,
3908   /// record, etc. \p PrevDecl should refer to any previous declaration
3909   /// with the same name and in the same scope as the field to be
3910   /// created.
3911   ///
3912   /// \returns a new FieldDecl.
3913   ///
3914   /// \todo The Declarator argument is a hack. It will be removed once
3915   FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T,
3916                             TypeSourceInfo *TInfo, RecordDecl *Record,
3917                             SourceLocation Loc, bool Mutable,
3918                             Expr *BitfieldWidth, InClassInitStyle InitStyle,
3919                             SourceLocation TSSL, AccessSpecifier AS,
3920                             NamedDecl *PrevDecl, Declarator *D = nullptr);
3921 
3922   bool CheckNontrivialField(FieldDecl *FD);
3923 
3924   /// ActOnLastBitfield - This routine handles synthesized bitfields rules for
3925   /// class and class extensions. For every class \@interface and class
3926   /// extension \@interface, if the last ivar is a bitfield of any type,
3927   /// then add an implicit `char :0` ivar to the end of that interface.
3928   void ActOnLastBitfield(SourceLocation DeclStart,
3929                          SmallVectorImpl<Decl *> &AllIvarDecls);
3930 
3931   // This is used for both record definitions and ObjC interface declarations.
3932   void ActOnFields(Scope *S, SourceLocation RecLoc, Decl *TagDecl,
3933                    ArrayRef<Decl *> Fields, SourceLocation LBrac,
3934                    SourceLocation RBrac, const ParsedAttributesView &AttrList);
3935 
3936   /// ActOnTagStartDefinition - Invoked when we have entered the
3937   /// scope of a tag's definition (e.g., for an enumeration, class,
3938   /// struct, or union).
3939   void ActOnTagStartDefinition(Scope *S, Decl *TagDecl);
3940 
3941   /// Perform ODR-like check for C/ObjC when merging tag types from modules.
3942   /// Differently from C++, actually parse the body and reject / error out
3943   /// in case of a structural mismatch.
3944   bool ActOnDuplicateDefinition(Decl *Prev, SkipBodyInfo &SkipBody);
3945 
3946   typedef void *SkippedDefinitionContext;
3947 
3948   /// Invoked when we enter a tag definition that we're skipping.
3949   SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD);
3950 
3951   /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a
3952   /// C++ record definition's base-specifiers clause and are starting its
3953   /// member declarations.
3954   void ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagDecl,
3955                                        SourceLocation FinalLoc,
3956                                        bool IsFinalSpelledSealed,
3957                                        bool IsAbstract,
3958                                        SourceLocation LBraceLoc);
3959 
3960   /// ActOnTagFinishDefinition - Invoked once we have finished parsing
3961   /// the definition of a tag (enumeration, class, struct, or union).
3962   void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl,
3963                                 SourceRange BraceRange);
3964 
3965   void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context);
3966 
3967   /// ActOnTagDefinitionError - Invoked when there was an unrecoverable
3968   /// error parsing the definition of a tag.
3969   void ActOnTagDefinitionError(Scope *S, Decl *TagDecl);
3970 
3971   EnumConstantDecl *CheckEnumConstant(EnumDecl *Enum,
3972                                       EnumConstantDecl *LastEnumConst,
3973                                       SourceLocation IdLoc, IdentifierInfo *Id,
3974                                       Expr *val);
3975 
3976   /// Check that this is a valid underlying type for an enum declaration.
3977   bool CheckEnumUnderlyingType(TypeSourceInfo *TI);
3978 
3979   /// Check whether this is a valid redeclaration of a previous enumeration.
3980   /// \return true if the redeclaration was invalid.
3981   bool CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
3982                               QualType EnumUnderlyingTy, bool IsFixed,
3983                               const EnumDecl *Prev);
3984 
3985   /// Determine whether the body of an anonymous enumeration should be skipped.
3986   /// \param II The name of the first enumerator.
3987   SkipBodyInfo shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II,
3988                                       SourceLocation IILoc);
3989 
3990   Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant,
3991                           SourceLocation IdLoc, IdentifierInfo *Id,
3992                           const ParsedAttributesView &Attrs,
3993                           SourceLocation EqualLoc, Expr *Val);
3994   void ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange,
3995                      Decl *EnumDecl, ArrayRef<Decl *> Elements, Scope *S,
3996                      const ParsedAttributesView &Attr);
3997 
3998   /// Set the current declaration context until it gets popped.
3999   void PushDeclContext(Scope *S, DeclContext *DC);
4000   void PopDeclContext();
4001 
4002   /// EnterDeclaratorContext - Used when we must lookup names in the context
4003   /// of a declarator's nested name specifier.
4004   void EnterDeclaratorContext(Scope *S, DeclContext *DC);
4005   void ExitDeclaratorContext(Scope *S);
4006 
4007   /// Enter a template parameter scope, after it's been associated with a
4008   /// particular DeclContext. Causes lookup within the scope to chain through
4009   /// enclosing contexts in the correct order.
4010   void EnterTemplatedContext(Scope *S, DeclContext *DC);
4011 
4012   /// Push the parameters of D, which must be a function, into scope.
4013   void ActOnReenterFunctionContext(Scope *S, Decl *D);
4014   void ActOnExitFunctionContext();
4015 
4016   /// Add this decl to the scope shadowed decl chains.
4017   void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true);
4018 
4019   /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true
4020   /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns
4021   /// true if 'D' belongs to the given declaration context.
4022   ///
4023   /// \param AllowInlineNamespace If \c true, allow the declaration to be in the
4024   ///        enclosing namespace set of the context, rather than contained
4025   ///        directly within it.
4026   bool isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S = nullptr,
4027                      bool AllowInlineNamespace = false) const;
4028 
4029   /// Finds the scope corresponding to the given decl context, if it
4030   /// happens to be an enclosing scope.  Otherwise return NULL.
4031   static Scope *getScopeForDeclContext(Scope *S, DeclContext *DC);
4032 
4033   /// Subroutines of ActOnDeclarator().
4034   TypedefDecl *ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
4035                                 TypeSourceInfo *TInfo);
4036   bool isIncompatibleTypedef(const TypeDecl *Old, TypedefNameDecl *New);
4037 
4038   /// Describes the kind of merge to perform for availability
4039   /// attributes (including "deprecated", "unavailable", and "availability").
4040   enum AvailabilityMergeKind {
4041     /// Don't merge availability attributes at all.
4042     AMK_None,
4043     /// Merge availability attributes for a redeclaration, which requires
4044     /// an exact match.
4045     AMK_Redeclaration,
4046     /// Merge availability attributes for an override, which requires
4047     /// an exact match or a weakening of constraints.
4048     AMK_Override,
4049     /// Merge availability attributes for an implementation of
4050     /// a protocol requirement.
4051     AMK_ProtocolImplementation,
4052     /// Merge availability attributes for an implementation of
4053     /// an optional protocol requirement.
4054     AMK_OptionalProtocolImplementation
4055   };
4056 
4057   /// mergeDeclAttributes - Copy attributes from the Old decl to the New one.
4058   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
4059                            AvailabilityMergeKind AMK = AMK_Redeclaration);
4060 
4061   /// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the
4062   /// same name and scope as a previous declaration 'Old'.  Figure out
4063   /// how to resolve this situation, merging decls or emitting
4064   /// diagnostics as appropriate. If there was an error, set New to be invalid.
4065   void MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New,
4066                             LookupResult &OldDecls);
4067 
4068   /// MergeFunctionDecl - We just parsed a function 'New' from
4069   /// declarator D which has the same name and scope as a previous
4070   /// declaration 'Old'.  Figure out how to resolve this situation,
4071   /// merging decls or emitting diagnostics as appropriate.
4072   ///
4073   /// In C++, New and Old must be declarations that are not
4074   /// overloaded. Use IsOverload to determine whether New and Old are
4075   /// overloaded, and to select the Old declaration that New should be
4076   /// merged with.
4077   ///
4078   /// Returns true if there was an error, false otherwise.
4079   bool MergeFunctionDecl(FunctionDecl *New, NamedDecl *&Old, Scope *S,
4080                          bool MergeTypeWithOld, bool NewDeclIsDefn);
4081 
4082   /// Completes the merge of two function declarations that are
4083   /// known to be compatible.
4084   ///
4085   /// This routine handles the merging of attributes and other
4086   /// properties of function declarations from the old declaration to
4087   /// the new declaration, once we know that New is in fact a
4088   /// redeclaration of Old.
4089   ///
4090   /// \returns false
4091   bool MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
4092                                     Scope *S, bool MergeTypeWithOld);
4093   void mergeObjCMethodDecls(ObjCMethodDecl *New, ObjCMethodDecl *Old);
4094 
4095   /// MergeVarDecl - We just parsed a variable 'New' which has the same name
4096   /// and scope as a previous declaration 'Old'.  Figure out how to resolve this
4097   /// situation, merging decls or emitting diagnostics as appropriate.
4098   ///
4099   /// Tentative definition rules (C99 6.9.2p2) are checked by
4100   /// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative
4101   /// definitions here, since the initializer hasn't been attached.
4102   void MergeVarDecl(VarDecl *New, LookupResult &Previous);
4103 
4104   /// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and
4105   /// scope as a previous declaration 'Old'.  Figure out how to merge their
4106   /// types, emitting diagnostics as appropriate.
4107   ///
4108   /// Declarations using the auto type specifier (C++ [decl.spec.auto]) call
4109   /// back to here in AddInitializerToDecl. We can't check them before the
4110   /// initializer is attached.
4111   void MergeVarDeclTypes(VarDecl *New, VarDecl *Old, bool MergeTypeWithOld);
4112 
4113   /// We've just determined that \p Old and \p New both appear to be definitions
4114   /// of the same variable. Either diagnose or fix the problem.
4115   bool checkVarDeclRedefinition(VarDecl *OldDefn, VarDecl *NewDefn);
4116   void notePreviousDefinition(const NamedDecl *Old, SourceLocation New);
4117 
4118   /// Filters out lookup results that don't fall within the given scope
4119   /// as determined by isDeclInScope.
4120   void FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S,
4121                             bool ConsiderLinkage, bool AllowInlineNamespace);
4122 
4123   /// We've determined that \p New is a redeclaration of \p Old. Check that they
4124   /// have compatible owning modules.
4125   bool CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old);
4126 
4127   /// [module.interface]p6:
4128   /// A redeclaration of an entity X is implicitly exported if X was introduced
4129   /// by an exported declaration; otherwise it shall not be exported.
4130   bool CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old);
4131 
4132   /// A wrapper function for checking the semantic restrictions of
4133   /// a redeclaration within a module.
4134   bool CheckRedeclarationInModule(NamedDecl *New, NamedDecl *Old);
4135 
4136   /// Check the redefinition in C++20 Modules.
4137   ///
4138   /// [basic.def.odr]p14:
4139   /// For any definable item D with definitions in multiple translation units,
4140   /// - if D is a non-inline non-templated function or variable, or
4141   /// - if the definitions in different translation units do not satisfy the
4142   /// following requirements,
4143   ///   the program is ill-formed; a diagnostic is required only if the
4144   ///   definable item is attached to a named module and a prior definition is
4145   ///   reachable at the point where a later definition occurs.
4146   /// - Each such definition shall not be attached to a named module
4147   /// ([module.unit]).
4148   /// - Each such definition shall consist of the same sequence of tokens, ...
4149   /// ...
4150   ///
4151   /// Return true if the redefinition is not allowed. Return false otherwise.
4152   bool IsRedefinitionInModule(const NamedDecl *New, const NamedDecl *Old) const;
4153 
4154   bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const;
4155 
4156   /// If it's a file scoped decl that must warn if not used, keep track
4157   /// of it.
4158   void MarkUnusedFileScopedDecl(const DeclaratorDecl *D);
4159 
4160   typedef llvm::function_ref<void(SourceLocation Loc, PartialDiagnostic PD)>
4161       DiagReceiverTy;
4162 
4163   void DiagnoseUnusedNestedTypedefs(const RecordDecl *D);
4164   void DiagnoseUnusedNestedTypedefs(const RecordDecl *D,
4165                                     DiagReceiverTy DiagReceiver);
4166   void DiagnoseUnusedDecl(const NamedDecl *ND);
4167 
4168   /// DiagnoseUnusedDecl - Emit warnings about declarations that are not used
4169   /// unless they are marked attr(unused).
4170   void DiagnoseUnusedDecl(const NamedDecl *ND, DiagReceiverTy DiagReceiver);
4171 
4172   /// If VD is set but not otherwise used, diagnose, for a parameter or a
4173   /// variable.
4174   void DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver);
4175 
4176   /// getNonFieldDeclScope - Retrieves the innermost scope, starting
4177   /// from S, where a non-field would be declared. This routine copes
4178   /// with the difference between C and C++ scoping rules in structs and
4179   /// unions. For example, the following code is well-formed in C but
4180   /// ill-formed in C++:
4181   /// @code
4182   /// struct S6 {
4183   ///   enum { BAR } e;
4184   /// };
4185   ///
4186   /// void test_S6() {
4187   ///   struct S6 a;
4188   ///   a.e = BAR;
4189   /// }
4190   /// @endcode
4191   /// For the declaration of BAR, this routine will return a different
4192   /// scope. The scope S will be the scope of the unnamed enumeration
4193   /// within S6. In C++, this routine will return the scope associated
4194   /// with S6, because the enumeration's scope is a transparent
4195   /// context but structures can contain non-field names. In C, this
4196   /// routine will return the translation unit scope, since the
4197   /// enumeration's scope is a transparent context and structures cannot
4198   /// contain non-field names.
4199   Scope *getNonFieldDeclScope(Scope *S);
4200 
4201   FunctionDecl *CreateBuiltin(IdentifierInfo *II, QualType Type, unsigned ID,
4202                               SourceLocation Loc);
4203 
4204   /// LazilyCreateBuiltin - The specified Builtin-ID was first used at
4205   /// file scope.  lazily create a decl for it. ForRedeclaration is true
4206   /// if we're creating this built-in in anticipation of redeclaring the
4207   /// built-in.
4208   NamedDecl *LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S,
4209                                  bool ForRedeclaration, SourceLocation Loc);
4210 
4211   /// Get the outermost AttributedType node that sets a calling convention.
4212   /// Valid types should not have multiple attributes with different CCs.
4213   const AttributedType *getCallingConvAttributedType(QualType T) const;
4214 
4215   /// GetNameForDeclarator - Determine the full declaration name for the
4216   /// given Declarator.
4217   DeclarationNameInfo GetNameForDeclarator(Declarator &D);
4218 
4219   /// Retrieves the declaration name from a parsed unqualified-id.
4220   DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name);
4221 
4222   /// ParsingInitForAutoVars - a set of declarations with auto types for which
4223   /// we are currently parsing the initializer.
4224   llvm::SmallPtrSet<const Decl *, 4> ParsingInitForAutoVars;
4225 
4226   /// Look for a locally scoped extern "C" declaration by the given name.
4227   NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
4228 
4229   void deduceOpenCLAddressSpace(ValueDecl *decl);
4230 
4231   /// Adjust the \c DeclContext for a function or variable that might be a
4232   /// function-local external declaration.
4233   static bool adjustContextForLocalExternDecl(DeclContext *&DC);
4234 
4235   void MarkTypoCorrectedFunctionDefinition(const NamedDecl *F);
4236 
4237   /// Checks if the variant/multiversion functions are compatible.
4238   bool areMultiversionVariantFunctionsCompatible(
4239       const FunctionDecl *OldFD, const FunctionDecl *NewFD,
4240       const PartialDiagnostic &NoProtoDiagID,
4241       const PartialDiagnosticAt &NoteCausedDiagIDAt,
4242       const PartialDiagnosticAt &NoSupportDiagIDAt,
4243       const PartialDiagnosticAt &DiffDiagIDAt, bool TemplatesSupported,
4244       bool ConstexprSupported, bool CLinkageMayDiffer);
4245 
4246   /// type checking declaration initializers (C99 6.7.8)
4247   bool CheckForConstantInitializer(
4248       Expr *Init, unsigned DiagID = diag::err_init_element_not_constant);
4249 
4250   QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name,
4251                                         QualType Type, TypeSourceInfo *TSI,
4252                                         SourceRange Range, bool DirectInit,
4253                                         Expr *Init);
4254 
4255   bool DeduceVariableDeclarationType(VarDecl *VDecl, bool DirectInit,
4256                                      Expr *Init);
4257 
4258   sema::LambdaScopeInfo *RebuildLambdaScopeInfo(CXXMethodDecl *CallOperator);
4259 
4260   // Heuristically tells if the function is `get_return_object` member of a
4261   // coroutine promise_type by matching the function name.
4262   static bool CanBeGetReturnObject(const FunctionDecl *FD);
4263   static bool CanBeGetReturnTypeOnAllocFailure(const FunctionDecl *FD);
4264 
4265   /// ImplicitlyDefineFunction - An undeclared identifier was used in a function
4266   /// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
4267   NamedDecl *ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II,
4268                                       Scope *S);
4269 
4270   /// If this function is a C++ replaceable global allocation function
4271   /// (C++2a [basic.stc.dynamic.allocation], C++2a [new.delete]),
4272   /// adds any function attributes that we know a priori based on the standard.
4273   ///
4274   /// We need to check for duplicate attributes both here and where user-written
4275   /// attributes are applied to declarations.
4276   void AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction(
4277       FunctionDecl *FD);
4278 
4279   /// Adds any function attributes that we know a priori based on
4280   /// the declaration of this function.
4281   ///
4282   /// These attributes can apply both to implicitly-declared builtins
4283   /// (like __builtin___printf_chk) or to library-declared functions
4284   /// like NSLog or printf.
4285   ///
4286   /// We need to check for duplicate attributes both here and where user-written
4287   /// attributes are applied to declarations.
4288   void AddKnownFunctionAttributes(FunctionDecl *FD);
4289 
4290   /// VerifyBitField - verifies that a bit field expression is an ICE and has
4291   /// the correct width, and that the field type is valid.
4292   /// Returns false on success.
4293   ExprResult VerifyBitField(SourceLocation FieldLoc,
4294                             const IdentifierInfo *FieldName, QualType FieldTy,
4295                             bool IsMsStruct, Expr *BitWidth);
4296 
4297   /// IsValueInFlagEnum - Determine if a value is allowed as part of a flag
4298   /// enum. If AllowMask is true, then we also allow the complement of a valid
4299   /// value, to be used as a mask.
4300   bool IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
4301                          bool AllowMask) const;
4302 
4303   /// ActOnPragmaWeakID - Called on well formed \#pragma weak ident.
4304   void ActOnPragmaWeakID(IdentifierInfo *WeakName, SourceLocation PragmaLoc,
4305                          SourceLocation WeakNameLoc);
4306 
4307   /// ActOnPragmaRedefineExtname - Called on well formed
4308   /// \#pragma redefine_extname oldname newname.
4309   void ActOnPragmaRedefineExtname(IdentifierInfo *WeakName,
4310                                   IdentifierInfo *AliasName,
4311                                   SourceLocation PragmaLoc,
4312                                   SourceLocation WeakNameLoc,
4313                                   SourceLocation AliasNameLoc);
4314 
4315   /// ActOnPragmaWeakAlias - Called on well formed \#pragma weak ident = ident.
4316   void ActOnPragmaWeakAlias(IdentifierInfo *WeakName, IdentifierInfo *AliasName,
4317                             SourceLocation PragmaLoc,
4318                             SourceLocation WeakNameLoc,
4319                             SourceLocation AliasNameLoc);
4320 
4321   /// Status of the function emission on the CUDA/HIP/OpenMP host/device attrs.
4322   enum class FunctionEmissionStatus {
4323     Emitted,
4324     CUDADiscarded,     // Discarded due to CUDA/HIP hostness
4325     OMPDiscarded,      // Discarded due to OpenMP hostness
4326     TemplateDiscarded, // Discarded due to uninstantiated templates
4327     Unknown,
4328   };
4329   FunctionEmissionStatus getEmissionStatus(const FunctionDecl *Decl,
4330                                            bool Final = false);
4331 
4332   // Whether the callee should be ignored in CUDA/HIP/OpenMP host/device check.
4333   bool shouldIgnoreInHostDeviceCheck(FunctionDecl *Callee);
4334 
4335 private:
4336   /// Function or variable declarations to be checked for whether the deferred
4337   /// diagnostics should be emitted.
4338   llvm::SmallSetVector<Decl *, 4> DeclsToCheckForDeferredDiags;
4339 
4340   /// Map of current shadowing declarations to shadowed declarations. Warn if
4341   /// it looks like the user is trying to modify the shadowing declaration.
4342   llvm::DenseMap<const NamedDecl *, const NamedDecl *> ShadowingDecls;
4343 
4344   // We need this to handle
4345   //
4346   // typedef struct {
4347   //   void *foo() { return 0; }
4348   // } A;
4349   //
4350   // When we see foo we don't know if after the typedef we will get 'A' or '*A'
4351   // for example. If 'A', foo will have external linkage. If we have '*A',
4352   // foo will have no linkage. Since we can't know until we get to the end
4353   // of the typedef, this function finds out if D might have non-external
4354   // linkage. Callers should verify at the end of the TU if it D has external
4355   // linkage or not.
4356   static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD);
4357 
4358   ///@}
4359 
4360   //
4361   //
4362   // -------------------------------------------------------------------------
4363   //
4364   //
4365 
4366   /// \name Declaration Attribute Handling
4367   /// Implementations are in SemaDeclAttr.cpp
4368   ///@{
4369 
4370 public:
4371   /// Describes the kind of priority given to an availability attribute.
4372   ///
4373   /// The sum of priorities deteremines the final priority of the attribute.
4374   /// The final priority determines how the attribute will be merged.
4375   /// An attribute with a lower priority will always remove higher priority
4376   /// attributes for the specified platform when it is being applied. An
4377   /// attribute with a higher priority will not be applied if the declaration
4378   /// already has an availability attribute with a lower priority for the
4379   /// specified platform. The final prirority values are not expected to match
4380   /// the values in this enumeration, but instead should be treated as a plain
4381   /// integer value. This enumeration just names the priority weights that are
4382   /// used to calculate that final vaue.
4383   enum AvailabilityPriority : int {
4384     /// The availability attribute was specified explicitly next to the
4385     /// declaration.
4386     AP_Explicit = 0,
4387 
4388     /// The availability attribute was applied using '#pragma clang attribute'.
4389     AP_PragmaClangAttribute = 1,
4390 
4391     /// The availability attribute for a specific platform was inferred from
4392     /// an availability attribute for another platform.
4393     AP_InferredFromOtherPlatform = 2
4394   };
4395 
4396   /// Describes the reason a calling convention specification was ignored, used
4397   /// for diagnostics.
4398   enum class CallingConventionIgnoredReason {
4399     ForThisTarget = 0,
4400     VariadicFunction,
4401     ConstructorDestructor,
4402     BuiltinFunction
4403   };
4404 
4405   /// A helper function to provide Attribute Location for the Attr types
4406   /// AND the ParsedAttr.
4407   template <typename AttrInfo>
4408   static std::enable_if_t<std::is_base_of_v<Attr, AttrInfo>, SourceLocation>
getAttrLoc(const AttrInfo & AL)4409   getAttrLoc(const AttrInfo &AL) {
4410     return AL.getLocation();
4411   }
4412   SourceLocation getAttrLoc(const ParsedAttr &AL);
4413 
4414   /// If Expr is a valid integer constant, get the value of the integer
4415   /// expression and return success or failure. May output an error.
4416   ///
4417   /// Negative argument is implicitly converted to unsigned, unless
4418   /// \p StrictlyUnsigned is true.
4419   template <typename AttrInfo>
4420   bool checkUInt32Argument(const AttrInfo &AI, const Expr *Expr, uint32_t &Val,
4421                            unsigned Idx = UINT_MAX,
4422                            bool StrictlyUnsigned = false) {
4423     std::optional<llvm::APSInt> I = llvm::APSInt(32);
4424     if (Expr->isTypeDependent() ||
4425         !(I = Expr->getIntegerConstantExpr(Context))) {
4426       if (Idx != UINT_MAX)
4427         Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type)
4428             << &AI << Idx << AANT_ArgumentIntegerConstant
4429             << Expr->getSourceRange();
4430       else
4431         Diag(getAttrLoc(AI), diag::err_attribute_argument_type)
4432             << &AI << AANT_ArgumentIntegerConstant << Expr->getSourceRange();
4433       return false;
4434     }
4435 
4436     if (!I->isIntN(32)) {
4437       Diag(Expr->getExprLoc(), diag::err_ice_too_large)
4438           << toString(*I, 10, false) << 32 << /* Unsigned */ 1;
4439       return false;
4440     }
4441 
4442     if (StrictlyUnsigned && I->isSigned() && I->isNegative()) {
4443       Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer)
4444           << &AI << /*non-negative*/ 1;
4445       return false;
4446     }
4447 
4448     Val = (uint32_t)I->getZExtValue();
4449     return true;
4450   }
4451 
4452   /// WeakTopLevelDecl - Translation-unit scoped declarations generated by
4453   /// \#pragma weak during processing of other Decls.
4454   /// I couldn't figure out a clean way to generate these in-line, so
4455   /// we store them here and handle separately -- which is a hack.
4456   /// It would be best to refactor this.
4457   SmallVector<Decl *, 2> WeakTopLevelDecl;
4458 
4459   /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls
WeakTopLevelDecls()4460   SmallVectorImpl<Decl *> &WeakTopLevelDecls() { return WeakTopLevelDecl; }
4461 
4462   typedef LazyVector<TypedefNameDecl *, ExternalSemaSource,
4463                      &ExternalSemaSource::ReadExtVectorDecls, 2, 2>
4464       ExtVectorDeclsType;
4465 
4466   /// ExtVectorDecls - This is a list all the extended vector types. This allows
4467   /// us to associate a raw vector type with one of the ext_vector type names.
4468   /// This is only necessary for issuing pretty diagnostics.
4469   ExtVectorDeclsType ExtVectorDecls;
4470 
4471   /// Check if the argument \p E is a ASCII string literal. If not emit an error
4472   /// and return false, otherwise set \p Str to the value of the string literal
4473   /// and return true.
4474   bool checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI,
4475                                       const Expr *E, StringRef &Str,
4476                                       SourceLocation *ArgLocation = nullptr);
4477 
4478   /// Check if the argument \p ArgNum of \p Attr is a ASCII string literal.
4479   /// If not emit an error and return false. If the argument is an identifier it
4480   /// will emit an error with a fixit hint and treat it as if it was a string
4481   /// literal.
4482   bool checkStringLiteralArgumentAttr(const ParsedAttr &Attr, unsigned ArgNum,
4483                                       StringRef &Str,
4484                                       SourceLocation *ArgLocation = nullptr);
4485 
4486   /// Determine if type T is a valid subject for a nonnull and similar
4487   /// attributes. By default, we look through references (the behavior used by
4488   /// nonnull), but if the second parameter is true, then we treat a reference
4489   /// type as valid.
4490   bool isValidPointerAttrType(QualType T, bool RefOkay = false);
4491 
4492   /// AddAssumeAlignedAttr - Adds an assume_aligned attribute to a particular
4493   /// declaration.
4494   void AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
4495                             Expr *OE);
4496 
4497   /// AddAllocAlignAttr - Adds an alloc_align attribute to a particular
4498   /// declaration.
4499   void AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI,
4500                          Expr *ParamExpr);
4501 
4502   bool CheckAttrTarget(const ParsedAttr &CurrAttr);
4503   bool CheckAttrNoArgs(const ParsedAttr &CurrAttr);
4504 
4505   AvailabilityAttr *mergeAvailabilityAttr(
4506       NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform,
4507       bool Implicit, VersionTuple Introduced, VersionTuple Deprecated,
4508       VersionTuple Obsoleted, bool IsUnavailable, StringRef Message,
4509       bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK,
4510       int Priority, IdentifierInfo *IIEnvironment);
4511 
4512   TypeVisibilityAttr *
4513   mergeTypeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI,
4514                           TypeVisibilityAttr::VisibilityType Vis);
4515   VisibilityAttr *mergeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI,
4516                                       VisibilityAttr::VisibilityType Vis);
4517   SectionAttr *mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI,
4518                                 StringRef Name);
4519 
4520   /// Used to implement to perform semantic checking on
4521   /// attribute((section("foo"))) specifiers.
4522   ///
4523   /// In this case, "foo" is passed in to be checked.  If the section
4524   /// specifier is invalid, return an Error that indicates the problem.
4525   ///
4526   /// This is a simple quality of implementation feature to catch errors
4527   /// and give good diagnostics in cases when the assembler or code generator
4528   /// would otherwise reject the section specifier.
4529   llvm::Error isValidSectionSpecifier(StringRef Str);
4530   bool checkSectionName(SourceLocation LiteralLoc, StringRef Str);
4531   CodeSegAttr *mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI,
4532                                 StringRef Name);
4533 
4534   // Check for things we'd like to warn about. Multiversioning issues are
4535   // handled later in the process, once we know how many exist.
4536   bool checkTargetAttr(SourceLocation LiteralLoc, StringRef Str);
4537 
4538   /// Check Target Version attrs
4539   bool checkTargetVersionAttr(SourceLocation Loc, Decl *D, StringRef Str);
4540   bool checkTargetClonesAttrString(
4541       SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal,
4542       Decl *D, bool &HasDefault, bool &HasCommas, bool &HasNotDefault,
4543       SmallVectorImpl<SmallString<64>> &StringsBuffer);
4544 
4545   ErrorAttr *mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI,
4546                             StringRef NewUserDiagnostic);
4547   FormatAttr *mergeFormatAttr(Decl *D, const AttributeCommonInfo &CI,
4548                               IdentifierInfo *Format, int FormatIdx,
4549                               int FirstArg);
4550 
4551   /// AddAlignedAttr - Adds an aligned attribute to a particular declaration.
4552   void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
4553                       bool IsPackExpansion);
4554   void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *T,
4555                       bool IsPackExpansion);
4556 
4557   /// AddAlignValueAttr - Adds an align_value attribute to a particular
4558   /// declaration.
4559   void AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E);
4560 
4561   /// AddAnnotationAttr - Adds an annotation Annot with Args arguments to D.
4562   void AddAnnotationAttr(Decl *D, const AttributeCommonInfo &CI,
4563                          StringRef Annot, MutableArrayRef<Expr *> Args);
4564 
4565   bool checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range,
4566                                           bool BestCase,
4567                                           MSInheritanceModel SemanticSpelling);
4568 
4569   void CheckAlignasUnderalignment(Decl *D);
4570 
4571   /// AddModeAttr - Adds a mode attribute to a particular declaration.
4572   void AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name,
4573                    bool InInstantiation = false);
4574   AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D,
4575                                           const AttributeCommonInfo &CI,
4576                                           const IdentifierInfo *Ident);
4577   MinSizeAttr *mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI);
4578   OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D,
4579                                           const AttributeCommonInfo &CI);
4580   InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL);
4581   InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D,
4582                                                 const InternalLinkageAttr &AL);
4583 
4584   /// Check validaty of calling convention attribute \p attr. If \p FD
4585   /// is not null pointer, use \p FD to determine the CUDA/HIP host/device
4586   /// target. Otherwise, it is specified by \p CFT.
4587   bool CheckCallingConvAttr(
4588       const ParsedAttr &attr, CallingConv &CC, const FunctionDecl *FD = nullptr,
4589       CUDAFunctionTarget CFT = CUDAFunctionTarget::InvalidTarget);
4590 
4591   /// Checks a regparm attribute, returning true if it is ill-formed and
4592   /// otherwise setting numParams to the appropriate value.
4593   bool CheckRegparmAttr(const ParsedAttr &attr, unsigned &value);
4594 
4595   /// Create an CUDALaunchBoundsAttr attribute.
4596   CUDALaunchBoundsAttr *CreateLaunchBoundsAttr(const AttributeCommonInfo &CI,
4597                                                Expr *MaxThreads,
4598                                                Expr *MinBlocks,
4599                                                Expr *MaxBlocks);
4600 
4601   /// AddLaunchBoundsAttr - Adds a launch_bounds attribute to a particular
4602   /// declaration.
4603   void AddLaunchBoundsAttr(Decl *D, const AttributeCommonInfo &CI,
4604                            Expr *MaxThreads, Expr *MinBlocks, Expr *MaxBlocks);
4605 
4606   enum class RetainOwnershipKind { NS, CF, OS };
4607 
4608   UuidAttr *mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI,
4609                           StringRef UuidAsWritten, MSGuidDecl *GuidDecl);
4610 
4611   BTFDeclTagAttr *mergeBTFDeclTagAttr(Decl *D, const BTFDeclTagAttr &AL);
4612 
4613   DLLImportAttr *mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI);
4614   DLLExportAttr *mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI);
4615   MSInheritanceAttr *mergeMSInheritanceAttr(Decl *D,
4616                                             const AttributeCommonInfo &CI,
4617                                             bool BestCase,
4618                                             MSInheritanceModel Model);
4619 
4620   EnforceTCBAttr *mergeEnforceTCBAttr(Decl *D, const EnforceTCBAttr &AL);
4621   EnforceTCBLeafAttr *mergeEnforceTCBLeafAttr(Decl *D,
4622                                               const EnforceTCBLeafAttr &AL);
4623 
4624   /// Helper for delayed processing TransparentUnion or
4625   /// BPFPreserveAccessIndexAttr attribute.
4626   void ProcessDeclAttributeDelayed(Decl *D,
4627                                    const ParsedAttributesView &AttrList);
4628 
4629   // Options for ProcessDeclAttributeList().
4630   struct ProcessDeclAttributeOptions {
ProcessDeclAttributeOptionsProcessDeclAttributeOptions4631     ProcessDeclAttributeOptions()
4632         : IncludeCXX11Attributes(true), IgnoreTypeAttributes(false) {}
4633 
WithIncludeCXX11AttributesProcessDeclAttributeOptions4634     ProcessDeclAttributeOptions WithIncludeCXX11Attributes(bool Val) {
4635       ProcessDeclAttributeOptions Result = *this;
4636       Result.IncludeCXX11Attributes = Val;
4637       return Result;
4638     }
4639 
WithIgnoreTypeAttributesProcessDeclAttributeOptions4640     ProcessDeclAttributeOptions WithIgnoreTypeAttributes(bool Val) {
4641       ProcessDeclAttributeOptions Result = *this;
4642       Result.IgnoreTypeAttributes = Val;
4643       return Result;
4644     }
4645 
4646     // Should C++11 attributes be processed?
4647     bool IncludeCXX11Attributes;
4648 
4649     // Should any type attributes encountered be ignored?
4650     // If this option is false, a diagnostic will be emitted for any type
4651     // attributes of a kind that does not "slide" from the declaration to
4652     // the decl-specifier-seq.
4653     bool IgnoreTypeAttributes;
4654   };
4655 
4656   /// ProcessDeclAttributeList - Apply all the decl attributes in the specified
4657   /// attribute list to the specified decl, ignoring any type attributes.
4658   void ProcessDeclAttributeList(Scope *S, Decl *D,
4659                                 const ParsedAttributesView &AttrList,
4660                                 const ProcessDeclAttributeOptions &Options =
4661                                     ProcessDeclAttributeOptions());
4662 
4663   /// Annotation attributes are the only attributes allowed after an access
4664   /// specifier.
4665   bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl,
4666                                       const ParsedAttributesView &AttrList);
4667 
4668   /// checkUnusedDeclAttributes - Given a declarator which is not being
4669   /// used to build a declaration, complain about any decl attributes
4670   /// which might be lying around on it.
4671   void checkUnusedDeclAttributes(Declarator &D);
4672 
4673   /// DeclClonePragmaWeak - clone existing decl (maybe definition),
4674   /// \#pragma weak needs a non-definition decl and source may not have one.
4675   NamedDecl *DeclClonePragmaWeak(NamedDecl *ND, const IdentifierInfo *II,
4676                                  SourceLocation Loc);
4677 
4678   /// DeclApplyPragmaWeak - A declaration (maybe definition) needs \#pragma weak
4679   /// applied to it, possibly with an alias.
4680   void DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, const WeakInfo &W);
4681 
4682   void ProcessPragmaWeak(Scope *S, Decl *D);
4683   // Decl attributes - this routine is the top level dispatcher.
4684   void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD);
4685 
4686   void PopParsingDeclaration(ParsingDeclState state, Decl *decl);
4687 
4688   /// Given a set of delayed diagnostics, re-emit them as if they had
4689   /// been delayed in the current context instead of in the given pool.
4690   /// Essentially, this just moves them to the current pool.
4691   void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);
4692 
4693   /// Check if IdxExpr is a valid parameter index for a function or
4694   /// instance method D.  May output an error.
4695   ///
4696   /// \returns true if IdxExpr is a valid index.
4697   template <typename AttrInfo>
4698   bool checkFunctionOrMethodParameterIndex(const Decl *D, const AttrInfo &AI,
4699                                            unsigned AttrArgNum,
4700                                            const Expr *IdxExpr, ParamIdx &Idx,
4701                                            bool CanIndexImplicitThis = false) {
4702     assert(isFunctionOrMethodOrBlockForAttrSubject(D));
4703 
4704     // In C++ the implicit 'this' function parameter also counts.
4705     // Parameters are counted from one.
4706     bool HP = hasFunctionProto(D);
4707     bool HasImplicitThisParam = isInstanceMethod(D);
4708     bool IV = HP && isFunctionOrMethodVariadic(D);
4709     unsigned NumParams =
4710         (HP ? getFunctionOrMethodNumParams(D) : 0) + HasImplicitThisParam;
4711 
4712     std::optional<llvm::APSInt> IdxInt;
4713     if (IdxExpr->isTypeDependent() ||
4714         !(IdxInt = IdxExpr->getIntegerConstantExpr(Context))) {
4715       Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type)
4716           << &AI << AttrArgNum << AANT_ArgumentIntegerConstant
4717           << IdxExpr->getSourceRange();
4718       return false;
4719     }
4720 
4721     unsigned IdxSource = IdxInt->getLimitedValue(UINT_MAX);
4722     if (IdxSource < 1 || (!IV && IdxSource > NumParams)) {
4723       Diag(getAttrLoc(AI), diag::err_attribute_argument_out_of_bounds)
4724           << &AI << AttrArgNum << IdxExpr->getSourceRange();
4725       return false;
4726     }
4727     if (HasImplicitThisParam && !CanIndexImplicitThis) {
4728       if (IdxSource == 1) {
4729         Diag(getAttrLoc(AI), diag::err_attribute_invalid_implicit_this_argument)
4730             << &AI << IdxExpr->getSourceRange();
4731         return false;
4732       }
4733     }
4734 
4735     Idx = ParamIdx(IdxSource, D);
4736     return true;
4737   }
4738 
4739   ///@}
4740 
4741   //
4742   //
4743   // -------------------------------------------------------------------------
4744   //
4745   //
4746 
4747   /// \name C++ Declarations
4748   /// Implementations are in SemaDeclCXX.cpp
4749   ///@{
4750 
4751 public:
4752   void CheckDelegatingCtorCycles();
4753 
4754   /// Called before parsing a function declarator belonging to a function
4755   /// declaration.
4756   void ActOnStartFunctionDeclarationDeclarator(Declarator &D,
4757                                                unsigned TemplateParameterDepth);
4758 
4759   /// Called after parsing a function declarator belonging to a function
4760   /// declaration.
4761   void ActOnFinishFunctionDeclarationDeclarator(Declarator &D);
4762 
4763   // Act on C++ namespaces
4764   Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc,
4765                                SourceLocation NamespaceLoc,
4766                                SourceLocation IdentLoc, IdentifierInfo *Ident,
4767                                SourceLocation LBrace,
4768                                const ParsedAttributesView &AttrList,
4769                                UsingDirectiveDecl *&UsingDecl, bool IsNested);
4770 
4771   /// ActOnFinishNamespaceDef - This callback is called after a namespace is
4772   /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
4773   void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace);
4774 
4775   NamespaceDecl *getStdNamespace() const;
4776 
4777   /// Retrieve the special "std" namespace, which may require us to
4778   /// implicitly define the namespace.
4779   NamespaceDecl *getOrCreateStdNamespace();
4780 
4781   CXXRecordDecl *getStdBadAlloc() const;
4782   EnumDecl *getStdAlignValT() const;
4783 
4784   ValueDecl *tryLookupUnambiguousFieldDecl(RecordDecl *ClassDecl,
4785                                            const IdentifierInfo *MemberOrBase);
4786 
4787   enum class ComparisonCategoryUsage {
4788     /// The '<=>' operator was used in an expression and a builtin operator
4789     /// was selected.
4790     OperatorInExpression,
4791     /// A defaulted 'operator<=>' needed the comparison category. This
4792     /// typically only applies to 'std::strong_ordering', due to the implicit
4793     /// fallback return value.
4794     DefaultedOperator,
4795   };
4796 
4797   /// Lookup the specified comparison category types in the standard
4798   ///   library, an check the VarDecls possibly returned by the operator<=>
4799   ///   builtins for that type.
4800   ///
4801   /// \return The type of the comparison category type corresponding to the
4802   ///   specified Kind, or a null type if an error occurs
4803   QualType CheckComparisonCategoryType(ComparisonCategoryType Kind,
4804                                        SourceLocation Loc,
4805                                        ComparisonCategoryUsage Usage);
4806 
4807   /// Tests whether Ty is an instance of std::initializer_list and, if
4808   /// it is and Element is not NULL, assigns the element type to Element.
4809   bool isStdInitializerList(QualType Ty, QualType *Element);
4810 
4811   /// Looks for the std::initializer_list template and instantiates it
4812   /// with Element, or emits an error if it's not found.
4813   ///
4814   /// \returns The instantiated template, or null on error.
4815   QualType BuildStdInitializerList(QualType Element, SourceLocation Loc);
4816 
4817   /// Determine whether Ctor is an initializer-list constructor, as
4818   /// defined in [dcl.init.list]p2.
4819   bool isInitListConstructor(const FunctionDecl *Ctor);
4820 
4821   Decl *ActOnUsingDirective(Scope *CurScope, SourceLocation UsingLoc,
4822                             SourceLocation NamespcLoc, CXXScopeSpec &SS,
4823                             SourceLocation IdentLoc,
4824                             IdentifierInfo *NamespcName,
4825                             const ParsedAttributesView &AttrList);
4826 
4827   void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir);
4828 
4829   Decl *ActOnNamespaceAliasDef(Scope *CurScope, SourceLocation NamespaceLoc,
4830                                SourceLocation AliasLoc, IdentifierInfo *Alias,
4831                                CXXScopeSpec &SS, SourceLocation IdentLoc,
4832                                IdentifierInfo *Ident);
4833 
4834   /// Remove decls we can't actually see from a lookup being used to declare
4835   /// shadow using decls.
4836   ///
4837   /// \param S - The scope of the potential shadow decl
4838   /// \param Previous - The lookup of a potential shadow decl's name.
4839   void FilterUsingLookup(Scope *S, LookupResult &lookup);
4840 
4841   /// Hides a using shadow declaration.  This is required by the current
4842   /// using-decl implementation when a resolvable using declaration in a
4843   /// class is followed by a declaration which would hide or override
4844   /// one or more of the using decl's targets; for example:
4845   ///
4846   ///   struct Base { void foo(int); };
4847   ///   struct Derived : Base {
4848   ///     using Base::foo;
4849   ///     void foo(int);
4850   ///   };
4851   ///
4852   /// The governing language is C++03 [namespace.udecl]p12:
4853   ///
4854   ///   When a using-declaration brings names from a base class into a
4855   ///   derived class scope, member functions in the derived class
4856   ///   override and/or hide member functions with the same name and
4857   ///   parameter types in a base class (rather than conflicting).
4858   ///
4859   /// There are two ways to implement this:
4860   ///   (1) optimistically create shadow decls when they're not hidden
4861   ///       by existing declarations, or
4862   ///   (2) don't create any shadow decls (or at least don't make them
4863   ///       visible) until we've fully parsed/instantiated the class.
4864   /// The problem with (1) is that we might have to retroactively remove
4865   /// a shadow decl, which requires several O(n) operations because the
4866   /// decl structures are (very reasonably) not designed for removal.
4867   /// (2) avoids this but is very fiddly and phase-dependent.
4868   void HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow);
4869 
4870   /// Determines whether to create a using shadow decl for a particular
4871   /// decl, given the set of decls existing prior to this using lookup.
4872   bool CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Target,
4873                             const LookupResult &PreviousDecls,
4874                             UsingShadowDecl *&PrevShadow);
4875 
4876   /// Builds a shadow declaration corresponding to a 'using' declaration.
4877   UsingShadowDecl *BuildUsingShadowDecl(Scope *S, BaseUsingDecl *BUD,
4878                                         NamedDecl *Target,
4879                                         UsingShadowDecl *PrevDecl);
4880 
4881   /// Checks that the given using declaration is not an invalid
4882   /// redeclaration.  Note that this is checking only for the using decl
4883   /// itself, not for any ill-formedness among the UsingShadowDecls.
4884   bool CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
4885                                    bool HasTypenameKeyword,
4886                                    const CXXScopeSpec &SS,
4887                                    SourceLocation NameLoc,
4888                                    const LookupResult &Previous);
4889 
4890   /// Checks that the given nested-name qualifier used in a using decl
4891   /// in the current context is appropriately related to the current
4892   /// scope.  If an error is found, diagnoses it and returns true.
4893   /// R is nullptr, if the caller has not (yet) done a lookup, otherwise it's
4894   /// the result of that lookup. UD is likewise nullptr, except when we have an
4895   /// already-populated UsingDecl whose shadow decls contain the same
4896   /// information (i.e. we're instantiating a UsingDecl with non-dependent
4897   /// scope).
4898   bool CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename,
4899                                const CXXScopeSpec &SS,
4900                                const DeclarationNameInfo &NameInfo,
4901                                SourceLocation NameLoc,
4902                                const LookupResult *R = nullptr,
4903                                const UsingDecl *UD = nullptr);
4904 
4905   /// Builds a using declaration.
4906   ///
4907   /// \param IsInstantiation - Whether this call arises from an
4908   ///   instantiation of an unresolved using declaration.  We treat
4909   ///   the lookup differently for these declarations.
4910   NamedDecl *BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
4911                                    SourceLocation UsingLoc,
4912                                    bool HasTypenameKeyword,
4913                                    SourceLocation TypenameLoc, CXXScopeSpec &SS,
4914                                    DeclarationNameInfo NameInfo,
4915                                    SourceLocation EllipsisLoc,
4916                                    const ParsedAttributesView &AttrList,
4917                                    bool IsInstantiation, bool IsUsingIfExists);
4918   NamedDecl *BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS,
4919                                        SourceLocation UsingLoc,
4920                                        SourceLocation EnumLoc,
4921                                        SourceLocation NameLoc,
4922                                        TypeSourceInfo *EnumType, EnumDecl *ED);
4923   NamedDecl *BuildUsingPackDecl(NamedDecl *InstantiatedFrom,
4924                                 ArrayRef<NamedDecl *> Expansions);
4925 
4926   /// Additional checks for a using declaration referring to a constructor name.
4927   bool CheckInheritingConstructorUsingDecl(UsingDecl *UD);
4928 
4929   /// Given a derived-class using shadow declaration for a constructor and the
4930   /// correspnding base class constructor, find or create the implicit
4931   /// synthesized derived class constructor to use for this initialization.
4932   CXXConstructorDecl *
4933   findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor,
4934                             ConstructorUsingShadowDecl *DerivedShadow);
4935 
4936   Decl *ActOnUsingDeclaration(Scope *CurScope, AccessSpecifier AS,
4937                               SourceLocation UsingLoc,
4938                               SourceLocation TypenameLoc, CXXScopeSpec &SS,
4939                               UnqualifiedId &Name, SourceLocation EllipsisLoc,
4940                               const ParsedAttributesView &AttrList);
4941   Decl *ActOnUsingEnumDeclaration(Scope *CurScope, AccessSpecifier AS,
4942                                   SourceLocation UsingLoc,
4943                                   SourceLocation EnumLoc, SourceRange TyLoc,
4944                                   const IdentifierInfo &II, ParsedType Ty,
4945                                   CXXScopeSpec *SS = nullptr);
4946   Decl *ActOnAliasDeclaration(Scope *CurScope, AccessSpecifier AS,
4947                               MultiTemplateParamsArg TemplateParams,
4948                               SourceLocation UsingLoc, UnqualifiedId &Name,
4949                               const ParsedAttributesView &AttrList,
4950                               TypeResult Type, Decl *DeclFromDeclSpec);
4951 
4952   /// BuildCXXConstructExpr - Creates a complete call to a constructor,
4953   /// including handling of its default argument expressions.
4954   ///
4955   /// \param ConstructKind - a CXXConstructExpr::ConstructionKind
4956   ExprResult BuildCXXConstructExpr(
4957       SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl,
4958       CXXConstructorDecl *Constructor, MultiExprArg Exprs,
4959       bool HadMultipleCandidates, bool IsListInitialization,
4960       bool IsStdInitListInitialization, bool RequiresZeroInit,
4961       CXXConstructionKind ConstructKind, SourceRange ParenRange);
4962 
4963   /// Build a CXXConstructExpr whose constructor has already been resolved if
4964   /// it denotes an inherited constructor.
4965   ExprResult BuildCXXConstructExpr(
4966       SourceLocation ConstructLoc, QualType DeclInitType,
4967       CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg Exprs,
4968       bool HadMultipleCandidates, bool IsListInitialization,
4969       bool IsStdInitListInitialization, bool RequiresZeroInit,
4970       CXXConstructionKind ConstructKind, SourceRange ParenRange);
4971 
4972   // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if
4973   // the constructor can be elidable?
4974   ExprResult BuildCXXConstructExpr(
4975       SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl,
4976       CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg Exprs,
4977       bool HadMultipleCandidates, bool IsListInitialization,
4978       bool IsStdInitListInitialization, bool RequiresZeroInit,
4979       CXXConstructionKind ConstructKind, SourceRange ParenRange);
4980 
4981   ExprResult ConvertMemberDefaultInitExpression(FieldDecl *FD, Expr *InitExpr,
4982                                                 SourceLocation InitLoc);
4983 
4984   /// FinalizeVarWithDestructor - Prepare for calling destructor on the
4985   /// constructed variable.
4986   void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType);
4987 
4988   /// Helper class that collects exception specifications for
4989   /// implicitly-declared special member functions.
4990   class ImplicitExceptionSpecification {
4991     // Pointer to allow copying
4992     Sema *Self;
4993     // We order exception specifications thus:
4994     // noexcept is the most restrictive, but is only used in C++11.
4995     // throw() comes next.
4996     // Then a throw(collected exceptions)
4997     // Finally no specification, which is expressed as noexcept(false).
4998     // throw(...) is used instead if any called function uses it.
4999     ExceptionSpecificationType ComputedEST;
5000     llvm::SmallPtrSet<CanQualType, 4> ExceptionsSeen;
5001     SmallVector<QualType, 4> Exceptions;
5002 
ClearExceptions()5003     void ClearExceptions() {
5004       ExceptionsSeen.clear();
5005       Exceptions.clear();
5006     }
5007 
5008   public:
ImplicitExceptionSpecification(Sema & Self)5009     explicit ImplicitExceptionSpecification(Sema &Self)
5010         : Self(&Self), ComputedEST(EST_BasicNoexcept) {
5011       if (!Self.getLangOpts().CPlusPlus11)
5012         ComputedEST = EST_DynamicNone;
5013     }
5014 
5015     /// Get the computed exception specification type.
getExceptionSpecType()5016     ExceptionSpecificationType getExceptionSpecType() const {
5017       assert(!isComputedNoexcept(ComputedEST) &&
5018              "noexcept(expr) should not be a possible result");
5019       return ComputedEST;
5020     }
5021 
5022     /// The number of exceptions in the exception specification.
size()5023     unsigned size() const { return Exceptions.size(); }
5024 
5025     /// The set of exceptions in the exception specification.
data()5026     const QualType *data() const { return Exceptions.data(); }
5027 
5028     /// Integrate another called method into the collected data.
5029     void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method);
5030 
5031     /// Integrate an invoked expression into the collected data.
CalledExpr(Expr * E)5032     void CalledExpr(Expr *E) { CalledStmt(E); }
5033 
5034     /// Integrate an invoked statement into the collected data.
5035     void CalledStmt(Stmt *S);
5036 
5037     /// Overwrite an EPI's exception specification with this
5038     /// computed exception specification.
getExceptionSpec()5039     FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const {
5040       FunctionProtoType::ExceptionSpecInfo ESI;
5041       ESI.Type = getExceptionSpecType();
5042       if (ESI.Type == EST_Dynamic) {
5043         ESI.Exceptions = Exceptions;
5044       } else if (ESI.Type == EST_None) {
5045         /// C++11 [except.spec]p14:
5046         ///   The exception-specification is noexcept(false) if the set of
5047         ///   potential exceptions of the special member function contains "any"
5048         ESI.Type = EST_NoexceptFalse;
5049         ESI.NoexceptExpr =
5050             Self->ActOnCXXBoolLiteral(SourceLocation(), tok::kw_false).get();
5051       }
5052       return ESI;
5053     }
5054   };
5055 
5056   /// Evaluate the implicit exception specification for a defaulted
5057   /// special member function.
5058   void EvaluateImplicitExceptionSpec(SourceLocation Loc, FunctionDecl *FD);
5059 
5060   /// Check the given exception-specification and update the
5061   /// exception specification information with the results.
5062   void checkExceptionSpecification(bool IsTopLevel,
5063                                    ExceptionSpecificationType EST,
5064                                    ArrayRef<ParsedType> DynamicExceptions,
5065                                    ArrayRef<SourceRange> DynamicExceptionRanges,
5066                                    Expr *NoexceptExpr,
5067                                    SmallVectorImpl<QualType> &Exceptions,
5068                                    FunctionProtoType::ExceptionSpecInfo &ESI);
5069 
5070   /// Add an exception-specification to the given member or friend function
5071   /// (or function template). The exception-specification was parsed
5072   /// after the function itself was declared.
5073   void actOnDelayedExceptionSpecification(
5074       Decl *D, ExceptionSpecificationType EST, SourceRange SpecificationRange,
5075       ArrayRef<ParsedType> DynamicExceptions,
5076       ArrayRef<SourceRange> DynamicExceptionRanges, Expr *NoexceptExpr);
5077 
5078   class InheritedConstructorInfo;
5079 
5080   /// Determine if a special member function should have a deleted
5081   /// definition when it is defaulted.
5082   bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMemberKind CSM,
5083                                  InheritedConstructorInfo *ICI = nullptr,
5084                                  bool Diagnose = false);
5085 
5086   /// Produce notes explaining why a defaulted function was defined as deleted.
5087   void DiagnoseDeletedDefaultedFunction(FunctionDecl *FD);
5088 
5089   /// Declare the implicit default constructor for the given class.
5090   ///
5091   /// \param ClassDecl The class declaration into which the implicit
5092   /// default constructor will be added.
5093   ///
5094   /// \returns The implicitly-declared default constructor.
5095   CXXConstructorDecl *
5096   DeclareImplicitDefaultConstructor(CXXRecordDecl *ClassDecl);
5097 
5098   /// DefineImplicitDefaultConstructor - Checks for feasibility of
5099   /// defining this constructor as the default constructor.
5100   void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
5101                                         CXXConstructorDecl *Constructor);
5102 
5103   /// Declare the implicit destructor for the given class.
5104   ///
5105   /// \param ClassDecl The class declaration into which the implicit
5106   /// destructor will be added.
5107   ///
5108   /// \returns The implicitly-declared destructor.
5109   CXXDestructorDecl *DeclareImplicitDestructor(CXXRecordDecl *ClassDecl);
5110 
5111   /// DefineImplicitDestructor - Checks for feasibility of
5112   /// defining this destructor as the default destructor.
5113   void DefineImplicitDestructor(SourceLocation CurrentLocation,
5114                                 CXXDestructorDecl *Destructor);
5115 
5116   /// Build an exception spec for destructors that don't have one.
5117   ///
5118   /// C++11 says that user-defined destructors with no exception spec get one
5119   /// that looks as if the destructor was implicitly declared.
5120   void AdjustDestructorExceptionSpec(CXXDestructorDecl *Destructor);
5121 
5122   /// Define the specified inheriting constructor.
5123   void DefineInheritingConstructor(SourceLocation UseLoc,
5124                                    CXXConstructorDecl *Constructor);
5125 
5126   /// Declare the implicit copy constructor for the given class.
5127   ///
5128   /// \param ClassDecl The class declaration into which the implicit
5129   /// copy constructor will be added.
5130   ///
5131   /// \returns The implicitly-declared copy constructor.
5132   CXXConstructorDecl *DeclareImplicitCopyConstructor(CXXRecordDecl *ClassDecl);
5133 
5134   /// DefineImplicitCopyConstructor - Checks for feasibility of
5135   /// defining this constructor as the copy constructor.
5136   void DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
5137                                      CXXConstructorDecl *Constructor);
5138 
5139   /// Declare the implicit move constructor for the given class.
5140   ///
5141   /// \param ClassDecl The Class declaration into which the implicit
5142   /// move constructor will be added.
5143   ///
5144   /// \returns The implicitly-declared move constructor, or NULL if it wasn't
5145   /// declared.
5146   CXXConstructorDecl *DeclareImplicitMoveConstructor(CXXRecordDecl *ClassDecl);
5147 
5148   /// DefineImplicitMoveConstructor - Checks for feasibility of
5149   /// defining this constructor as the move constructor.
5150   void DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
5151                                      CXXConstructorDecl *Constructor);
5152 
5153   /// Declare the implicit copy assignment operator for the given class.
5154   ///
5155   /// \param ClassDecl The class declaration into which the implicit
5156   /// copy assignment operator will be added.
5157   ///
5158   /// \returns The implicitly-declared copy assignment operator.
5159   CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl);
5160 
5161   /// Defines an implicitly-declared copy assignment operator.
5162   void DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
5163                                     CXXMethodDecl *MethodDecl);
5164 
5165   /// Declare the implicit move assignment operator for the given class.
5166   ///
5167   /// \param ClassDecl The Class declaration into which the implicit
5168   /// move assignment operator will be added.
5169   ///
5170   /// \returns The implicitly-declared move assignment operator, or NULL if it
5171   /// wasn't declared.
5172   CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl);
5173 
5174   /// Defines an implicitly-declared move assignment operator.
5175   void DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
5176                                     CXXMethodDecl *MethodDecl);
5177 
5178   /// Check a completed declaration of an implicit special member.
5179   void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD);
5180 
5181   /// Determine whether the given function is an implicitly-deleted
5182   /// special member function.
5183   bool isImplicitlyDeleted(FunctionDecl *FD);
5184 
5185   /// Check whether 'this' shows up in the type of a static member
5186   /// function after the (naturally empty) cv-qualifier-seq would be.
5187   ///
5188   /// \returns true if an error occurred.
5189   bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method);
5190 
5191   /// Whether this' shows up in the exception specification of a static
5192   /// member function.
5193   bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method);
5194 
5195   /// Check whether 'this' shows up in the attributes of the given
5196   /// static member function.
5197   ///
5198   /// \returns true if an error occurred.
5199   bool checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method);
5200 
5201   bool CheckImmediateEscalatingFunctionDefinition(
5202       FunctionDecl *FD, const sema::FunctionScopeInfo *FSI);
5203 
5204   void DiagnoseImmediateEscalatingReason(FunctionDecl *FD);
5205 
5206   /// Given a constructor and the set of arguments provided for the
5207   /// constructor, convert the arguments and add any required default arguments
5208   /// to form a proper call to this constructor.
5209   ///
5210   /// \returns true if an error occurred, false otherwise.
5211   bool CompleteConstructorCall(CXXConstructorDecl *Constructor,
5212                                QualType DeclInitType, MultiExprArg ArgsPtr,
5213                                SourceLocation Loc,
5214                                SmallVectorImpl<Expr *> &ConvertedArgs,
5215                                bool AllowExplicit = false,
5216                                bool IsListInitialization = false);
5217 
5218   /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an
5219   /// initializer for the declaration 'Dcl'.
5220   /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
5221   /// static data member of class X, names should be looked up in the scope of
5222   /// class X.
5223   void ActOnCXXEnterDeclInitializer(Scope *S, Decl *Dcl);
5224 
5225   /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
5226   /// initializer for the declaration 'Dcl'.
5227   void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl);
5228 
5229   /// Define the "body" of the conversion from a lambda object to a
5230   /// function pointer.
5231   ///
5232   /// This routine doesn't actually define a sensible body; rather, it fills
5233   /// in the initialization expression needed to copy the lambda object into
5234   /// the block, and IR generation actually generates the real body of the
5235   /// block pointer conversion.
5236   void
5237   DefineImplicitLambdaToFunctionPointerConversion(SourceLocation CurrentLoc,
5238                                                   CXXConversionDecl *Conv);
5239 
5240   /// Define the "body" of the conversion from a lambda object to a
5241   /// block pointer.
5242   ///
5243   /// This routine doesn't actually define a sensible body; rather, it fills
5244   /// in the initialization expression needed to copy the lambda object into
5245   /// the block, and IR generation actually generates the real body of the
5246   /// block pointer conversion.
5247   void DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLoc,
5248                                                     CXXConversionDecl *Conv);
5249 
5250   /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
5251   /// linkage specification, including the language and (if present)
5252   /// the '{'. ExternLoc is the location of the 'extern', Lang is the
5253   /// language string literal. LBraceLoc, if valid, provides the location of
5254   /// the '{' brace. Otherwise, this linkage specification does not
5255   /// have any braces.
5256   Decl *ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
5257                                        Expr *LangStr, SourceLocation LBraceLoc);
5258 
5259   /// ActOnFinishLinkageSpecification - Complete the definition of
5260   /// the C++ linkage specification LinkageSpec. If RBraceLoc is
5261   /// valid, it's the position of the closing '}' brace in a linkage
5262   /// specification that uses braces.
5263   Decl *ActOnFinishLinkageSpecification(Scope *S, Decl *LinkageSpec,
5264                                         SourceLocation RBraceLoc);
5265 
5266   //===--------------------------------------------------------------------===//
5267   // C++ Classes
5268   //
5269 
5270   /// Get the class that is directly named by the current context. This is the
5271   /// class for which an unqualified-id in this scope could name a constructor
5272   /// or destructor.
5273   ///
5274   /// If the scope specifier denotes a class, this will be that class.
5275   /// If the scope specifier is empty, this will be the class whose
5276   /// member-specification we are currently within. Otherwise, there
5277   /// is no such class.
5278   CXXRecordDecl *getCurrentClass(Scope *S, const CXXScopeSpec *SS);
5279 
5280   /// isCurrentClassName - Determine whether the identifier II is the
5281   /// name of the class type currently being defined. In the case of
5282   /// nested classes, this will only return true if II is the name of
5283   /// the innermost class.
5284   bool isCurrentClassName(const IdentifierInfo &II, Scope *S,
5285                           const CXXScopeSpec *SS = nullptr);
5286 
5287   /// Determine whether the identifier II is a typo for the name of
5288   /// the class type currently being defined. If so, update it to the identifier
5289   /// that should have been used.
5290   bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS);
5291 
5292   /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
5293   bool ActOnAccessSpecifier(AccessSpecifier Access, SourceLocation ASLoc,
5294                             SourceLocation ColonLoc,
5295                             const ParsedAttributesView &Attrs);
5296 
5297   /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
5298   /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
5299   /// bitfield width if there is one, 'InitExpr' specifies the initializer if
5300   /// one has been parsed, and 'InitStyle' is set if an in-class initializer is
5301   /// present (but parsing it has been deferred).
5302   NamedDecl *
5303   ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
5304                            MultiTemplateParamsArg TemplateParameterLists,
5305                            Expr *BitfieldWidth, const VirtSpecifiers &VS,
5306                            InClassInitStyle InitStyle);
5307 
5308   /// Enter a new C++ default initializer scope. After calling this, the
5309   /// caller must call \ref ActOnFinishCXXInClassMemberInitializer, even if
5310   /// parsing or instantiating the initializer failed.
5311   void ActOnStartCXXInClassMemberInitializer();
5312 
5313   /// This is invoked after parsing an in-class initializer for a
5314   /// non-static C++ class member, and after instantiating an in-class
5315   /// initializer in a class template. Such actions are deferred until the class
5316   /// is complete.
5317   void ActOnFinishCXXInClassMemberInitializer(Decl *VarDecl,
5318                                               SourceLocation EqualLoc,
5319                                               Expr *Init);
5320 
5321   /// Handle a C++ member initializer using parentheses syntax.
5322   MemInitResult
5323   ActOnMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS,
5324                       IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy,
5325                       const DeclSpec &DS, SourceLocation IdLoc,
5326                       SourceLocation LParenLoc, ArrayRef<Expr *> Args,
5327                       SourceLocation RParenLoc, SourceLocation EllipsisLoc);
5328 
5329   /// Handle a C++ member initializer using braced-init-list syntax.
5330   MemInitResult ActOnMemInitializer(Decl *ConstructorD, Scope *S,
5331                                     CXXScopeSpec &SS,
5332                                     IdentifierInfo *MemberOrBase,
5333                                     ParsedType TemplateTypeTy,
5334                                     const DeclSpec &DS, SourceLocation IdLoc,
5335                                     Expr *InitList, SourceLocation EllipsisLoc);
5336 
5337   /// Handle a C++ member initializer.
5338   MemInitResult BuildMemInitializer(Decl *ConstructorD, Scope *S,
5339                                     CXXScopeSpec &SS,
5340                                     IdentifierInfo *MemberOrBase,
5341                                     ParsedType TemplateTypeTy,
5342                                     const DeclSpec &DS, SourceLocation IdLoc,
5343                                     Expr *Init, SourceLocation EllipsisLoc);
5344 
5345   MemInitResult BuildMemberInitializer(ValueDecl *Member, Expr *Init,
5346                                        SourceLocation IdLoc);
5347 
5348   MemInitResult BuildBaseInitializer(QualType BaseType,
5349                                      TypeSourceInfo *BaseTInfo, Expr *Init,
5350                                      CXXRecordDecl *ClassDecl,
5351                                      SourceLocation EllipsisLoc);
5352 
5353   MemInitResult BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
5354                                            CXXRecordDecl *ClassDecl);
5355 
5356   bool SetDelegatingInitializer(CXXConstructorDecl *Constructor,
5357                                 CXXCtorInitializer *Initializer);
5358 
5359   bool SetCtorInitializers(
5360       CXXConstructorDecl *Constructor, bool AnyErrors,
5361       ArrayRef<CXXCtorInitializer *> Initializers = std::nullopt);
5362 
5363   /// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
5364   /// mark all the non-trivial destructors of its members and bases as
5365   /// referenced.
5366   void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc,
5367                                               CXXRecordDecl *Record);
5368 
5369   /// Mark destructors of virtual bases of this class referenced. In the Itanium
5370   /// C++ ABI, this is done when emitting a destructor for any non-abstract
5371   /// class. In the Microsoft C++ ABI, this is done any time a class's
5372   /// destructor is referenced.
5373   void MarkVirtualBaseDestructorsReferenced(
5374       SourceLocation Location, CXXRecordDecl *ClassDecl,
5375       llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases = nullptr);
5376 
5377   /// Do semantic checks to allow the complete destructor variant to be emitted
5378   /// when the destructor is defined in another translation unit. In the Itanium
5379   /// C++ ABI, destructor variants are emitted together. In the MS C++ ABI, they
5380   /// can be emitted in separate TUs. To emit the complete variant, run a subset
5381   /// of the checks performed when emitting a regular destructor.
5382   void CheckCompleteDestructorVariant(SourceLocation CurrentLocation,
5383                                       CXXDestructorDecl *Dtor);
5384 
5385   /// The list of classes whose vtables have been used within
5386   /// this translation unit, and the source locations at which the
5387   /// first use occurred.
5388   typedef std::pair<CXXRecordDecl *, SourceLocation> VTableUse;
5389 
5390   /// The list of vtables that are required but have not yet been
5391   /// materialized.
5392   SmallVector<VTableUse, 16> VTableUses;
5393 
5394   /// The set of classes whose vtables have been used within
5395   /// this translation unit, and a bit that will be true if the vtable is
5396   /// required to be emitted (otherwise, it should be emitted only if needed
5397   /// by code generation).
5398   llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed;
5399 
5400   /// Load any externally-stored vtable uses.
5401   void LoadExternalVTableUses();
5402 
5403   /// Note that the vtable for the given class was used at the
5404   /// given location.
5405   void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
5406                       bool DefinitionRequired = false);
5407 
5408   /// Mark the exception specifications of all virtual member functions
5409   /// in the given class as needed.
5410   void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
5411                                              const CXXRecordDecl *RD);
5412 
5413   /// MarkVirtualMembersReferenced - Will mark all members of the given
5414   /// CXXRecordDecl referenced.
5415   void MarkVirtualMembersReferenced(SourceLocation Loc, const CXXRecordDecl *RD,
5416                                     bool ConstexprOnly = false);
5417 
5418   /// Define all of the vtables that have been used in this
5419   /// translation unit and reference any virtual members used by those
5420   /// vtables.
5421   ///
5422   /// \returns true if any work was done, false otherwise.
5423   bool DefineUsedVTables();
5424 
5425   /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
5426   /// special functions, such as the default constructor, copy
5427   /// constructor, or destructor, to the given C++ class (C++
5428   /// [special]p1).  This routine can only be executed just before the
5429   /// definition of the class is complete.
5430   void AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl);
5431 
5432   /// ActOnMemInitializers - Handle the member initializers for a constructor.
5433   void ActOnMemInitializers(Decl *ConstructorDecl, SourceLocation ColonLoc,
5434                             ArrayRef<CXXCtorInitializer *> MemInits,
5435                             bool AnyErrors);
5436 
5437   /// Check class-level dllimport/dllexport attribute. The caller must
5438   /// ensure that referenceDLLExportedClassMethods is called some point later
5439   /// when all outer classes of Class are complete.
5440   void checkClassLevelDLLAttribute(CXXRecordDecl *Class);
5441   void checkClassLevelCodeSegAttribute(CXXRecordDecl *Class);
5442 
5443   void referenceDLLExportedClassMethods();
5444 
5445   /// Perform propagation of DLL attributes from a derived class to a
5446   /// templated base class for MS compatibility.
5447   void propagateDLLAttrToBaseClassTemplate(
5448       CXXRecordDecl *Class, Attr *ClassAttr,
5449       ClassTemplateSpecializationDecl *BaseTemplateSpec,
5450       SourceLocation BaseLoc);
5451 
5452   /// Perform semantic checks on a class definition that has been
5453   /// completing, introducing implicitly-declared members, checking for
5454   /// abstract types, etc.
5455   ///
5456   /// \param S The scope in which the class was parsed. Null if we didn't just
5457   ///        parse a class definition.
5458   /// \param Record The completed class.
5459   void CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record);
5460 
5461   /// Check that the C++ class annoated with "trivial_abi" satisfies all the
5462   /// conditions that are needed for the attribute to have an effect.
5463   void checkIllFormedTrivialABIStruct(CXXRecordDecl &RD);
5464 
5465   /// Check that VTable Pointer authentication is only being set on the first
5466   /// first instantiation of the vtable
5467   void checkIncorrectVTablePointerAuthenticationAttribute(CXXRecordDecl &RD);
5468 
5469   void ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc,
5470                                          Decl *TagDecl, SourceLocation LBrac,
5471                                          SourceLocation RBrac,
5472                                          const ParsedAttributesView &AttrList);
5473 
5474   /// Perform any semantic analysis which needs to be delayed until all
5475   /// pending class member declarations have been parsed.
5476   void ActOnFinishCXXMemberDecls();
5477   void ActOnFinishCXXNonNestedClass();
5478 
5479   /// This is used to implement the constant expression evaluation part of the
5480   /// attribute enable_if extension. There is nothing in standard C++ which
5481   /// would require reentering parameters.
5482   void ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param);
5483   unsigned ActOnReenterTemplateScope(Decl *Template,
5484                                      llvm::function_ref<Scope *()> EnterScope);
5485   void ActOnStartDelayedMemberDeclarations(Scope *S, Decl *Record);
5486 
5487   /// ActOnStartDelayedCXXMethodDeclaration - We have completed
5488   /// parsing a top-level (non-nested) C++ class, and we are now
5489   /// parsing those parts of the given Method declaration that could
5490   /// not be parsed earlier (C++ [class.mem]p2), such as default
5491   /// arguments. This action should enter the scope of the given
5492   /// Method declaration as if we had just parsed the qualified method
5493   /// name. However, it should not bring the parameters into scope;
5494   /// that will be performed by ActOnDelayedCXXMethodParameter.
5495   void ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5496   void ActOnDelayedCXXMethodParameter(Scope *S, Decl *Param);
5497   void ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *Record);
5498 
5499   /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
5500   /// processing the delayed method declaration for Method. The method
5501   /// declaration is now considered finished. There may be a separate
5502   /// ActOnStartOfFunctionDef action later (not necessarily
5503   /// immediately!) for this method, if it was also defined inside the
5504   /// class body.
5505   void ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5506   void ActOnFinishDelayedMemberInitializers(Decl *Record);
5507 
5508   bool EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result,
5509                                            ASTContext &Ctx,
5510                                            bool ErrorOnInvalidMessage);
5511   Decl *ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5512                                      Expr *AssertExpr, Expr *AssertMessageExpr,
5513                                      SourceLocation RParenLoc);
5514   Decl *BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5515                                      Expr *AssertExpr, Expr *AssertMessageExpr,
5516                                      SourceLocation RParenLoc, bool Failed);
5517 
5518   /// Try to print more useful information about a failed static_assert
5519   /// with expression \E
5520   void DiagnoseStaticAssertDetails(const Expr *E);
5521 
5522   /// Handle a friend type declaration.  This works in tandem with
5523   /// ActOnTag.
5524   ///
5525   /// Notes on friend class templates:
5526   ///
5527   /// We generally treat friend class declarations as if they were
5528   /// declaring a class.  So, for example, the elaborated type specifier
5529   /// in a friend declaration is required to obey the restrictions of a
5530   /// class-head (i.e. no typedefs in the scope chain), template
5531   /// parameters are required to match up with simple template-ids, &c.
5532   /// However, unlike when declaring a template specialization, it's
5533   /// okay to refer to a template specialization without an empty
5534   /// template parameter declaration, e.g.
5535   ///   friend class A<T>::B<unsigned>;
5536   /// We permit this as a special case; if there are any template
5537   /// parameters present at all, require proper matching, i.e.
5538   ///   template <> template \<class T> friend class A<int>::B;
5539   Decl *ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
5540                             MultiTemplateParamsArg TemplateParams);
5541   NamedDecl *ActOnFriendFunctionDecl(Scope *S, Declarator &D,
5542                                      MultiTemplateParamsArg TemplateParams);
5543 
5544   /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
5545   /// the well-formedness of the constructor declarator @p D with type @p
5546   /// R. If there are any errors in the declarator, this routine will
5547   /// emit diagnostics and set the invalid bit to true.  In any case, the type
5548   /// will be updated to reflect a well-formed type for the constructor and
5549   /// returned.
5550   QualType CheckConstructorDeclarator(Declarator &D, QualType R,
5551                                       StorageClass &SC);
5552 
5553   /// CheckConstructor - Checks a fully-formed constructor for
5554   /// well-formedness, issuing any diagnostics required. Returns true if
5555   /// the constructor declarator is invalid.
5556   void CheckConstructor(CXXConstructorDecl *Constructor);
5557 
5558   /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
5559   /// the well-formednes of the destructor declarator @p D with type @p
5560   /// R. If there are any errors in the declarator, this routine will
5561   /// emit diagnostics and set the declarator to invalid.  Even if this happens,
5562   /// will be updated to reflect a well-formed type for the destructor and
5563   /// returned.
5564   QualType CheckDestructorDeclarator(Declarator &D, QualType R,
5565                                      StorageClass &SC);
5566 
5567   /// CheckDestructor - Checks a fully-formed destructor definition for
5568   /// well-formedness, issuing any diagnostics required.  Returns true
5569   /// on error.
5570   bool CheckDestructor(CXXDestructorDecl *Destructor);
5571 
5572   /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
5573   /// well-formednes of the conversion function declarator @p D with
5574   /// type @p R. If there are any errors in the declarator, this routine
5575   /// will emit diagnostics and return true. Otherwise, it will return
5576   /// false. Either way, the type @p R will be updated to reflect a
5577   /// well-formed type for the conversion operator.
5578   void CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC);
5579 
5580   /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
5581   /// the declaration of the given C++ conversion function. This routine
5582   /// is responsible for recording the conversion function in the C++
5583   /// class, if possible.
5584   Decl *ActOnConversionDeclarator(CXXConversionDecl *Conversion);
5585 
5586   /// Check the validity of a declarator that we parsed for a deduction-guide.
5587   /// These aren't actually declarators in the grammar, so we need to check that
5588   /// the user didn't specify any pieces that are not part of the
5589   /// deduction-guide grammar. Return true on invalid deduction-guide.
5590   bool CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
5591                                      StorageClass &SC);
5592 
5593   void CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *MD);
5594 
5595   bool CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD,
5596                                              CXXSpecialMemberKind CSM,
5597                                              SourceLocation DefaultLoc);
5598   void CheckDelayedMemberExceptionSpecs();
5599 
5600   /// Kinds of defaulted comparison operator functions.
5601   enum class DefaultedComparisonKind : unsigned char {
5602     /// This is not a defaultable comparison operator.
5603     None,
5604     /// This is an operator== that should be implemented as a series of
5605     /// subobject comparisons.
5606     Equal,
5607     /// This is an operator<=> that should be implemented as a series of
5608     /// subobject comparisons.
5609     ThreeWay,
5610     /// This is an operator!= that should be implemented as a rewrite in terms
5611     /// of a == comparison.
5612     NotEqual,
5613     /// This is an <, <=, >, or >= that should be implemented as a rewrite in
5614     /// terms of a <=> comparison.
5615     Relational,
5616   };
5617 
5618   bool CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *MD,
5619                                           DefaultedComparisonKind DCK);
5620   void DeclareImplicitEqualityComparison(CXXRecordDecl *RD,
5621                                          FunctionDecl *Spaceship);
5622   void DefineDefaultedComparison(SourceLocation Loc, FunctionDecl *FD,
5623                                  DefaultedComparisonKind DCK);
5624 
5625   void CheckExplicitObjectMemberFunction(Declarator &D, DeclarationName Name,
5626                                          QualType R, bool IsLambda,
5627                                          DeclContext *DC = nullptr);
5628   void CheckExplicitObjectMemberFunction(DeclContext *DC, Declarator &D,
5629                                          DeclarationName Name, QualType R);
5630   void CheckExplicitObjectLambda(Declarator &D);
5631 
5632   //===--------------------------------------------------------------------===//
5633   // C++ Derived Classes
5634   //
5635 
5636   /// Check the validity of a C++ base class specifier.
5637   ///
5638   /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
5639   /// and returns NULL otherwise.
5640   CXXBaseSpecifier *CheckBaseSpecifier(CXXRecordDecl *Class,
5641                                        SourceRange SpecifierRange, bool Virtual,
5642                                        AccessSpecifier Access,
5643                                        TypeSourceInfo *TInfo,
5644                                        SourceLocation EllipsisLoc);
5645 
5646   /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
5647   /// one entry in the base class list of a class specifier, for
5648   /// example:
5649   ///    class foo : public bar, virtual private baz {
5650   /// 'public bar' and 'virtual private baz' are each base-specifiers.
5651   BaseResult ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
5652                                 const ParsedAttributesView &Attrs, bool Virtual,
5653                                 AccessSpecifier Access, ParsedType basetype,
5654                                 SourceLocation BaseLoc,
5655                                 SourceLocation EllipsisLoc);
5656 
5657   /// Performs the actual work of attaching the given base class
5658   /// specifiers to a C++ class.
5659   bool AttachBaseSpecifiers(CXXRecordDecl *Class,
5660                             MutableArrayRef<CXXBaseSpecifier *> Bases);
5661 
5662   /// ActOnBaseSpecifiers - Attach the given base specifiers to the
5663   /// class, after checking whether there are any duplicate base
5664   /// classes.
5665   void ActOnBaseSpecifiers(Decl *ClassDecl,
5666                            MutableArrayRef<CXXBaseSpecifier *> Bases);
5667 
5668   /// Determine whether the type \p Derived is a C++ class that is
5669   /// derived from the type \p Base.
5670   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base);
5671 
5672   /// Determine whether the type \p Derived is a C++ class that is
5673   /// derived from the type \p Base.
5674   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base,
5675                      CXXBasePaths &Paths);
5676 
5677   // FIXME: I don't like this name.
5678   void BuildBasePathArray(const CXXBasePaths &Paths, CXXCastPath &BasePath);
5679 
5680   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5681                                     SourceLocation Loc, SourceRange Range,
5682                                     CXXCastPath *BasePath = nullptr,
5683                                     bool IgnoreAccess = false);
5684 
5685   /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
5686   /// conversion (where Derived and Base are class types) is
5687   /// well-formed, meaning that the conversion is unambiguous (and
5688   /// that all of the base classes are accessible). Returns true
5689   /// and emits a diagnostic if the code is ill-formed, returns false
5690   /// otherwise. Loc is the location where this routine should point to
5691   /// if there is an error, and Range is the source range to highlight
5692   /// if there is an error.
5693   ///
5694   /// If either InaccessibleBaseID or AmbiguousBaseConvID are 0, then the
5695   /// diagnostic for the respective type of error will be suppressed, but the
5696   /// check for ill-formed code will still be performed.
5697   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5698                                     unsigned InaccessibleBaseID,
5699                                     unsigned AmbiguousBaseConvID,
5700                                     SourceLocation Loc, SourceRange Range,
5701                                     DeclarationName Name, CXXCastPath *BasePath,
5702                                     bool IgnoreAccess = false);
5703 
5704   /// Builds a string representing ambiguous paths from a
5705   /// specific derived class to different subobjects of the same base
5706   /// class.
5707   ///
5708   /// This function builds a string that can be used in error messages
5709   /// to show the different paths that one can take through the
5710   /// inheritance hierarchy to go from the derived class to different
5711   /// subobjects of a base class. The result looks something like this:
5712   /// @code
5713   /// struct D -> struct B -> struct A
5714   /// struct D -> struct C -> struct A
5715   /// @endcode
5716   std::string getAmbiguousPathsDisplayString(CXXBasePaths &Paths);
5717 
5718   bool CheckOverridingFunctionAttributes(CXXMethodDecl *New,
5719                                          const CXXMethodDecl *Old);
5720 
5721   /// CheckOverridingFunctionReturnType - Checks whether the return types are
5722   /// covariant, according to C++ [class.virtual]p5.
5723   bool CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
5724                                          const CXXMethodDecl *Old);
5725 
5726   // Check that the overriding method has no explicit object parameter.
5727   bool CheckExplicitObjectOverride(CXXMethodDecl *New,
5728                                    const CXXMethodDecl *Old);
5729 
5730   /// Mark the given method pure.
5731   ///
5732   /// \param Method the method to be marked pure.
5733   ///
5734   /// \param InitRange the source range that covers the "0" initializer.
5735   bool CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange);
5736 
5737   /// CheckOverrideControl - Check C++11 override control semantics.
5738   void CheckOverrideControl(NamedDecl *D);
5739 
5740   /// DiagnoseAbsenceOfOverrideControl - Diagnose if 'override' keyword was
5741   /// not used in the declaration of an overriding method.
5742   void DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent);
5743 
5744   /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
5745   /// function overrides a virtual member function marked 'final', according to
5746   /// C++11 [class.virtual]p4.
5747   bool CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
5748                                               const CXXMethodDecl *Old);
5749 
5750   enum AbstractDiagSelID {
5751     AbstractNone = -1,
5752     AbstractReturnType,
5753     AbstractParamType,
5754     AbstractVariableType,
5755     AbstractFieldType,
5756     AbstractIvarType,
5757     AbstractSynthesizedIvarType,
5758     AbstractArrayType
5759   };
5760 
5761   struct TypeDiagnoser;
5762 
5763   bool isAbstractType(SourceLocation Loc, QualType T);
5764   bool RequireNonAbstractType(SourceLocation Loc, QualType T,
5765                               TypeDiagnoser &Diagnoser);
5766   template <typename... Ts>
RequireNonAbstractType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)5767   bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned DiagID,
5768                               const Ts &...Args) {
5769     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
5770     return RequireNonAbstractType(Loc, T, Diagnoser);
5771   }
5772 
5773   void DiagnoseAbstractType(const CXXRecordDecl *RD);
5774 
5775   //===--------------------------------------------------------------------===//
5776   // C++ Overloaded Operators [C++ 13.5]
5777   //
5778 
5779   /// CheckOverloadedOperatorDeclaration - Check whether the declaration
5780   /// of this overloaded operator is well-formed. If so, returns false;
5781   /// otherwise, emits appropriate diagnostics and returns true.
5782   bool CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl);
5783 
5784   /// CheckLiteralOperatorDeclaration - Check whether the declaration
5785   /// of this literal operator function is well-formed. If so, returns
5786   /// false; otherwise, emits appropriate diagnostics and returns true.
5787   bool CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl);
5788 
5789   /// ActOnExplicitBoolSpecifier - Build an ExplicitSpecifier from an expression
5790   /// found in an explicit(bool) specifier.
5791   ExplicitSpecifier ActOnExplicitBoolSpecifier(Expr *E);
5792 
5793   /// tryResolveExplicitSpecifier - Attempt to resolve the explict specifier.
5794   /// Returns true if the explicit specifier is now resolved.
5795   bool tryResolveExplicitSpecifier(ExplicitSpecifier &ExplicitSpec);
5796 
5797   /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
5798   /// C++ if/switch/while/for statement.
5799   /// e.g: "if (int x = f()) {...}"
5800   DeclResult ActOnCXXConditionDeclaration(Scope *S, Declarator &D);
5801 
5802   // Emitting members of dllexported classes is delayed until the class
5803   // (including field initializers) is fully parsed.
5804   SmallVector<CXXRecordDecl *, 4> DelayedDllExportClasses;
5805   SmallVector<CXXMethodDecl *, 4> DelayedDllExportMemberFunctions;
5806 
5807   /// Merge the exception specifications of two variable declarations.
5808   ///
5809   /// This is called when there's a redeclaration of a VarDecl. The function
5810   /// checks if the redeclaration might have an exception specification and
5811   /// validates compatibility and merges the specs if necessary.
5812   void MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old);
5813 
5814   /// MergeCXXFunctionDecl - Merge two declarations of the same C++
5815   /// function, once we already know that they have the same
5816   /// type. Subroutine of MergeFunctionDecl. Returns true if there was an
5817   /// error, false otherwise.
5818   bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S);
5819 
5820   /// Helpers for dealing with blocks and functions.
5821   void CheckCXXDefaultArguments(FunctionDecl *FD);
5822 
5823   /// CheckExtraCXXDefaultArguments - Check for any extra default
5824   /// arguments in the declarator, which is not a function declaration
5825   /// or definition and therefore is not permitted to have default
5826   /// arguments. This routine should be invoked for every declarator
5827   /// that is not a function declaration or definition.
5828   void CheckExtraCXXDefaultArguments(Declarator &D);
5829 
getSpecialMember(const CXXMethodDecl * MD)5830   CXXSpecialMemberKind getSpecialMember(const CXXMethodDecl *MD) {
5831     return getDefaultedFunctionKind(MD).asSpecialMember();
5832   }
5833 
5834   /// Perform semantic analysis for the variable declaration that
5835   /// occurs within a C++ catch clause, returning the newly-created
5836   /// variable.
5837   VarDecl *BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo,
5838                                      SourceLocation StartLoc,
5839                                      SourceLocation IdLoc,
5840                                      const IdentifierInfo *Id);
5841 
5842   /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
5843   /// handler.
5844   Decl *ActOnExceptionDeclarator(Scope *S, Declarator &D);
5845 
5846   void DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock);
5847 
5848   /// Handle a friend tag declaration where the scope specifier was
5849   /// templated.
5850   DeclResult ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
5851                                      unsigned TagSpec, SourceLocation TagLoc,
5852                                      CXXScopeSpec &SS, IdentifierInfo *Name,
5853                                      SourceLocation NameLoc,
5854                                      const ParsedAttributesView &Attr,
5855                                      MultiTemplateParamsArg TempParamLists);
5856 
5857   MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD,
5858                                    SourceLocation DeclStart, Declarator &D,
5859                                    Expr *BitfieldWidth,
5860                                    InClassInitStyle InitStyle,
5861                                    AccessSpecifier AS,
5862                                    const ParsedAttr &MSPropertyAttr);
5863 
5864   /// Diagnose why the specified class does not have a trivial special member of
5865   /// the given kind.
5866   void DiagnoseNontrivial(const CXXRecordDecl *Record,
5867                           CXXSpecialMemberKind CSM);
5868 
5869   enum TrivialABIHandling {
5870     /// The triviality of a method unaffected by "trivial_abi".
5871     TAH_IgnoreTrivialABI,
5872 
5873     /// The triviality of a method affected by "trivial_abi".
5874     TAH_ConsiderTrivialABI
5875   };
5876 
5877   /// Determine whether a defaulted or deleted special member function is
5878   /// trivial, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
5879   /// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
5880   bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMemberKind CSM,
5881                               TrivialABIHandling TAH = TAH_IgnoreTrivialABI,
5882                               bool Diagnose = false);
5883 
5884   /// For a defaulted function, the kind of defaulted function that it is.
5885   class DefaultedFunctionKind {
5886     LLVM_PREFERRED_TYPE(CXXSpecialMemberKind)
5887     unsigned SpecialMember : 8;
5888     unsigned Comparison : 8;
5889 
5890   public:
DefaultedFunctionKind()5891     DefaultedFunctionKind()
5892         : SpecialMember(llvm::to_underlying(CXXSpecialMemberKind::Invalid)),
5893           Comparison(llvm::to_underlying(DefaultedComparisonKind::None)) {}
DefaultedFunctionKind(CXXSpecialMemberKind CSM)5894     DefaultedFunctionKind(CXXSpecialMemberKind CSM)
5895         : SpecialMember(llvm::to_underlying(CSM)),
5896           Comparison(llvm::to_underlying(DefaultedComparisonKind::None)) {}
DefaultedFunctionKind(DefaultedComparisonKind Comp)5897     DefaultedFunctionKind(DefaultedComparisonKind Comp)
5898         : SpecialMember(llvm::to_underlying(CXXSpecialMemberKind::Invalid)),
5899           Comparison(llvm::to_underlying(Comp)) {}
5900 
isSpecialMember()5901     bool isSpecialMember() const {
5902       return static_cast<CXXSpecialMemberKind>(SpecialMember) !=
5903              CXXSpecialMemberKind::Invalid;
5904     }
isComparison()5905     bool isComparison() const {
5906       return static_cast<DefaultedComparisonKind>(Comparison) !=
5907              DefaultedComparisonKind::None;
5908     }
5909 
5910     explicit operator bool() const {
5911       return isSpecialMember() || isComparison();
5912     }
5913 
asSpecialMember()5914     CXXSpecialMemberKind asSpecialMember() const {
5915       return static_cast<CXXSpecialMemberKind>(SpecialMember);
5916     }
asComparison()5917     DefaultedComparisonKind asComparison() const {
5918       return static_cast<DefaultedComparisonKind>(Comparison);
5919     }
5920 
5921     /// Get the index of this function kind for use in diagnostics.
getDiagnosticIndex()5922     unsigned getDiagnosticIndex() const {
5923       static_assert(llvm::to_underlying(CXXSpecialMemberKind::Invalid) >
5924                         llvm::to_underlying(CXXSpecialMemberKind::Destructor),
5925                     "invalid should have highest index");
5926       static_assert((unsigned)DefaultedComparisonKind::None == 0,
5927                     "none should be equal to zero");
5928       return SpecialMember + Comparison;
5929     }
5930   };
5931 
5932   /// Determine the kind of defaulting that would be done for a given function.
5933   ///
5934   /// If the function is both a default constructor and a copy / move
5935   /// constructor (due to having a default argument for the first parameter),
5936   /// this picks CXXSpecialMemberKind::DefaultConstructor.
5937   ///
5938   /// FIXME: Check that case is properly handled by all callers.
5939   DefaultedFunctionKind getDefaultedFunctionKind(const FunctionDecl *FD);
5940 
5941   /// Handle a C++11 empty-declaration and attribute-declaration.
5942   Decl *ActOnEmptyDeclaration(Scope *S, const ParsedAttributesView &AttrList,
5943                               SourceLocation SemiLoc);
5944 
5945   enum class CheckConstexprKind {
5946     /// Diagnose issues that are non-constant or that are extensions.
5947     Diagnose,
5948     /// Identify whether this function satisfies the formal rules for constexpr
5949     /// functions in the current lanugage mode (with no extensions).
5950     CheckValid
5951   };
5952 
5953   // Check whether a function declaration satisfies the requirements of a
5954   // constexpr function definition or a constexpr constructor definition. If so,
5955   // return true. If not, produce appropriate diagnostics (unless asked not to
5956   // by Kind) and return false.
5957   //
5958   // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
5959   bool CheckConstexprFunctionDefinition(const FunctionDecl *FD,
5960                                         CheckConstexprKind Kind);
5961 
5962   /// Diagnose methods which overload virtual methods in a base class
5963   /// without overriding any.
5964   void DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD);
5965 
5966   /// Check if a method overloads virtual methods in a base class without
5967   /// overriding any.
5968   void
5969   FindHiddenVirtualMethods(CXXMethodDecl *MD,
5970                            SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods);
5971   void
5972   NoteHiddenVirtualMethods(CXXMethodDecl *MD,
5973                            SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods);
5974 
5975   /// ActOnParamDefaultArgument - Check whether the default argument
5976   /// provided for a function parameter is well-formed. If so, attach it
5977   /// to the parameter declaration.
5978   void ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
5979                                  Expr *defarg);
5980 
5981   /// ActOnParamUnparsedDefaultArgument - We've seen a default
5982   /// argument for a function parameter, but we can't parse it yet
5983   /// because we're inside a class definition. Note that this default
5984   /// argument will be parsed later.
5985   void ActOnParamUnparsedDefaultArgument(Decl *param, SourceLocation EqualLoc,
5986                                          SourceLocation ArgLoc);
5987 
5988   /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
5989   /// the default argument for the parameter param failed.
5990   void ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc,
5991                                       Expr *DefaultArg);
5992   ExprResult ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
5993                                          SourceLocation EqualLoc);
5994   void SetParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
5995                                SourceLocation EqualLoc);
5996 
5997   void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc);
5998   void SetDeclDeleted(Decl *dcl, SourceLocation DelLoc,
5999                       StringLiteral *Message = nullptr);
6000   void SetDeclDefaulted(Decl *dcl, SourceLocation DefaultLoc);
6001 
6002   void SetFunctionBodyKind(Decl *D, SourceLocation Loc, FnBodyKind BodyKind,
6003                            StringLiteral *DeletedMessage = nullptr);
6004   void ActOnStartTrailingRequiresClause(Scope *S, Declarator &D);
6005   ExprResult ActOnFinishTrailingRequiresClause(ExprResult ConstraintExpr);
6006   ExprResult ActOnRequiresClause(ExprResult ConstraintExpr);
6007 
6008   NamedDecl *
6009   ActOnDecompositionDeclarator(Scope *S, Declarator &D,
6010                                MultiTemplateParamsArg TemplateParamLists);
6011   void DiagPlaceholderVariableDefinition(SourceLocation Loc);
6012   bool DiagRedefinedPlaceholderFieldDecl(SourceLocation Loc,
6013                                          RecordDecl *ClassDecl,
6014                                          const IdentifierInfo *Name);
6015 
6016   void CheckCompleteDecompositionDeclaration(DecompositionDecl *DD);
6017 
6018   /// Stack containing information needed when in C++2a an 'auto' is encountered
6019   /// in a function declaration parameter type specifier in order to invent a
6020   /// corresponding template parameter in the enclosing abbreviated function
6021   /// template. This information is also present in LambdaScopeInfo, stored in
6022   /// the FunctionScopes stack.
6023   SmallVector<InventedTemplateParameterInfo, 4> InventedParameterInfos;
6024 
6025   /// FieldCollector - Collects CXXFieldDecls during parsing of C++ classes.
6026   std::unique_ptr<CXXFieldCollector> FieldCollector;
6027 
6028   typedef llvm::SmallSetVector<const NamedDecl *, 16> NamedDeclSetType;
6029   /// Set containing all declared private fields that are not used.
6030   NamedDeclSetType UnusedPrivateFields;
6031 
6032   typedef llvm::SmallPtrSet<const CXXRecordDecl *, 8> RecordDeclSetTy;
6033 
6034   /// PureVirtualClassDiagSet - a set of class declarations which we have
6035   /// emitted a list of pure virtual functions. Used to prevent emitting the
6036   /// same list more than once.
6037   std::unique_ptr<RecordDeclSetTy> PureVirtualClassDiagSet;
6038 
6039   typedef LazyVector<CXXConstructorDecl *, ExternalSemaSource,
6040                      &ExternalSemaSource::ReadDelegatingConstructors, 2, 2>
6041       DelegatingCtorDeclsType;
6042 
6043   /// All the delegating constructors seen so far in the file, used for
6044   /// cycle detection at the end of the TU.
6045   DelegatingCtorDeclsType DelegatingCtorDecls;
6046 
6047   /// The C++ "std" namespace, where the standard library resides.
6048   LazyDeclPtr StdNamespace;
6049 
6050   /// The C++ "std::initializer_list" template, which is defined in
6051   /// \<initializer_list>.
6052   ClassTemplateDecl *StdInitializerList;
6053 
6054   // Contains the locations of the beginning of unparsed default
6055   // argument locations.
6056   llvm::DenseMap<ParmVarDecl *, SourceLocation> UnparsedDefaultArgLocs;
6057 
6058   /// UndefinedInternals - all the used, undefined objects which require a
6059   /// definition in this translation unit.
6060   llvm::MapVector<NamedDecl *, SourceLocation> UndefinedButUsed;
6061 
6062   typedef llvm::PointerIntPair<CXXRecordDecl *, 3, CXXSpecialMemberKind>
6063       SpecialMemberDecl;
6064 
6065   /// The C++ special members which we are currently in the process of
6066   /// declaring. If this process recursively triggers the declaration of the
6067   /// same special member, we should act as if it is not yet declared.
6068   llvm::SmallPtrSet<SpecialMemberDecl, 4> SpecialMembersBeingDeclared;
6069 
6070   void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD);
6071 
6072   void ActOnDefaultCtorInitializers(Decl *CDtorDecl);
6073 
6074   typedef ProcessingContextState ParsingClassState;
PushParsingClass()6075   ParsingClassState PushParsingClass() {
6076     ParsingClassDepth++;
6077     return DelayedDiagnostics.pushUndelayed();
6078   }
PopParsingClass(ParsingClassState state)6079   void PopParsingClass(ParsingClassState state) {
6080     ParsingClassDepth--;
6081     DelayedDiagnostics.popUndelayed(state);
6082   }
6083 
6084   ValueDecl *tryLookupCtorInitMemberDecl(CXXRecordDecl *ClassDecl,
6085                                          CXXScopeSpec &SS,
6086                                          ParsedType TemplateTypeTy,
6087                                          IdentifierInfo *MemberOrBase);
6088 
6089 private:
6090   void setupImplicitSpecialMemberType(CXXMethodDecl *SpecialMem,
6091                                       QualType ResultTy,
6092                                       ArrayRef<QualType> Args);
6093 
6094   // A cache representing if we've fully checked the various comparison category
6095   // types stored in ASTContext. The bit-index corresponds to the integer value
6096   // of a ComparisonCategoryType enumerator.
6097   llvm::SmallBitVector FullyCheckedComparisonCategories;
6098 
6099   /// Check if there is a field shadowing.
6100   void CheckShadowInheritedFields(const SourceLocation &Loc,
6101                                   DeclarationName FieldName,
6102                                   const CXXRecordDecl *RD,
6103                                   bool DeclIsField = true);
6104 
6105   ///@}
6106 
6107   //
6108   //
6109   // -------------------------------------------------------------------------
6110   //
6111   //
6112 
6113   /// \name C++ Exception Specifications
6114   /// Implementations are in SemaExceptionSpec.cpp
6115   ///@{
6116 
6117 public:
6118   /// All the overriding functions seen during a class definition
6119   /// that had their exception spec checks delayed, plus the overridden
6120   /// function.
6121   SmallVector<std::pair<const CXXMethodDecl *, const CXXMethodDecl *>, 2>
6122       DelayedOverridingExceptionSpecChecks;
6123 
6124   /// All the function redeclarations seen during a class definition that had
6125   /// their exception spec checks delayed, plus the prior declaration they
6126   /// should be checked against. Except during error recovery, the new decl
6127   /// should always be a friend declaration, as that's the only valid way to
6128   /// redeclare a special member before its class is complete.
6129   SmallVector<std::pair<FunctionDecl *, FunctionDecl *>, 2>
6130       DelayedEquivalentExceptionSpecChecks;
6131 
6132   /// Determine if we're in a case where we need to (incorrectly) eagerly
6133   /// parse an exception specification to work around a libstdc++ bug.
6134   bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D);
6135 
6136   /// Check the given noexcept-specifier, convert its expression, and compute
6137   /// the appropriate ExceptionSpecificationType.
6138   ExprResult ActOnNoexceptSpec(Expr *NoexceptExpr,
6139                                ExceptionSpecificationType &EST);
6140 
6141   CanThrowResult canThrow(const Stmt *E);
6142   /// Determine whether the callee of a particular function call can throw.
6143   /// E, D and Loc are all optional.
6144   static CanThrowResult canCalleeThrow(Sema &S, const Expr *E, const Decl *D,
6145                                        SourceLocation Loc = SourceLocation());
6146   const FunctionProtoType *ResolveExceptionSpec(SourceLocation Loc,
6147                                                 const FunctionProtoType *FPT);
6148   void UpdateExceptionSpec(FunctionDecl *FD,
6149                            const FunctionProtoType::ExceptionSpecInfo &ESI);
6150 
6151   /// CheckSpecifiedExceptionType - Check if the given type is valid in an
6152   /// exception specification. Incomplete types, or pointers to incomplete types
6153   /// other than void are not allowed.
6154   ///
6155   /// \param[in,out] T  The exception type. This will be decayed to a pointer
6156   /// type
6157   ///                   when the input is an array or a function type.
6158   bool CheckSpecifiedExceptionType(QualType &T, SourceRange Range);
6159 
6160   /// CheckDistantExceptionSpec - Check if the given type is a pointer or
6161   /// pointer to member to a function with an exception specification. This
6162   /// means that it is invalid to add another level of indirection.
6163   bool CheckDistantExceptionSpec(QualType T);
6164   bool CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New);
6165 
6166   /// CheckEquivalentExceptionSpec - Check if the two types have equivalent
6167   /// exception specifications. Exception specifications are equivalent if
6168   /// they allow exactly the same set of exception types. It does not matter how
6169   /// that is achieved. See C++ [except.spec]p2.
6170   bool CheckEquivalentExceptionSpec(const FunctionProtoType *Old,
6171                                     SourceLocation OldLoc,
6172                                     const FunctionProtoType *New,
6173                                     SourceLocation NewLoc);
6174   bool CheckEquivalentExceptionSpec(const PartialDiagnostic &DiagID,
6175                                     const PartialDiagnostic &NoteID,
6176                                     const FunctionProtoType *Old,
6177                                     SourceLocation OldLoc,
6178                                     const FunctionProtoType *New,
6179                                     SourceLocation NewLoc);
6180   bool handlerCanCatch(QualType HandlerType, QualType ExceptionType);
6181 
6182   /// CheckExceptionSpecSubset - Check whether the second function type's
6183   /// exception specification is a subset (or equivalent) of the first function
6184   /// type. This is used by override and pointer assignment checks.
6185   bool CheckExceptionSpecSubset(
6186       const PartialDiagnostic &DiagID, const PartialDiagnostic &NestedDiagID,
6187       const PartialDiagnostic &NoteID, const PartialDiagnostic &NoThrowDiagID,
6188       const FunctionProtoType *Superset, bool SkipSupersetFirstParameter,
6189       SourceLocation SuperLoc, const FunctionProtoType *Subset,
6190       bool SkipSubsetFirstParameter, SourceLocation SubLoc);
6191 
6192   /// CheckParamExceptionSpec - Check if the parameter and return types of the
6193   /// two functions have equivalent exception specs. This is part of the
6194   /// assignment and override compatibility check. We do not check the
6195   /// parameters of parameter function pointers recursively, as no sane
6196   /// programmer would even be able to write such a function type.
6197   bool CheckParamExceptionSpec(
6198       const PartialDiagnostic &NestedDiagID, const PartialDiagnostic &NoteID,
6199       const FunctionProtoType *Target, bool SkipTargetFirstParameter,
6200       SourceLocation TargetLoc, const FunctionProtoType *Source,
6201       bool SkipSourceFirstParameter, SourceLocation SourceLoc);
6202 
6203   bool CheckExceptionSpecCompatibility(Expr *From, QualType ToType);
6204 
6205   /// CheckOverridingFunctionExceptionSpec - Checks whether the exception
6206   /// spec is a subset of base spec.
6207   bool CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
6208                                             const CXXMethodDecl *Old);
6209 
6210   ///@}
6211 
6212   //
6213   //
6214   // -------------------------------------------------------------------------
6215   //
6216   //
6217 
6218   /// \name Expressions
6219   /// Implementations are in SemaExpr.cpp
6220   ///@{
6221 
6222 public:
6223   /// Describes how the expressions currently being parsed are
6224   /// evaluated at run-time, if at all.
6225   enum class ExpressionEvaluationContext {
6226     /// The current expression and its subexpressions occur within an
6227     /// unevaluated operand (C++11 [expr]p7), such as the subexpression of
6228     /// \c sizeof, where the type of the expression may be significant but
6229     /// no code will be generated to evaluate the value of the expression at
6230     /// run time.
6231     Unevaluated,
6232 
6233     /// The current expression occurs within a braced-init-list within
6234     /// an unevaluated operand. This is mostly like a regular unevaluated
6235     /// context, except that we still instantiate constexpr functions that are
6236     /// referenced here so that we can perform narrowing checks correctly.
6237     UnevaluatedList,
6238 
6239     /// The current expression occurs within a discarded statement.
6240     /// This behaves largely similarly to an unevaluated operand in preventing
6241     /// definitions from being required, but not in other ways.
6242     DiscardedStatement,
6243 
6244     /// The current expression occurs within an unevaluated
6245     /// operand that unconditionally permits abstract references to
6246     /// fields, such as a SIZE operator in MS-style inline assembly.
6247     UnevaluatedAbstract,
6248 
6249     /// The current context is "potentially evaluated" in C++11 terms,
6250     /// but the expression is evaluated at compile-time (like the values of
6251     /// cases in a switch statement).
6252     ConstantEvaluated,
6253 
6254     /// In addition of being constant evaluated, the current expression
6255     /// occurs in an immediate function context - either a consteval function
6256     /// or a consteval if statement.
6257     ImmediateFunctionContext,
6258 
6259     /// The current expression is potentially evaluated at run time,
6260     /// which means that code may be generated to evaluate the value of the
6261     /// expression at run time.
6262     PotentiallyEvaluated,
6263 
6264     /// The current expression is potentially evaluated, but any
6265     /// declarations referenced inside that expression are only used if
6266     /// in fact the current expression is used.
6267     ///
6268     /// This value is used when parsing default function arguments, for which
6269     /// we would like to provide diagnostics (e.g., passing non-POD arguments
6270     /// through varargs) but do not want to mark declarations as "referenced"
6271     /// until the default argument is used.
6272     PotentiallyEvaluatedIfUsed
6273   };
6274 
6275   /// Store a set of either DeclRefExprs or MemberExprs that contain a reference
6276   /// to a variable (constant) that may or may not be odr-used in this Expr, and
6277   /// we won't know until all lvalue-to-rvalue and discarded value conversions
6278   /// have been applied to all subexpressions of the enclosing full expression.
6279   /// This is cleared at the end of each full expression.
6280   using MaybeODRUseExprSet = llvm::SmallSetVector<Expr *, 4>;
6281   MaybeODRUseExprSet MaybeODRUseExprs;
6282 
6283   using ImmediateInvocationCandidate = llvm::PointerIntPair<ConstantExpr *, 1>;
6284 
6285   /// Data structure used to record current or nested
6286   /// expression evaluation contexts.
6287   struct ExpressionEvaluationContextRecord {
6288     /// The expression evaluation context.
6289     ExpressionEvaluationContext Context;
6290 
6291     /// Whether the enclosing context needed a cleanup.
6292     CleanupInfo ParentCleanup;
6293 
6294     /// The number of active cleanup objects when we entered
6295     /// this expression evaluation context.
6296     unsigned NumCleanupObjects;
6297 
6298     /// The number of typos encountered during this expression evaluation
6299     /// context (i.e. the number of TypoExprs created).
6300     unsigned NumTypos;
6301 
6302     MaybeODRUseExprSet SavedMaybeODRUseExprs;
6303 
6304     /// The lambdas that are present within this context, if it
6305     /// is indeed an unevaluated context.
6306     SmallVector<LambdaExpr *, 2> Lambdas;
6307 
6308     /// The declaration that provides context for lambda expressions
6309     /// and block literals if the normal declaration context does not
6310     /// suffice, e.g., in a default function argument.
6311     Decl *ManglingContextDecl;
6312 
6313     /// If we are processing a decltype type, a set of call expressions
6314     /// for which we have deferred checking the completeness of the return type.
6315     SmallVector<CallExpr *, 8> DelayedDecltypeCalls;
6316 
6317     /// If we are processing a decltype type, a set of temporary binding
6318     /// expressions for which we have deferred checking the destructor.
6319     SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds;
6320 
6321     llvm::SmallPtrSet<const Expr *, 8> PossibleDerefs;
6322 
6323     /// Expressions appearing as the LHS of a volatile assignment in this
6324     /// context. We produce a warning for these when popping the context if
6325     /// they are not discarded-value expressions nor unevaluated operands.
6326     SmallVector<Expr *, 2> VolatileAssignmentLHSs;
6327 
6328     /// Set of candidates for starting an immediate invocation.
6329     llvm::SmallVector<ImmediateInvocationCandidate, 4>
6330         ImmediateInvocationCandidates;
6331 
6332     /// Set of DeclRefExprs referencing a consteval function when used in a
6333     /// context not already known to be immediately invoked.
6334     llvm::SmallPtrSet<DeclRefExpr *, 4> ReferenceToConsteval;
6335 
6336     /// P2718R0 - Lifetime extension in range-based for loops.
6337     /// MaterializeTemporaryExprs in for-range-init expressions which need to
6338     /// extend lifetime. Add MaterializeTemporaryExpr* if the value of
6339     /// InLifetimeExtendingContext is true.
6340     SmallVector<MaterializeTemporaryExpr *, 8> ForRangeLifetimeExtendTemps;
6341 
6342     /// \brief Describes whether we are in an expression constext which we have
6343     /// to handle differently.
6344     enum ExpressionKind {
6345       EK_Decltype,
6346       EK_TemplateArgument,
6347       EK_AttrArgument,
6348       EK_Other
6349     } ExprContext;
6350 
6351     // A context can be nested in both a discarded statement context and
6352     // an immediate function context, so they need to be tracked independently.
6353     bool InDiscardedStatement;
6354     bool InImmediateFunctionContext;
6355     bool InImmediateEscalatingFunctionContext;
6356 
6357     bool IsCurrentlyCheckingDefaultArgumentOrInitializer = false;
6358 
6359     // We are in a constant context, but we also allow
6360     // non constant expressions, for example for array bounds (which may be
6361     // VLAs).
6362     bool InConditionallyConstantEvaluateContext = false;
6363 
6364     /// Whether we are currently in a context in which all temporaries must be
6365     /// lifetime-extended, even if they're not bound to a reference (for
6366     /// example, in a for-range initializer).
6367     bool InLifetimeExtendingContext = false;
6368 
6369     // When evaluating immediate functions in the initializer of a default
6370     // argument or default member initializer, this is the declaration whose
6371     // default initializer is being evaluated and the location of the call
6372     // or constructor definition.
6373     struct InitializationContext {
InitializationContextExpressionEvaluationContextRecord::InitializationContext6374       InitializationContext(SourceLocation Loc, ValueDecl *Decl,
6375                             DeclContext *Context)
6376           : Loc(Loc), Decl(Decl), Context(Context) {
6377         assert(Decl && Context && "invalid initialization context");
6378       }
6379 
6380       SourceLocation Loc;
6381       ValueDecl *Decl = nullptr;
6382       DeclContext *Context = nullptr;
6383     };
6384     std::optional<InitializationContext> DelayedDefaultInitializationContext;
6385 
ExpressionEvaluationContextRecordExpressionEvaluationContextRecord6386     ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context,
6387                                       unsigned NumCleanupObjects,
6388                                       CleanupInfo ParentCleanup,
6389                                       Decl *ManglingContextDecl,
6390                                       ExpressionKind ExprContext)
6391         : Context(Context), ParentCleanup(ParentCleanup),
6392           NumCleanupObjects(NumCleanupObjects), NumTypos(0),
6393           ManglingContextDecl(ManglingContextDecl), ExprContext(ExprContext),
6394           InDiscardedStatement(false), InImmediateFunctionContext(false),
6395           InImmediateEscalatingFunctionContext(false) {}
6396 
isUnevaluatedExpressionEvaluationContextRecord6397     bool isUnevaluated() const {
6398       return Context == ExpressionEvaluationContext::Unevaluated ||
6399              Context == ExpressionEvaluationContext::UnevaluatedAbstract ||
6400              Context == ExpressionEvaluationContext::UnevaluatedList;
6401     }
6402 
isPotentiallyEvaluatedExpressionEvaluationContextRecord6403     bool isPotentiallyEvaluated() const {
6404       return Context == ExpressionEvaluationContext::PotentiallyEvaluated ||
6405              Context ==
6406                  ExpressionEvaluationContext::PotentiallyEvaluatedIfUsed ||
6407              Context == ExpressionEvaluationContext::ConstantEvaluated;
6408     }
6409 
isConstantEvaluatedExpressionEvaluationContextRecord6410     bool isConstantEvaluated() const {
6411       return Context == ExpressionEvaluationContext::ConstantEvaluated ||
6412              Context == ExpressionEvaluationContext::ImmediateFunctionContext;
6413     }
6414 
isImmediateFunctionContextExpressionEvaluationContextRecord6415     bool isImmediateFunctionContext() const {
6416       return Context == ExpressionEvaluationContext::ImmediateFunctionContext ||
6417              (Context == ExpressionEvaluationContext::DiscardedStatement &&
6418               InImmediateFunctionContext) ||
6419              // C++23 [expr.const]p14:
6420              // An expression or conversion is in an immediate function
6421              // context if it is potentially evaluated and either:
6422              //   * its innermost enclosing non-block scope is a function
6423              //     parameter scope of an immediate function, or
6424              //   * its enclosing statement is enclosed by the compound-
6425              //     statement of a consteval if statement.
6426              (Context == ExpressionEvaluationContext::PotentiallyEvaluated &&
6427               InImmediateFunctionContext);
6428     }
6429 
isDiscardedStatementContextExpressionEvaluationContextRecord6430     bool isDiscardedStatementContext() const {
6431       return Context == ExpressionEvaluationContext::DiscardedStatement ||
6432              (Context ==
6433                   ExpressionEvaluationContext::ImmediateFunctionContext &&
6434               InDiscardedStatement);
6435     }
6436   };
6437 
currentEvaluationContext()6438   const ExpressionEvaluationContextRecord &currentEvaluationContext() const {
6439     assert(!ExprEvalContexts.empty() &&
6440            "Must be in an expression evaluation context");
6441     return ExprEvalContexts.back();
6442   };
6443 
currentEvaluationContext()6444   ExpressionEvaluationContextRecord &currentEvaluationContext() {
6445     assert(!ExprEvalContexts.empty() &&
6446            "Must be in an expression evaluation context");
6447     return ExprEvalContexts.back();
6448   };
6449 
parentEvaluationContext()6450   ExpressionEvaluationContextRecord &parentEvaluationContext() {
6451     assert(ExprEvalContexts.size() >= 2 &&
6452            "Must be in an expression evaluation context");
6453     return ExprEvalContexts[ExprEvalContexts.size() - 2];
6454   };
6455 
parentEvaluationContext()6456   const ExpressionEvaluationContextRecord &parentEvaluationContext() const {
6457     return const_cast<Sema *>(this)->parentEvaluationContext();
6458   };
6459 
isAttrContext()6460   bool isAttrContext() const {
6461     return ExprEvalContexts.back().ExprContext ==
6462            ExpressionEvaluationContextRecord::ExpressionKind::EK_AttrArgument;
6463   }
6464 
6465   /// Increment when we find a reference; decrement when we find an ignored
6466   /// assignment.  Ultimately the value is 0 if every reference is an ignored
6467   /// assignment.
6468   llvm::DenseMap<const VarDecl *, int> RefsMinusAssignments;
6469 
6470   /// Used to control the generation of ExprWithCleanups.
6471   CleanupInfo Cleanup;
6472 
6473   /// ExprCleanupObjects - This is the stack of objects requiring
6474   /// cleanup that are created by the current full expression.
6475   SmallVector<ExprWithCleanups::CleanupObject, 8> ExprCleanupObjects;
6476 
6477   // AssignmentAction - This is used by all the assignment diagnostic functions
6478   // to represent what is actually causing the operation
6479   enum AssignmentAction {
6480     AA_Assigning,
6481     AA_Passing,
6482     AA_Returning,
6483     AA_Converting,
6484     AA_Initializing,
6485     AA_Sending,
6486     AA_Casting,
6487     AA_Passing_CFAudited
6488   };
6489 
6490   /// Determine whether the use of this declaration is valid, without
6491   /// emitting diagnostics.
6492   bool CanUseDecl(NamedDecl *D, bool TreatUnavailableAsInvalid);
6493   // A version of DiagnoseUseOfDecl that should be used if overload resolution
6494   // has been used to find this declaration, which means we don't have to bother
6495   // checking the trailing requires clause.
DiagnoseUseOfOverloadedDecl(NamedDecl * D,SourceLocation Loc)6496   bool DiagnoseUseOfOverloadedDecl(NamedDecl *D, SourceLocation Loc) {
6497     return DiagnoseUseOfDecl(
6498         D, Loc, /*UnknownObjCClass=*/nullptr, /*ObjCPropertyAccess=*/false,
6499         /*AvoidPartialAvailabilityChecks=*/false, /*ClassReceiver=*/nullptr,
6500         /*SkipTrailingRequiresClause=*/true);
6501   }
6502 
6503   /// Determine whether the use of this declaration is valid, and
6504   /// emit any corresponding diagnostics.
6505   ///
6506   /// This routine diagnoses various problems with referencing
6507   /// declarations that can occur when using a declaration. For example,
6508   /// it might warn if a deprecated or unavailable declaration is being
6509   /// used, or produce an error (and return true) if a C++0x deleted
6510   /// function is being used.
6511   ///
6512   /// \returns true if there was an error (this declaration cannot be
6513   /// referenced), false otherwise.
6514   bool DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs,
6515                          const ObjCInterfaceDecl *UnknownObjCClass = nullptr,
6516                          bool ObjCPropertyAccess = false,
6517                          bool AvoidPartialAvailabilityChecks = false,
6518                          ObjCInterfaceDecl *ClassReciever = nullptr,
6519                          bool SkipTrailingRequiresClause = false);
6520 
6521   /// Emit a note explaining that this function is deleted.
6522   void NoteDeletedFunction(FunctionDecl *FD);
6523 
6524   /// DiagnoseSentinelCalls - This routine checks whether a call or
6525   /// message-send is to a declaration with the sentinel attribute, and
6526   /// if so, it checks that the requirements of the sentinel are
6527   /// satisfied.
6528   void DiagnoseSentinelCalls(const NamedDecl *D, SourceLocation Loc,
6529                              ArrayRef<Expr *> Args);
6530 
6531   void PushExpressionEvaluationContext(
6532       ExpressionEvaluationContext NewContext, Decl *LambdaContextDecl = nullptr,
6533       ExpressionEvaluationContextRecord::ExpressionKind Type =
6534           ExpressionEvaluationContextRecord::EK_Other);
6535   enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl };
6536   void PushExpressionEvaluationContext(
6537       ExpressionEvaluationContext NewContext, ReuseLambdaContextDecl_t,
6538       ExpressionEvaluationContextRecord::ExpressionKind Type =
6539           ExpressionEvaluationContextRecord::EK_Other);
6540   void PopExpressionEvaluationContext();
6541 
6542   void DiscardCleanupsInEvaluationContext();
6543 
6544   ExprResult TransformToPotentiallyEvaluated(Expr *E);
6545   TypeSourceInfo *TransformToPotentiallyEvaluated(TypeSourceInfo *TInfo);
6546   ExprResult HandleExprEvaluationContextForTypeof(Expr *E);
6547 
6548   /// Check whether E, which is either a discarded-value expression or an
6549   /// unevaluated operand, is a simple-assignment to a volatlie-qualified
6550   /// lvalue, and if so, remove it from the list of volatile-qualified
6551   /// assignments that we are going to warn are deprecated.
6552   void CheckUnusedVolatileAssignment(Expr *E);
6553 
6554   ExprResult ActOnConstantExpression(ExprResult Res);
6555 
6556   // Functions for marking a declaration referenced.  These functions also
6557   // contain the relevant logic for marking if a reference to a function or
6558   // variable is an odr-use (in the C++11 sense).  There are separate variants
6559   // for expressions referring to a decl; these exist because odr-use marking
6560   // needs to be delayed for some constant variables when we build one of the
6561   // named expressions.
6562   //
6563   // MightBeOdrUse indicates whether the use could possibly be an odr-use, and
6564   // should usually be true. This only needs to be set to false if the lack of
6565   // odr-use cannot be determined from the current context (for instance,
6566   // because the name denotes a virtual function and was written without an
6567   // explicit nested-name-specifier).
6568   void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse);
6569 
6570   /// Mark a function referenced, and check whether it is odr-used
6571   /// (C++ [basic.def.odr]p2, C99 6.9p3)
6572   void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func,
6573                               bool MightBeOdrUse = true);
6574 
6575   /// Mark a variable referenced, and check whether it is odr-used
6576   /// (C++ [basic.def.odr]p2, C99 6.9p3).  Note that this should not be
6577   /// used directly for normal expressions referring to VarDecl.
6578   void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var);
6579 
6580   /// Perform reference-marking and odr-use handling for a DeclRefExpr.
6581   ///
6582   /// Note, this may change the dependence of the DeclRefExpr, and so needs to
6583   /// be handled with care if the DeclRefExpr is not newly-created.
6584   void MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base = nullptr);
6585 
6586   /// Perform reference-marking and odr-use handling for a MemberExpr.
6587   void MarkMemberReferenced(MemberExpr *E);
6588 
6589   /// Perform reference-marking and odr-use handling for a FunctionParmPackExpr.
6590   void MarkFunctionParmPackReferenced(FunctionParmPackExpr *E);
6591   void MarkCaptureUsedInEnclosingContext(ValueDecl *Capture, SourceLocation Loc,
6592                                          unsigned CapturingScopeIndex);
6593 
6594   ExprResult CheckLValueToRValueConversionOperand(Expr *E);
6595   void CleanupVarDeclMarking();
6596 
6597   enum TryCaptureKind {
6598     TryCapture_Implicit,
6599     TryCapture_ExplicitByVal,
6600     TryCapture_ExplicitByRef
6601   };
6602 
6603   /// Try to capture the given variable.
6604   ///
6605   /// \param Var The variable to capture.
6606   ///
6607   /// \param Loc The location at which the capture occurs.
6608   ///
6609   /// \param Kind The kind of capture, which may be implicit (for either a
6610   /// block or a lambda), or explicit by-value or by-reference (for a lambda).
6611   ///
6612   /// \param EllipsisLoc The location of the ellipsis, if one is provided in
6613   /// an explicit lambda capture.
6614   ///
6615   /// \param BuildAndDiagnose Whether we are actually supposed to add the
6616   /// captures or diagnose errors. If false, this routine merely check whether
6617   /// the capture can occur without performing the capture itself or complaining
6618   /// if the variable cannot be captured.
6619   ///
6620   /// \param CaptureType Will be set to the type of the field used to capture
6621   /// this variable in the innermost block or lambda. Only valid when the
6622   /// variable can be captured.
6623   ///
6624   /// \param DeclRefType Will be set to the type of a reference to the capture
6625   /// from within the current scope. Only valid when the variable can be
6626   /// captured.
6627   ///
6628   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
6629   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
6630   /// This is useful when enclosing lambdas must speculatively capture
6631   /// variables that may or may not be used in certain specializations of
6632   /// a nested generic lambda.
6633   ///
6634   /// \returns true if an error occurred (i.e., the variable cannot be
6635   /// captured) and false if the capture succeeded.
6636   bool tryCaptureVariable(ValueDecl *Var, SourceLocation Loc,
6637                           TryCaptureKind Kind, SourceLocation EllipsisLoc,
6638                           bool BuildAndDiagnose, QualType &CaptureType,
6639                           QualType &DeclRefType,
6640                           const unsigned *const FunctionScopeIndexToStopAt);
6641 
6642   /// Try to capture the given variable.
6643   bool tryCaptureVariable(ValueDecl *Var, SourceLocation Loc,
6644                           TryCaptureKind Kind = TryCapture_Implicit,
6645                           SourceLocation EllipsisLoc = SourceLocation());
6646 
6647   /// Checks if the variable must be captured.
6648   bool NeedToCaptureVariable(ValueDecl *Var, SourceLocation Loc);
6649 
6650   /// Given a variable, determine the type that a reference to that
6651   /// variable will have in the given scope.
6652   QualType getCapturedDeclRefType(ValueDecl *Var, SourceLocation Loc);
6653 
6654   /// Mark all of the declarations referenced within a particular AST node as
6655   /// referenced. Used when template instantiation instantiates a non-dependent
6656   /// type -- entities referenced by the type are now referenced.
6657   void MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T);
6658 
6659   /// Mark any declarations that appear within this expression or any
6660   /// potentially-evaluated subexpressions as "referenced".
6661   ///
6662   /// \param SkipLocalVariables If true, don't mark local variables as
6663   /// 'referenced'.
6664   /// \param StopAt Subexpressions that we shouldn't recurse into.
6665   void MarkDeclarationsReferencedInExpr(
6666       Expr *E, bool SkipLocalVariables = false,
6667       ArrayRef<const Expr *> StopAt = std::nullopt);
6668 
6669   /// Try to convert an expression \p E to type \p Ty. Returns the result of the
6670   /// conversion.
6671   ExprResult tryConvertExprToType(Expr *E, QualType Ty);
6672 
6673   /// Conditionally issue a diagnostic based on the statements's reachability
6674   /// analysis.
6675   ///
6676   /// \param Stmts If Stmts is non-empty, delay reporting the diagnostic until
6677   /// the function body is parsed, and then do a basic reachability analysis to
6678   /// determine if the statement is reachable. If it is unreachable, the
6679   /// diagnostic will not be emitted.
6680   bool DiagIfReachable(SourceLocation Loc, ArrayRef<const Stmt *> Stmts,
6681                        const PartialDiagnostic &PD);
6682 
6683   /// Conditionally issue a diagnostic based on the current
6684   /// evaluation context.
6685   ///
6686   /// \param Statement If Statement is non-null, delay reporting the
6687   /// diagnostic until the function body is parsed, and then do a basic
6688   /// reachability analysis to determine if the statement is reachable.
6689   /// If it is unreachable, the diagnostic will not be emitted.
6690   bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement,
6691                            const PartialDiagnostic &PD);
6692   /// Similar, but diagnostic is only produced if all the specified statements
6693   /// are reachable.
6694   bool DiagRuntimeBehavior(SourceLocation Loc, ArrayRef<const Stmt *> Stmts,
6695                            const PartialDiagnostic &PD);
6696 
6697   // Primary Expressions.
6698   SourceRange getExprRange(Expr *E) const;
6699 
6700   ExprResult ActOnIdExpression(Scope *S, CXXScopeSpec &SS,
6701                                SourceLocation TemplateKWLoc, UnqualifiedId &Id,
6702                                bool HasTrailingLParen, bool IsAddressOfOperand,
6703                                CorrectionCandidateCallback *CCC = nullptr,
6704                                bool IsInlineAsmIdentifier = false,
6705                                Token *KeywordReplacement = nullptr);
6706 
6707   /// Decomposes the given name into a DeclarationNameInfo, its location, and
6708   /// possibly a list of template arguments.
6709   ///
6710   /// If this produces template arguments, it is permitted to call
6711   /// DecomposeTemplateName.
6712   ///
6713   /// This actually loses a lot of source location information for
6714   /// non-standard name kinds; we should consider preserving that in
6715   /// some way.
6716   void DecomposeUnqualifiedId(const UnqualifiedId &Id,
6717                               TemplateArgumentListInfo &Buffer,
6718                               DeclarationNameInfo &NameInfo,
6719                               const TemplateArgumentListInfo *&TemplateArgs);
6720 
6721   /// Diagnose a lookup that found results in an enclosing class during error
6722   /// recovery. This usually indicates that the results were found in a
6723   /// dependent base class that could not be searched as part of a template
6724   /// definition. Always issues a diagnostic (though this may be only a warning
6725   /// in MS compatibility mode).
6726   ///
6727   /// Return \c true if the error is unrecoverable, or \c false if the caller
6728   /// should attempt to recover using these lookup results.
6729   bool DiagnoseDependentMemberLookup(const LookupResult &R);
6730 
6731   /// Diagnose an empty lookup.
6732   ///
6733   /// \return false if new lookup candidates were found
6734   bool
6735   DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R,
6736                       CorrectionCandidateCallback &CCC,
6737                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
6738                       ArrayRef<Expr *> Args = std::nullopt,
6739                       DeclContext *LookupCtx = nullptr,
6740                       TypoExpr **Out = nullptr);
6741 
6742   /// If \p D cannot be odr-used in the current expression evaluation context,
6743   /// return a reason explaining why. Otherwise, return NOUR_None.
6744   NonOdrUseReason getNonOdrUseReasonInCurrentContext(ValueDecl *D);
6745 
6746   DeclRefExpr *BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
6747                                 SourceLocation Loc,
6748                                 const CXXScopeSpec *SS = nullptr);
6749   DeclRefExpr *
6750   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
6751                    const DeclarationNameInfo &NameInfo,
6752                    const CXXScopeSpec *SS = nullptr,
6753                    NamedDecl *FoundD = nullptr,
6754                    SourceLocation TemplateKWLoc = SourceLocation(),
6755                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
6756 
6757   /// BuildDeclRefExpr - Build an expression that references a
6758   /// declaration that does not require a closure capture.
6759   DeclRefExpr *
6760   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
6761                    const DeclarationNameInfo &NameInfo,
6762                    NestedNameSpecifierLoc NNS, NamedDecl *FoundD = nullptr,
6763                    SourceLocation TemplateKWLoc = SourceLocation(),
6764                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
6765 
6766   bool UseArgumentDependentLookup(const CXXScopeSpec &SS, const LookupResult &R,
6767                                   bool HasTrailingLParen);
6768 
6769   /// BuildQualifiedDeclarationNameExpr - Build a C++ qualified
6770   /// declaration name, generally during template instantiation.
6771   /// There's a large number of things which don't need to be done along
6772   /// this path.
6773   ExprResult BuildQualifiedDeclarationNameExpr(
6774       CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo,
6775       bool IsAddressOfOperand, TypeSourceInfo **RecoveryTSI = nullptr);
6776 
6777   ExprResult BuildDeclarationNameExpr(const CXXScopeSpec &SS, LookupResult &R,
6778                                       bool NeedsADL,
6779                                       bool AcceptInvalidDecl = false);
6780 
6781   /// Complete semantic analysis for a reference to the given declaration.
6782   ExprResult BuildDeclarationNameExpr(
6783       const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D,
6784       NamedDecl *FoundD = nullptr,
6785       const TemplateArgumentListInfo *TemplateArgs = nullptr,
6786       bool AcceptInvalidDecl = false);
6787 
6788   // ExpandFunctionLocalPredefinedMacros - Returns a new vector of Tokens,
6789   // where Tokens representing function local predefined macros (such as
6790   // __FUNCTION__) are replaced (expanded) with string-literal Tokens.
6791   std::vector<Token> ExpandFunctionLocalPredefinedMacros(ArrayRef<Token> Toks);
6792 
6793   ExprResult BuildPredefinedExpr(SourceLocation Loc, PredefinedIdentKind IK);
6794   ExprResult ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind);
6795   ExprResult ActOnIntegerConstant(SourceLocation Loc, uint64_t Val);
6796 
6797   bool CheckLoopHintExpr(Expr *E, SourceLocation Loc, bool AllowZero);
6798 
6799   ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr);
6800   ExprResult ActOnCharacterConstant(const Token &Tok,
6801                                     Scope *UDLScope = nullptr);
6802   ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E);
6803   ExprResult ActOnParenListExpr(SourceLocation L, SourceLocation R,
6804                                 MultiExprArg Val);
6805 
6806   /// ActOnStringLiteral - The specified tokens were lexed as pasted string
6807   /// fragments (e.g. "foo" "bar" L"baz").  The result string has to handle
6808   /// string concatenation ([C99 5.1.1.2, translation phase #6]), so it may come
6809   /// from multiple tokens.  However, the common case is that StringToks points
6810   /// to one string.
6811   ExprResult ActOnStringLiteral(ArrayRef<Token> StringToks,
6812                                 Scope *UDLScope = nullptr);
6813 
6814   ExprResult ActOnUnevaluatedStringLiteral(ArrayRef<Token> StringToks);
6815 
6816   /// ControllingExprOrType is either an opaque pointer coming out of a
6817   /// ParsedType or an Expr *. FIXME: it'd be better to split this interface
6818   /// into two so we don't take a void *, but that's awkward because one of
6819   /// the operands is either a ParsedType or an Expr *, which doesn't lend
6820   /// itself to generic code very well.
6821   ExprResult ActOnGenericSelectionExpr(SourceLocation KeyLoc,
6822                                        SourceLocation DefaultLoc,
6823                                        SourceLocation RParenLoc,
6824                                        bool PredicateIsExpr,
6825                                        void *ControllingExprOrType,
6826                                        ArrayRef<ParsedType> ArgTypes,
6827                                        ArrayRef<Expr *> ArgExprs);
6828   /// ControllingExprOrType is either a TypeSourceInfo * or an Expr *. FIXME:
6829   /// it'd be better to split this interface into two so we don't take a
6830   /// void *, but see the FIXME on ActOnGenericSelectionExpr as to why that
6831   /// isn't a trivial change.
6832   ExprResult CreateGenericSelectionExpr(SourceLocation KeyLoc,
6833                                         SourceLocation DefaultLoc,
6834                                         SourceLocation RParenLoc,
6835                                         bool PredicateIsExpr,
6836                                         void *ControllingExprOrType,
6837                                         ArrayRef<TypeSourceInfo *> Types,
6838                                         ArrayRef<Expr *> Exprs);
6839 
6840   // Binary/Unary Operators.  'Tok' is the token for the operator.
6841   ExprResult CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
6842                                   Expr *InputExpr, bool IsAfterAmp = false);
6843   ExprResult BuildUnaryOp(Scope *S, SourceLocation OpLoc, UnaryOperatorKind Opc,
6844                           Expr *Input, bool IsAfterAmp = false);
6845 
6846   /// Unary Operators.  'Tok' is the token for the operator.
6847   ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc, tok::TokenKind Op,
6848                           Expr *Input, bool IsAfterAmp = false);
6849 
6850   /// Determine whether the given expression is a qualified member
6851   /// access expression, of a form that could be turned into a pointer to member
6852   /// with the address-of operator.
6853   bool isQualifiedMemberAccess(Expr *E);
6854   bool CheckUseOfCXXMethodAsAddressOfOperand(SourceLocation OpLoc,
6855                                              const Expr *Op,
6856                                              const CXXMethodDecl *MD);
6857 
6858   /// CheckAddressOfOperand - The operand of & must be either a function
6859   /// designator or an lvalue designating an object. If it is an lvalue, the
6860   /// object cannot be declared with storage class register or be a bit field.
6861   /// Note: The usual conversions are *not* applied to the operand of the &
6862   /// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.
6863   /// In C++, the operand might be an overloaded function name, in which case
6864   /// we allow the '&' but retain the overloaded-function type.
6865   QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc);
6866 
6867   /// ActOnAlignasTypeArgument - Handle @c alignas(type-id) and @c
6868   /// _Alignas(type-name) .
6869   /// [dcl.align] An alignment-specifier of the form
6870   /// alignas(type-id) has the same effect as alignas(alignof(type-id)).
6871   ///
6872   /// [N1570 6.7.5] _Alignas(type-name) is equivalent to
6873   /// _Alignas(_Alignof(type-name)).
6874   bool ActOnAlignasTypeArgument(StringRef KWName, ParsedType Ty,
6875                                 SourceLocation OpLoc, SourceRange R);
6876   bool CheckAlignasTypeArgument(StringRef KWName, TypeSourceInfo *TInfo,
6877                                 SourceLocation OpLoc, SourceRange R);
6878 
6879   /// Build a sizeof or alignof expression given a type operand.
6880   ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo,
6881                                             SourceLocation OpLoc,
6882                                             UnaryExprOrTypeTrait ExprKind,
6883                                             SourceRange R);
6884 
6885   /// Build a sizeof or alignof expression given an expression
6886   /// operand.
6887   ExprResult CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc,
6888                                             UnaryExprOrTypeTrait ExprKind);
6889 
6890   /// ActOnUnaryExprOrTypeTraitExpr - Handle @c sizeof(type) and @c sizeof @c
6891   /// expr and the same for @c alignof and @c __alignof
6892   /// Note that the ArgRange is invalid if isType is false.
6893   ExprResult ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc,
6894                                            UnaryExprOrTypeTrait ExprKind,
6895                                            bool IsType, void *TyOrEx,
6896                                            SourceRange ArgRange);
6897 
6898   /// Check for operands with placeholder types and complain if found.
6899   /// Returns ExprError() if there was an error and no recovery was possible.
6900   ExprResult CheckPlaceholderExpr(Expr *E);
6901   bool CheckVecStepExpr(Expr *E);
6902 
6903   /// Check the constraints on expression operands to unary type expression
6904   /// and type traits.
6905   ///
6906   /// Completes any types necessary and validates the constraints on the operand
6907   /// expression. The logic mostly mirrors the type-based overload, but may
6908   /// modify the expression as it completes the type for that expression through
6909   /// template instantiation, etc.
6910   bool CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind);
6911 
6912   /// Check the constraints on operands to unary expression and type
6913   /// traits.
6914   ///
6915   /// This will complete any types necessary, and validate the various
6916   /// constraints on those operands.
6917   ///
6918   /// The UsualUnaryConversions() function is *not* called by this routine.
6919   /// C99 6.3.2.1p[2-4] all state:
6920   ///   Except when it is the operand of the sizeof operator ...
6921   ///
6922   /// C++ [expr.sizeof]p4
6923   ///   The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6924   ///   standard conversions are not applied to the operand of sizeof.
6925   ///
6926   /// This policy is followed for all of the unary trait expressions.
6927   bool CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc,
6928                                         SourceRange ExprRange,
6929                                         UnaryExprOrTypeTrait ExprKind,
6930                                         StringRef KWName);
6931 
6932   ExprResult ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc,
6933                                  tok::TokenKind Kind, Expr *Input);
6934 
6935   ExprResult ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc,
6936                                      MultiExprArg ArgExprs,
6937                                      SourceLocation RLoc);
6938   ExprResult CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc,
6939                                              Expr *Idx, SourceLocation RLoc);
6940 
6941   ExprResult CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx,
6942                                               Expr *ColumnIdx,
6943                                               SourceLocation RBLoc);
6944 
6945   /// ConvertArgumentsForCall - Converts the arguments specified in
6946   /// Args/NumArgs to the parameter types of the function FDecl with
6947   /// function prototype Proto. Call is the call expression itself, and
6948   /// Fn is the function expression. For a C++ member function, this
6949   /// routine does not attempt to convert the object argument. Returns
6950   /// true if the call is ill-formed.
6951   bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl,
6952                                const FunctionProtoType *Proto,
6953                                ArrayRef<Expr *> Args, SourceLocation RParenLoc,
6954                                bool ExecConfig = false);
6955 
6956   /// CheckStaticArrayArgument - If the given argument corresponds to a static
6957   /// array parameter, check that it is non-null, and that if it is formed by
6958   /// array-to-pointer decay, the underlying array is sufficiently large.
6959   ///
6960   /// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of
6961   /// the array type derivation, then for each call to the function, the value
6962   /// of the corresponding actual argument shall provide access to the first
6963   /// element of an array with at least as many elements as specified by the
6964   /// size expression.
6965   void CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param,
6966                                 const Expr *ArgExpr);
6967 
6968   /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
6969   /// This provides the location of the left/right parens and a list of comma
6970   /// locations.
6971   ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
6972                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
6973                            Expr *ExecConfig = nullptr);
6974 
6975   /// BuildCallExpr - Handle a call to Fn with the specified array of arguments.
6976   /// This provides the location of the left/right parens and a list of comma
6977   /// locations.
6978   ExprResult BuildCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
6979                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
6980                            Expr *ExecConfig = nullptr,
6981                            bool IsExecConfig = false,
6982                            bool AllowRecovery = false);
6983 
6984   /// BuildBuiltinCallExpr - Create a call to a builtin function specified by Id
6985   //  with the specified CallArgs
6986   Expr *BuildBuiltinCallExpr(SourceLocation Loc, Builtin::ID Id,
6987                              MultiExprArg CallArgs);
6988 
6989   using ADLCallKind = CallExpr::ADLCallKind;
6990 
6991   /// BuildResolvedCallExpr - Build a call to a resolved expression,
6992   /// i.e. an expression not of \p OverloadTy.  The expression should
6993   /// unary-convert to an expression of function-pointer or
6994   /// block-pointer type.
6995   ///
6996   /// \param NDecl the declaration being called, if available
6997   ExprResult
6998   BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc,
6999                         ArrayRef<Expr *> Arg, SourceLocation RParenLoc,
7000                         Expr *Config = nullptr, bool IsExecConfig = false,
7001                         ADLCallKind UsesADL = ADLCallKind::NotADL);
7002 
7003   ExprResult ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D,
7004                            ParsedType &Ty, SourceLocation RParenLoc,
7005                            Expr *CastExpr);
7006 
7007   /// Prepares for a scalar cast, performing all the necessary stages
7008   /// except the final cast and returning the kind required.
7009   CastKind PrepareScalarCast(ExprResult &src, QualType destType);
7010 
7011   /// Build an altivec or OpenCL literal.
7012   ExprResult BuildVectorLiteral(SourceLocation LParenLoc,
7013                                 SourceLocation RParenLoc, Expr *E,
7014                                 TypeSourceInfo *TInfo);
7015 
7016   /// This is not an AltiVec-style cast or or C++ direct-initialization, so turn
7017   /// the ParenListExpr into a sequence of comma binary operators.
7018   ExprResult MaybeConvertParenListExprToParenExpr(Scope *S, Expr *ME);
7019 
7020   ExprResult ActOnCompoundLiteral(SourceLocation LParenLoc, ParsedType Ty,
7021                                   SourceLocation RParenLoc, Expr *InitExpr);
7022 
7023   ExprResult BuildCompoundLiteralExpr(SourceLocation LParenLoc,
7024                                       TypeSourceInfo *TInfo,
7025                                       SourceLocation RParenLoc,
7026                                       Expr *LiteralExpr);
7027 
7028   ExprResult ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList,
7029                            SourceLocation RBraceLoc);
7030 
7031   ExprResult BuildInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList,
7032                            SourceLocation RBraceLoc);
7033 
7034   /// Binary Operators.  'Tok' is the token for the operator.
7035   ExprResult ActOnBinOp(Scope *S, SourceLocation TokLoc, tok::TokenKind Kind,
7036                         Expr *LHSExpr, Expr *RHSExpr);
7037   ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc,
7038                         Expr *LHSExpr, Expr *RHSExpr);
7039 
7040   /// CreateBuiltinBinOp - Creates a new built-in binary operation with
7041   /// operator @p Opc at location @c TokLoc. This routine only supports
7042   /// built-in operations; ActOnBinOp handles overloaded operators.
7043   ExprResult CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc,
7044                                 Expr *LHSExpr, Expr *RHSExpr);
7045   void LookupBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc,
7046                    UnresolvedSetImpl &Functions);
7047 
7048   /// Look for instances where it is likely the comma operator is confused with
7049   /// another operator.  There is an explicit list of acceptable expressions for
7050   /// the left hand side of the comma operator, otherwise emit a warning.
7051   void DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc);
7052 
7053   /// ActOnConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
7054   /// in the case of a the GNU conditional expr extension.
7055   ExprResult ActOnConditionalOp(SourceLocation QuestionLoc,
7056                                 SourceLocation ColonLoc, Expr *CondExpr,
7057                                 Expr *LHSExpr, Expr *RHSExpr);
7058 
7059   /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
7060   ExprResult ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc,
7061                             LabelDecl *TheDecl);
7062 
7063   void ActOnStartStmtExpr();
7064   ExprResult ActOnStmtExpr(Scope *S, SourceLocation LPLoc, Stmt *SubStmt,
7065                            SourceLocation RPLoc);
7066   ExprResult BuildStmtExpr(SourceLocation LPLoc, Stmt *SubStmt,
7067                            SourceLocation RPLoc, unsigned TemplateDepth);
7068   // Handle the final expression in a statement expression.
7069   ExprResult ActOnStmtExprResult(ExprResult E);
7070   void ActOnStmtExprError();
7071 
7072   // __builtin_offsetof(type, identifier(.identifier|[expr])*)
7073   struct OffsetOfComponent {
7074     SourceLocation LocStart, LocEnd;
7075     bool isBrackets; // true if [expr], false if .ident
7076     union {
7077       IdentifierInfo *IdentInfo;
7078       Expr *E;
7079     } U;
7080   };
7081 
7082   /// __builtin_offsetof(type, a.b[123][456].c)
7083   ExprResult BuildBuiltinOffsetOf(SourceLocation BuiltinLoc,
7084                                   TypeSourceInfo *TInfo,
7085                                   ArrayRef<OffsetOfComponent> Components,
7086                                   SourceLocation RParenLoc);
7087   ExprResult ActOnBuiltinOffsetOf(Scope *S, SourceLocation BuiltinLoc,
7088                                   SourceLocation TypeLoc,
7089                                   ParsedType ParsedArgTy,
7090                                   ArrayRef<OffsetOfComponent> Components,
7091                                   SourceLocation RParenLoc);
7092 
7093   // __builtin_choose_expr(constExpr, expr1, expr2)
7094   ExprResult ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr,
7095                              Expr *LHSExpr, Expr *RHSExpr,
7096                              SourceLocation RPLoc);
7097 
7098   // __builtin_va_arg(expr, type)
7099   ExprResult ActOnVAArg(SourceLocation BuiltinLoc, Expr *E, ParsedType Ty,
7100                         SourceLocation RPLoc);
7101   ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E,
7102                             TypeSourceInfo *TInfo, SourceLocation RPLoc);
7103 
7104   // __builtin_LINE(), __builtin_FUNCTION(), __builtin_FUNCSIG(),
7105   // __builtin_FILE(), __builtin_COLUMN(), __builtin_source_location()
7106   ExprResult ActOnSourceLocExpr(SourceLocIdentKind Kind,
7107                                 SourceLocation BuiltinLoc,
7108                                 SourceLocation RPLoc);
7109 
7110   // #embed
7111   ExprResult ActOnEmbedExpr(SourceLocation EmbedKeywordLoc,
7112                             StringLiteral *BinaryData);
7113 
7114   // Build a potentially resolved SourceLocExpr.
7115   ExprResult BuildSourceLocExpr(SourceLocIdentKind Kind, QualType ResultTy,
7116                                 SourceLocation BuiltinLoc, SourceLocation RPLoc,
7117                                 DeclContext *ParentContext);
7118 
7119   // __null
7120   ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc);
7121 
7122   bool CheckCaseExpression(Expr *E);
7123 
7124   //===------------------------- "Block" Extension ------------------------===//
7125 
7126   /// ActOnBlockStart - This callback is invoked when a block literal is
7127   /// started.
7128   void ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope);
7129 
7130   /// ActOnBlockArguments - This callback allows processing of block arguments.
7131   /// If there are no arguments, this is still invoked.
7132   void ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo,
7133                            Scope *CurScope);
7134 
7135   /// ActOnBlockError - If there is an error parsing a block, this callback
7136   /// is invoked to pop the information about the block from the action impl.
7137   void ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope);
7138 
7139   /// ActOnBlockStmtExpr - This is called when the body of a block statement
7140   /// literal was successfully completed.  ^(int x){...}
7141   ExprResult ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body,
7142                                 Scope *CurScope);
7143 
7144   //===---------------------------- Clang Extensions ----------------------===//
7145 
7146   /// ActOnConvertVectorExpr - create a new convert-vector expression from the
7147   /// provided arguments.
7148   ///
7149   /// __builtin_convertvector( value, dst type )
7150   ///
7151   ExprResult ActOnConvertVectorExpr(Expr *E, ParsedType ParsedDestTy,
7152                                     SourceLocation BuiltinLoc,
7153                                     SourceLocation RParenLoc);
7154 
7155   //===---------------------------- OpenCL Features -----------------------===//
7156 
7157   /// Parse a __builtin_astype expression.
7158   ///
7159   /// __builtin_astype( value, dst type )
7160   ///
7161   ExprResult ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy,
7162                              SourceLocation BuiltinLoc,
7163                              SourceLocation RParenLoc);
7164 
7165   /// Create a new AsTypeExpr node (bitcast) from the arguments.
7166   ExprResult BuildAsTypeExpr(Expr *E, QualType DestTy,
7167                              SourceLocation BuiltinLoc,
7168                              SourceLocation RParenLoc);
7169 
7170   /// Attempts to produce a RecoveryExpr after some AST node cannot be created.
7171   ExprResult CreateRecoveryExpr(SourceLocation Begin, SourceLocation End,
7172                                 ArrayRef<Expr *> SubExprs,
7173                                 QualType T = QualType());
7174 
7175   /// Cast a base object to a member's actual type.
7176   ///
7177   /// There are two relevant checks:
7178   ///
7179   /// C++ [class.access.base]p7:
7180   ///
7181   ///   If a class member access operator [...] is used to access a non-static
7182   ///   data member or non-static member function, the reference is ill-formed
7183   ///   if the left operand [...] cannot be implicitly converted to a pointer to
7184   ///   the naming class of the right operand.
7185   ///
7186   /// C++ [expr.ref]p7:
7187   ///
7188   ///   If E2 is a non-static data member or a non-static member function, the
7189   ///   program is ill-formed if the class of which E2 is directly a member is
7190   ///   an ambiguous base (11.8) of the naming class (11.9.3) of E2.
7191   ///
7192   /// Note that the latter check does not consider access; the access of the
7193   /// "real" base class is checked as appropriate when checking the access of
7194   /// the member name.
7195   ExprResult PerformObjectMemberConversion(Expr *From,
7196                                            NestedNameSpecifier *Qualifier,
7197                                            NamedDecl *FoundDecl,
7198                                            NamedDecl *Member);
7199 
7200   /// CheckCallReturnType - Checks that a call expression's return type is
7201   /// complete. Returns true on failure. The location passed in is the location
7202   /// that best represents the call.
7203   bool CheckCallReturnType(QualType ReturnType, SourceLocation Loc,
7204                            CallExpr *CE, FunctionDecl *FD);
7205 
7206   /// Emit a warning for all pending noderef expressions that we recorded.
7207   void WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec);
7208 
7209   ExprResult BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field);
7210 
7211   /// Instantiate or parse a C++ default argument expression as necessary.
7212   /// Return true on error.
7213   bool CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD,
7214                               ParmVarDecl *Param, Expr *Init = nullptr,
7215                               bool SkipImmediateInvocations = true);
7216 
7217   /// BuildCXXDefaultArgExpr - Creates a CXXDefaultArgExpr, instantiating
7218   /// the default expr if needed.
7219   ExprResult BuildCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD,
7220                                     ParmVarDecl *Param, Expr *Init = nullptr);
7221 
7222   /// Wrap the expression in a ConstantExpr if it is a potential immediate
7223   /// invocation.
7224   ExprResult CheckForImmediateInvocation(ExprResult E, FunctionDecl *Decl);
7225 
7226   void MarkExpressionAsImmediateEscalating(Expr *E);
7227 
7228   // Check that the SME attributes for PSTATE.ZA and PSTATE.SM are compatible.
7229   bool IsInvalidSMECallConversion(QualType FromType, QualType ToType);
7230 
7231   /// Abstract base class used for diagnosing integer constant
7232   /// expression violations.
7233   class VerifyICEDiagnoser {
7234   public:
7235     bool Suppress;
7236 
Suppress(Suppress)7237     VerifyICEDiagnoser(bool Suppress = false) : Suppress(Suppress) {}
7238 
7239     virtual SemaDiagnosticBuilder
7240     diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T);
7241     virtual SemaDiagnosticBuilder diagnoseNotICE(Sema &S,
7242                                                  SourceLocation Loc) = 0;
7243     virtual SemaDiagnosticBuilder diagnoseFold(Sema &S, SourceLocation Loc);
~VerifyICEDiagnoser()7244     virtual ~VerifyICEDiagnoser() {}
7245   };
7246 
7247   enum AllowFoldKind {
7248     NoFold,
7249     AllowFold,
7250   };
7251 
7252   /// VerifyIntegerConstantExpression - Verifies that an expression is an ICE,
7253   /// and reports the appropriate diagnostics. Returns false on success.
7254   /// Can optionally return the value of the expression.
7255   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
7256                                              VerifyICEDiagnoser &Diagnoser,
7257                                              AllowFoldKind CanFold = NoFold);
7258   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
7259                                              unsigned DiagID,
7260                                              AllowFoldKind CanFold = NoFold);
7261   ExprResult VerifyIntegerConstantExpression(Expr *E,
7262                                              llvm::APSInt *Result = nullptr,
7263                                              AllowFoldKind CanFold = NoFold);
7264   ExprResult VerifyIntegerConstantExpression(Expr *E,
7265                                              AllowFoldKind CanFold = NoFold) {
7266     return VerifyIntegerConstantExpression(E, nullptr, CanFold);
7267   }
7268 
7269   /// DiagnoseAssignmentAsCondition - Given that an expression is
7270   /// being used as a boolean condition, warn if it's an assignment.
7271   void DiagnoseAssignmentAsCondition(Expr *E);
7272 
7273   /// Redundant parentheses over an equality comparison can indicate
7274   /// that the user intended an assignment used as condition.
7275   void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE);
7276 
7277   class FullExprArg {
7278   public:
FullExprArg()7279     FullExprArg() : E(nullptr) {}
FullExprArg(Sema & actions)7280     FullExprArg(Sema &actions) : E(nullptr) {}
7281 
release()7282     ExprResult release() { return E; }
7283 
get()7284     Expr *get() const { return E; }
7285 
7286     Expr *operator->() { return E; }
7287 
7288   private:
7289     // FIXME: No need to make the entire Sema class a friend when it's just
7290     // Sema::MakeFullExpr that needs access to the constructor below.
7291     friend class Sema;
7292 
FullExprArg(Expr * expr)7293     explicit FullExprArg(Expr *expr) : E(expr) {}
7294 
7295     Expr *E;
7296   };
7297 
MakeFullExpr(Expr * Arg)7298   FullExprArg MakeFullExpr(Expr *Arg) {
7299     return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation());
7300   }
MakeFullExpr(Expr * Arg,SourceLocation CC)7301   FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) {
7302     return FullExprArg(
7303         ActOnFinishFullExpr(Arg, CC, /*DiscardedValue*/ false).get());
7304   }
MakeFullDiscardedValueExpr(Expr * Arg)7305   FullExprArg MakeFullDiscardedValueExpr(Expr *Arg) {
7306     ExprResult FE =
7307         ActOnFinishFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation(),
7308                             /*DiscardedValue*/ true);
7309     return FullExprArg(FE.get());
7310   }
7311 
7312   class ConditionResult {
7313     Decl *ConditionVar;
7314     FullExprArg Condition;
7315     bool Invalid;
7316     std::optional<bool> KnownValue;
7317 
7318     friend class Sema;
ConditionResult(Sema & S,Decl * ConditionVar,FullExprArg Condition,bool IsConstexpr)7319     ConditionResult(Sema &S, Decl *ConditionVar, FullExprArg Condition,
7320                     bool IsConstexpr)
7321         : ConditionVar(ConditionVar), Condition(Condition), Invalid(false) {
7322       if (IsConstexpr && Condition.get()) {
7323         if (std::optional<llvm::APSInt> Val =
7324                 Condition.get()->getIntegerConstantExpr(S.Context)) {
7325           KnownValue = !!(*Val);
7326         }
7327       }
7328     }
ConditionResult(bool Invalid)7329     explicit ConditionResult(bool Invalid)
7330         : ConditionVar(nullptr), Condition(nullptr), Invalid(Invalid),
7331           KnownValue(std::nullopt) {}
7332 
7333   public:
ConditionResult()7334     ConditionResult() : ConditionResult(false) {}
isInvalid()7335     bool isInvalid() const { return Invalid; }
get()7336     std::pair<VarDecl *, Expr *> get() const {
7337       return std::make_pair(cast_or_null<VarDecl>(ConditionVar),
7338                             Condition.get());
7339     }
getKnownValue()7340     std::optional<bool> getKnownValue() const { return KnownValue; }
7341   };
ConditionError()7342   static ConditionResult ConditionError() { return ConditionResult(true); }
7343 
7344   /// CheckBooleanCondition - Diagnose problems involving the use of
7345   /// the given expression as a boolean condition (e.g. in an if
7346   /// statement).  Also performs the standard function and array
7347   /// decays, possibly changing the input variable.
7348   ///
7349   /// \param Loc - A location associated with the condition, e.g. the
7350   /// 'if' keyword.
7351   /// \return true iff there were any errors
7352   ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E,
7353                                    bool IsConstexpr = false);
7354 
7355   enum class ConditionKind {
7356     Boolean,     ///< A boolean condition, from 'if', 'while', 'for', or 'do'.
7357     ConstexprIf, ///< A constant boolean condition from 'if constexpr'.
7358     Switch       ///< An integral condition for a 'switch' statement.
7359   };
7360 
7361   ConditionResult ActOnCondition(Scope *S, SourceLocation Loc, Expr *SubExpr,
7362                                  ConditionKind CK, bool MissingOK = false);
7363 
7364   QualType CheckConditionalOperands( // C99 6.5.15
7365       ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK,
7366       ExprObjectKind &OK, SourceLocation QuestionLoc);
7367 
7368   /// Emit a specialized diagnostic when one expression is a null pointer
7369   /// constant and the other is not a pointer.  Returns true if a diagnostic is
7370   /// emitted.
7371   bool DiagnoseConditionalForNull(const Expr *LHSExpr, const Expr *RHSExpr,
7372                                   SourceLocation QuestionLoc);
7373 
7374   /// type checking for vector binary operators.
7375   QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS,
7376                                SourceLocation Loc, bool IsCompAssign,
7377                                bool AllowBothBool, bool AllowBoolConversion,
7378                                bool AllowBoolOperation, bool ReportInvalid);
7379 
7380   /// Return a signed ext_vector_type that is of identical size and number of
7381   /// elements. For floating point vectors, return an integer type of identical
7382   /// size and number of elements. In the non ext_vector_type case, search from
7383   /// the largest type to the smallest type to avoid cases where long long ==
7384   /// long, where long gets picked over long long.
7385   QualType GetSignedVectorType(QualType V);
7386   QualType GetSignedSizelessVectorType(QualType V);
7387 
7388   /// CheckVectorCompareOperands - vector comparisons are a clang extension that
7389   /// operates on extended vector types.  Instead of producing an IntTy result,
7390   /// like a scalar comparison, a vector comparison produces a vector of integer
7391   /// types.
7392   QualType CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS,
7393                                       SourceLocation Loc,
7394                                       BinaryOperatorKind Opc);
7395   QualType CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS,
7396                                               SourceLocation Loc,
7397                                               BinaryOperatorKind Opc);
7398   QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS,
7399                                       SourceLocation Loc);
7400 
7401   /// Context in which we're performing a usual arithmetic conversion.
7402   enum ArithConvKind {
7403     /// An arithmetic operation.
7404     ACK_Arithmetic,
7405     /// A bitwise operation.
7406     ACK_BitwiseOp,
7407     /// A comparison.
7408     ACK_Comparison,
7409     /// A conditional (?:) operator.
7410     ACK_Conditional,
7411     /// A compound assignment expression.
7412     ACK_CompAssign,
7413   };
7414 
7415   // type checking for sizeless vector binary operators.
7416   QualType CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS,
7417                                        SourceLocation Loc, bool IsCompAssign,
7418                                        ArithConvKind OperationKind);
7419 
7420   /// Type checking for matrix binary operators.
7421   QualType CheckMatrixElementwiseOperands(ExprResult &LHS, ExprResult &RHS,
7422                                           SourceLocation Loc,
7423                                           bool IsCompAssign);
7424   QualType CheckMatrixMultiplyOperands(ExprResult &LHS, ExprResult &RHS,
7425                                        SourceLocation Loc, bool IsCompAssign);
7426 
7427   /// Are the two types SVE-bitcast-compatible types? I.e. is bitcasting from
7428   /// the first SVE type (e.g. an SVE VLAT) to the second type (e.g. an SVE
7429   /// VLST) allowed?
7430   ///
7431   /// This will also return false if the two given types do not make sense from
7432   /// the perspective of SVE bitcasts.
7433   bool isValidSveBitcast(QualType srcType, QualType destType);
7434 
7435   /// Are the two types matrix types and do they have the same dimensions i.e.
7436   /// do they have the same number of rows and the same number of columns?
7437   bool areMatrixTypesOfTheSameDimension(QualType srcTy, QualType destTy);
7438 
7439   bool areVectorTypesSameSize(QualType srcType, QualType destType);
7440 
7441   /// Are the two types lax-compatible vector types?  That is, given
7442   /// that one of them is a vector, do they have equal storage sizes,
7443   /// where the storage size is the number of elements times the element
7444   /// size?
7445   ///
7446   /// This will also return false if either of the types is neither a
7447   /// vector nor a real type.
7448   bool areLaxCompatibleVectorTypes(QualType srcType, QualType destType);
7449 
7450   /// Is this a legal conversion between two types, one of which is
7451   /// known to be a vector type?
7452   bool isLaxVectorConversion(QualType srcType, QualType destType);
7453 
7454   // This returns true if at least one of the types is an altivec vector.
7455   bool anyAltivecTypes(QualType srcType, QualType destType);
7456 
7457   // type checking C++ declaration initializers (C++ [dcl.init]).
7458 
7459   /// Check a cast of an unknown-any type.  We intentionally only
7460   /// trigger this for C-style casts.
7461   ExprResult checkUnknownAnyCast(SourceRange TypeRange, QualType CastType,
7462                                  Expr *CastExpr, CastKind &CastKind,
7463                                  ExprValueKind &VK, CXXCastPath &Path);
7464 
7465   /// Force an expression with unknown-type to an expression of the
7466   /// given type.
7467   ExprResult forceUnknownAnyToType(Expr *E, QualType ToType);
7468 
7469   /// Type-check an expression that's being passed to an
7470   /// __unknown_anytype parameter.
7471   ExprResult checkUnknownAnyArg(SourceLocation callLoc, Expr *result,
7472                                 QualType &paramType);
7473 
7474   // CheckMatrixCast - Check type constraints for matrix casts.
7475   // We allow casting between matrixes of the same dimensions i.e. when they
7476   // have the same number of rows and column. Returns true if the cast is
7477   // invalid.
7478   bool CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy,
7479                        CastKind &Kind);
7480 
7481   // CheckVectorCast - check type constraints for vectors.
7482   // Since vectors are an extension, there are no C standard reference for this.
7483   // We allow casting between vectors and integer datatypes of the same size.
7484   // returns true if the cast is invalid
7485   bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty,
7486                        CastKind &Kind);
7487 
7488   /// Prepare `SplattedExpr` for a vector splat operation, adding
7489   /// implicit casts if necessary.
7490   ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr);
7491 
7492   // CheckExtVectorCast - check type constraints for extended vectors.
7493   // Since vectors are an extension, there are no C standard reference for this.
7494   // We allow casting between vectors and integer datatypes of the same size,
7495   // or vectors and the element type of that vector.
7496   // returns the cast expr
7497   ExprResult CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr,
7498                                 CastKind &Kind);
7499 
PreferredConditionType(ConditionKind K)7500   QualType PreferredConditionType(ConditionKind K) const {
7501     return K == ConditionKind::Switch ? Context.IntTy : Context.BoolTy;
7502   }
7503 
7504   // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts
7505   // functions and arrays to their respective pointers (C99 6.3.2.1).
7506   ExprResult UsualUnaryConversions(Expr *E);
7507 
7508   /// CallExprUnaryConversions - a special case of an unary conversion
7509   /// performed on a function designator of a call expression.
7510   ExprResult CallExprUnaryConversions(Expr *E);
7511 
7512   // DefaultFunctionArrayConversion - converts functions and arrays
7513   // to their respective pointers (C99 6.3.2.1).
7514   ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose = true);
7515 
7516   // DefaultFunctionArrayLvalueConversion - converts functions and
7517   // arrays to their respective pointers and performs the
7518   // lvalue-to-rvalue conversion.
7519   ExprResult DefaultFunctionArrayLvalueConversion(Expr *E,
7520                                                   bool Diagnose = true);
7521 
7522   // DefaultLvalueConversion - performs lvalue-to-rvalue conversion on
7523   // the operand. This function is a no-op if the operand has a function type
7524   // or an array type.
7525   ExprResult DefaultLvalueConversion(Expr *E);
7526 
7527   // DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that
7528   // do not have a prototype. Integer promotions are performed on each
7529   // argument, and arguments that have type float are promoted to double.
7530   ExprResult DefaultArgumentPromotion(Expr *E);
7531 
7532   VariadicCallType getVariadicCallType(FunctionDecl *FDecl,
7533                                        const FunctionProtoType *Proto,
7534                                        Expr *Fn);
7535 
7536   // Used for determining in which context a type is allowed to be passed to a
7537   // vararg function.
7538   enum VarArgKind {
7539     VAK_Valid,
7540     VAK_ValidInCXX11,
7541     VAK_Undefined,
7542     VAK_MSVCUndefined,
7543     VAK_Invalid
7544   };
7545 
7546   /// Determine the degree of POD-ness for an expression.
7547   /// Incomplete types are considered POD, since this check can be performed
7548   /// when we're in an unevaluated context.
7549   VarArgKind isValidVarArgType(const QualType &Ty);
7550 
7551   /// Check to see if the given expression is a valid argument to a variadic
7552   /// function, issuing a diagnostic if not.
7553   void checkVariadicArgument(const Expr *E, VariadicCallType CT);
7554 
7555   /// GatherArgumentsForCall - Collector argument expressions for various
7556   /// form of call prototypes.
7557   bool GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl,
7558                               const FunctionProtoType *Proto,
7559                               unsigned FirstParam, ArrayRef<Expr *> Args,
7560                               SmallVectorImpl<Expr *> &AllArgs,
7561                               VariadicCallType CallType = VariadicDoesNotApply,
7562                               bool AllowExplicit = false,
7563                               bool IsListInitialization = false);
7564 
7565   // DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but
7566   // will create a runtime trap if the resulting type is not a POD type.
7567   ExprResult DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT,
7568                                               FunctionDecl *FDecl);
7569 
7570   // UsualArithmeticConversions - performs the UsualUnaryConversions on it's
7571   // operands and then handles various conversions that are common to binary
7572   // operators (C99 6.3.1.8). If both operands aren't arithmetic, this
7573   // routine returns the first non-arithmetic type found. The client is
7574   // responsible for emitting appropriate error diagnostics.
7575   QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS,
7576                                       SourceLocation Loc, ArithConvKind ACK);
7577 
7578   /// AssignConvertType - All of the 'assignment' semantic checks return this
7579   /// enum to indicate whether the assignment was allowed.  These checks are
7580   /// done for simple assignments, as well as initialization, return from
7581   /// function, argument passing, etc.  The query is phrased in terms of a
7582   /// source and destination type.
7583   enum AssignConvertType {
7584     /// Compatible - the types are compatible according to the standard.
7585     Compatible,
7586 
7587     /// PointerToInt - The assignment converts a pointer to an int, which we
7588     /// accept as an extension.
7589     PointerToInt,
7590 
7591     /// IntToPointer - The assignment converts an int to a pointer, which we
7592     /// accept as an extension.
7593     IntToPointer,
7594 
7595     /// FunctionVoidPointer - The assignment is between a function pointer and
7596     /// void*, which the standard doesn't allow, but we accept as an extension.
7597     FunctionVoidPointer,
7598 
7599     /// IncompatiblePointer - The assignment is between two pointers types that
7600     /// are not compatible, but we accept them as an extension.
7601     IncompatiblePointer,
7602 
7603     /// IncompatibleFunctionPointer - The assignment is between two function
7604     /// pointers types that are not compatible, but we accept them as an
7605     /// extension.
7606     IncompatibleFunctionPointer,
7607 
7608     /// IncompatibleFunctionPointerStrict - The assignment is between two
7609     /// function pointer types that are not identical, but are compatible,
7610     /// unless compiled with -fsanitize=cfi, in which case the type mismatch
7611     /// may trip an indirect call runtime check.
7612     IncompatibleFunctionPointerStrict,
7613 
7614     /// IncompatiblePointerSign - The assignment is between two pointers types
7615     /// which point to integers which have a different sign, but are otherwise
7616     /// identical. This is a subset of the above, but broken out because it's by
7617     /// far the most common case of incompatible pointers.
7618     IncompatiblePointerSign,
7619 
7620     /// CompatiblePointerDiscardsQualifiers - The assignment discards
7621     /// c/v/r qualifiers, which we accept as an extension.
7622     CompatiblePointerDiscardsQualifiers,
7623 
7624     /// IncompatiblePointerDiscardsQualifiers - The assignment
7625     /// discards qualifiers that we don't permit to be discarded,
7626     /// like address spaces.
7627     IncompatiblePointerDiscardsQualifiers,
7628 
7629     /// IncompatibleNestedPointerAddressSpaceMismatch - The assignment
7630     /// changes address spaces in nested pointer types which is not allowed.
7631     /// For instance, converting __private int ** to __generic int ** is
7632     /// illegal even though __private could be converted to __generic.
7633     IncompatibleNestedPointerAddressSpaceMismatch,
7634 
7635     /// IncompatibleNestedPointerQualifiers - The assignment is between two
7636     /// nested pointer types, and the qualifiers other than the first two
7637     /// levels differ e.g. char ** -> const char **, but we accept them as an
7638     /// extension.
7639     IncompatibleNestedPointerQualifiers,
7640 
7641     /// IncompatibleVectors - The assignment is between two vector types that
7642     /// have the same size, which we accept as an extension.
7643     IncompatibleVectors,
7644 
7645     /// IntToBlockPointer - The assignment converts an int to a block
7646     /// pointer. We disallow this.
7647     IntToBlockPointer,
7648 
7649     /// IncompatibleBlockPointer - The assignment is between two block
7650     /// pointers types that are not compatible.
7651     IncompatibleBlockPointer,
7652 
7653     /// IncompatibleObjCQualifiedId - The assignment is between a qualified
7654     /// id type and something else (that is incompatible with it). For example,
7655     /// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol.
7656     IncompatibleObjCQualifiedId,
7657 
7658     /// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an
7659     /// object with __weak qualifier.
7660     IncompatibleObjCWeakRef,
7661 
7662     /// Incompatible - We reject this conversion outright, it is invalid to
7663     /// represent it in the AST.
7664     Incompatible
7665   };
7666 
7667   /// DiagnoseAssignmentResult - Emit a diagnostic, if required, for the
7668   /// assignment conversion type specified by ConvTy.  This returns true if the
7669   /// conversion was invalid or false if the conversion was accepted.
7670   bool DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc,
7671                                 QualType DstType, QualType SrcType,
7672                                 Expr *SrcExpr, AssignmentAction Action,
7673                                 bool *Complained = nullptr);
7674 
7675   /// CheckAssignmentConstraints - Perform type checking for assignment,
7676   /// argument passing, variable initialization, and function return values.
7677   /// C99 6.5.16.
7678   AssignConvertType CheckAssignmentConstraints(SourceLocation Loc,
7679                                                QualType LHSType,
7680                                                QualType RHSType);
7681 
7682   /// Check assignment constraints and optionally prepare for a conversion of
7683   /// the RHS to the LHS type. The conversion is prepared for if ConvertRHS
7684   /// is true.
7685   AssignConvertType CheckAssignmentConstraints(QualType LHSType,
7686                                                ExprResult &RHS, CastKind &Kind,
7687                                                bool ConvertRHS = true);
7688 
7689   /// Check assignment constraints for an assignment of RHS to LHSType.
7690   ///
7691   /// \param LHSType The destination type for the assignment.
7692   /// \param RHS The source expression for the assignment.
7693   /// \param Diagnose If \c true, diagnostics may be produced when checking
7694   ///        for assignability. If a diagnostic is produced, \p RHS will be
7695   ///        set to ExprError(). Note that this function may still return
7696   ///        without producing a diagnostic, even for an invalid assignment.
7697   /// \param DiagnoseCFAudited If \c true, the target is a function parameter
7698   ///        in an audited Core Foundation API and does not need to be checked
7699   ///        for ARC retain issues.
7700   /// \param ConvertRHS If \c true, \p RHS will be updated to model the
7701   ///        conversions necessary to perform the assignment. If \c false,
7702   ///        \p Diagnose must also be \c false.
7703   AssignConvertType CheckSingleAssignmentConstraints(
7704       QualType LHSType, ExprResult &RHS, bool Diagnose = true,
7705       bool DiagnoseCFAudited = false, bool ConvertRHS = true);
7706 
7707   // If the lhs type is a transparent union, check whether we
7708   // can initialize the transparent union with the given expression.
7709   AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType,
7710                                                              ExprResult &RHS);
7711 
7712   /// the following "Check" methods will return a valid/converted QualType
7713   /// or a null QualType (indicating an error diagnostic was issued).
7714 
7715   /// type checking binary operators (subroutines of CreateBuiltinBinOp).
7716   QualType InvalidOperands(SourceLocation Loc, ExprResult &LHS,
7717                            ExprResult &RHS);
7718 
7719   /// Diagnose cases where a scalar was implicitly converted to a vector and
7720   /// diagnose the underlying types. Otherwise, diagnose the error
7721   /// as invalid vector logical operands for non-C++ cases.
7722   QualType InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS,
7723                                         ExprResult &RHS);
7724 
7725   QualType CheckMultiplyDivideOperands( // C99 6.5.5
7726       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign,
7727       bool IsDivide);
7728   QualType CheckRemainderOperands( // C99 6.5.5
7729       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7730       bool IsCompAssign = false);
7731   QualType CheckAdditionOperands( // C99 6.5.6
7732       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7733       BinaryOperatorKind Opc, QualType *CompLHSTy = nullptr);
7734   QualType CheckSubtractionOperands( // C99 6.5.6
7735       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7736       QualType *CompLHSTy = nullptr);
7737   QualType CheckShiftOperands( // C99 6.5.7
7738       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7739       BinaryOperatorKind Opc, bool IsCompAssign = false);
7740   void CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE);
7741   QualType CheckCompareOperands( // C99 6.5.8/9
7742       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7743       BinaryOperatorKind Opc);
7744   QualType CheckBitwiseOperands( // C99 6.5.[10...12]
7745       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7746       BinaryOperatorKind Opc);
7747   QualType CheckLogicalOperands( // C99 6.5.[13,14]
7748       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
7749       BinaryOperatorKind Opc);
7750   // CheckAssignmentOperands is used for both simple and compound assignment.
7751   // For simple assignment, pass both expressions and a null converted type.
7752   // For compound assignment, pass both expressions and the converted type.
7753   QualType CheckAssignmentOperands( // C99 6.5.16.[1,2]
7754       Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType,
7755       BinaryOperatorKind Opc);
7756 
7757   /// To be used for checking whether the arguments being passed to
7758   /// function exceeds the number of parameters expected for it.
7759   static bool TooManyArguments(size_t NumParams, size_t NumArgs,
7760                                bool PartialOverloading = false) {
7761     // We check whether we're just after a comma in code-completion.
7762     if (NumArgs > 0 && PartialOverloading)
7763       return NumArgs + 1 > NumParams; // If so, we view as an extra argument.
7764     return NumArgs > NumParams;
7765   }
7766 
7767   /// Whether the AST is currently being rebuilt to correct immediate
7768   /// invocations. Immediate invocation candidates and references to consteval
7769   /// functions aren't tracked when this is set.
7770   bool RebuildingImmediateInvocation = false;
7771 
isAlwaysConstantEvaluatedContext()7772   bool isAlwaysConstantEvaluatedContext() const {
7773     const ExpressionEvaluationContextRecord &Ctx = currentEvaluationContext();
7774     return (Ctx.isConstantEvaluated() || isConstantEvaluatedOverride) &&
7775            !Ctx.InConditionallyConstantEvaluateContext;
7776   }
7777 
7778   /// Determines whether we are currently in a context that
7779   /// is not evaluated as per C++ [expr] p5.
isUnevaluatedContext()7780   bool isUnevaluatedContext() const {
7781     return currentEvaluationContext().isUnevaluated();
7782   }
7783 
isImmediateFunctionContext()7784   bool isImmediateFunctionContext() const {
7785     return currentEvaluationContext().isImmediateFunctionContext();
7786   }
7787 
isInLifetimeExtendingContext()7788   bool isInLifetimeExtendingContext() const {
7789     assert(!ExprEvalContexts.empty() &&
7790            "Must be in an expression evaluation context");
7791     return ExprEvalContexts.back().InLifetimeExtendingContext;
7792   }
7793 
isCheckingDefaultArgumentOrInitializer()7794   bool isCheckingDefaultArgumentOrInitializer() const {
7795     const ExpressionEvaluationContextRecord &Ctx = currentEvaluationContext();
7796     return (Ctx.Context ==
7797             ExpressionEvaluationContext::PotentiallyEvaluatedIfUsed) ||
7798            Ctx.IsCurrentlyCheckingDefaultArgumentOrInitializer;
7799   }
7800 
7801   std::optional<ExpressionEvaluationContextRecord::InitializationContext>
InnermostDeclarationWithDelayedImmediateInvocations()7802   InnermostDeclarationWithDelayedImmediateInvocations() const {
7803     assert(!ExprEvalContexts.empty() &&
7804            "Must be in an expression evaluation context");
7805     for (const auto &Ctx : llvm::reverse(ExprEvalContexts)) {
7806       if (Ctx.Context == ExpressionEvaluationContext::PotentiallyEvaluated &&
7807           Ctx.DelayedDefaultInitializationContext)
7808         return Ctx.DelayedDefaultInitializationContext;
7809       if (Ctx.isConstantEvaluated() || Ctx.isImmediateFunctionContext() ||
7810           Ctx.isUnevaluated())
7811         break;
7812     }
7813     return std::nullopt;
7814   }
7815 
7816   std::optional<ExpressionEvaluationContextRecord::InitializationContext>
OutermostDeclarationWithDelayedImmediateInvocations()7817   OutermostDeclarationWithDelayedImmediateInvocations() const {
7818     assert(!ExprEvalContexts.empty() &&
7819            "Must be in an expression evaluation context");
7820     std::optional<ExpressionEvaluationContextRecord::InitializationContext> Res;
7821     for (auto &Ctx : llvm::reverse(ExprEvalContexts)) {
7822       if (Ctx.Context == ExpressionEvaluationContext::PotentiallyEvaluated &&
7823           !Ctx.DelayedDefaultInitializationContext && Res)
7824         break;
7825       if (Ctx.isConstantEvaluated() || Ctx.isImmediateFunctionContext() ||
7826           Ctx.isUnevaluated())
7827         break;
7828       Res = Ctx.DelayedDefaultInitializationContext;
7829     }
7830     return Res;
7831   }
7832 
7833   /// keepInLifetimeExtendingContext - Pull down InLifetimeExtendingContext
7834   /// flag from previous context.
keepInLifetimeExtendingContext()7835   void keepInLifetimeExtendingContext() {
7836     if (ExprEvalContexts.size() > 2 &&
7837         parentEvaluationContext().InLifetimeExtendingContext) {
7838       auto &LastRecord = ExprEvalContexts.back();
7839       auto &PrevRecord = parentEvaluationContext();
7840       LastRecord.InLifetimeExtendingContext =
7841           PrevRecord.InLifetimeExtendingContext;
7842     }
7843   }
7844 
getDefaultedComparisonKind(const FunctionDecl * FD)7845   DefaultedComparisonKind getDefaultedComparisonKind(const FunctionDecl *FD) {
7846     return getDefaultedFunctionKind(FD).asComparison();
7847   }
7848 
7849   /// Returns a field in a CXXRecordDecl that has the same name as the decl \p
7850   /// SelfAssigned when inside a CXXMethodDecl.
7851   const FieldDecl *
7852   getSelfAssignmentClassMemberCandidate(const ValueDecl *SelfAssigned);
7853 
7854   void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D);
7855 
7856   template <typename... Ts>
RequireCompleteSizedType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)7857   bool RequireCompleteSizedType(SourceLocation Loc, QualType T, unsigned DiagID,
7858                                 const Ts &...Args) {
7859     SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
7860     return RequireCompleteType(Loc, T, CompleteTypeKind::Normal, Diagnoser);
7861   }
7862 
7863   template <typename... Ts>
RequireCompleteSizedExprType(Expr * E,unsigned DiagID,const Ts &...Args)7864   bool RequireCompleteSizedExprType(Expr *E, unsigned DiagID,
7865                                     const Ts &...Args) {
7866     SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
7867     return RequireCompleteExprType(E, CompleteTypeKind::Normal, Diagnoser);
7868   }
7869 
7870   /// Abstract class used to diagnose incomplete types.
7871   struct TypeDiagnoser {
TypeDiagnoserTypeDiagnoser7872     TypeDiagnoser() {}
7873 
7874     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) = 0;
~TypeDiagnoserTypeDiagnoser7875     virtual ~TypeDiagnoser() {}
7876   };
7877 
7878   template <typename... Ts> class BoundTypeDiagnoser : public TypeDiagnoser {
7879   protected:
7880     unsigned DiagID;
7881     std::tuple<const Ts &...> Args;
7882 
7883     template <std::size_t... Is>
emit(const SemaDiagnosticBuilder & DB,std::index_sequence<Is...>)7884     void emit(const SemaDiagnosticBuilder &DB,
7885               std::index_sequence<Is...>) const {
7886       // Apply all tuple elements to the builder in order.
7887       bool Dummy[] = {false, (DB << getPrintable(std::get<Is>(Args)))...};
7888       (void)Dummy;
7889     }
7890 
7891   public:
BoundTypeDiagnoser(unsigned DiagID,const Ts &...Args)7892     BoundTypeDiagnoser(unsigned DiagID, const Ts &...Args)
7893         : TypeDiagnoser(), DiagID(DiagID), Args(Args...) {
7894       assert(DiagID != 0 && "no diagnostic for type diagnoser");
7895     }
7896 
diagnose(Sema & S,SourceLocation Loc,QualType T)7897     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
7898       const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID);
7899       emit(DB, std::index_sequence_for<Ts...>());
7900       DB << T;
7901     }
7902   };
7903 
7904   /// A derivative of BoundTypeDiagnoser for which the diagnostic's type
7905   /// parameter is preceded by a 0/1 enum that is 1 if the type is sizeless.
7906   /// For example, a diagnostic with no other parameters would generally have
7907   /// the form "...%select{incomplete|sizeless}0 type %1...".
7908   template <typename... Ts>
7909   class SizelessTypeDiagnoser : public BoundTypeDiagnoser<Ts...> {
7910   public:
SizelessTypeDiagnoser(unsigned DiagID,const Ts &...Args)7911     SizelessTypeDiagnoser(unsigned DiagID, const Ts &...Args)
7912         : BoundTypeDiagnoser<Ts...>(DiagID, Args...) {}
7913 
diagnose(Sema & S,SourceLocation Loc,QualType T)7914     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
7915       const SemaDiagnosticBuilder &DB = S.Diag(Loc, this->DiagID);
7916       this->emit(DB, std::index_sequence_for<Ts...>());
7917       DB << T->isSizelessType() << T;
7918     }
7919   };
7920 
7921   /// Check an argument list for placeholders that we won't try to
7922   /// handle later.
7923   bool CheckArgsForPlaceholders(MultiExprArg args);
7924 
7925   /// The C++ "std::source_location::__impl" struct, defined in
7926   /// \<source_location>.
7927   RecordDecl *StdSourceLocationImplDecl;
7928 
7929   /// A stack of expression evaluation contexts.
7930   SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts;
7931 
7932   // Set of failed immediate invocations to avoid double diagnosing.
7933   llvm::SmallPtrSet<ConstantExpr *, 4> FailedImmediateInvocations;
7934 
7935   /// List of SourceLocations where 'self' is implicitly retained inside a
7936   /// block.
7937   llvm::SmallVector<std::pair<SourceLocation, const BlockDecl *>, 1>
7938       ImplicitlyRetainedSelfLocs;
7939 
7940   /// Do an explicit extend of the given block pointer if we're in ARC.
7941   void maybeExtendBlockObject(ExprResult &E);
7942 
7943 private:
7944   static BinaryOperatorKind ConvertTokenKindToBinaryOpcode(tok::TokenKind Kind);
7945 
7946   /// Methods for marking which expressions involve dereferencing a pointer
7947   /// marked with the 'noderef' attribute. Expressions are checked bottom up as
7948   /// they are parsed, meaning that a noderef pointer may not be accessed. For
7949   /// example, in `&*p` where `p` is a noderef pointer, we will first parse the
7950   /// `*p`, but need to check that `address of` is called on it. This requires
7951   /// keeping a container of all pending expressions and checking if the address
7952   /// of them are eventually taken.
7953   void CheckSubscriptAccessOfNoDeref(const ArraySubscriptExpr *E);
7954   void CheckAddressOfNoDeref(const Expr *E);
7955 
7956   ///@}
7957 
7958   //
7959   //
7960   // -------------------------------------------------------------------------
7961   //
7962   //
7963 
7964   /// \name C++ Expressions
7965   /// Implementations are in SemaExprCXX.cpp
7966   ///@{
7967 
7968 public:
7969   /// The C++ "std::bad_alloc" class, which is defined by the C++
7970   /// standard library.
7971   LazyDeclPtr StdBadAlloc;
7972 
7973   /// The C++ "std::align_val_t" enum class, which is defined by the C++
7974   /// standard library.
7975   LazyDeclPtr StdAlignValT;
7976 
7977   /// The C++ "type_info" declaration, which is defined in \<typeinfo>.
7978   RecordDecl *CXXTypeInfoDecl;
7979 
7980   /// A flag to remember whether the implicit forms of operator new and delete
7981   /// have been declared.
7982   bool GlobalNewDeleteDeclared;
7983 
7984   /// Delete-expressions to be analyzed at the end of translation unit
7985   ///
7986   /// This list contains class members, and locations of delete-expressions
7987   /// that could not be proven as to whether they mismatch with new-expression
7988   /// used in initializer of the field.
7989   llvm::MapVector<FieldDecl *, DeleteLocs> DeleteExprs;
7990 
7991   /// Handle the result of the special case name lookup for inheriting
7992   /// constructor declarations. 'NS::X::X' and 'NS::X<...>::X' are treated as
7993   /// constructor names in member using declarations, even if 'X' is not the
7994   /// name of the corresponding type.
7995   ParsedType getInheritingConstructorName(CXXScopeSpec &SS,
7996                                           SourceLocation NameLoc,
7997                                           const IdentifierInfo &Name);
7998 
7999   ParsedType getConstructorName(const IdentifierInfo &II,
8000                                 SourceLocation NameLoc, Scope *S,
8001                                 CXXScopeSpec &SS, bool EnteringContext);
8002   ParsedType getDestructorName(const IdentifierInfo &II, SourceLocation NameLoc,
8003                                Scope *S, CXXScopeSpec &SS,
8004                                ParsedType ObjectType, bool EnteringContext);
8005 
8006   ParsedType getDestructorTypeForDecltype(const DeclSpec &DS,
8007                                           ParsedType ObjectType);
8008 
8009   /// Build a C++ typeid expression with a type operand.
8010   ExprResult BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc,
8011                             TypeSourceInfo *Operand, SourceLocation RParenLoc);
8012 
8013   /// Build a C++ typeid expression with an expression operand.
8014   ExprResult BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc,
8015                             Expr *Operand, SourceLocation RParenLoc);
8016 
8017   /// ActOnCXXTypeid - Parse typeid( something ).
8018   ExprResult ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc,
8019                             bool isType, void *TyOrExpr,
8020                             SourceLocation RParenLoc);
8021 
8022   /// Build a Microsoft __uuidof expression with a type operand.
8023   ExprResult BuildCXXUuidof(QualType TypeInfoType, SourceLocation TypeidLoc,
8024                             TypeSourceInfo *Operand, SourceLocation RParenLoc);
8025 
8026   /// Build a Microsoft __uuidof expression with an expression operand.
8027   ExprResult BuildCXXUuidof(QualType TypeInfoType, SourceLocation TypeidLoc,
8028                             Expr *Operand, SourceLocation RParenLoc);
8029 
8030   /// ActOnCXXUuidof - Parse __uuidof( something ).
8031   ExprResult ActOnCXXUuidof(SourceLocation OpLoc, SourceLocation LParenLoc,
8032                             bool isType, void *TyOrExpr,
8033                             SourceLocation RParenLoc);
8034 
8035   //// ActOnCXXThis -  Parse 'this' pointer.
8036   ExprResult ActOnCXXThis(SourceLocation Loc);
8037 
8038   /// Check whether the type of 'this' is valid in the current context.
8039   bool CheckCXXThisType(SourceLocation Loc, QualType Type);
8040 
8041   /// Build a CXXThisExpr and mark it referenced in the current context.
8042   Expr *BuildCXXThisExpr(SourceLocation Loc, QualType Type, bool IsImplicit);
8043   void MarkThisReferenced(CXXThisExpr *This);
8044 
8045   /// Try to retrieve the type of the 'this' pointer.
8046   ///
8047   /// \returns The type of 'this', if possible. Otherwise, returns a NULL type.
8048   QualType getCurrentThisType();
8049 
8050   /// When non-NULL, the C++ 'this' expression is allowed despite the
8051   /// current context not being a non-static member function. In such cases,
8052   /// this provides the type used for 'this'.
8053   QualType CXXThisTypeOverride;
8054 
8055   /// RAII object used to temporarily allow the C++ 'this' expression
8056   /// to be used, with the given qualifiers on the current class type.
8057   class CXXThisScopeRAII {
8058     Sema &S;
8059     QualType OldCXXThisTypeOverride;
8060     bool Enabled;
8061 
8062   public:
8063     /// Introduce a new scope where 'this' may be allowed (when enabled),
8064     /// using the given declaration (which is either a class template or a
8065     /// class) along with the given qualifiers.
8066     /// along with the qualifiers placed on '*this'.
8067     CXXThisScopeRAII(Sema &S, Decl *ContextDecl, Qualifiers CXXThisTypeQuals,
8068                      bool Enabled = true);
8069 
8070     ~CXXThisScopeRAII();
8071   };
8072 
8073   /// Make sure the value of 'this' is actually available in the current
8074   /// context, if it is a potentially evaluated context.
8075   ///
8076   /// \param Loc The location at which the capture of 'this' occurs.
8077   ///
8078   /// \param Explicit Whether 'this' is explicitly captured in a lambda
8079   /// capture list.
8080   ///
8081   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
8082   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
8083   /// This is useful when enclosing lambdas must speculatively capture
8084   /// 'this' that may or may not be used in certain specializations of
8085   /// a nested generic lambda (depending on whether the name resolves to
8086   /// a non-static member function or a static function).
8087   /// \return returns 'true' if failed, 'false' if success.
8088   bool CheckCXXThisCapture(
8089       SourceLocation Loc, bool Explicit = false, bool BuildAndDiagnose = true,
8090       const unsigned *const FunctionScopeIndexToStopAt = nullptr,
8091       bool ByCopy = false);
8092 
8093   /// Determine whether the given type is the type of *this that is used
8094   /// outside of the body of a member function for a type that is currently
8095   /// being defined.
8096   bool isThisOutsideMemberFunctionBody(QualType BaseType);
8097 
8098   /// ActOnCXXBoolLiteral - Parse {true,false} literals.
8099   ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
8100 
8101   /// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
8102   ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc);
8103 
8104   //// ActOnCXXThrow -  Parse throw expressions.
8105   ExprResult ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *expr);
8106   ExprResult BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
8107                            bool IsThrownVarInScope);
8108 
8109   /// CheckCXXThrowOperand - Validate the operand of a throw.
8110   bool CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ThrowTy, Expr *E);
8111 
8112   /// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
8113   /// Can be interpreted either as function-style casting ("int(x)")
8114   /// or class type construction ("ClassType(x,y,z)")
8115   /// or creation of a value-initialized type ("int()").
8116   ExprResult ActOnCXXTypeConstructExpr(ParsedType TypeRep,
8117                                        SourceLocation LParenOrBraceLoc,
8118                                        MultiExprArg Exprs,
8119                                        SourceLocation RParenOrBraceLoc,
8120                                        bool ListInitialization);
8121 
8122   ExprResult BuildCXXTypeConstructExpr(TypeSourceInfo *Type,
8123                                        SourceLocation LParenLoc,
8124                                        MultiExprArg Exprs,
8125                                        SourceLocation RParenLoc,
8126                                        bool ListInitialization);
8127 
8128   /// Parsed a C++ 'new' expression (C++ 5.3.4).
8129   ///
8130   /// E.g.:
8131   /// @code new (memory) int[size][4] @endcode
8132   /// or
8133   /// @code ::new Foo(23, "hello") @endcode
8134   ///
8135   /// \param StartLoc The first location of the expression.
8136   /// \param UseGlobal True if 'new' was prefixed with '::'.
8137   /// \param PlacementLParen Opening paren of the placement arguments.
8138   /// \param PlacementArgs Placement new arguments.
8139   /// \param PlacementRParen Closing paren of the placement arguments.
8140   /// \param TypeIdParens If the type is in parens, the source range.
8141   /// \param D The type to be allocated, as well as array dimensions.
8142   /// \param Initializer The initializing expression or initializer-list, or
8143   ///   null if there is none.
8144   ExprResult ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
8145                          SourceLocation PlacementLParen,
8146                          MultiExprArg PlacementArgs,
8147                          SourceLocation PlacementRParen,
8148                          SourceRange TypeIdParens, Declarator &D,
8149                          Expr *Initializer);
8150   ExprResult
8151   BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen,
8152               MultiExprArg PlacementArgs, SourceLocation PlacementRParen,
8153               SourceRange TypeIdParens, QualType AllocType,
8154               TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize,
8155               SourceRange DirectInitRange, Expr *Initializer);
8156 
8157   /// Determine whether \p FD is an aligned allocation or deallocation
8158   /// function that is unavailable.
8159   bool isUnavailableAlignedAllocationFunction(const FunctionDecl &FD) const;
8160 
8161   /// Produce diagnostics if \p FD is an aligned allocation or deallocation
8162   /// function that is unavailable.
8163   void diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD,
8164                                             SourceLocation Loc);
8165 
8166   /// Checks that a type is suitable as the allocated type
8167   /// in a new-expression.
8168   bool CheckAllocatedType(QualType AllocType, SourceLocation Loc,
8169                           SourceRange R);
8170 
8171   /// The scope in which to find allocation functions.
8172   enum AllocationFunctionScope {
8173     /// Only look for allocation functions in the global scope.
8174     AFS_Global,
8175     /// Only look for allocation functions in the scope of the
8176     /// allocated class.
8177     AFS_Class,
8178     /// Look for allocation functions in both the global scope
8179     /// and in the scope of the allocated class.
8180     AFS_Both
8181   };
8182 
8183   /// Finds the overloads of operator new and delete that are appropriate
8184   /// for the allocation.
8185   bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
8186                                AllocationFunctionScope NewScope,
8187                                AllocationFunctionScope DeleteScope,
8188                                QualType AllocType, bool IsArray,
8189                                bool &PassAlignment, MultiExprArg PlaceArgs,
8190                                FunctionDecl *&OperatorNew,
8191                                FunctionDecl *&OperatorDelete,
8192                                bool Diagnose = true);
8193 
8194   /// DeclareGlobalNewDelete - Declare the global forms of operator new and
8195   /// delete. These are:
8196   /// @code
8197   ///   // C++03:
8198   ///   void* operator new(std::size_t) throw(std::bad_alloc);
8199   ///   void* operator new[](std::size_t) throw(std::bad_alloc);
8200   ///   void operator delete(void *) throw();
8201   ///   void operator delete[](void *) throw();
8202   ///   // C++11:
8203   ///   void* operator new(std::size_t);
8204   ///   void* operator new[](std::size_t);
8205   ///   void operator delete(void *) noexcept;
8206   ///   void operator delete[](void *) noexcept;
8207   ///   // C++1y:
8208   ///   void* operator new(std::size_t);
8209   ///   void* operator new[](std::size_t);
8210   ///   void operator delete(void *) noexcept;
8211   ///   void operator delete[](void *) noexcept;
8212   ///   void operator delete(void *, std::size_t) noexcept;
8213   ///   void operator delete[](void *, std::size_t) noexcept;
8214   /// @endcode
8215   /// Note that the placement and nothrow forms of new are *not* implicitly
8216   /// declared. Their use requires including \<new\>.
8217   void DeclareGlobalNewDelete();
8218   void DeclareGlobalAllocationFunction(DeclarationName Name, QualType Return,
8219                                        ArrayRef<QualType> Params);
8220 
8221   bool FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
8222                                 DeclarationName Name, FunctionDecl *&Operator,
8223                                 bool Diagnose = true, bool WantSize = false,
8224                                 bool WantAligned = false);
8225   FunctionDecl *FindUsualDeallocationFunction(SourceLocation StartLoc,
8226                                               bool CanProvideSize,
8227                                               bool Overaligned,
8228                                               DeclarationName Name);
8229   FunctionDecl *FindDeallocationFunctionForDestructor(SourceLocation StartLoc,
8230                                                       CXXRecordDecl *RD);
8231 
8232   /// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in:
8233   /// @code ::delete ptr; @endcode
8234   /// or
8235   /// @code delete [] ptr; @endcode
8236   ExprResult ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal,
8237                             bool ArrayForm, Expr *Operand);
8238   void CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc,
8239                             bool IsDelete, bool CallCanBeVirtual,
8240                             bool WarnOnNonAbstractTypes,
8241                             SourceLocation DtorLoc);
8242 
8243   ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen,
8244                                Expr *Operand, SourceLocation RParen);
8245   ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
8246                                   SourceLocation RParen);
8247 
8248   ExprResult ActOnStartCXXMemberReference(Scope *S, Expr *Base,
8249                                           SourceLocation OpLoc,
8250                                           tok::TokenKind OpKind,
8251                                           ParsedType &ObjectType,
8252                                           bool &MayBePseudoDestructor);
8253 
8254   ExprResult BuildPseudoDestructorExpr(
8255       Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind,
8256       const CXXScopeSpec &SS, TypeSourceInfo *ScopeType, SourceLocation CCLoc,
8257       SourceLocation TildeLoc, PseudoDestructorTypeStorage DestroyedType);
8258 
8259   ExprResult ActOnPseudoDestructorExpr(
8260       Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind,
8261       CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc,
8262       SourceLocation TildeLoc, UnqualifiedId &SecondTypeName);
8263 
8264   ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
8265                                        SourceLocation OpLoc,
8266                                        tok::TokenKind OpKind,
8267                                        SourceLocation TildeLoc,
8268                                        const DeclSpec &DS);
8269 
8270   /// MaybeCreateExprWithCleanups - If the current full-expression
8271   /// requires any cleanups, surround it with a ExprWithCleanups node.
8272   /// Otherwise, just returns the passed-in expression.
8273   Expr *MaybeCreateExprWithCleanups(Expr *SubExpr);
8274   Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt);
8275   ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr);
8276 
ActOnFinishFullExpr(Expr * Expr,bool DiscardedValue)8277   ExprResult ActOnFinishFullExpr(Expr *Expr, bool DiscardedValue) {
8278     return ActOnFinishFullExpr(
8279         Expr, Expr ? Expr->getExprLoc() : SourceLocation(), DiscardedValue);
8280   }
8281   ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC,
8282                                  bool DiscardedValue, bool IsConstexpr = false,
8283                                  bool IsTemplateArgument = false);
8284   StmtResult ActOnFinishFullStmt(Stmt *Stmt);
8285 
8286   /// Process the expression contained within a decltype. For such expressions,
8287   /// certain semantic checks on temporaries are delayed until this point, and
8288   /// are omitted for the 'topmost' call in the decltype expression. If the
8289   /// topmost call bound a temporary, strip that temporary off the expression.
8290   ExprResult ActOnDecltypeExpression(Expr *E);
8291 
8292   bool checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Id,
8293                               bool IsUDSuffix);
8294 
8295   bool isUsualDeallocationFunction(const CXXMethodDecl *FD);
8296 
8297   ConditionResult ActOnConditionVariable(Decl *ConditionVar,
8298                                          SourceLocation StmtLoc,
8299                                          ConditionKind CK);
8300 
8301   /// Check the use of the given variable as a C++ condition in an if,
8302   /// while, do-while, or switch statement.
8303   ExprResult CheckConditionVariable(VarDecl *ConditionVar,
8304                                     SourceLocation StmtLoc, ConditionKind CK);
8305 
8306   /// CheckCXXBooleanCondition - Returns true if conversion to bool is invalid.
8307   ExprResult CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr = false);
8308 
8309   /// Helper function to determine whether this is the (deprecated) C++
8310   /// conversion from a string literal to a pointer to non-const char or
8311   /// non-const wchar_t (for narrow and wide string literals,
8312   /// respectively).
8313   bool IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType);
8314 
8315   /// PerformImplicitConversion - Perform an implicit conversion of the
8316   /// expression From to the type ToType using the pre-computed implicit
8317   /// conversion sequence ICS. Returns the converted
8318   /// expression. Action is the kind of conversion we're performing,
8319   /// used in the error message.
8320   ExprResult PerformImplicitConversion(
8321       Expr *From, QualType ToType, const ImplicitConversionSequence &ICS,
8322       AssignmentAction Action,
8323       CheckedConversionKind CCK = CheckedConversionKind::Implicit);
8324 
8325   /// PerformImplicitConversion - Perform an implicit conversion of the
8326   /// expression From to the type ToType by following the standard
8327   /// conversion sequence SCS. Returns the converted
8328   /// expression. Flavor is the context in which we're performing this
8329   /// conversion, for use in error messages.
8330   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
8331                                        const StandardConversionSequence &SCS,
8332                                        AssignmentAction Action,
8333                                        CheckedConversionKind CCK);
8334 
8335   bool CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N);
8336 
8337   /// Parsed one of the type trait support pseudo-functions.
8338   ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
8339                             ArrayRef<ParsedType> Args,
8340                             SourceLocation RParenLoc);
8341   ExprResult BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
8342                             ArrayRef<TypeSourceInfo *> Args,
8343                             SourceLocation RParenLoc);
8344 
8345   /// ActOnArrayTypeTrait - Parsed one of the binary type trait support
8346   /// pseudo-functions.
8347   ExprResult ActOnArrayTypeTrait(ArrayTypeTrait ATT, SourceLocation KWLoc,
8348                                  ParsedType LhsTy, Expr *DimExpr,
8349                                  SourceLocation RParen);
8350 
8351   ExprResult BuildArrayTypeTrait(ArrayTypeTrait ATT, SourceLocation KWLoc,
8352                                  TypeSourceInfo *TSInfo, Expr *DimExpr,
8353                                  SourceLocation RParen);
8354 
8355   /// ActOnExpressionTrait - Parsed one of the unary type trait support
8356   /// pseudo-functions.
8357   ExprResult ActOnExpressionTrait(ExpressionTrait OET, SourceLocation KWLoc,
8358                                   Expr *Queried, SourceLocation RParen);
8359 
8360   ExprResult BuildExpressionTrait(ExpressionTrait OET, SourceLocation KWLoc,
8361                                   Expr *Queried, SourceLocation RParen);
8362 
8363   QualType CheckPointerToMemberOperands( // C++ 5.5
8364       ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation OpLoc,
8365       bool isIndirect);
8366   QualType CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS,
8367                                        ExprResult &RHS,
8368                                        SourceLocation QuestionLoc);
8369 
8370   QualType CheckSizelessVectorConditionalTypes(ExprResult &Cond,
8371                                                ExprResult &LHS, ExprResult &RHS,
8372                                                SourceLocation QuestionLoc);
8373 
8374   /// Check the operands of ?: under C++ semantics.
8375   ///
8376   /// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y
8377   /// extension. In this case, LHS == Cond. (But they're not aliases.)
8378   ///
8379   /// This function also implements GCC's vector extension and the
8380   /// OpenCL/ext_vector_type extension for conditionals. The vector extensions
8381   /// permit the use of a?b:c where the type of a is that of a integer vector
8382   /// with the same number of elements and size as the vectors of b and c. If
8383   /// one of either b or c is a scalar it is implicitly converted to match the
8384   /// type of the vector. Otherwise the expression is ill-formed. If both b and
8385   /// c are scalars, then b and c are checked and converted to the type of a if
8386   /// possible.
8387   ///
8388   /// The expressions are evaluated differently for GCC's and OpenCL's
8389   /// extensions. For the GCC extension, the ?: operator is evaluated as
8390   ///   (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).
8391   /// For the OpenCL extensions, the ?: operator is evaluated as
8392   ///   (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,
8393   ///    most-significant-bit-set(a[n]) ? b[n] : c[n]).
8394   QualType CXXCheckConditionalOperands( // C++ 5.16
8395       ExprResult &cond, ExprResult &lhs, ExprResult &rhs, ExprValueKind &VK,
8396       ExprObjectKind &OK, SourceLocation questionLoc);
8397 
8398   /// Find a merged pointer type and convert the two expressions to it.
8399   ///
8400   /// This finds the composite pointer type for \p E1 and \p E2 according to
8401   /// C++2a [expr.type]p3. It converts both expressions to this type and returns
8402   /// it.  It does not emit diagnostics (FIXME: that's not true if \p
8403   /// ConvertArgs is \c true).
8404   ///
8405   /// \param Loc The location of the operator requiring these two expressions to
8406   /// be converted to the composite pointer type.
8407   ///
8408   /// \param ConvertArgs If \c false, do not convert E1 and E2 to the target
8409   /// type.
8410   QualType FindCompositePointerType(SourceLocation Loc, Expr *&E1, Expr *&E2,
8411                                     bool ConvertArgs = true);
8412   QualType FindCompositePointerType(SourceLocation Loc, ExprResult &E1,
8413                                     ExprResult &E2, bool ConvertArgs = true) {
8414     Expr *E1Tmp = E1.get(), *E2Tmp = E2.get();
8415     QualType Composite =
8416         FindCompositePointerType(Loc, E1Tmp, E2Tmp, ConvertArgs);
8417     E1 = E1Tmp;
8418     E2 = E2Tmp;
8419     return Composite;
8420   }
8421 
8422   /// MaybeBindToTemporary - If the passed in expression has a record type with
8423   /// a non-trivial destructor, this will return CXXBindTemporaryExpr. Otherwise
8424   /// it simply returns the passed in expression.
8425   ExprResult MaybeBindToTemporary(Expr *E);
8426 
8427   /// IgnoredValueConversions - Given that an expression's result is
8428   /// syntactically ignored, perform any conversions that are
8429   /// required.
8430   ExprResult IgnoredValueConversions(Expr *E);
8431 
8432   ExprResult CheckUnevaluatedOperand(Expr *E);
8433 
8434   /// Process any TypoExprs in the given Expr and its children,
8435   /// generating diagnostics as appropriate and returning a new Expr if there
8436   /// were typos that were all successfully corrected and ExprError if one or
8437   /// more typos could not be corrected.
8438   ///
8439   /// \param E The Expr to check for TypoExprs.
8440   ///
8441   /// \param InitDecl A VarDecl to avoid because the Expr being corrected is its
8442   /// initializer.
8443   ///
8444   /// \param RecoverUncorrectedTypos If true, when typo correction fails, it
8445   /// will rebuild the given Expr with all TypoExprs degraded to RecoveryExprs.
8446   ///
8447   /// \param Filter A function applied to a newly rebuilt Expr to determine if
8448   /// it is an acceptable/usable result from a single combination of typo
8449   /// corrections. As long as the filter returns ExprError, different
8450   /// combinations of corrections will be tried until all are exhausted.
8451   ExprResult CorrectDelayedTyposInExpr(
8452       Expr *E, VarDecl *InitDecl = nullptr,
8453       bool RecoverUncorrectedTypos = false,
8454       llvm::function_ref<ExprResult(Expr *)> Filter =
8455           [](Expr *E) -> ExprResult { return E; });
8456 
8457   ExprResult CorrectDelayedTyposInExpr(
8458       ExprResult ER, VarDecl *InitDecl = nullptr,
8459       bool RecoverUncorrectedTypos = false,
8460       llvm::function_ref<ExprResult(Expr *)> Filter =
8461           [](Expr *E) -> ExprResult { return E; }) {
8462     return ER.isInvalid()
8463                ? ER
8464                : CorrectDelayedTyposInExpr(ER.get(), InitDecl,
8465                                            RecoverUncorrectedTypos, Filter);
8466   }
8467 
8468   /// Describes the result of an "if-exists" condition check.
8469   enum IfExistsResult {
8470     /// The symbol exists.
8471     IER_Exists,
8472 
8473     /// The symbol does not exist.
8474     IER_DoesNotExist,
8475 
8476     /// The name is a dependent name, so the results will differ
8477     /// from one instantiation to the next.
8478     IER_Dependent,
8479 
8480     /// An error occurred.
8481     IER_Error
8482   };
8483 
8484   IfExistsResult
8485   CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS,
8486                                const DeclarationNameInfo &TargetNameInfo);
8487 
8488   IfExistsResult CheckMicrosoftIfExistsSymbol(Scope *S,
8489                                               SourceLocation KeywordLoc,
8490                                               bool IsIfExists, CXXScopeSpec &SS,
8491                                               UnqualifiedId &Name);
8492 
8493   RequiresExprBodyDecl *
8494   ActOnStartRequiresExpr(SourceLocation RequiresKWLoc,
8495                          ArrayRef<ParmVarDecl *> LocalParameters,
8496                          Scope *BodyScope);
8497   void ActOnFinishRequiresExpr();
8498   concepts::Requirement *ActOnSimpleRequirement(Expr *E);
8499   concepts::Requirement *ActOnTypeRequirement(SourceLocation TypenameKWLoc,
8500                                               CXXScopeSpec &SS,
8501                                               SourceLocation NameLoc,
8502                                               const IdentifierInfo *TypeName,
8503                                               TemplateIdAnnotation *TemplateId);
8504   concepts::Requirement *ActOnCompoundRequirement(Expr *E,
8505                                                   SourceLocation NoexceptLoc);
8506   concepts::Requirement *ActOnCompoundRequirement(
8507       Expr *E, SourceLocation NoexceptLoc, CXXScopeSpec &SS,
8508       TemplateIdAnnotation *TypeConstraint, unsigned Depth);
8509   concepts::Requirement *ActOnNestedRequirement(Expr *Constraint);
8510   concepts::ExprRequirement *BuildExprRequirement(
8511       Expr *E, bool IsSatisfied, SourceLocation NoexceptLoc,
8512       concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement);
8513   concepts::ExprRequirement *BuildExprRequirement(
8514       concepts::Requirement::SubstitutionDiagnostic *ExprSubstDiag,
8515       bool IsSatisfied, SourceLocation NoexceptLoc,
8516       concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement);
8517   concepts::TypeRequirement *BuildTypeRequirement(TypeSourceInfo *Type);
8518   concepts::TypeRequirement *BuildTypeRequirement(
8519       concepts::Requirement::SubstitutionDiagnostic *SubstDiag);
8520   concepts::NestedRequirement *BuildNestedRequirement(Expr *E);
8521   concepts::NestedRequirement *
8522   BuildNestedRequirement(StringRef InvalidConstraintEntity,
8523                          const ASTConstraintSatisfaction &Satisfaction);
8524   ExprResult ActOnRequiresExpr(SourceLocation RequiresKWLoc,
8525                                RequiresExprBodyDecl *Body,
8526                                SourceLocation LParenLoc,
8527                                ArrayRef<ParmVarDecl *> LocalParameters,
8528                                SourceLocation RParenLoc,
8529                                ArrayRef<concepts::Requirement *> Requirements,
8530                                SourceLocation ClosingBraceLoc);
8531 
8532 private:
8533   ExprResult BuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult,
8534                                                 bool IsDelete);
8535 
8536   void AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE);
8537   void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc,
8538                                  bool DeleteWasArrayForm);
8539 
8540   ///@}
8541 
8542   //
8543   //
8544   // -------------------------------------------------------------------------
8545   //
8546   //
8547 
8548   /// \name Member Access Expressions
8549   /// Implementations are in SemaExprMember.cpp
8550   ///@{
8551 
8552 public:
8553   /// Check whether an expression might be an implicit class member access.
8554   bool isPotentialImplicitMemberAccess(const CXXScopeSpec &SS, LookupResult &R,
8555                                        bool IsAddressOfOperand);
8556 
8557   /// Builds an expression which might be an implicit member expression.
8558   ExprResult BuildPossibleImplicitMemberExpr(
8559       const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R,
8560       const TemplateArgumentListInfo *TemplateArgs, const Scope *S);
8561 
8562   /// Builds an implicit member access expression.  The current context
8563   /// is known to be an instance method, and the given unqualified lookup
8564   /// set is known to contain only instance members, at least one of which
8565   /// is from an appropriate type.
8566   ExprResult
8567   BuildImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
8568                           LookupResult &R,
8569                           const TemplateArgumentListInfo *TemplateArgs,
8570                           bool IsDefiniteInstance, const Scope *S);
8571 
8572   ExprResult ActOnDependentMemberExpr(
8573       Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OpLoc,
8574       const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
8575       NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo,
8576       const TemplateArgumentListInfo *TemplateArgs);
8577 
8578   /// The main callback when the parser finds something like
8579   ///   expression . [nested-name-specifier] identifier
8580   ///   expression -> [nested-name-specifier] identifier
8581   /// where 'identifier' encompasses a fairly broad spectrum of
8582   /// possibilities, including destructor and operator references.
8583   ///
8584   /// \param OpKind either tok::arrow or tok::period
8585   /// \param ObjCImpDecl the current Objective-C \@implementation
8586   ///   decl; this is an ugly hack around the fact that Objective-C
8587   ///   \@implementations aren't properly put in the context chain
8588   ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
8589                                    tok::TokenKind OpKind, CXXScopeSpec &SS,
8590                                    SourceLocation TemplateKWLoc,
8591                                    UnqualifiedId &Member, Decl *ObjCImpDecl);
8592 
8593   MemberExpr *
8594   BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
8595                   NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
8596                   ValueDecl *Member, DeclAccessPair FoundDecl,
8597                   bool HadMultipleCandidates,
8598                   const DeclarationNameInfo &MemberNameInfo, QualType Ty,
8599                   ExprValueKind VK, ExprObjectKind OK,
8600                   const TemplateArgumentListInfo *TemplateArgs = nullptr);
8601 
8602   // Check whether the declarations we found through a nested-name
8603   // specifier in a member expression are actually members of the base
8604   // type.  The restriction here is:
8605   //
8606   //   C++ [expr.ref]p2:
8607   //     ... In these cases, the id-expression shall name a
8608   //     member of the class or of one of its base classes.
8609   //
8610   // So it's perfectly legitimate for the nested-name specifier to name
8611   // an unrelated class, and for us to find an overload set including
8612   // decls from classes which are not superclasses, as long as the decl
8613   // we actually pick through overload resolution is from a superclass.
8614   bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType,
8615                                      const CXXScopeSpec &SS,
8616                                      const LookupResult &R);
8617 
8618   // This struct is for use by ActOnMemberAccess to allow
8619   // BuildMemberReferenceExpr to be able to reinvoke ActOnMemberAccess after
8620   // changing the access operator from a '.' to a '->' (to see if that is the
8621   // change needed to fix an error about an unknown member, e.g. when the class
8622   // defines a custom operator->).
8623   struct ActOnMemberAccessExtraArgs {
8624     Scope *S;
8625     UnqualifiedId &Id;
8626     Decl *ObjCImpDecl;
8627   };
8628 
8629   ExprResult BuildMemberReferenceExpr(
8630       Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow,
8631       CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
8632       NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo,
8633       const TemplateArgumentListInfo *TemplateArgs, const Scope *S,
8634       ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
8635 
8636   ExprResult
8637   BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc,
8638                            bool IsArrow, const CXXScopeSpec &SS,
8639                            SourceLocation TemplateKWLoc,
8640                            NamedDecl *FirstQualifierInScope, LookupResult &R,
8641                            const TemplateArgumentListInfo *TemplateArgs,
8642                            const Scope *S, bool SuppressQualifierCheck = false,
8643                            ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
8644 
8645   ExprResult BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow,
8646                                      SourceLocation OpLoc,
8647                                      const CXXScopeSpec &SS, FieldDecl *Field,
8648                                      DeclAccessPair FoundDecl,
8649                                      const DeclarationNameInfo &MemberNameInfo);
8650 
8651   /// Perform conversions on the LHS of a member access expression.
8652   ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow);
8653 
8654   ExprResult BuildAnonymousStructUnionMemberReference(
8655       const CXXScopeSpec &SS, SourceLocation nameLoc,
8656       IndirectFieldDecl *indirectField,
8657       DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_none),
8658       Expr *baseObjectExpr = nullptr, SourceLocation opLoc = SourceLocation());
8659 
8660 private:
8661   void CheckMemberAccessOfNoDeref(const MemberExpr *E);
8662 
8663   ///@}
8664 
8665   //
8666   //
8667   // -------------------------------------------------------------------------
8668   //
8669   //
8670 
8671   /// \name Initializers
8672   /// Implementations are in SemaInit.cpp
8673   ///@{
8674 
8675 public:
8676   /// Stack of types that correspond to the parameter entities that are
8677   /// currently being copy-initialized. Can be empty.
8678   llvm::SmallVector<QualType, 4> CurrentParameterCopyTypes;
8679 
8680   llvm::DenseMap<unsigned, CXXDeductionGuideDecl *>
8681       AggregateDeductionCandidates;
8682 
8683   bool IsStringInit(Expr *Init, const ArrayType *AT);
8684 
8685   /// Determine whether we can perform aggregate initialization for the purposes
8686   /// of overload resolution.
8687   bool CanPerformAggregateInitializationForOverloadResolution(
8688       const InitializedEntity &Entity, InitListExpr *From);
8689 
8690   ExprResult ActOnDesignatedInitializer(Designation &Desig,
8691                                         SourceLocation EqualOrColonLoc,
8692                                         bool GNUSyntax, ExprResult Init);
8693 
8694   /// Check that the lifetime of the initializer (and its subobjects) is
8695   /// sufficient for initializing the entity, and perform lifetime extension
8696   /// (when permitted) if not.
8697   void checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init);
8698 
8699   MaterializeTemporaryExpr *
8700   CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary,
8701                                  bool BoundToLvalueReference);
8702 
8703   /// If \p E is a prvalue denoting an unmaterialized temporary, materialize
8704   /// it as an xvalue. In C++98, the result will still be a prvalue, because
8705   /// we don't have xvalues there.
8706   ExprResult TemporaryMaterializationConversion(Expr *E);
8707 
8708   ExprResult PerformQualificationConversion(
8709       Expr *E, QualType Ty, ExprValueKind VK = VK_PRValue,
8710       CheckedConversionKind CCK = CheckedConversionKind::Implicit);
8711 
8712   bool CanPerformCopyInitialization(const InitializedEntity &Entity,
8713                                     ExprResult Init);
8714   ExprResult PerformCopyInitialization(const InitializedEntity &Entity,
8715                                        SourceLocation EqualLoc, ExprResult Init,
8716                                        bool TopLevelOfInitList = false,
8717                                        bool AllowExplicit = false);
8718 
8719   QualType DeduceTemplateSpecializationFromInitializer(
8720       TypeSourceInfo *TInfo, const InitializedEntity &Entity,
8721       const InitializationKind &Kind, MultiExprArg Init);
8722 
8723   ///@}
8724 
8725   //
8726   //
8727   // -------------------------------------------------------------------------
8728   //
8729   //
8730 
8731   /// \name C++ Lambda Expressions
8732   /// Implementations are in SemaLambda.cpp
8733   ///@{
8734 
8735 public:
8736   /// Create a new lambda closure type.
8737   CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange,
8738                                          TypeSourceInfo *Info,
8739                                          unsigned LambdaDependencyKind,
8740                                          LambdaCaptureDefault CaptureDefault);
8741 
8742   /// Number lambda for linkage purposes if necessary.
8743   void handleLambdaNumbering(CXXRecordDecl *Class, CXXMethodDecl *Method,
8744                              std::optional<CXXRecordDecl::LambdaNumbering>
8745                                  NumberingOverride = std::nullopt);
8746 
8747   /// Endow the lambda scope info with the relevant properties.
8748   void buildLambdaScope(sema::LambdaScopeInfo *LSI, CXXMethodDecl *CallOperator,
8749                         SourceRange IntroducerRange,
8750                         LambdaCaptureDefault CaptureDefault,
8751                         SourceLocation CaptureDefaultLoc, bool ExplicitParams,
8752                         bool Mutable);
8753 
8754   CXXMethodDecl *CreateLambdaCallOperator(SourceRange IntroducerRange,
8755                                           CXXRecordDecl *Class);
8756 
8757   void AddTemplateParametersToLambdaCallOperator(
8758       CXXMethodDecl *CallOperator, CXXRecordDecl *Class,
8759       TemplateParameterList *TemplateParams);
8760 
8761   void CompleteLambdaCallOperator(
8762       CXXMethodDecl *Method, SourceLocation LambdaLoc,
8763       SourceLocation CallOperatorLoc, Expr *TrailingRequiresClause,
8764       TypeSourceInfo *MethodTyInfo, ConstexprSpecKind ConstexprKind,
8765       StorageClass SC, ArrayRef<ParmVarDecl *> Params,
8766       bool HasExplicitResultType);
8767 
8768   /// Returns true if the explicit object parameter was invalid.
8769   bool DiagnoseInvalidExplicitObjectParameterInLambda(CXXMethodDecl *Method,
8770                                                       SourceLocation CallLoc);
8771 
8772   /// Perform initialization analysis of the init-capture and perform
8773   /// any implicit conversions such as an lvalue-to-rvalue conversion if
8774   /// not being used to initialize a reference.
actOnLambdaInitCaptureInitialization(SourceLocation Loc,bool ByRef,SourceLocation EllipsisLoc,IdentifierInfo * Id,LambdaCaptureInitKind InitKind,Expr * & Init)8775   ParsedType actOnLambdaInitCaptureInitialization(
8776       SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
8777       IdentifierInfo *Id, LambdaCaptureInitKind InitKind, Expr *&Init) {
8778     return ParsedType::make(buildLambdaInitCaptureInitialization(
8779         Loc, ByRef, EllipsisLoc, std::nullopt, Id,
8780         InitKind != LambdaCaptureInitKind::CopyInit, Init));
8781   }
8782   QualType buildLambdaInitCaptureInitialization(
8783       SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
8784       std::optional<unsigned> NumExpansions, IdentifierInfo *Id,
8785       bool DirectInit, Expr *&Init);
8786 
8787   /// Create a dummy variable within the declcontext of the lambda's
8788   ///  call operator, for name lookup purposes for a lambda init capture.
8789   ///
8790   ///  CodeGen handles emission of lambda captures, ignoring these dummy
8791   ///  variables appropriately.
8792   VarDecl *createLambdaInitCaptureVarDecl(
8793       SourceLocation Loc, QualType InitCaptureType, SourceLocation EllipsisLoc,
8794       IdentifierInfo *Id, unsigned InitStyle, Expr *Init, DeclContext *DeclCtx);
8795 
8796   /// Add an init-capture to a lambda scope.
8797   void addInitCapture(sema::LambdaScopeInfo *LSI, VarDecl *Var, bool ByRef);
8798 
8799   /// Note that we have finished the explicit captures for the
8800   /// given lambda.
8801   void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI);
8802 
8803   /// Deduce a block or lambda's return type based on the return
8804   /// statements present in the body.
8805   void deduceClosureReturnType(sema::CapturingScopeInfo &CSI);
8806 
8807   /// Once the Lambdas capture are known, we can start to create the closure,
8808   /// call operator method, and keep track of the captures.
8809   /// We do the capture lookup here, but they are not actually captured until
8810   /// after we know what the qualifiers of the call operator are.
8811   void ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro,
8812                                             Scope *CurContext);
8813 
8814   /// This is called after parsing the explicit template parameter list
8815   /// on a lambda (if it exists) in C++2a.
8816   void ActOnLambdaExplicitTemplateParameterList(LambdaIntroducer &Intro,
8817                                                 SourceLocation LAngleLoc,
8818                                                 ArrayRef<NamedDecl *> TParams,
8819                                                 SourceLocation RAngleLoc,
8820                                                 ExprResult RequiresClause);
8821 
8822   void ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro,
8823                                     SourceLocation MutableLoc);
8824 
8825   void ActOnLambdaClosureParameters(
8826       Scope *LambdaScope,
8827       MutableArrayRef<DeclaratorChunk::ParamInfo> ParamInfo);
8828 
8829   /// ActOnStartOfLambdaDefinition - This is called just before we start
8830   /// parsing the body of a lambda; it analyzes the explicit captures and
8831   /// arguments, and sets up various data-structures for the body of the
8832   /// lambda.
8833   void ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
8834                                     Declarator &ParamInfo, const DeclSpec &DS);
8835 
8836   /// ActOnLambdaError - If there is an error parsing a lambda, this callback
8837   /// is invoked to pop the information about the lambda.
8838   void ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope,
8839                         bool IsInstantiation = false);
8840 
8841   /// ActOnLambdaExpr - This is called when the body of a lambda expression
8842   /// was successfully completed.
8843   ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body);
8844 
8845   /// Does copying/destroying the captured variable have side effects?
8846   bool CaptureHasSideEffects(const sema::Capture &From);
8847 
8848   /// Diagnose if an explicit lambda capture is unused. Returns true if a
8849   /// diagnostic is emitted.
8850   bool DiagnoseUnusedLambdaCapture(SourceRange CaptureRange,
8851                                    const sema::Capture &From);
8852 
8853   /// Build a FieldDecl suitable to hold the given capture.
8854   FieldDecl *BuildCaptureField(RecordDecl *RD, const sema::Capture &Capture);
8855 
8856   /// Initialize the given capture with a suitable expression.
8857   ExprResult BuildCaptureInit(const sema::Capture &Capture,
8858                               SourceLocation ImplicitCaptureLoc,
8859                               bool IsOpenMPMapping = false);
8860 
8861   /// Complete a lambda-expression having processed and attached the
8862   /// lambda body.
8863   ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
8864                              sema::LambdaScopeInfo *LSI);
8865 
8866   /// Get the return type to use for a lambda's conversion function(s) to
8867   /// function pointer type, given the type of the call operator.
8868   QualType
8869   getLambdaConversionFunctionResultType(const FunctionProtoType *CallOpType,
8870                                         CallingConv CC);
8871 
8872   ExprResult BuildBlockForLambdaConversion(SourceLocation CurrentLocation,
8873                                            SourceLocation ConvLocation,
8874                                            CXXConversionDecl *Conv, Expr *Src);
8875 
8876   class LambdaScopeForCallOperatorInstantiationRAII
8877       : private FunctionScopeRAII {
8878   public:
8879     LambdaScopeForCallOperatorInstantiationRAII(
8880         Sema &SemasRef, FunctionDecl *FD, MultiLevelTemplateArgumentList MLTAL,
8881         LocalInstantiationScope &Scope,
8882         bool ShouldAddDeclsFromParentScope = true);
8883   };
8884 
8885   /// Compute the mangling number context for a lambda expression or
8886   /// block literal. Also return the extra mangling decl if any.
8887   ///
8888   /// \param DC - The DeclContext containing the lambda expression or
8889   /// block literal.
8890   std::tuple<MangleNumberingContext *, Decl *>
8891   getCurrentMangleNumberContext(const DeclContext *DC);
8892 
8893   ///@}
8894 
8895   //
8896   //
8897   // -------------------------------------------------------------------------
8898   //
8899   //
8900 
8901   /// \name Name Lookup
8902   ///
8903   /// These routines provide name lookup that is used during semantic
8904   /// analysis to resolve the various kinds of names (identifiers,
8905   /// overloaded operator names, constructor names, etc.) into zero or
8906   /// more declarations within a particular scope. The major entry
8907   /// points are LookupName, which performs unqualified name lookup,
8908   /// and LookupQualifiedName, which performs qualified name lookup.
8909   ///
8910   /// All name lookup is performed based on some specific criteria,
8911   /// which specify what names will be visible to name lookup and how
8912   /// far name lookup should work. These criteria are important both
8913   /// for capturing language semantics (certain lookups will ignore
8914   /// certain names, for example) and for performance, since name
8915   /// lookup is often a bottleneck in the compilation of C++. Name
8916   /// lookup criteria is specified via the LookupCriteria enumeration.
8917   ///
8918   /// The results of name lookup can vary based on the kind of name
8919   /// lookup performed, the current language, and the translation
8920   /// unit. In C, for example, name lookup will either return nothing
8921   /// (no entity found) or a single declaration. In C++, name lookup
8922   /// can additionally refer to a set of overloaded functions or
8923   /// result in an ambiguity. All of the possible results of name
8924   /// lookup are captured by the LookupResult class, which provides
8925   /// the ability to distinguish among them.
8926   ///
8927   /// Implementations are in SemaLookup.cpp
8928   ///@{
8929 
8930 public:
8931   /// Tracks whether we are in a context where typo correction is
8932   /// disabled.
8933   bool DisableTypoCorrection;
8934 
8935   /// The number of typos corrected by CorrectTypo.
8936   unsigned TyposCorrected;
8937 
8938   typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet;
8939   typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations;
8940 
8941   /// A cache containing identifiers for which typo correction failed and
8942   /// their locations, so that repeated attempts to correct an identifier in a
8943   /// given location are ignored if typo correction already failed for it.
8944   IdentifierSourceLocations TypoCorrectionFailures;
8945 
8946   /// SpecialMemberOverloadResult - The overloading result for a special member
8947   /// function.
8948   ///
8949   /// This is basically a wrapper around PointerIntPair. The lowest bits of the
8950   /// integer are used to determine whether overload resolution succeeded.
8951   class SpecialMemberOverloadResult {
8952   public:
8953     enum Kind { NoMemberOrDeleted, Ambiguous, Success };
8954 
8955   private:
8956     llvm::PointerIntPair<CXXMethodDecl *, 2> Pair;
8957 
8958   public:
SpecialMemberOverloadResult()8959     SpecialMemberOverloadResult() {}
SpecialMemberOverloadResult(CXXMethodDecl * MD)8960     SpecialMemberOverloadResult(CXXMethodDecl *MD)
8961         : Pair(MD, MD->isDeleted() ? NoMemberOrDeleted : Success) {}
8962 
getMethod()8963     CXXMethodDecl *getMethod() const { return Pair.getPointer(); }
setMethod(CXXMethodDecl * MD)8964     void setMethod(CXXMethodDecl *MD) { Pair.setPointer(MD); }
8965 
getKind()8966     Kind getKind() const { return static_cast<Kind>(Pair.getInt()); }
setKind(Kind K)8967     void setKind(Kind K) { Pair.setInt(K); }
8968   };
8969 
8970   class SpecialMemberOverloadResultEntry : public llvm::FastFoldingSetNode,
8971                                            public SpecialMemberOverloadResult {
8972   public:
SpecialMemberOverloadResultEntry(const llvm::FoldingSetNodeID & ID)8973     SpecialMemberOverloadResultEntry(const llvm::FoldingSetNodeID &ID)
8974         : FastFoldingSetNode(ID) {}
8975   };
8976 
8977   /// A cache of special member function overload resolution results
8978   /// for C++ records.
8979   llvm::FoldingSet<SpecialMemberOverloadResultEntry> SpecialMemberCache;
8980 
8981   /// Holds TypoExprs that are created from `createDelayedTypo`. This is used by
8982   /// `TransformTypos` in order to keep track of any TypoExprs that are created
8983   /// recursively during typo correction and wipe them away if the correction
8984   /// fails.
8985   llvm::SmallVector<TypoExpr *, 2> TypoExprs;
8986 
8987   enum class AcceptableKind { Visible, Reachable };
8988 
8989   // Members have to be NamespaceDecl* or TranslationUnitDecl*.
8990   // TODO: make this is a typesafe union.
8991   typedef llvm::SmallSetVector<DeclContext *, 16> AssociatedNamespaceSet;
8992   typedef llvm::SmallSetVector<CXXRecordDecl *, 16> AssociatedClassSet;
8993 
8994   /// Describes the kind of name lookup to perform.
8995   enum LookupNameKind {
8996     /// Ordinary name lookup, which finds ordinary names (functions,
8997     /// variables, typedefs, etc.) in C and most kinds of names
8998     /// (functions, variables, members, types, etc.) in C++.
8999     LookupOrdinaryName = 0,
9000     /// Tag name lookup, which finds the names of enums, classes,
9001     /// structs, and unions.
9002     LookupTagName,
9003     /// Label name lookup.
9004     LookupLabel,
9005     /// Member name lookup, which finds the names of
9006     /// class/struct/union members.
9007     LookupMemberName,
9008     /// Look up of an operator name (e.g., operator+) for use with
9009     /// operator overloading. This lookup is similar to ordinary name
9010     /// lookup, but will ignore any declarations that are class members.
9011     LookupOperatorName,
9012     /// Look up a name following ~ in a destructor name. This is an ordinary
9013     /// lookup, but prefers tags to typedefs.
9014     LookupDestructorName,
9015     /// Look up of a name that precedes the '::' scope resolution
9016     /// operator in C++. This lookup completely ignores operator, object,
9017     /// function, and enumerator names (C++ [basic.lookup.qual]p1).
9018     LookupNestedNameSpecifierName,
9019     /// Look up a namespace name within a C++ using directive or
9020     /// namespace alias definition, ignoring non-namespace names (C++
9021     /// [basic.lookup.udir]p1).
9022     LookupNamespaceName,
9023     /// Look up all declarations in a scope with the given name,
9024     /// including resolved using declarations.  This is appropriate
9025     /// for checking redeclarations for a using declaration.
9026     LookupUsingDeclName,
9027     /// Look up an ordinary name that is going to be redeclared as a
9028     /// name with linkage. This lookup ignores any declarations that
9029     /// are outside of the current scope unless they have linkage. See
9030     /// C99 6.2.2p4-5 and C++ [basic.link]p6.
9031     LookupRedeclarationWithLinkage,
9032     /// Look up a friend of a local class. This lookup does not look
9033     /// outside the innermost non-class scope. See C++11 [class.friend]p11.
9034     LookupLocalFriendName,
9035     /// Look up the name of an Objective-C protocol.
9036     LookupObjCProtocolName,
9037     /// Look up implicit 'self' parameter of an objective-c method.
9038     LookupObjCImplicitSelfParam,
9039     /// Look up the name of an OpenMP user-defined reduction operation.
9040     LookupOMPReductionName,
9041     /// Look up the name of an OpenMP user-defined mapper.
9042     LookupOMPMapperName,
9043     /// Look up any declaration with any name.
9044     LookupAnyName
9045   };
9046 
9047   /// The possible outcomes of name lookup for a literal operator.
9048   enum LiteralOperatorLookupResult {
9049     /// The lookup resulted in an error.
9050     LOLR_Error,
9051     /// The lookup found no match but no diagnostic was issued.
9052     LOLR_ErrorNoDiagnostic,
9053     /// The lookup found a single 'cooked' literal operator, which
9054     /// expects a normal literal to be built and passed to it.
9055     LOLR_Cooked,
9056     /// The lookup found a single 'raw' literal operator, which expects
9057     /// a string literal containing the spelling of the literal token.
9058     LOLR_Raw,
9059     /// The lookup found an overload set of literal operator templates,
9060     /// which expect the characters of the spelling of the literal token to be
9061     /// passed as a non-type template argument pack.
9062     LOLR_Template,
9063     /// The lookup found an overload set of literal operator templates,
9064     /// which expect the character type and characters of the spelling of the
9065     /// string literal token to be passed as template arguments.
9066     LOLR_StringTemplatePack,
9067   };
9068 
9069   SpecialMemberOverloadResult
9070   LookupSpecialMember(CXXRecordDecl *D, CXXSpecialMemberKind SM, bool ConstArg,
9071                       bool VolatileArg, bool RValueThis, bool ConstThis,
9072                       bool VolatileThis);
9073 
9074   typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator;
9075   typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)>
9076       TypoRecoveryCallback;
9077 
9078   RedeclarationKind forRedeclarationInCurContext() const;
9079 
9080   /// Look up a name, looking for a single declaration.  Return
9081   /// null if the results were absent, ambiguous, or overloaded.
9082   ///
9083   /// It is preferable to use the elaborated form and explicitly handle
9084   /// ambiguity and overloaded.
9085   NamedDecl *LookupSingleName(
9086       Scope *S, DeclarationName Name, SourceLocation Loc,
9087       LookupNameKind NameKind,
9088       RedeclarationKind Redecl = RedeclarationKind::NotForRedeclaration);
9089 
9090   /// Lookup a builtin function, when name lookup would otherwise
9091   /// fail.
9092   bool LookupBuiltin(LookupResult &R);
9093   void LookupNecessaryTypesForBuiltin(Scope *S, unsigned ID);
9094 
9095   /// Perform unqualified name lookup starting from a given
9096   /// scope.
9097   ///
9098   /// Unqualified name lookup (C++ [basic.lookup.unqual], C99 6.2.1) is
9099   /// used to find names within the current scope. For example, 'x' in
9100   /// @code
9101   /// int x;
9102   /// int f() {
9103   ///   return x; // unqualified name look finds 'x' in the global scope
9104   /// }
9105   /// @endcode
9106   ///
9107   /// Different lookup criteria can find different names. For example, a
9108   /// particular scope can have both a struct and a function of the same
9109   /// name, and each can be found by certain lookup criteria. For more
9110   /// information about lookup criteria, see the documentation for the
9111   /// class LookupCriteria.
9112   ///
9113   /// @param S        The scope from which unqualified name lookup will
9114   /// begin. If the lookup criteria permits, name lookup may also search
9115   /// in the parent scopes.
9116   ///
9117   /// @param [in,out] R Specifies the lookup to perform (e.g., the name to
9118   /// look up and the lookup kind), and is updated with the results of lookup
9119   /// including zero or more declarations and possibly additional information
9120   /// used to diagnose ambiguities.
9121   ///
9122   /// @returns \c true if lookup succeeded and false otherwise.
9123   bool LookupName(LookupResult &R, Scope *S, bool AllowBuiltinCreation = false,
9124                   bool ForceNoCPlusPlus = false);
9125 
9126   /// Perform qualified name lookup into a given context.
9127   ///
9128   /// Qualified name lookup (C++ [basic.lookup.qual]) is used to find
9129   /// names when the context of those names is explicit specified, e.g.,
9130   /// "std::vector" or "x->member", or as part of unqualified name lookup.
9131   ///
9132   /// Different lookup criteria can find different names. For example, a
9133   /// particular scope can have both a struct and a function of the same
9134   /// name, and each can be found by certain lookup criteria. For more
9135   /// information about lookup criteria, see the documentation for the
9136   /// class LookupCriteria.
9137   ///
9138   /// \param R captures both the lookup criteria and any lookup results found.
9139   ///
9140   /// \param LookupCtx The context in which qualified name lookup will
9141   /// search. If the lookup criteria permits, name lookup may also search
9142   /// in the parent contexts or (for C++ classes) base classes.
9143   ///
9144   /// \param InUnqualifiedLookup true if this is qualified name lookup that
9145   /// occurs as part of unqualified name lookup.
9146   ///
9147   /// \returns true if lookup succeeded, false if it failed.
9148   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
9149                            bool InUnqualifiedLookup = false);
9150 
9151   /// Performs qualified name lookup or special type of lookup for
9152   /// "__super::" scope specifier.
9153   ///
9154   /// This routine is a convenience overload meant to be called from contexts
9155   /// that need to perform a qualified name lookup with an optional C++ scope
9156   /// specifier that might require special kind of lookup.
9157   ///
9158   /// \param R captures both the lookup criteria and any lookup results found.
9159   ///
9160   /// \param LookupCtx The context in which qualified name lookup will
9161   /// search.
9162   ///
9163   /// \param SS An optional C++ scope-specifier.
9164   ///
9165   /// \returns true if lookup succeeded, false if it failed.
9166   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
9167                            CXXScopeSpec &SS);
9168 
9169   /// Performs name lookup for a name that was parsed in the
9170   /// source code, and may contain a C++ scope specifier.
9171   ///
9172   /// This routine is a convenience routine meant to be called from
9173   /// contexts that receive a name and an optional C++ scope specifier
9174   /// (e.g., "N::M::x"). It will then perform either qualified or
9175   /// unqualified name lookup (with LookupQualifiedName or LookupName,
9176   /// respectively) on the given name and return those results. It will
9177   /// perform a special type of lookup for "__super::" scope specifier.
9178   ///
9179   /// @param S        The scope from which unqualified name lookup will
9180   /// begin.
9181   ///
9182   /// @param SS       An optional C++ scope-specifier, e.g., "::N::M".
9183   ///
9184   /// @param EnteringContext Indicates whether we are going to enter the
9185   /// context of the scope-specifier SS (if present).
9186   ///
9187   /// @returns True if any decls were found (but possibly ambiguous)
9188   bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS,
9189                         QualType ObjectType, bool AllowBuiltinCreation = false,
9190                         bool EnteringContext = false);
9191 
9192   /// Perform qualified name lookup into all base classes of the given
9193   /// class.
9194   ///
9195   /// \param R captures both the lookup criteria and any lookup results found.
9196   ///
9197   /// \param Class The context in which qualified name lookup will
9198   /// search. Name lookup will search in all base classes merging the results.
9199   ///
9200   /// @returns True if any decls were found (but possibly ambiguous)
9201   bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class);
9202 
9203   void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,
9204                                     UnresolvedSetImpl &Functions);
9205 
9206   /// LookupOrCreateLabel - Do a name lookup of a label with the specified name.
9207   /// If GnuLabelLoc is a valid source location, then this is a definition
9208   /// of an __label__ label name, otherwise it is a normal label definition
9209   /// or use.
9210   LabelDecl *LookupOrCreateLabel(IdentifierInfo *II, SourceLocation IdentLoc,
9211                                  SourceLocation GnuLabelLoc = SourceLocation());
9212 
9213   /// Look up the constructors for the given class.
9214   DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class);
9215 
9216   /// Look up the default constructor for the given class.
9217   CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class);
9218 
9219   /// Look up the copying constructor for the given class.
9220   CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class,
9221                                                unsigned Quals);
9222 
9223   /// Look up the copying assignment operator for the given class.
9224   CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals,
9225                                          bool RValueThis, unsigned ThisQuals);
9226 
9227   /// Look up the moving constructor for the given class.
9228   CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class,
9229                                               unsigned Quals);
9230 
9231   /// Look up the moving assignment operator for the given class.
9232   CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, unsigned Quals,
9233                                         bool RValueThis, unsigned ThisQuals);
9234 
9235   /// Look for the destructor of the given class.
9236   ///
9237   /// During semantic analysis, this routine should be used in lieu of
9238   /// CXXRecordDecl::getDestructor().
9239   ///
9240   /// \returns The destructor for this class.
9241   CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class);
9242 
9243   /// Force the declaration of any implicitly-declared members of this
9244   /// class.
9245   void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class);
9246 
9247   /// Make a merged definition of an existing hidden definition \p ND
9248   /// visible at the specified location.
9249   void makeMergedDefinitionVisible(NamedDecl *ND);
9250 
9251   /// Check ODR hashes for C/ObjC when merging types from modules.
9252   /// Differently from C++, actually parse the body and reject in case
9253   /// of a mismatch.
9254   template <typename T,
9255             typename = std::enable_if_t<std::is_base_of<NamedDecl, T>::value>>
ActOnDuplicateODRHashDefinition(T * Duplicate,T * Previous)9256   bool ActOnDuplicateODRHashDefinition(T *Duplicate, T *Previous) {
9257     if (Duplicate->getODRHash() != Previous->getODRHash())
9258       return false;
9259 
9260     // Make the previous decl visible.
9261     makeMergedDefinitionVisible(Previous);
9262     return true;
9263   }
9264 
9265   /// Get the set of additional modules that should be checked during
9266   /// name lookup. A module and its imports become visible when instanting a
9267   /// template defined within it.
9268   llvm::DenseSet<Module *> &getLookupModules();
9269 
9270   bool hasVisibleMergedDefinition(const NamedDecl *Def);
9271   bool hasMergedDefinitionInCurrentModule(const NamedDecl *Def);
9272 
9273   /// Determine if the template parameter \p D has a visible default argument.
9274   bool
9275   hasVisibleDefaultArgument(const NamedDecl *D,
9276                             llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9277   /// Determine if the template parameter \p D has a reachable default argument.
9278   bool hasReachableDefaultArgument(
9279       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9280   /// Determine if the template parameter \p D has a reachable default argument.
9281   bool hasAcceptableDefaultArgument(const NamedDecl *D,
9282                                     llvm::SmallVectorImpl<Module *> *Modules,
9283                                     Sema::AcceptableKind Kind);
9284 
9285   /// Determine if there is a visible declaration of \p D that is an explicit
9286   /// specialization declaration for a specialization of a template. (For a
9287   /// member specialization, use hasVisibleMemberSpecialization.)
9288   bool hasVisibleExplicitSpecialization(
9289       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9290   /// Determine if there is a reachable declaration of \p D that is an explicit
9291   /// specialization declaration for a specialization of a template. (For a
9292   /// member specialization, use hasReachableMemberSpecialization.)
9293   bool hasReachableExplicitSpecialization(
9294       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9295 
9296   /// Determine if there is a visible declaration of \p D that is a member
9297   /// specialization declaration (as opposed to an instantiated declaration).
9298   bool hasVisibleMemberSpecialization(
9299       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9300   /// Determine if there is a reachable declaration of \p D that is a member
9301   /// specialization declaration (as opposed to an instantiated declaration).
9302   bool hasReachableMemberSpecialization(
9303       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9304 
9305   bool isModuleVisible(const Module *M, bool ModulePrivate = false);
9306 
9307   /// Determine whether any declaration of an entity is visible.
9308   bool
9309   hasVisibleDeclaration(const NamedDecl *D,
9310                         llvm::SmallVectorImpl<Module *> *Modules = nullptr) {
9311     return isVisible(D) || hasVisibleDeclarationSlow(D, Modules);
9312   }
9313 
9314   bool hasVisibleDeclarationSlow(const NamedDecl *D,
9315                                  llvm::SmallVectorImpl<Module *> *Modules);
9316   /// Determine whether any declaration of an entity is reachable.
9317   bool
9318   hasReachableDeclaration(const NamedDecl *D,
9319                           llvm::SmallVectorImpl<Module *> *Modules = nullptr) {
9320     return isReachable(D) || hasReachableDeclarationSlow(D, Modules);
9321   }
9322   bool hasReachableDeclarationSlow(
9323       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
9324 
9325   void diagnoseTypo(const TypoCorrection &Correction,
9326                     const PartialDiagnostic &TypoDiag,
9327                     bool ErrorRecovery = true);
9328 
9329   /// Diagnose a successfully-corrected typo. Separated from the correction
9330   /// itself to allow external validation of the result, etc.
9331   ///
9332   /// \param Correction The result of performing typo correction.
9333   /// \param TypoDiag The diagnostic to produce. This will have the corrected
9334   ///        string added to it (and usually also a fixit).
9335   /// \param PrevNote A note to use when indicating the location of the entity
9336   ///        to which we are correcting. Will have the correction string added
9337   ///        to it.
9338   /// \param ErrorRecovery If \c true (the default), the caller is going to
9339   ///        recover from the typo as if the corrected string had been typed.
9340   ///        In this case, \c PDiag must be an error, and we will attach a fixit
9341   ///        to it.
9342   void diagnoseTypo(const TypoCorrection &Correction,
9343                     const PartialDiagnostic &TypoDiag,
9344                     const PartialDiagnostic &PrevNote,
9345                     bool ErrorRecovery = true);
9346 
9347   /// Find the associated classes and namespaces for
9348   /// argument-dependent lookup for a call with the given set of
9349   /// arguments.
9350   ///
9351   /// This routine computes the sets of associated classes and associated
9352   /// namespaces searched by argument-dependent lookup
9353   /// (C++ [basic.lookup.argdep]) for a given set of arguments.
9354   void FindAssociatedClassesAndNamespaces(
9355       SourceLocation InstantiationLoc, ArrayRef<Expr *> Args,
9356       AssociatedNamespaceSet &AssociatedNamespaces,
9357       AssociatedClassSet &AssociatedClasses);
9358 
9359   /// Produce a diagnostic describing the ambiguity that resulted
9360   /// from name lookup.
9361   ///
9362   /// \param Result The result of the ambiguous lookup to be diagnosed.
9363   void DiagnoseAmbiguousLookup(LookupResult &Result);
9364 
9365   /// LookupLiteralOperator - Determine which literal operator should be used
9366   /// for a user-defined literal, per C++11 [lex.ext].
9367   ///
9368   /// Normal overload resolution is not used to select which literal operator to
9369   /// call for a user-defined literal. Look up the provided literal operator
9370   /// name, and filter the results to the appropriate set for the given argument
9371   /// types.
9372   LiteralOperatorLookupResult
9373   LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys,
9374                         bool AllowRaw, bool AllowTemplate,
9375                         bool AllowStringTemplate, bool DiagnoseMissing,
9376                         StringLiteral *StringLit = nullptr);
9377 
9378   void ArgumentDependentLookup(DeclarationName Name, SourceLocation Loc,
9379                                ArrayRef<Expr *> Args, ADLResult &Functions);
9380 
9381   void LookupVisibleDecls(Scope *S, LookupNameKind Kind,
9382                           VisibleDeclConsumer &Consumer,
9383                           bool IncludeGlobalScope = true,
9384                           bool LoadExternal = true);
9385   void LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind,
9386                           VisibleDeclConsumer &Consumer,
9387                           bool IncludeGlobalScope = true,
9388                           bool IncludeDependentBases = false,
9389                           bool LoadExternal = true);
9390 
9391   enum CorrectTypoKind {
9392     CTK_NonError,     // CorrectTypo used in a non error recovery situation.
9393     CTK_ErrorRecovery // CorrectTypo used in normal error recovery.
9394   };
9395 
9396   /// Try to "correct" a typo in the source code by finding
9397   /// visible declarations whose names are similar to the name that was
9398   /// present in the source code.
9399   ///
9400   /// \param TypoName the \c DeclarationNameInfo structure that contains
9401   /// the name that was present in the source code along with its location.
9402   ///
9403   /// \param LookupKind the name-lookup criteria used to search for the name.
9404   ///
9405   /// \param S the scope in which name lookup occurs.
9406   ///
9407   /// \param SS the nested-name-specifier that precedes the name we're
9408   /// looking for, if present.
9409   ///
9410   /// \param CCC A CorrectionCandidateCallback object that provides further
9411   /// validation of typo correction candidates. It also provides flags for
9412   /// determining the set of keywords permitted.
9413   ///
9414   /// \param MemberContext if non-NULL, the context in which to look for
9415   /// a member access expression.
9416   ///
9417   /// \param EnteringContext whether we're entering the context described by
9418   /// the nested-name-specifier SS.
9419   ///
9420   /// \param OPT when non-NULL, the search for visible declarations will
9421   /// also walk the protocols in the qualified interfaces of \p OPT.
9422   ///
9423   /// \returns a \c TypoCorrection containing the corrected name if the typo
9424   /// along with information such as the \c NamedDecl where the corrected name
9425   /// was declared, and any additional \c NestedNameSpecifier needed to access
9426   /// it (C++ only). The \c TypoCorrection is empty if there is no correction.
9427   TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo,
9428                              Sema::LookupNameKind LookupKind, Scope *S,
9429                              CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,
9430                              CorrectTypoKind Mode,
9431                              DeclContext *MemberContext = nullptr,
9432                              bool EnteringContext = false,
9433                              const ObjCObjectPointerType *OPT = nullptr,
9434                              bool RecordFailure = true);
9435 
9436   /// Try to "correct" a typo in the source code by finding
9437   /// visible declarations whose names are similar to the name that was
9438   /// present in the source code.
9439   ///
9440   /// \param TypoName the \c DeclarationNameInfo structure that contains
9441   /// the name that was present in the source code along with its location.
9442   ///
9443   /// \param LookupKind the name-lookup criteria used to search for the name.
9444   ///
9445   /// \param S the scope in which name lookup occurs.
9446   ///
9447   /// \param SS the nested-name-specifier that precedes the name we're
9448   /// looking for, if present.
9449   ///
9450   /// \param CCC A CorrectionCandidateCallback object that provides further
9451   /// validation of typo correction candidates. It also provides flags for
9452   /// determining the set of keywords permitted.
9453   ///
9454   /// \param TDG A TypoDiagnosticGenerator functor that will be used to print
9455   /// diagnostics when the actual typo correction is attempted.
9456   ///
9457   /// \param TRC A TypoRecoveryCallback functor that will be used to build an
9458   /// Expr from a typo correction candidate.
9459   ///
9460   /// \param MemberContext if non-NULL, the context in which to look for
9461   /// a member access expression.
9462   ///
9463   /// \param EnteringContext whether we're entering the context described by
9464   /// the nested-name-specifier SS.
9465   ///
9466   /// \param OPT when non-NULL, the search for visible declarations will
9467   /// also walk the protocols in the qualified interfaces of \p OPT.
9468   ///
9469   /// \returns a new \c TypoExpr that will later be replaced in the AST with an
9470   /// Expr representing the result of performing typo correction, or nullptr if
9471   /// typo correction is not possible. If nullptr is returned, no diagnostics
9472   /// will be emitted and it is the responsibility of the caller to emit any
9473   /// that are needed.
9474   TypoExpr *CorrectTypoDelayed(
9475       const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind,
9476       Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,
9477       TypoDiagnosticGenerator TDG, TypoRecoveryCallback TRC,
9478       CorrectTypoKind Mode, DeclContext *MemberContext = nullptr,
9479       bool EnteringContext = false, const ObjCObjectPointerType *OPT = nullptr);
9480 
9481   /// Kinds of missing import. Note, the values of these enumerators correspond
9482   /// to %select values in diagnostics.
9483   enum class MissingImportKind {
9484     Declaration,
9485     Definition,
9486     DefaultArgument,
9487     ExplicitSpecialization,
9488     PartialSpecialization
9489   };
9490 
9491   /// Diagnose that the specified declaration needs to be visible but
9492   /// isn't, and suggest a module import that would resolve the problem.
9493   void diagnoseMissingImport(SourceLocation Loc, const NamedDecl *Decl,
9494                              MissingImportKind MIK, bool Recover = true);
9495   void diagnoseMissingImport(SourceLocation Loc, const NamedDecl *Decl,
9496                              SourceLocation DeclLoc, ArrayRef<Module *> Modules,
9497                              MissingImportKind MIK, bool Recover);
9498 
9499   struct TypoExprState {
9500     std::unique_ptr<TypoCorrectionConsumer> Consumer;
9501     TypoDiagnosticGenerator DiagHandler;
9502     TypoRecoveryCallback RecoveryHandler;
9503     TypoExprState();
9504     TypoExprState(TypoExprState &&other) noexcept;
9505     TypoExprState &operator=(TypoExprState &&other) noexcept;
9506   };
9507 
9508   const TypoExprState &getTypoExprState(TypoExpr *TE) const;
9509 
9510   /// Clears the state of the given TypoExpr.
9511   void clearDelayedTypo(TypoExpr *TE);
9512 
9513   /// Called on #pragma clang __debug dump II
9514   void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II);
9515 
9516   /// Called on #pragma clang __debug dump E
9517   void ActOnPragmaDump(Expr *E);
9518 
9519 private:
9520   // The set of known/encountered (unique, canonicalized) NamespaceDecls.
9521   //
9522   // The boolean value will be true to indicate that the namespace was loaded
9523   // from an AST/PCH file, or false otherwise.
9524   llvm::MapVector<NamespaceDecl *, bool> KnownNamespaces;
9525 
9526   /// Whether we have already loaded known namespaces from an extenal
9527   /// source.
9528   bool LoadedExternalKnownNamespaces;
9529 
9530   bool CppLookupName(LookupResult &R, Scope *S);
9531 
9532   /// Determine if we could use all the declarations in the module.
9533   bool isUsableModule(const Module *M);
9534 
9535   /// Helper for CorrectTypo and CorrectTypoDelayed used to create and
9536   /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction
9537   /// should be skipped entirely.
9538   std::unique_ptr<TypoCorrectionConsumer> makeTypoCorrectionConsumer(
9539       const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind,
9540       Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,
9541       DeclContext *MemberContext, bool EnteringContext,
9542       const ObjCObjectPointerType *OPT, bool ErrorRecovery);
9543 
9544   /// The set of unhandled TypoExprs and their associated state.
9545   llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos;
9546 
9547   /// Creates a new TypoExpr AST node.
9548   TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC,
9549                               TypoDiagnosticGenerator TDG,
9550                               TypoRecoveryCallback TRC, SourceLocation TypoLoc);
9551 
9552   /// Cache for module units which is usable for current module.
9553   llvm::DenseSet<const Module *> UsableModuleUnitsCache;
9554 
9555   /// Record the typo correction failure and return an empty correction.
9556   TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc,
9557                                   bool RecordFailure = true) {
9558     if (RecordFailure)
9559       TypoCorrectionFailures[Typo].insert(TypoLoc);
9560     return TypoCorrection();
9561   }
9562 
9563   bool isAcceptableSlow(const NamedDecl *D, AcceptableKind Kind);
9564 
9565   /// Determine whether two declarations should be linked together, given that
9566   /// the old declaration might not be visible and the new declaration might
9567   /// not have external linkage.
shouldLinkPossiblyHiddenDecl(const NamedDecl * Old,const NamedDecl * New)9568   bool shouldLinkPossiblyHiddenDecl(const NamedDecl *Old,
9569                                     const NamedDecl *New) {
9570     if (isVisible(Old))
9571       return true;
9572     // See comment in below overload for why it's safe to compute the linkage
9573     // of the new declaration here.
9574     if (New->isExternallyDeclarable()) {
9575       assert(Old->isExternallyDeclarable() &&
9576              "should not have found a non-externally-declarable previous decl");
9577       return true;
9578     }
9579     return false;
9580   }
9581   bool shouldLinkPossiblyHiddenDecl(LookupResult &Old, const NamedDecl *New);
9582 
9583   ///@}
9584 
9585   //
9586   //
9587   // -------------------------------------------------------------------------
9588   //
9589   //
9590 
9591   /// \name Modules
9592   /// Implementations are in SemaModule.cpp
9593   ///@{
9594 
9595 public:
9596   /// Get the module unit whose scope we are currently within.
getCurrentModule()9597   Module *getCurrentModule() const {
9598     return ModuleScopes.empty() ? nullptr : ModuleScopes.back().Module;
9599   }
9600 
9601   /// Is the module scope we are an implementation unit?
currentModuleIsImplementation()9602   bool currentModuleIsImplementation() const {
9603     return ModuleScopes.empty()
9604                ? false
9605                : ModuleScopes.back().Module->isModuleImplementation();
9606   }
9607 
9608   // When loading a non-modular PCH files, this is used to restore module
9609   // visibility.
makeModuleVisible(Module * Mod,SourceLocation ImportLoc)9610   void makeModuleVisible(Module *Mod, SourceLocation ImportLoc) {
9611     VisibleModules.setVisible(Mod, ImportLoc);
9612   }
9613 
9614   enum class ModuleDeclKind {
9615     Interface,               ///< 'export module X;'
9616     Implementation,          ///< 'module X;'
9617     PartitionInterface,      ///< 'export module X:Y;'
9618     PartitionImplementation, ///< 'module X:Y;'
9619   };
9620 
9621   /// An enumeration to represent the transition of states in parsing module
9622   /// fragments and imports.  If we are not parsing a C++20 TU, or we find
9623   /// an error in state transition, the state is set to NotACXX20Module.
9624   enum class ModuleImportState {
9625     FirstDecl,      ///< Parsing the first decl in a TU.
9626     GlobalFragment, ///< after 'module;' but before 'module X;'
9627     ImportAllowed,  ///< after 'module X;' but before any non-import decl.
9628     ImportFinished, ///< after any non-import decl.
9629     PrivateFragmentImportAllowed,  ///< after 'module :private;' but before any
9630                                    ///< non-import decl.
9631     PrivateFragmentImportFinished, ///< after 'module :private;' but a
9632                                    ///< non-import decl has already been seen.
9633     NotACXX20Module ///< Not a C++20 TU, or an invalid state was found.
9634   };
9635 
9636   /// The parser has processed a module-declaration that begins the definition
9637   /// of a module interface or implementation.
9638   DeclGroupPtrTy ActOnModuleDecl(SourceLocation StartLoc,
9639                                  SourceLocation ModuleLoc, ModuleDeclKind MDK,
9640                                  ModuleIdPath Path, ModuleIdPath Partition,
9641                                  ModuleImportState &ImportState);
9642 
9643   /// The parser has processed a global-module-fragment declaration that begins
9644   /// the definition of the global module fragment of the current module unit.
9645   /// \param ModuleLoc The location of the 'module' keyword.
9646   DeclGroupPtrTy ActOnGlobalModuleFragmentDecl(SourceLocation ModuleLoc);
9647 
9648   /// The parser has processed a private-module-fragment declaration that begins
9649   /// the definition of the private module fragment of the current module unit.
9650   /// \param ModuleLoc The location of the 'module' keyword.
9651   /// \param PrivateLoc The location of the 'private' keyword.
9652   DeclGroupPtrTy ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc,
9653                                                 SourceLocation PrivateLoc);
9654 
9655   /// The parser has processed a module import declaration.
9656   ///
9657   /// \param StartLoc The location of the first token in the declaration. This
9658   ///        could be the location of an '@', 'export', or 'import'.
9659   /// \param ExportLoc The location of the 'export' keyword, if any.
9660   /// \param ImportLoc The location of the 'import' keyword.
9661   /// \param Path The module toplevel name as an access path.
9662   /// \param IsPartition If the name is for a partition.
9663   DeclResult ActOnModuleImport(SourceLocation StartLoc,
9664                                SourceLocation ExportLoc,
9665                                SourceLocation ImportLoc, ModuleIdPath Path,
9666                                bool IsPartition = false);
9667   DeclResult ActOnModuleImport(SourceLocation StartLoc,
9668                                SourceLocation ExportLoc,
9669                                SourceLocation ImportLoc, Module *M,
9670                                ModuleIdPath Path = {});
9671 
9672   /// The parser has processed a module import translated from a
9673   /// #include or similar preprocessing directive.
9674   void ActOnAnnotModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
9675   void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
9676 
9677   /// The parsed has entered a submodule.
9678   void ActOnAnnotModuleBegin(SourceLocation DirectiveLoc, Module *Mod);
9679   /// The parser has left a submodule.
9680   void ActOnAnnotModuleEnd(SourceLocation DirectiveLoc, Module *Mod);
9681 
9682   /// Create an implicit import of the given module at the given
9683   /// source location, for error recovery, if possible.
9684   ///
9685   /// This routine is typically used when an entity found by name lookup
9686   /// is actually hidden within a module that we know about but the user
9687   /// has forgotten to import.
9688   void createImplicitModuleImportForErrorRecovery(SourceLocation Loc,
9689                                                   Module *Mod);
9690 
9691   /// We have parsed the start of an export declaration, including the '{'
9692   /// (if present).
9693   Decl *ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc,
9694                              SourceLocation LBraceLoc);
9695 
9696   /// Complete the definition of an export declaration.
9697   Decl *ActOnFinishExportDecl(Scope *S, Decl *ExportDecl,
9698                               SourceLocation RBraceLoc);
9699 
9700 private:
9701   /// The parser has begun a translation unit to be compiled as a C++20
9702   /// Header Unit, helper for ActOnStartOfTranslationUnit() only.
9703   void HandleStartOfHeaderUnit();
9704 
9705   struct ModuleScope {
9706     SourceLocation BeginLoc;
9707     clang::Module *Module = nullptr;
9708     VisibleModuleSet OuterVisibleModules;
9709   };
9710   /// The modules we're currently parsing.
9711   llvm::SmallVector<ModuleScope, 16> ModuleScopes;
9712 
9713   /// For an interface unit, this is the implicitly imported interface unit.
9714   clang::Module *ThePrimaryInterface = nullptr;
9715 
9716   /// The explicit global module fragment of the current translation unit.
9717   /// The explicit Global Module Fragment, as specified in C++
9718   /// [module.global.frag].
9719   clang::Module *TheGlobalModuleFragment = nullptr;
9720 
9721   /// The implicit global module fragments of the current translation unit.
9722   ///
9723   /// The contents in the implicit global module fragment can't be discarded.
9724   clang::Module *TheImplicitGlobalModuleFragment = nullptr;
9725 
9726   /// Namespace definitions that we will export when they finish.
9727   llvm::SmallPtrSet<const NamespaceDecl *, 8> DeferredExportedNamespaces;
9728 
9729   /// In a C++ standard module, inline declarations require a definition to be
9730   /// present at the end of a definition domain.  This set holds the decls to
9731   /// be checked at the end of the TU.
9732   llvm::SmallPtrSet<const FunctionDecl *, 8> PendingInlineFuncDecls;
9733 
9734   /// Helper function to judge if we are in module purview.
9735   /// Return false if we are not in a module.
9736   bool isCurrentModulePurview() const;
9737 
9738   /// Enter the scope of the explicit global module fragment.
9739   Module *PushGlobalModuleFragment(SourceLocation BeginLoc);
9740   /// Leave the scope of the explicit global module fragment.
9741   void PopGlobalModuleFragment();
9742 
9743   /// Enter the scope of an implicit global module fragment.
9744   Module *PushImplicitGlobalModuleFragment(SourceLocation BeginLoc);
9745   /// Leave the scope of an implicit global module fragment.
9746   void PopImplicitGlobalModuleFragment();
9747 
9748   VisibleModuleSet VisibleModules;
9749 
9750   ///@}
9751 
9752   //
9753   //
9754   // -------------------------------------------------------------------------
9755   //
9756   //
9757 
9758   /// \name C++ Overloading
9759   /// Implementations are in SemaOverload.cpp
9760   ///@{
9761 
9762 public:
9763   /// Whether deferrable diagnostics should be deferred.
9764   bool DeferDiags = false;
9765 
9766   /// RAII class to control scope of DeferDiags.
9767   class DeferDiagsRAII {
9768     Sema &S;
9769     bool SavedDeferDiags = false;
9770 
9771   public:
DeferDiagsRAII(Sema & S,bool DeferDiags)9772     DeferDiagsRAII(Sema &S, bool DeferDiags)
9773         : S(S), SavedDeferDiags(S.DeferDiags) {
9774       S.DeferDiags = DeferDiags;
9775     }
~DeferDiagsRAII()9776     ~DeferDiagsRAII() { S.DeferDiags = SavedDeferDiags; }
9777   };
9778 
9779   /// Flag indicating if Sema is building a recovery call expression.
9780   ///
9781   /// This flag is used to avoid building recovery call expressions
9782   /// if Sema is already doing so, which would cause infinite recursions.
9783   bool IsBuildingRecoveryCallExpr;
9784 
9785   enum OverloadKind {
9786     /// This is a legitimate overload: the existing declarations are
9787     /// functions or function templates with different signatures.
9788     Ovl_Overload,
9789 
9790     /// This is not an overload because the signature exactly matches
9791     /// an existing declaration.
9792     Ovl_Match,
9793 
9794     /// This is not an overload because the lookup results contain a
9795     /// non-function.
9796     Ovl_NonFunction
9797   };
9798 
9799   /// Determine whether the given New declaration is an overload of the
9800   /// declarations in Old. This routine returns Ovl_Match or Ovl_NonFunction if
9801   /// New and Old cannot be overloaded, e.g., if New has the same signature as
9802   /// some function in Old (C++ 1.3.10) or if the Old declarations aren't
9803   /// functions (or function templates) at all. When it does return Ovl_Match or
9804   /// Ovl_NonFunction, MatchedDecl will point to the decl that New cannot be
9805   /// overloaded with. This decl may be a UsingShadowDecl on top of the
9806   /// underlying declaration.
9807   ///
9808   /// Example: Given the following input:
9809   ///
9810   ///   void f(int, float); // #1
9811   ///   void f(int, int); // #2
9812   ///   int f(int, int); // #3
9813   ///
9814   /// When we process #1, there is no previous declaration of "f", so IsOverload
9815   /// will not be used.
9816   ///
9817   /// When we process #2, Old contains only the FunctionDecl for #1. By
9818   /// comparing the parameter types, we see that #1 and #2 are overloaded (since
9819   /// they have different signatures), so this routine returns Ovl_Overload;
9820   /// MatchedDecl is unchanged.
9821   ///
9822   /// When we process #3, Old is an overload set containing #1 and #2. We
9823   /// compare the signatures of #3 to #1 (they're overloaded, so we do nothing)
9824   /// and then #3 to #2. Since the signatures of #3 and #2 are identical (return
9825   /// types of functions are not part of the signature), IsOverload returns
9826   /// Ovl_Match and MatchedDecl will be set to point to the FunctionDecl for #2.
9827   ///
9828   /// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced into a
9829   /// class by a using declaration. The rules for whether to hide shadow
9830   /// declarations ignore some properties which otherwise figure into a function
9831   /// template's signature.
9832   OverloadKind CheckOverload(Scope *S, FunctionDecl *New,
9833                              const LookupResult &OldDecls, NamedDecl *&OldDecl,
9834                              bool UseMemberUsingDeclRules);
9835   bool IsOverload(FunctionDecl *New, FunctionDecl *Old,
9836                   bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs = true);
9837 
9838   // Checks whether MD constitutes an override the base class method BaseMD.
9839   // When checking for overrides, the object object members are ignored.
9840   bool IsOverride(FunctionDecl *MD, FunctionDecl *BaseMD,
9841                   bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs = true);
9842 
9843   enum class AllowedExplicit {
9844     /// Allow no explicit functions to be used.
9845     None,
9846     /// Allow explicit conversion functions but not explicit constructors.
9847     Conversions,
9848     /// Allow both explicit conversion functions and explicit constructors.
9849     All
9850   };
9851 
9852   ImplicitConversionSequence TryImplicitConversion(
9853       Expr *From, QualType ToType, bool SuppressUserConversions,
9854       AllowedExplicit AllowExplicit, bool InOverloadResolution, bool CStyle,
9855       bool AllowObjCWritebackConversion);
9856 
9857   /// PerformImplicitConversion - Perform an implicit conversion of the
9858   /// expression From to the type ToType. Returns the
9859   /// converted expression. Flavor is the kind of conversion we're
9860   /// performing, used in the error message. If @p AllowExplicit,
9861   /// explicit user-defined conversions are permitted.
9862   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
9863                                        AssignmentAction Action,
9864                                        bool AllowExplicit = false);
9865 
9866   /// IsIntegralPromotion - Determines whether the conversion from the
9867   /// expression From (whose potentially-adjusted type is FromType) to
9868   /// ToType is an integral promotion (C++ 4.5). If so, returns true and
9869   /// sets PromotedType to the promoted type.
9870   bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType);
9871 
9872   /// IsFloatingPointPromotion - Determines whether the conversion from
9873   /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
9874   /// returns true and sets PromotedType to the promoted type.
9875   bool IsFloatingPointPromotion(QualType FromType, QualType ToType);
9876 
9877   /// Determine if a conversion is a complex promotion.
9878   ///
9879   /// A complex promotion is defined as a complex -> complex conversion
9880   /// where the conversion between the underlying real types is a
9881   /// floating-point or integral promotion.
9882   bool IsComplexPromotion(QualType FromType, QualType ToType);
9883 
9884   /// IsPointerConversion - Determines whether the conversion of the
9885   /// expression From, which has the (possibly adjusted) type FromType,
9886   /// can be converted to the type ToType via a pointer conversion (C++
9887   /// 4.10). If so, returns true and places the converted type (that
9888   /// might differ from ToType in its cv-qualifiers at some level) into
9889   /// ConvertedType.
9890   ///
9891   /// This routine also supports conversions to and from block pointers
9892   /// and conversions with Objective-C's 'id', 'id<protocols...>', and
9893   /// pointers to interfaces. FIXME: Once we've determined the
9894   /// appropriate overloading rules for Objective-C, we may want to
9895   /// split the Objective-C checks into a different routine; however,
9896   /// GCC seems to consider all of these conversions to be pointer
9897   /// conversions, so for now they live here. IncompatibleObjC will be
9898   /// set if the conversion is an allowed Objective-C conversion that
9899   /// should result in a warning.
9900   bool IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
9901                            bool InOverloadResolution, QualType &ConvertedType,
9902                            bool &IncompatibleObjC);
9903 
9904   /// isObjCPointerConversion - Determines whether this is an
9905   /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
9906   /// with the same arguments and return values.
9907   bool isObjCPointerConversion(QualType FromType, QualType ToType,
9908                                QualType &ConvertedType, bool &IncompatibleObjC);
9909   bool IsBlockPointerConversion(QualType FromType, QualType ToType,
9910                                 QualType &ConvertedType);
9911 
9912   /// FunctionParamTypesAreEqual - This routine checks two function proto types
9913   /// for equality of their parameter types. Caller has already checked that
9914   /// they have same number of parameters.  If the parameters are different,
9915   /// ArgPos will have the parameter index of the first different parameter.
9916   /// If `Reversed` is true, the parameters of `NewType` will be compared in
9917   /// reverse order. That's useful if one of the functions is being used as a
9918   /// C++20 synthesized operator overload with a reversed parameter order.
9919   bool FunctionParamTypesAreEqual(ArrayRef<QualType> Old,
9920                                   ArrayRef<QualType> New,
9921                                   unsigned *ArgPos = nullptr,
9922                                   bool Reversed = false);
9923 
9924   bool FunctionParamTypesAreEqual(const FunctionProtoType *OldType,
9925                                   const FunctionProtoType *NewType,
9926                                   unsigned *ArgPos = nullptr,
9927                                   bool Reversed = false);
9928 
9929   bool FunctionNonObjectParamTypesAreEqual(const FunctionDecl *OldFunction,
9930                                            const FunctionDecl *NewFunction,
9931                                            unsigned *ArgPos = nullptr,
9932                                            bool Reversed = false);
9933 
9934   /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
9935   /// function types.  Catches different number of parameter, mismatch in
9936   /// parameter types, and different return types.
9937   void HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, QualType FromType,
9938                                   QualType ToType);
9939 
9940   /// CheckPointerConversion - Check the pointer conversion from the
9941   /// expression From to the type ToType. This routine checks for
9942   /// ambiguous or inaccessible derived-to-base pointer
9943   /// conversions for which IsPointerConversion has already returned
9944   /// true. It returns true and produces a diagnostic if there was an
9945   /// error, or returns false otherwise.
9946   bool CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind,
9947                               CXXCastPath &BasePath, bool IgnoreBaseAccess,
9948                               bool Diagnose = true);
9949 
9950   /// IsMemberPointerConversion - Determines whether the conversion of the
9951   /// expression From, which has the (possibly adjusted) type FromType, can be
9952   /// converted to the type ToType via a member pointer conversion (C++ 4.11).
9953   /// If so, returns true and places the converted type (that might differ from
9954   /// ToType in its cv-qualifiers at some level) into ConvertedType.
9955   bool IsMemberPointerConversion(Expr *From, QualType FromType, QualType ToType,
9956                                  bool InOverloadResolution,
9957                                  QualType &ConvertedType);
9958 
9959   /// CheckMemberPointerConversion - Check the member pointer conversion from
9960   /// the expression From to the type ToType. This routine checks for ambiguous
9961   /// or virtual or inaccessible base-to-derived member pointer conversions for
9962   /// which IsMemberPointerConversion has already returned true. It returns true
9963   /// and produces a diagnostic if there was an error, or returns false
9964   /// otherwise.
9965   bool CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind,
9966                                     CXXCastPath &BasePath,
9967                                     bool IgnoreBaseAccess);
9968 
9969   /// IsQualificationConversion - Determines whether the conversion from
9970   /// an rvalue of type FromType to ToType is a qualification conversion
9971   /// (C++ 4.4).
9972   ///
9973   /// \param ObjCLifetimeConversion Output parameter that will be set to
9974   /// indicate when the qualification conversion involves a change in the
9975   /// Objective-C object lifetime.
9976   bool IsQualificationConversion(QualType FromType, QualType ToType,
9977                                  bool CStyle, bool &ObjCLifetimeConversion);
9978 
9979   /// Determine whether the conversion from FromType to ToType is a valid
9980   /// conversion that strips "noexcept" or "noreturn" off the nested function
9981   /// type.
9982   bool IsFunctionConversion(QualType FromType, QualType ToType,
9983                             QualType &ResultTy);
9984   bool DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType);
9985   void DiagnoseUseOfDeletedFunction(SourceLocation Loc, SourceRange Range,
9986                                     DeclarationName Name,
9987                                     OverloadCandidateSet &CandidateSet,
9988                                     FunctionDecl *Fn, MultiExprArg Args,
9989                                     bool IsMember = false);
9990 
9991   ExprResult InitializeExplicitObjectArgument(Sema &S, Expr *Obj,
9992                                               FunctionDecl *Fun);
9993   ExprResult PerformImplicitObjectArgumentInitialization(
9994       Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl,
9995       CXXMethodDecl *Method);
9996 
9997   /// PerformContextuallyConvertToBool - Perform a contextual conversion
9998   /// of the expression From to bool (C++0x [conv]p3).
9999   ExprResult PerformContextuallyConvertToBool(Expr *From);
10000 
10001   /// PerformContextuallyConvertToObjCPointer - Perform a contextual
10002   /// conversion of the expression From to an Objective-C pointer type.
10003   /// Returns a valid but null ExprResult if no conversion sequence exists.
10004   ExprResult PerformContextuallyConvertToObjCPointer(Expr *From);
10005 
10006   /// Contexts in which a converted constant expression is required.
10007   enum CCEKind {
10008     CCEK_CaseValue,    ///< Expression in a case label.
10009     CCEK_Enumerator,   ///< Enumerator value with fixed underlying type.
10010     CCEK_TemplateArg,  ///< Value of a non-type template parameter.
10011     CCEK_ArrayBound,   ///< Array bound in array declarator or new-expression.
10012     CCEK_ExplicitBool, ///< Condition in an explicit(bool) specifier.
10013     CCEK_Noexcept,     ///< Condition in a noexcept(bool) specifier.
10014     CCEK_StaticAssertMessageSize, ///< Call to size() in a static assert
10015                                   ///< message.
10016     CCEK_StaticAssertMessageData, ///< Call to data() in a static assert
10017                                   ///< message.
10018   };
10019 
10020   ExprResult BuildConvertedConstantExpression(Expr *From, QualType T,
10021                                               CCEKind CCE,
10022                                               NamedDecl *Dest = nullptr);
10023 
10024   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
10025                                               llvm::APSInt &Value, CCEKind CCE);
10026   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
10027                                               APValue &Value, CCEKind CCE,
10028                                               NamedDecl *Dest = nullptr);
10029 
10030   /// EvaluateConvertedConstantExpression - Evaluate an Expression
10031   /// That is a converted constant expression
10032   /// (which was built with BuildConvertedConstantExpression)
10033   ExprResult
10034   EvaluateConvertedConstantExpression(Expr *E, QualType T, APValue &Value,
10035                                       CCEKind CCE, bool RequireInt,
10036                                       const APValue &PreNarrowingValue);
10037 
10038   /// Abstract base class used to perform a contextual implicit
10039   /// conversion from an expression to any type passing a filter.
10040   class ContextualImplicitConverter {
10041   public:
10042     bool Suppress;
10043     bool SuppressConversion;
10044 
10045     ContextualImplicitConverter(bool Suppress = false,
10046                                 bool SuppressConversion = false)
Suppress(Suppress)10047         : Suppress(Suppress), SuppressConversion(SuppressConversion) {}
10048 
10049     /// Determine whether the specified type is a valid destination type
10050     /// for this conversion.
10051     virtual bool match(QualType T) = 0;
10052 
10053     /// Emits a diagnostic complaining that the expression does not have
10054     /// integral or enumeration type.
10055     virtual SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc,
10056                                                   QualType T) = 0;
10057 
10058     /// Emits a diagnostic when the expression has incomplete class type.
10059     virtual SemaDiagnosticBuilder
10060     diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0;
10061 
10062     /// Emits a diagnostic when the only matching conversion function
10063     /// is explicit.
10064     virtual SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S,
10065                                                        SourceLocation Loc,
10066                                                        QualType T,
10067                                                        QualType ConvTy) = 0;
10068 
10069     /// Emits a note for the explicit conversion function.
10070     virtual SemaDiagnosticBuilder
10071     noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
10072 
10073     /// Emits a diagnostic when there are multiple possible conversion
10074     /// functions.
10075     virtual SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc,
10076                                                     QualType T) = 0;
10077 
10078     /// Emits a note for one of the candidate conversions.
10079     virtual SemaDiagnosticBuilder
10080     noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
10081 
10082     /// Emits a diagnostic when we picked a conversion function
10083     /// (for cases when we are not allowed to pick a conversion function).
10084     virtual SemaDiagnosticBuilder diagnoseConversion(Sema &S,
10085                                                      SourceLocation Loc,
10086                                                      QualType T,
10087                                                      QualType ConvTy) = 0;
10088 
~ContextualImplicitConverter()10089     virtual ~ContextualImplicitConverter() {}
10090   };
10091 
10092   class ICEConvertDiagnoser : public ContextualImplicitConverter {
10093     bool AllowScopedEnumerations;
10094 
10095   public:
ICEConvertDiagnoser(bool AllowScopedEnumerations,bool Suppress,bool SuppressConversion)10096     ICEConvertDiagnoser(bool AllowScopedEnumerations, bool Suppress,
10097                         bool SuppressConversion)
10098         : ContextualImplicitConverter(Suppress, SuppressConversion),
10099           AllowScopedEnumerations(AllowScopedEnumerations) {}
10100 
10101     /// Match an integral or (possibly scoped) enumeration type.
10102     bool match(QualType T) override;
10103 
diagnoseNoMatch(Sema & S,SourceLocation Loc,QualType T)10104     SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc,
10105                                           QualType T) override {
10106       return diagnoseNotInt(S, Loc, T);
10107     }
10108 
10109     /// Emits a diagnostic complaining that the expression does not have
10110     /// integral or enumeration type.
10111     virtual SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc,
10112                                                  QualType T) = 0;
10113   };
10114 
10115   /// Perform a contextual implicit conversion.
10116   ExprResult
10117   PerformContextualImplicitConversion(SourceLocation Loc, Expr *FromE,
10118                                       ContextualImplicitConverter &Converter);
10119 
10120   /// ReferenceCompareResult - Expresses the result of comparing two
10121   /// types (cv1 T1 and cv2 T2) to determine their compatibility for the
10122   /// purposes of initialization by reference (C++ [dcl.init.ref]p4).
10123   enum ReferenceCompareResult {
10124     /// Ref_Incompatible - The two types are incompatible, so direct
10125     /// reference binding is not possible.
10126     Ref_Incompatible = 0,
10127     /// Ref_Related - The two types are reference-related, which means
10128     /// that their unqualified forms (T1 and T2) are either the same
10129     /// or T1 is a base class of T2.
10130     Ref_Related,
10131     /// Ref_Compatible - The two types are reference-compatible.
10132     Ref_Compatible
10133   };
10134 
10135   // Fake up a scoped enumeration that still contextually converts to bool.
10136   struct ReferenceConversionsScope {
10137     /// The conversions that would be performed on an lvalue of type T2 when
10138     /// binding a reference of type T1 to it, as determined when evaluating
10139     /// whether T1 is reference-compatible with T2.
10140     enum ReferenceConversions {
10141       Qualification = 0x1,
10142       NestedQualification = 0x2,
10143       Function = 0x4,
10144       DerivedToBase = 0x8,
10145       ObjC = 0x10,
10146       ObjCLifetime = 0x20,
10147 
10148       LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/ObjCLifetime)
10149     };
10150   };
10151   using ReferenceConversions = ReferenceConversionsScope::ReferenceConversions;
10152 
10153   /// CompareReferenceRelationship - Compare the two types T1 and T2 to
10154   /// determine whether they are reference-compatible,
10155   /// reference-related, or incompatible, for use in C++ initialization by
10156   /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
10157   /// type, and the first type (T1) is the pointee type of the reference
10158   /// type being initialized.
10159   ReferenceCompareResult
10160   CompareReferenceRelationship(SourceLocation Loc, QualType T1, QualType T2,
10161                                ReferenceConversions *Conv = nullptr);
10162 
10163   /// AddOverloadCandidate - Adds the given function to the set of
10164   /// candidate functions, using the given function call arguments.  If
10165   /// @p SuppressUserConversions, then don't allow user-defined
10166   /// conversions via constructors or conversion operators.
10167   ///
10168   /// \param PartialOverloading true if we are performing "partial" overloading
10169   /// based on an incomplete set of function arguments. This feature is used by
10170   /// code completion.
10171   void AddOverloadCandidate(
10172       FunctionDecl *Function, DeclAccessPair FoundDecl, ArrayRef<Expr *> Args,
10173       OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false,
10174       bool PartialOverloading = false, bool AllowExplicit = true,
10175       bool AllowExplicitConversion = false,
10176       ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
10177       ConversionSequenceList EarlyConversions = std::nullopt,
10178       OverloadCandidateParamOrder PO = {},
10179       bool AggregateCandidateDeduction = false);
10180 
10181   /// Add all of the function declarations in the given function set to
10182   /// the overload candidate set.
10183   void AddFunctionCandidates(
10184       const UnresolvedSetImpl &Functions, ArrayRef<Expr *> Args,
10185       OverloadCandidateSet &CandidateSet,
10186       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
10187       bool SuppressUserConversions = false, bool PartialOverloading = false,
10188       bool FirstArgumentIsBase = false);
10189 
10190   /// AddMethodCandidate - Adds a named decl (which is some kind of
10191   /// method) as a method candidate to the given overload set.
10192   void AddMethodCandidate(DeclAccessPair FoundDecl, QualType ObjectType,
10193                           Expr::Classification ObjectClassification,
10194                           ArrayRef<Expr *> Args,
10195                           OverloadCandidateSet &CandidateSet,
10196                           bool SuppressUserConversion = false,
10197                           OverloadCandidateParamOrder PO = {});
10198 
10199   /// AddMethodCandidate - Adds the given C++ member function to the set
10200   /// of candidate functions, using the given function call arguments
10201   /// and the object argument (@c Object). For example, in a call
10202   /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
10203   /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
10204   /// allow user-defined conversions via constructors or conversion
10205   /// operators.
10206   void
10207   AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
10208                      CXXRecordDecl *ActingContext, QualType ObjectType,
10209                      Expr::Classification ObjectClassification,
10210                      ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet,
10211                      bool SuppressUserConversions = false,
10212                      bool PartialOverloading = false,
10213                      ConversionSequenceList EarlyConversions = std::nullopt,
10214                      OverloadCandidateParamOrder PO = {});
10215 
10216   /// Add a C++ member function template as a candidate to the candidate
10217   /// set, using template argument deduction to produce an appropriate member
10218   /// function template specialization.
10219   void AddMethodTemplateCandidate(
10220       FunctionTemplateDecl *MethodTmpl, DeclAccessPair FoundDecl,
10221       CXXRecordDecl *ActingContext,
10222       TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ObjectType,
10223       Expr::Classification ObjectClassification, ArrayRef<Expr *> Args,
10224       OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false,
10225       bool PartialOverloading = false, OverloadCandidateParamOrder PO = {});
10226 
10227   /// Add a C++ function template specialization as a candidate
10228   /// in the candidate set, using template argument deduction to produce
10229   /// an appropriate function template specialization.
10230   void AddTemplateOverloadCandidate(
10231       FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
10232       TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
10233       OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false,
10234       bool PartialOverloading = false, bool AllowExplicit = true,
10235       ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
10236       OverloadCandidateParamOrder PO = {},
10237       bool AggregateCandidateDeduction = false);
10238 
10239   /// Check that implicit conversion sequences can be formed for each argument
10240   /// whose corresponding parameter has a non-dependent type, per DR1391's
10241   /// [temp.deduct.call]p10.
10242   bool CheckNonDependentConversions(
10243       FunctionTemplateDecl *FunctionTemplate, ArrayRef<QualType> ParamTypes,
10244       ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet,
10245       ConversionSequenceList &Conversions, bool SuppressUserConversions,
10246       CXXRecordDecl *ActingContext = nullptr, QualType ObjectType = QualType(),
10247       Expr::Classification ObjectClassification = {},
10248       OverloadCandidateParamOrder PO = {});
10249 
10250   /// AddConversionCandidate - Add a C++ conversion function as a
10251   /// candidate in the candidate set (C++ [over.match.conv],
10252   /// C++ [over.match.copy]). From is the expression we're converting from,
10253   /// and ToType is the type that we're eventually trying to convert to
10254   /// (which may or may not be the same type as the type that the
10255   /// conversion function produces).
10256   void AddConversionCandidate(
10257       CXXConversionDecl *Conversion, DeclAccessPair FoundDecl,
10258       CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
10259       OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
10260       bool AllowExplicit, bool AllowResultConversion = true);
10261 
10262   /// Adds a conversion function template specialization
10263   /// candidate to the overload set, using template argument deduction
10264   /// to deduce the template arguments of the conversion function
10265   /// template from the type that we are converting to (C++
10266   /// [temp.deduct.conv]).
10267   void AddTemplateConversionCandidate(
10268       FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
10269       CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
10270       OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
10271       bool AllowExplicit, bool AllowResultConversion = true);
10272 
10273   /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
10274   /// converts the given @c Object to a function pointer via the
10275   /// conversion function @c Conversion, and then attempts to call it
10276   /// with the given arguments (C++ [over.call.object]p2-4). Proto is
10277   /// the type of function that we'll eventually be calling.
10278   void AddSurrogateCandidate(CXXConversionDecl *Conversion,
10279                              DeclAccessPair FoundDecl,
10280                              CXXRecordDecl *ActingContext,
10281                              const FunctionProtoType *Proto, Expr *Object,
10282                              ArrayRef<Expr *> Args,
10283                              OverloadCandidateSet &CandidateSet);
10284 
10285   /// Add all of the non-member operator function declarations in the given
10286   /// function set to the overload candidate set.
10287   void AddNonMemberOperatorCandidates(
10288       const UnresolvedSetImpl &Functions, ArrayRef<Expr *> Args,
10289       OverloadCandidateSet &CandidateSet,
10290       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
10291 
10292   /// Add overload candidates for overloaded operators that are
10293   /// member functions.
10294   ///
10295   /// Add the overloaded operator candidates that are member functions
10296   /// for the operator Op that was used in an operator expression such
10297   /// as "x Op y". , Args/NumArgs provides the operator arguments, and
10298   /// CandidateSet will store the added overload candidates. (C++
10299   /// [over.match.oper]).
10300   void AddMemberOperatorCandidates(OverloadedOperatorKind Op,
10301                                    SourceLocation OpLoc, ArrayRef<Expr *> Args,
10302                                    OverloadCandidateSet &CandidateSet,
10303                                    OverloadCandidateParamOrder PO = {});
10304 
10305   /// AddBuiltinCandidate - Add a candidate for a built-in
10306   /// operator. ResultTy and ParamTys are the result and parameter types
10307   /// of the built-in candidate, respectively. Args and NumArgs are the
10308   /// arguments being passed to the candidate. IsAssignmentOperator
10309   /// should be true when this built-in candidate is an assignment
10310   /// operator. NumContextualBoolArguments is the number of arguments
10311   /// (at the beginning of the argument list) that will be contextually
10312   /// converted to bool.
10313   void AddBuiltinCandidate(QualType *ParamTys, ArrayRef<Expr *> Args,
10314                            OverloadCandidateSet &CandidateSet,
10315                            bool IsAssignmentOperator = false,
10316                            unsigned NumContextualBoolArguments = 0);
10317 
10318   /// AddBuiltinOperatorCandidates - Add the appropriate built-in
10319   /// operator overloads to the candidate set (C++ [over.built]), based
10320   /// on the operator @p Op and the arguments given. For example, if the
10321   /// operator is a binary '+', this routine might add "int
10322   /// operator+(int, int)" to cover integer addition.
10323   void AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
10324                                     SourceLocation OpLoc, ArrayRef<Expr *> Args,
10325                                     OverloadCandidateSet &CandidateSet);
10326 
10327   /// Add function candidates found via argument-dependent lookup
10328   /// to the set of overloading candidates.
10329   ///
10330   /// This routine performs argument-dependent name lookup based on the
10331   /// given function name (which may also be an operator name) and adds
10332   /// all of the overload candidates found by ADL to the overload
10333   /// candidate set (C++ [basic.lookup.argdep]).
10334   void AddArgumentDependentLookupCandidates(
10335       DeclarationName Name, SourceLocation Loc, ArrayRef<Expr *> Args,
10336       TemplateArgumentListInfo *ExplicitTemplateArgs,
10337       OverloadCandidateSet &CandidateSet, bool PartialOverloading = false);
10338 
10339   /// Check the enable_if expressions on the given function. Returns the first
10340   /// failing attribute, or NULL if they were all successful.
10341   EnableIfAttr *CheckEnableIf(FunctionDecl *Function, SourceLocation CallLoc,
10342                               ArrayRef<Expr *> Args,
10343                               bool MissingImplicitThis = false);
10344 
10345   /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
10346   /// non-ArgDependent DiagnoseIfAttrs.
10347   ///
10348   /// Argument-dependent diagnose_if attributes should be checked each time a
10349   /// function is used as a direct callee of a function call.
10350   ///
10351   /// Returns true if any errors were emitted.
10352   bool diagnoseArgDependentDiagnoseIfAttrs(const FunctionDecl *Function,
10353                                            const Expr *ThisArg,
10354                                            ArrayRef<const Expr *> Args,
10355                                            SourceLocation Loc);
10356 
10357   /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
10358   /// ArgDependent DiagnoseIfAttrs.
10359   ///
10360   /// Argument-independent diagnose_if attributes should be checked on every use
10361   /// of a function.
10362   ///
10363   /// Returns true if any errors were emitted.
10364   bool diagnoseArgIndependentDiagnoseIfAttrs(const NamedDecl *ND,
10365                                              SourceLocation Loc);
10366 
10367   /// Determine if \p A and \p B are equivalent internal linkage declarations
10368   /// from different modules, and thus an ambiguity error can be downgraded to
10369   /// an extension warning.
10370   bool isEquivalentInternalLinkageDeclaration(const NamedDecl *A,
10371                                               const NamedDecl *B);
10372   void diagnoseEquivalentInternalLinkageDeclarations(
10373       SourceLocation Loc, const NamedDecl *D,
10374       ArrayRef<const NamedDecl *> Equiv);
10375 
10376   // Emit as a 'note' the specific overload candidate
10377   void NoteOverloadCandidate(
10378       const NamedDecl *Found, const FunctionDecl *Fn,
10379       OverloadCandidateRewriteKind RewriteKind = OverloadCandidateRewriteKind(),
10380       QualType DestType = QualType(), bool TakingAddress = false);
10381 
10382   // Emit as a series of 'note's all template and non-templates identified by
10383   // the expression Expr
10384   void NoteAllOverloadCandidates(Expr *E, QualType DestType = QualType(),
10385                                  bool TakingAddress = false);
10386 
10387   /// Returns whether the given function's address can be taken or not,
10388   /// optionally emitting a diagnostic if the address can't be taken.
10389   ///
10390   /// Returns false if taking the address of the function is illegal.
10391   bool checkAddressOfFunctionIsAvailable(const FunctionDecl *Function,
10392                                          bool Complain = false,
10393                                          SourceLocation Loc = SourceLocation());
10394 
10395   // [PossiblyAFunctionType]  -->   [Return]
10396   // NonFunctionType --> NonFunctionType
10397   // R (A) --> R(A)
10398   // R (*)(A) --> R (A)
10399   // R (&)(A) --> R (A)
10400   // R (S::*)(A) --> R (A)
10401   QualType ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType);
10402 
10403   /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
10404   /// an overloaded function (C++ [over.over]), where @p From is an
10405   /// expression with overloaded function type and @p ToType is the type
10406   /// we're trying to resolve to. For example:
10407   ///
10408   /// @code
10409   /// int f(double);
10410   /// int f(int);
10411   ///
10412   /// int (*pfd)(double) = f; // selects f(double)
10413   /// @endcode
10414   ///
10415   /// This routine returns the resulting FunctionDecl if it could be
10416   /// resolved, and NULL otherwise. When @p Complain is true, this
10417   /// routine will emit diagnostics if there is an error.
10418   FunctionDecl *
10419   ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, QualType TargetType,
10420                                      bool Complain, DeclAccessPair &Found,
10421                                      bool *pHadMultipleCandidates = nullptr);
10422 
10423   /// Given an expression that refers to an overloaded function, try to
10424   /// resolve that function to a single function that can have its address
10425   /// taken. This will modify `Pair` iff it returns non-null.
10426   ///
10427   /// This routine can only succeed if from all of the candidates in the
10428   /// overload set for SrcExpr that can have their addresses taken, there is one
10429   /// candidate that is more constrained than the rest.
10430   FunctionDecl *
10431   resolveAddressOfSingleOverloadCandidate(Expr *E, DeclAccessPair &FoundResult);
10432 
10433   /// Given an overloaded function, tries to turn it into a non-overloaded
10434   /// function reference using resolveAddressOfSingleOverloadCandidate. This
10435   /// will perform access checks, diagnose the use of the resultant decl, and,
10436   /// if requested, potentially perform a function-to-pointer decay.
10437   ///
10438   /// Returns false if resolveAddressOfSingleOverloadCandidate fails.
10439   /// Otherwise, returns true. This may emit diagnostics and return true.
10440   bool resolveAndFixAddressOfSingleOverloadCandidate(
10441       ExprResult &SrcExpr, bool DoFunctionPointerConversion = false);
10442 
10443   /// Given an expression that refers to an overloaded function, try to
10444   /// resolve that overloaded function expression down to a single function.
10445   ///
10446   /// This routine can only resolve template-ids that refer to a single function
10447   /// template, where that template-id refers to a single template whose
10448   /// template arguments are either provided by the template-id or have
10449   /// defaults, as described in C++0x [temp.arg.explicit]p3.
10450   ///
10451   /// If no template-ids are found, no diagnostics are emitted and NULL is
10452   /// returned.
10453   FunctionDecl *ResolveSingleFunctionTemplateSpecialization(
10454       OverloadExpr *ovl, bool Complain = false, DeclAccessPair *Found = nullptr,
10455       TemplateSpecCandidateSet *FailedTSC = nullptr);
10456 
10457   // Resolve and fix an overloaded expression that can be resolved
10458   // because it identifies a single function template specialization.
10459   //
10460   // Last three arguments should only be supplied if Complain = true
10461   //
10462   // Return true if it was logically possible to so resolve the
10463   // expression, regardless of whether or not it succeeded.  Always
10464   // returns true if 'complain' is set.
10465   bool ResolveAndFixSingleFunctionTemplateSpecialization(
10466       ExprResult &SrcExpr, bool DoFunctionPointerConversion = false,
10467       bool Complain = false, SourceRange OpRangeForComplaining = SourceRange(),
10468       QualType DestTypeForComplaining = QualType(),
10469       unsigned DiagIDForComplaining = 0);
10470 
10471   /// Add the overload candidates named by callee and/or found by argument
10472   /// dependent lookup to the given overload set.
10473   void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
10474                                    ArrayRef<Expr *> Args,
10475                                    OverloadCandidateSet &CandidateSet,
10476                                    bool PartialOverloading = false);
10477 
10478   /// Add the call candidates from the given set of lookup results to the given
10479   /// overload set. Non-function lookup results are ignored.
10480   void AddOverloadedCallCandidates(
10481       LookupResult &R, TemplateArgumentListInfo *ExplicitTemplateArgs,
10482       ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet);
10483 
10484   // An enum used to represent the different possible results of building a
10485   // range-based for loop.
10486   enum ForRangeStatus {
10487     FRS_Success,
10488     FRS_NoViableFunction,
10489     FRS_DiagnosticIssued
10490   };
10491 
10492   /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
10493   /// given LookupResult is non-empty, it is assumed to describe a member which
10494   /// will be invoked. Otherwise, the function will be found via argument
10495   /// dependent lookup.
10496   /// CallExpr is set to a valid expression and FRS_Success returned on success,
10497   /// otherwise CallExpr is set to ExprError() and some non-success value
10498   /// is returned.
10499   ForRangeStatus BuildForRangeBeginEndCall(SourceLocation Loc,
10500                                            SourceLocation RangeLoc,
10501                                            const DeclarationNameInfo &NameInfo,
10502                                            LookupResult &MemberLookup,
10503                                            OverloadCandidateSet *CandidateSet,
10504                                            Expr *Range, ExprResult *CallExpr);
10505 
10506   /// BuildOverloadedCallExpr - Given the call expression that calls Fn
10507   /// (which eventually refers to the declaration Func) and the call
10508   /// arguments Args/NumArgs, attempt to resolve the function call down
10509   /// to a specific function. If overload resolution succeeds, returns
10510   /// the call expression produced by overload resolution.
10511   /// Otherwise, emits diagnostics and returns ExprError.
10512   ExprResult BuildOverloadedCallExpr(
10513       Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc,
10514       MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig,
10515       bool AllowTypoCorrection = true, bool CalleesAddressIsTaken = false);
10516 
10517   /// Constructs and populates an OverloadedCandidateSet from
10518   /// the given function.
10519   /// \returns true when an the ExprResult output parameter has been set.
10520   bool buildOverloadedCallSet(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
10521                               MultiExprArg Args, SourceLocation RParenLoc,
10522                               OverloadCandidateSet *CandidateSet,
10523                               ExprResult *Result);
10524 
10525   ExprResult CreateUnresolvedLookupExpr(CXXRecordDecl *NamingClass,
10526                                         NestedNameSpecifierLoc NNSLoc,
10527                                         DeclarationNameInfo DNI,
10528                                         const UnresolvedSetImpl &Fns,
10529                                         bool PerformADL = true);
10530 
10531   /// Create a unary operation that may resolve to an overloaded
10532   /// operator.
10533   ///
10534   /// \param OpLoc The location of the operator itself (e.g., '*').
10535   ///
10536   /// \param Opc The UnaryOperatorKind that describes this operator.
10537   ///
10538   /// \param Fns The set of non-member functions that will be
10539   /// considered by overload resolution. The caller needs to build this
10540   /// set based on the context using, e.g.,
10541   /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10542   /// set should not contain any member functions; those will be added
10543   /// by CreateOverloadedUnaryOp().
10544   ///
10545   /// \param Input The input argument.
10546   ExprResult CreateOverloadedUnaryOp(SourceLocation OpLoc,
10547                                      UnaryOperatorKind Opc,
10548                                      const UnresolvedSetImpl &Fns, Expr *input,
10549                                      bool RequiresADL = true);
10550 
10551   /// Perform lookup for an overloaded binary operator.
10552   void LookupOverloadedBinOp(OverloadCandidateSet &CandidateSet,
10553                              OverloadedOperatorKind Op,
10554                              const UnresolvedSetImpl &Fns,
10555                              ArrayRef<Expr *> Args, bool RequiresADL = true);
10556 
10557   /// Create a binary operation that may resolve to an overloaded
10558   /// operator.
10559   ///
10560   /// \param OpLoc The location of the operator itself (e.g., '+').
10561   ///
10562   /// \param Opc The BinaryOperatorKind that describes this operator.
10563   ///
10564   /// \param Fns The set of non-member functions that will be
10565   /// considered by overload resolution. The caller needs to build this
10566   /// set based on the context using, e.g.,
10567   /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10568   /// set should not contain any member functions; those will be added
10569   /// by CreateOverloadedBinOp().
10570   ///
10571   /// \param LHS Left-hand argument.
10572   /// \param RHS Right-hand argument.
10573   /// \param PerformADL Whether to consider operator candidates found by ADL.
10574   /// \param AllowRewrittenCandidates Whether to consider candidates found by
10575   ///        C++20 operator rewrites.
10576   /// \param DefaultedFn If we are synthesizing a defaulted operator function,
10577   ///        the function in question. Such a function is never a candidate in
10578   ///        our overload resolution. This also enables synthesizing a three-way
10579   ///        comparison from < and == as described in C++20 [class.spaceship]p1.
10580   ExprResult CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc,
10581                                    const UnresolvedSetImpl &Fns, Expr *LHS,
10582                                    Expr *RHS, bool RequiresADL = true,
10583                                    bool AllowRewrittenCandidates = true,
10584                                    FunctionDecl *DefaultedFn = nullptr);
10585   ExprResult BuildSynthesizedThreeWayComparison(SourceLocation OpLoc,
10586                                                 const UnresolvedSetImpl &Fns,
10587                                                 Expr *LHS, Expr *RHS,
10588                                                 FunctionDecl *DefaultedFn);
10589 
10590   ExprResult CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10591                                                 SourceLocation RLoc, Expr *Base,
10592                                                 MultiExprArg Args);
10593 
10594   /// BuildCallToMemberFunction - Build a call to a member
10595   /// function. MemExpr is the expression that refers to the member
10596   /// function (and includes the object parameter), Args/NumArgs are the
10597   /// arguments to the function call (not including the object
10598   /// parameter). The caller needs to validate that the member
10599   /// expression refers to a non-static member function or an overloaded
10600   /// member function.
10601   ExprResult BuildCallToMemberFunction(
10602       Scope *S, Expr *MemExpr, SourceLocation LParenLoc, MultiExprArg Args,
10603       SourceLocation RParenLoc, Expr *ExecConfig = nullptr,
10604       bool IsExecConfig = false, bool AllowRecovery = false);
10605 
10606   /// BuildCallToObjectOfClassType - Build a call to an object of class
10607   /// type (C++ [over.call.object]), which can end up invoking an
10608   /// overloaded function call operator (@c operator()) or performing a
10609   /// user-defined conversion on the object argument.
10610   ExprResult BuildCallToObjectOfClassType(Scope *S, Expr *Object,
10611                                           SourceLocation LParenLoc,
10612                                           MultiExprArg Args,
10613                                           SourceLocation RParenLoc);
10614 
10615   /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
10616   ///  (if one exists), where @c Base is an expression of class type and
10617   /// @c Member is the name of the member we're trying to find.
10618   ExprResult BuildOverloadedArrowExpr(Scope *S, Expr *Base,
10619                                       SourceLocation OpLoc,
10620                                       bool *NoArrowOperatorFound = nullptr);
10621 
10622   ExprResult BuildCXXMemberCallExpr(Expr *Exp, NamedDecl *FoundDecl,
10623                                     CXXConversionDecl *Method,
10624                                     bool HadMultipleCandidates);
10625 
10626   /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call
10627   /// to a literal operator described by the provided lookup results.
10628   ExprResult BuildLiteralOperatorCall(
10629       LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args,
10630       SourceLocation LitEndLoc,
10631       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
10632 
10633   /// FixOverloadedFunctionReference - E is an expression that refers to
10634   /// a C++ overloaded function (possibly with some parentheses and
10635   /// perhaps a '&' around it). We have resolved the overloaded function
10636   /// to the function declaration Fn, so patch up the expression E to
10637   /// refer (possibly indirectly) to Fn. Returns the new expr.
10638   ExprResult FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10639                                             FunctionDecl *Fn);
10640   ExprResult FixOverloadedFunctionReference(ExprResult,
10641                                             DeclAccessPair FoundDecl,
10642                                             FunctionDecl *Fn);
10643 
10644   /// - Returns a selector which best matches given argument list or
10645   /// nullptr if none could be found
10646   ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args,
10647                                    bool IsInstance,
10648                                    SmallVectorImpl<ObjCMethodDecl *> &Methods);
10649 
10650   ///@}
10651 
10652   //
10653   //
10654   // -------------------------------------------------------------------------
10655   //
10656   //
10657 
10658   /// \name Statements
10659   /// Implementations are in SemaStmt.cpp
10660   ///@{
10661 
10662 public:
10663   /// Stack of active SEH __finally scopes.  Can be empty.
10664   SmallVector<Scope *, 2> CurrentSEHFinally;
10665 
10666   StmtResult ActOnExprStmt(ExprResult Arg, bool DiscardedValue = true);
10667   StmtResult ActOnExprStmtError();
10668 
10669   StmtResult ActOnNullStmt(SourceLocation SemiLoc,
10670                            bool HasLeadingEmptyMacro = false);
10671 
10672   StmtResult ActOnDeclStmt(DeclGroupPtrTy Decl, SourceLocation StartLoc,
10673                            SourceLocation EndLoc);
10674   void ActOnForEachDeclStmt(DeclGroupPtrTy Decl);
10675 
10676   /// DiagnoseUnusedExprResult - If the statement passed in is an expression
10677   /// whose result is unused, warn.
10678   void DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID);
10679 
10680   void ActOnStartOfCompoundStmt(bool IsStmtExpr);
10681   void ActOnAfterCompoundStatementLeadingPragmas();
10682   void ActOnFinishOfCompoundStmt();
10683   StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,
10684                                ArrayRef<Stmt *> Elts, bool isStmtExpr);
10685 
10686   sema::CompoundScopeInfo &getCurCompoundScope() const;
10687 
10688   ExprResult ActOnCaseExpr(SourceLocation CaseLoc, ExprResult Val);
10689   StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHS,
10690                            SourceLocation DotDotDotLoc, ExprResult RHS,
10691                            SourceLocation ColonLoc);
10692 
10693   /// ActOnCaseStmtBody - This installs a statement as the body of a case.
10694   void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt);
10695 
10696   StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
10697                               SourceLocation ColonLoc, Stmt *SubStmt,
10698                               Scope *CurScope);
10699   StmtResult ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl,
10700                             SourceLocation ColonLoc, Stmt *SubStmt);
10701 
10702   StmtResult BuildAttributedStmt(SourceLocation AttrsLoc,
10703                                  ArrayRef<const Attr *> Attrs, Stmt *SubStmt);
10704   StmtResult ActOnAttributedStmt(const ParsedAttributes &AttrList,
10705                                  Stmt *SubStmt);
10706 
10707   /// Check whether the given statement can have musttail applied to it,
10708   /// issuing a diagnostic and returning false if not. In the success case,
10709   /// the statement is rewritten to remove implicit nodes from the return
10710   /// value.
10711   bool checkAndRewriteMustTailAttr(Stmt *St, const Attr &MTA);
10712 
10713   StmtResult ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind,
10714                          SourceLocation LParenLoc, Stmt *InitStmt,
10715                          ConditionResult Cond, SourceLocation RParenLoc,
10716                          Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal);
10717   StmtResult BuildIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind,
10718                          SourceLocation LParenLoc, Stmt *InitStmt,
10719                          ConditionResult Cond, SourceLocation RParenLoc,
10720                          Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal);
10721 
10722   ExprResult CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond);
10723 
10724   StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc,
10725                                     SourceLocation LParenLoc, Stmt *InitStmt,
10726                                     ConditionResult Cond,
10727                                     SourceLocation RParenLoc);
10728   StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
10729                                    Stmt *Body);
10730 
10731   /// DiagnoseAssignmentEnum - Warn if assignment to enum is a constant
10732   /// integer not in the range of enum values.
10733   void DiagnoseAssignmentEnum(QualType DstType, QualType SrcType,
10734                               Expr *SrcExpr);
10735 
10736   StmtResult ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc,
10737                             ConditionResult Cond, SourceLocation RParenLoc,
10738                             Stmt *Body);
10739   StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body,
10740                          SourceLocation WhileLoc, SourceLocation CondLParen,
10741                          Expr *Cond, SourceLocation CondRParen);
10742 
10743   StmtResult ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc,
10744                           Stmt *First, ConditionResult Second,
10745                           FullExprArg Third, SourceLocation RParenLoc,
10746                           Stmt *Body);
10747 
10748   /// In an Objective C collection iteration statement:
10749   ///   for (x in y)
10750   /// x can be an arbitrary l-value expression.  Bind it up as a
10751   /// full-expression.
10752   StmtResult ActOnForEachLValueExpr(Expr *E);
10753 
10754   enum BuildForRangeKind {
10755     /// Initial building of a for-range statement.
10756     BFRK_Build,
10757     /// Instantiation or recovery rebuild of a for-range statement. Don't
10758     /// attempt any typo-correction.
10759     BFRK_Rebuild,
10760     /// Determining whether a for-range statement could be built. Avoid any
10761     /// unnecessary or irreversible actions.
10762     BFRK_Check
10763   };
10764 
10765   /// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.
10766   ///
10767   /// C++11 [stmt.ranged]:
10768   ///   A range-based for statement is equivalent to
10769   ///
10770   ///   {
10771   ///     auto && __range = range-init;
10772   ///     for ( auto __begin = begin-expr,
10773   ///           __end = end-expr;
10774   ///           __begin != __end;
10775   ///           ++__begin ) {
10776   ///       for-range-declaration = *__begin;
10777   ///       statement
10778   ///     }
10779   ///   }
10780   ///
10781   /// The body of the loop is not available yet, since it cannot be analysed
10782   /// until we have determined the type of the for-range-declaration.
10783   StmtResult ActOnCXXForRangeStmt(
10784       Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc,
10785       Stmt *InitStmt, Stmt *LoopVar, SourceLocation ColonLoc, Expr *Collection,
10786       SourceLocation RParenLoc, BuildForRangeKind Kind,
10787       ArrayRef<MaterializeTemporaryExpr *> LifetimeExtendTemps = {});
10788 
10789   /// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.
10790   StmtResult BuildCXXForRangeStmt(
10791       SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt,
10792       SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End,
10793       Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc,
10794       BuildForRangeKind Kind,
10795       ArrayRef<MaterializeTemporaryExpr *> LifetimeExtendTemps = {});
10796 
10797   /// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.
10798   /// This is a separate step from ActOnCXXForRangeStmt because analysis of the
10799   /// body cannot be performed until after the type of the range variable is
10800   /// determined.
10801   StmtResult FinishCXXForRangeStmt(Stmt *ForRange, Stmt *Body);
10802 
10803   StmtResult ActOnGotoStmt(SourceLocation GotoLoc, SourceLocation LabelLoc,
10804                            LabelDecl *TheDecl);
10805   StmtResult ActOnIndirectGotoStmt(SourceLocation GotoLoc,
10806                                    SourceLocation StarLoc, Expr *DestExp);
10807   StmtResult ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope);
10808   StmtResult ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope);
10809 
10810   struct NamedReturnInfo {
10811     const VarDecl *Candidate;
10812 
10813     enum Status : uint8_t { None, MoveEligible, MoveEligibleAndCopyElidable };
10814     Status S;
10815 
isMoveEligibleNamedReturnInfo10816     bool isMoveEligible() const { return S != None; };
isCopyElidableNamedReturnInfo10817     bool isCopyElidable() const { return S == MoveEligibleAndCopyElidable; }
10818   };
10819   enum class SimplerImplicitMoveMode { ForceOff, Normal, ForceOn };
10820 
10821   /// Determine whether the given expression might be move-eligible or
10822   /// copy-elidable in either a (co_)return statement or throw expression,
10823   /// without considering function return type, if applicable.
10824   ///
10825   /// \param E The expression being returned from the function or block,
10826   /// being thrown, or being co_returned from a coroutine. This expression
10827   /// might be modified by the implementation.
10828   ///
10829   /// \param Mode Overrides detection of current language mode
10830   /// and uses the rules for C++23.
10831   ///
10832   /// \returns An aggregate which contains the Candidate and isMoveEligible
10833   /// and isCopyElidable methods. If Candidate is non-null, it means
10834   /// isMoveEligible() would be true under the most permissive language
10835   /// standard.
10836   NamedReturnInfo getNamedReturnInfo(
10837       Expr *&E, SimplerImplicitMoveMode Mode = SimplerImplicitMoveMode::Normal);
10838 
10839   /// Determine whether the given NRVO candidate variable is move-eligible or
10840   /// copy-elidable, without considering function return type.
10841   ///
10842   /// \param VD The NRVO candidate variable.
10843   ///
10844   /// \returns An aggregate which contains the Candidate and isMoveEligible
10845   /// and isCopyElidable methods. If Candidate is non-null, it means
10846   /// isMoveEligible() would be true under the most permissive language
10847   /// standard.
10848   NamedReturnInfo getNamedReturnInfo(const VarDecl *VD);
10849 
10850   /// Updates given NamedReturnInfo's move-eligible and
10851   /// copy-elidable statuses, considering the function
10852   /// return type criteria as applicable to return statements.
10853   ///
10854   /// \param Info The NamedReturnInfo object to update.
10855   ///
10856   /// \param ReturnType This is the return type of the function.
10857   /// \returns The copy elision candidate, in case the initial return expression
10858   /// was copy elidable, or nullptr otherwise.
10859   const VarDecl *getCopyElisionCandidate(NamedReturnInfo &Info,
10860                                          QualType ReturnType);
10861 
10862   /// Perform the initialization of a potentially-movable value, which
10863   /// is the result of return value.
10864   ///
10865   /// This routine implements C++20 [class.copy.elision]p3, which attempts to
10866   /// treat returned lvalues as rvalues in certain cases (to prefer move
10867   /// construction), then falls back to treating them as lvalues if that failed.
10868   ExprResult
10869   PerformMoveOrCopyInitialization(const InitializedEntity &Entity,
10870                                   const NamedReturnInfo &NRInfo, Expr *Value,
10871                                   bool SupressSimplerImplicitMoves = false);
10872 
10873   TypeLoc getReturnTypeLoc(FunctionDecl *FD) const;
10874 
10875   /// Deduce the return type for a function from a returned expression, per
10876   /// C++1y [dcl.spec.auto]p6.
10877   bool DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD,
10878                                         SourceLocation ReturnLoc, Expr *RetExpr,
10879                                         const AutoType *AT);
10880 
10881   StmtResult ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
10882                              Scope *CurScope);
10883   StmtResult BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
10884                              bool AllowRecovery = false);
10885 
10886   /// ActOnCapScopeReturnStmt - Utility routine to type-check return statements
10887   /// for capturing scopes.
10888   StmtResult ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
10889                                      NamedReturnInfo &NRInfo,
10890                                      bool SupressSimplerImplicitMoves);
10891 
10892   /// ActOnCXXCatchBlock - Takes an exception declaration and a handler block
10893   /// and creates a proper catch handler from them.
10894   StmtResult ActOnCXXCatchBlock(SourceLocation CatchLoc, Decl *ExDecl,
10895                                 Stmt *HandlerBlock);
10896 
10897   /// ActOnCXXTryBlock - Takes a try compound-statement and a number of
10898   /// handlers and creates a try statement from them.
10899   StmtResult ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock,
10900                               ArrayRef<Stmt *> Handlers);
10901 
10902   StmtResult ActOnSEHTryBlock(bool IsCXXTry, // try (true) or __try (false) ?
10903                               SourceLocation TryLoc, Stmt *TryBlock,
10904                               Stmt *Handler);
10905   StmtResult ActOnSEHExceptBlock(SourceLocation Loc, Expr *FilterExpr,
10906                                  Stmt *Block);
10907   void ActOnStartSEHFinallyBlock();
10908   void ActOnAbortSEHFinallyBlock();
10909   StmtResult ActOnFinishSEHFinallyBlock(SourceLocation Loc, Stmt *Block);
10910   StmtResult ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope);
10911 
10912   StmtResult BuildMSDependentExistsStmt(SourceLocation KeywordLoc,
10913                                         bool IsIfExists,
10914                                         NestedNameSpecifierLoc QualifierLoc,
10915                                         DeclarationNameInfo NameInfo,
10916                                         Stmt *Nested);
10917   StmtResult ActOnMSDependentExistsStmt(SourceLocation KeywordLoc,
10918                                         bool IsIfExists, CXXScopeSpec &SS,
10919                                         UnqualifiedId &Name, Stmt *Nested);
10920 
10921   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
10922                                 CapturedRegionKind Kind, unsigned NumParams);
10923   typedef std::pair<StringRef, QualType> CapturedParamNameType;
10924   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
10925                                 CapturedRegionKind Kind,
10926                                 ArrayRef<CapturedParamNameType> Params,
10927                                 unsigned OpenMPCaptureLevel = 0);
10928   StmtResult ActOnCapturedRegionEnd(Stmt *S);
10929   void ActOnCapturedRegionError();
10930   RecordDecl *CreateCapturedStmtRecordDecl(CapturedDecl *&CD,
10931                                            SourceLocation Loc,
10932                                            unsigned NumParams);
10933 
10934 private:
10935   /// Check whether the given statement can have musttail applied to it,
10936   /// issuing a diagnostic and returning false if not.
10937   bool checkMustTailAttr(const Stmt *St, const Attr &MTA);
10938 
10939   /// Check if the given expression contains 'break' or 'continue'
10940   /// statement that produces control flow different from GCC.
10941   void CheckBreakContinueBinding(Expr *E);
10942 
10943   ///@}
10944 
10945   //
10946   //
10947   // -------------------------------------------------------------------------
10948   //
10949   //
10950 
10951   /// \name `inline asm` Statement
10952   /// Implementations are in SemaStmtAsm.cpp
10953   ///@{
10954 
10955 public:
10956   StmtResult ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple,
10957                              bool IsVolatile, unsigned NumOutputs,
10958                              unsigned NumInputs, IdentifierInfo **Names,
10959                              MultiExprArg Constraints, MultiExprArg Exprs,
10960                              Expr *AsmString, MultiExprArg Clobbers,
10961                              unsigned NumLabels, SourceLocation RParenLoc);
10962 
10963   void FillInlineAsmIdentifierInfo(Expr *Res,
10964                                    llvm::InlineAsmIdentifierInfo &Info);
10965   ExprResult LookupInlineAsmIdentifier(CXXScopeSpec &SS,
10966                                        SourceLocation TemplateKWLoc,
10967                                        UnqualifiedId &Id,
10968                                        bool IsUnevaluatedContext);
10969   bool LookupInlineAsmField(StringRef Base, StringRef Member, unsigned &Offset,
10970                             SourceLocation AsmLoc);
10971   ExprResult LookupInlineAsmVarDeclField(Expr *RefExpr, StringRef Member,
10972                                          SourceLocation AsmLoc);
10973   StmtResult ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
10974                             ArrayRef<Token> AsmToks, StringRef AsmString,
10975                             unsigned NumOutputs, unsigned NumInputs,
10976                             ArrayRef<StringRef> Constraints,
10977                             ArrayRef<StringRef> Clobbers,
10978                             ArrayRef<Expr *> Exprs, SourceLocation EndLoc);
10979   LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName,
10980                                    SourceLocation Location, bool AlwaysCreate);
10981 
10982   ///@}
10983 
10984   //
10985   //
10986   // -------------------------------------------------------------------------
10987   //
10988   //
10989 
10990   /// \name Statement Attribute Handling
10991   /// Implementations are in SemaStmtAttr.cpp
10992   ///@{
10993 
10994 public:
10995   bool CheckNoInlineAttr(const Stmt *OrigSt, const Stmt *CurSt,
10996                          const AttributeCommonInfo &A);
10997   bool CheckAlwaysInlineAttr(const Stmt *OrigSt, const Stmt *CurSt,
10998                              const AttributeCommonInfo &A);
10999 
11000   CodeAlignAttr *BuildCodeAlignAttr(const AttributeCommonInfo &CI, Expr *E);
11001   bool CheckRebuiltStmtAttributes(ArrayRef<const Attr *> Attrs);
11002 
11003   /// Process the attributes before creating an attributed statement. Returns
11004   /// the semantic attributes that have been processed.
11005   void ProcessStmtAttributes(Stmt *Stmt, const ParsedAttributes &InAttrs,
11006                              SmallVectorImpl<const Attr *> &OutAttrs);
11007 
11008   ExprResult ActOnCXXAssumeAttr(Stmt *St, const ParsedAttr &A,
11009                                 SourceRange Range);
11010   ExprResult BuildCXXAssumeExpr(Expr *Assumption,
11011                                 const IdentifierInfo *AttrName,
11012                                 SourceRange Range);
11013 
11014   ///@}
11015 
11016   //
11017   //
11018   // -------------------------------------------------------------------------
11019   //
11020   //
11021 
11022   /// \name C++ Templates
11023   /// Implementations are in SemaTemplate.cpp
11024   ///@{
11025 
11026 public:
11027   // Saves the current floating-point pragma stack and clear it in this Sema.
11028   class FpPragmaStackSaveRAII {
11029   public:
FpPragmaStackSaveRAII(Sema & S)11030     FpPragmaStackSaveRAII(Sema &S)
11031         : S(S), SavedStack(std::move(S.FpPragmaStack)) {
11032       S.FpPragmaStack.Stack.clear();
11033     }
~FpPragmaStackSaveRAII()11034     ~FpPragmaStackSaveRAII() { S.FpPragmaStack = std::move(SavedStack); }
11035 
11036   private:
11037     Sema &S;
11038     PragmaStack<FPOptionsOverride> SavedStack;
11039   };
11040 
resetFPOptions(FPOptions FPO)11041   void resetFPOptions(FPOptions FPO) {
11042     CurFPFeatures = FPO;
11043     FpPragmaStack.CurrentValue = FPO.getChangesFrom(FPOptions(LangOpts));
11044   }
11045 
getInventedParameterInfos()11046   ArrayRef<InventedTemplateParameterInfo> getInventedParameterInfos() const {
11047     return llvm::ArrayRef(InventedParameterInfos.begin() +
11048                               InventedParameterInfosStart,
11049                           InventedParameterInfos.end());
11050   }
11051 
11052   /// The number of SFINAE diagnostics that have been trapped.
11053   unsigned NumSFINAEErrors;
11054 
getFunctionScopes()11055   ArrayRef<sema::FunctionScopeInfo *> getFunctionScopes() const {
11056     return llvm::ArrayRef(FunctionScopes.begin() + FunctionScopesStart,
11057                           FunctionScopes.end());
11058   }
11059 
11060   typedef llvm::MapVector<const FunctionDecl *,
11061                           std::unique_ptr<LateParsedTemplate>>
11062       LateParsedTemplateMapT;
11063   LateParsedTemplateMapT LateParsedTemplateMap;
11064 
11065   /// Determine the number of levels of enclosing template parameters. This is
11066   /// only usable while parsing. Note that this does not include dependent
11067   /// contexts in which no template parameters have yet been declared, such as
11068   /// in a terse function template or generic lambda before the first 'auto' is
11069   /// encountered.
11070   unsigned getTemplateDepth(Scope *S) const;
11071 
11072   void FilterAcceptableTemplateNames(LookupResult &R,
11073                                      bool AllowFunctionTemplates = true,
11074                                      bool AllowDependent = true);
11075   bool hasAnyAcceptableTemplateNames(LookupResult &R,
11076                                      bool AllowFunctionTemplates = true,
11077                                      bool AllowDependent = true,
11078                                      bool AllowNonTemplateFunctions = false);
11079   /// Try to interpret the lookup result D as a template-name.
11080   ///
11081   /// \param D A declaration found by name lookup.
11082   /// \param AllowFunctionTemplates Whether function templates should be
11083   ///        considered valid results.
11084   /// \param AllowDependent Whether unresolved using declarations (that might
11085   ///        name templates) should be considered valid results.
11086   static NamedDecl *getAsTemplateNameDecl(NamedDecl *D,
11087                                           bool AllowFunctionTemplates = true,
11088                                           bool AllowDependent = true);
11089 
11090   enum TemplateNameIsRequiredTag { TemplateNameIsRequired };
11091   /// Whether and why a template name is required in this lookup.
11092   class RequiredTemplateKind {
11093   public:
11094     /// Template name is required if TemplateKWLoc is valid.
11095     RequiredTemplateKind(SourceLocation TemplateKWLoc = SourceLocation())
TemplateKW(TemplateKWLoc)11096         : TemplateKW(TemplateKWLoc) {}
11097     /// Template name is unconditionally required.
RequiredTemplateKind(TemplateNameIsRequiredTag)11098     RequiredTemplateKind(TemplateNameIsRequiredTag) {}
11099 
getTemplateKeywordLoc()11100     SourceLocation getTemplateKeywordLoc() const {
11101       return TemplateKW.value_or(SourceLocation());
11102     }
hasTemplateKeyword()11103     bool hasTemplateKeyword() const {
11104       return getTemplateKeywordLoc().isValid();
11105     }
isRequired()11106     bool isRequired() const { return TemplateKW != SourceLocation(); }
11107     explicit operator bool() const { return isRequired(); }
11108 
11109   private:
11110     std::optional<SourceLocation> TemplateKW;
11111   };
11112 
11113   enum class AssumedTemplateKind {
11114     /// This is not assumed to be a template name.
11115     None,
11116     /// This is assumed to be a template name because lookup found nothing.
11117     FoundNothing,
11118     /// This is assumed to be a template name because lookup found one or more
11119     /// functions (but no function templates).
11120     FoundFunctions,
11121   };
11122 
11123   bool
11124   LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
11125                      QualType ObjectType, bool EnteringContext,
11126                      RequiredTemplateKind RequiredTemplate = SourceLocation(),
11127                      AssumedTemplateKind *ATK = nullptr,
11128                      bool AllowTypoCorrection = true);
11129 
11130   TemplateNameKind isTemplateName(Scope *S, CXXScopeSpec &SS,
11131                                   bool hasTemplateKeyword,
11132                                   const UnqualifiedId &Name,
11133                                   ParsedType ObjectType, bool EnteringContext,
11134                                   TemplateTy &Template,
11135                                   bool &MemberOfUnknownSpecialization,
11136                                   bool Disambiguation = false);
11137 
11138   /// Try to resolve an undeclared template name as a type template.
11139   ///
11140   /// Sets II to the identifier corresponding to the template name, and updates
11141   /// Name to a corresponding (typo-corrected) type template name and TNK to
11142   /// the corresponding kind, if possible.
11143   void ActOnUndeclaredTypeTemplateName(Scope *S, TemplateTy &Name,
11144                                        TemplateNameKind &TNK,
11145                                        SourceLocation NameLoc,
11146                                        IdentifierInfo *&II);
11147 
11148   bool resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name,
11149                                         SourceLocation NameLoc,
11150                                         bool Diagnose = true);
11151 
11152   /// Determine whether a particular identifier might be the name in a C++1z
11153   /// deduction-guide declaration.
11154   bool isDeductionGuideName(Scope *S, const IdentifierInfo &Name,
11155                             SourceLocation NameLoc, CXXScopeSpec &SS,
11156                             ParsedTemplateTy *Template = nullptr);
11157 
11158   bool DiagnoseUnknownTemplateName(const IdentifierInfo &II,
11159                                    SourceLocation IILoc, Scope *S,
11160                                    const CXXScopeSpec *SS,
11161                                    TemplateTy &SuggestedTemplate,
11162                                    TemplateNameKind &SuggestedKind);
11163 
11164   /// Determine whether we would be unable to instantiate this template (because
11165   /// it either has no definition, or is in the process of being instantiated).
11166   bool DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation,
11167                                       NamedDecl *Instantiation,
11168                                       bool InstantiatedFromMember,
11169                                       const NamedDecl *Pattern,
11170                                       const NamedDecl *PatternDef,
11171                                       TemplateSpecializationKind TSK,
11172                                       bool Complain = true);
11173 
11174   /// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining
11175   /// that the template parameter 'PrevDecl' is being shadowed by a new
11176   /// declaration at location Loc. Returns true to indicate that this is
11177   /// an error, and false otherwise.
11178   ///
11179   /// \param Loc The location of the declaration that shadows a template
11180   ///            parameter.
11181   ///
11182   /// \param PrevDecl The template parameter that the declaration shadows.
11183   ///
11184   /// \param SupportedForCompatibility Whether to issue the diagnostic as
11185   ///        a warning for compatibility with older versions of clang.
11186   ///        Ignored when MSVC compatibility is enabled.
11187   void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl,
11188                                        bool SupportedForCompatibility = false);
11189 
11190   /// AdjustDeclIfTemplate - If the given decl happens to be a template, reset
11191   /// the parameter D to reference the templated declaration and return a
11192   /// pointer to the template declaration. Otherwise, do nothing to D and return
11193   /// null.
11194   TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl);
11195 
11196   /// ActOnTypeParameter - Called when a C++ template type parameter
11197   /// (e.g., "typename T") has been parsed. Typename specifies whether
11198   /// the keyword "typename" was used to declare the type parameter
11199   /// (otherwise, "class" was used), and KeyLoc is the location of the
11200   /// "class" or "typename" keyword. ParamName is the name of the
11201   /// parameter (NULL indicates an unnamed template parameter) and
11202   /// ParamNameLoc is the location of the parameter name (if any).
11203   /// If the type parameter has a default argument, it will be added
11204   /// later via ActOnTypeParameterDefault.
11205   NamedDecl *ActOnTypeParameter(Scope *S, bool Typename,
11206                                 SourceLocation EllipsisLoc,
11207                                 SourceLocation KeyLoc,
11208                                 IdentifierInfo *ParamName,
11209                                 SourceLocation ParamNameLoc, unsigned Depth,
11210                                 unsigned Position, SourceLocation EqualLoc,
11211                                 ParsedType DefaultArg, bool HasTypeConstraint);
11212 
11213   bool CheckTypeConstraint(TemplateIdAnnotation *TypeConstraint);
11214 
11215   bool ActOnTypeConstraint(const CXXScopeSpec &SS,
11216                            TemplateIdAnnotation *TypeConstraint,
11217                            TemplateTypeParmDecl *ConstrainedParameter,
11218                            SourceLocation EllipsisLoc);
11219   bool BuildTypeConstraint(const CXXScopeSpec &SS,
11220                            TemplateIdAnnotation *TypeConstraint,
11221                            TemplateTypeParmDecl *ConstrainedParameter,
11222                            SourceLocation EllipsisLoc,
11223                            bool AllowUnexpandedPack);
11224 
11225   /// Attach a type-constraint to a template parameter.
11226   /// \returns true if an error occurred. This can happen if the
11227   /// immediately-declared constraint could not be formed (e.g. incorrect number
11228   /// of arguments for the named concept).
11229   bool AttachTypeConstraint(NestedNameSpecifierLoc NS,
11230                             DeclarationNameInfo NameInfo,
11231                             ConceptDecl *NamedConcept, NamedDecl *FoundDecl,
11232                             const TemplateArgumentListInfo *TemplateArgs,
11233                             TemplateTypeParmDecl *ConstrainedParameter,
11234                             SourceLocation EllipsisLoc);
11235 
11236   bool AttachTypeConstraint(AutoTypeLoc TL,
11237                             NonTypeTemplateParmDecl *NewConstrainedParm,
11238                             NonTypeTemplateParmDecl *OrigConstrainedParm,
11239                             SourceLocation EllipsisLoc);
11240 
11241   /// Require the given type to be a structural type, and diagnose if it is not.
11242   ///
11243   /// \return \c true if an error was produced.
11244   bool RequireStructuralType(QualType T, SourceLocation Loc);
11245 
11246   /// Check that the type of a non-type template parameter is
11247   /// well-formed.
11248   ///
11249   /// \returns the (possibly-promoted) parameter type if valid;
11250   /// otherwise, produces a diagnostic and returns a NULL type.
11251   QualType CheckNonTypeTemplateParameterType(TypeSourceInfo *&TSI,
11252                                              SourceLocation Loc);
11253   QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc);
11254 
11255   NamedDecl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
11256                                            unsigned Depth, unsigned Position,
11257                                            SourceLocation EqualLoc,
11258                                            Expr *DefaultArg);
11259 
11260   /// ActOnTemplateTemplateParameter - Called when a C++ template template
11261   /// parameter (e.g. T in template <template \<typename> class T> class array)
11262   /// has been parsed. S is the current scope.
11263   NamedDecl *ActOnTemplateTemplateParameter(
11264       Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params,
11265       bool Typename, SourceLocation EllipsisLoc, IdentifierInfo *ParamName,
11266       SourceLocation ParamNameLoc, unsigned Depth, unsigned Position,
11267       SourceLocation EqualLoc, ParsedTemplateArgument DefaultArg);
11268 
11269   /// ActOnTemplateParameterList - Builds a TemplateParameterList, optionally
11270   /// constrained by RequiresClause, that contains the template parameters in
11271   /// Params.
11272   TemplateParameterList *ActOnTemplateParameterList(
11273       unsigned Depth, SourceLocation ExportLoc, SourceLocation TemplateLoc,
11274       SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params,
11275       SourceLocation RAngleLoc, Expr *RequiresClause);
11276 
11277   /// The context in which we are checking a template parameter list.
11278   enum TemplateParamListContext {
11279     TPC_ClassTemplate,
11280     TPC_VarTemplate,
11281     TPC_FunctionTemplate,
11282     TPC_ClassTemplateMember,
11283     TPC_FriendClassTemplate,
11284     TPC_FriendFunctionTemplate,
11285     TPC_FriendFunctionTemplateDefinition,
11286     TPC_TypeAliasTemplate
11287   };
11288 
11289   /// Checks the validity of a template parameter list, possibly
11290   /// considering the template parameter list from a previous
11291   /// declaration.
11292   ///
11293   /// If an "old" template parameter list is provided, it must be
11294   /// equivalent (per TemplateParameterListsAreEqual) to the "new"
11295   /// template parameter list.
11296   ///
11297   /// \param NewParams Template parameter list for a new template
11298   /// declaration. This template parameter list will be updated with any
11299   /// default arguments that are carried through from the previous
11300   /// template parameter list.
11301   ///
11302   /// \param OldParams If provided, template parameter list from a
11303   /// previous declaration of the same template. Default template
11304   /// arguments will be merged from the old template parameter list to
11305   /// the new template parameter list.
11306   ///
11307   /// \param TPC Describes the context in which we are checking the given
11308   /// template parameter list.
11309   ///
11310   /// \param SkipBody If we might have already made a prior merged definition
11311   /// of this template visible, the corresponding body-skipping information.
11312   /// Default argument redefinition is not an error when skipping such a body,
11313   /// because (under the ODR) we can assume the default arguments are the same
11314   /// as the prior merged definition.
11315   ///
11316   /// \returns true if an error occurred, false otherwise.
11317   bool CheckTemplateParameterList(TemplateParameterList *NewParams,
11318                                   TemplateParameterList *OldParams,
11319                                   TemplateParamListContext TPC,
11320                                   SkipBodyInfo *SkipBody = nullptr);
11321 
11322   /// Match the given template parameter lists to the given scope
11323   /// specifier, returning the template parameter list that applies to the
11324   /// name.
11325   ///
11326   /// \param DeclStartLoc the start of the declaration that has a scope
11327   /// specifier or a template parameter list.
11328   ///
11329   /// \param DeclLoc The location of the declaration itself.
11330   ///
11331   /// \param SS the scope specifier that will be matched to the given template
11332   /// parameter lists. This scope specifier precedes a qualified name that is
11333   /// being declared.
11334   ///
11335   /// \param TemplateId The template-id following the scope specifier, if there
11336   /// is one. Used to check for a missing 'template<>'.
11337   ///
11338   /// \param ParamLists the template parameter lists, from the outermost to the
11339   /// innermost template parameter lists.
11340   ///
11341   /// \param IsFriend Whether to apply the slightly different rules for
11342   /// matching template parameters to scope specifiers in friend
11343   /// declarations.
11344   ///
11345   /// \param IsMemberSpecialization will be set true if the scope specifier
11346   /// denotes a fully-specialized type, and therefore this is a declaration of
11347   /// a member specialization.
11348   ///
11349   /// \returns the template parameter list, if any, that corresponds to the
11350   /// name that is preceded by the scope specifier @p SS. This template
11351   /// parameter list may have template parameters (if we're declaring a
11352   /// template) or may have no template parameters (if we're declaring a
11353   /// template specialization), or may be NULL (if what we're declaring isn't
11354   /// itself a template).
11355   TemplateParameterList *MatchTemplateParametersToScopeSpecifier(
11356       SourceLocation DeclStartLoc, SourceLocation DeclLoc,
11357       const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId,
11358       ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend,
11359       bool &IsMemberSpecialization, bool &Invalid,
11360       bool SuppressDiagnostic = false);
11361 
11362   /// Returns the template parameter list with all default template argument
11363   /// information.
11364   TemplateParameterList *GetTemplateParameterList(TemplateDecl *TD);
11365 
11366   DeclResult CheckClassTemplate(
11367       Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
11368       CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc,
11369       const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams,
11370       AccessSpecifier AS, SourceLocation ModulePrivateLoc,
11371       SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists,
11372       TemplateParameterList **OuterTemplateParamLists,
11373       SkipBodyInfo *SkipBody = nullptr);
11374 
11375   /// Translates template arguments as provided by the parser
11376   /// into template arguments used by semantic analysis.
11377   void translateTemplateArguments(const ASTTemplateArgsPtr &In,
11378                                   TemplateArgumentListInfo &Out);
11379 
11380   /// Convert a parsed type into a parsed template argument. This is mostly
11381   /// trivial, except that we may have parsed a C++17 deduced class template
11382   /// specialization type, in which case we should form a template template
11383   /// argument instead of a type template argument.
11384   ParsedTemplateArgument ActOnTemplateTypeArgument(TypeResult ParsedType);
11385 
11386   void NoteAllFoundTemplates(TemplateName Name);
11387 
11388   QualType CheckTemplateIdType(TemplateName Template,
11389                                SourceLocation TemplateLoc,
11390                                TemplateArgumentListInfo &TemplateArgs);
11391 
11392   TypeResult
11393   ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
11394                       TemplateTy Template, const IdentifierInfo *TemplateII,
11395                       SourceLocation TemplateIILoc, SourceLocation LAngleLoc,
11396                       ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc,
11397                       bool IsCtorOrDtorName = false, bool IsClassName = false,
11398                       ImplicitTypenameContext AllowImplicitTypename =
11399                           ImplicitTypenameContext::No);
11400 
11401   /// Parsed an elaborated-type-specifier that refers to a template-id,
11402   /// such as \c class T::template apply<U>.
11403   TypeResult ActOnTagTemplateIdType(
11404       TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc,
11405       CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD,
11406       SourceLocation TemplateLoc, SourceLocation LAngleLoc,
11407       ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc);
11408 
11409   DeclResult ActOnVarTemplateSpecialization(
11410       Scope *S, Declarator &D, TypeSourceInfo *DI, LookupResult &Previous,
11411       SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams,
11412       StorageClass SC, bool IsPartialSpecialization);
11413 
11414   /// Get the specialization of the given variable template corresponding to
11415   /// the specified argument list, or a null-but-valid result if the arguments
11416   /// are dependent.
11417   DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
11418                                 SourceLocation TemplateLoc,
11419                                 SourceLocation TemplateNameLoc,
11420                                 const TemplateArgumentListInfo &TemplateArgs);
11421 
11422   /// Form a reference to the specialization of the given variable template
11423   /// corresponding to the specified argument list, or a null-but-valid result
11424   /// if the arguments are dependent.
11425   ExprResult CheckVarTemplateId(const CXXScopeSpec &SS,
11426                                 const DeclarationNameInfo &NameInfo,
11427                                 VarTemplateDecl *Template, NamedDecl *FoundD,
11428                                 SourceLocation TemplateLoc,
11429                                 const TemplateArgumentListInfo *TemplateArgs);
11430 
11431   ExprResult
11432   CheckConceptTemplateId(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
11433                          const DeclarationNameInfo &ConceptNameInfo,
11434                          NamedDecl *FoundDecl, ConceptDecl *NamedConcept,
11435                          const TemplateArgumentListInfo *TemplateArgs);
11436 
11437   void diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc);
11438   void diagnoseMissingTemplateArguments(const CXXScopeSpec &SS,
11439                                         bool TemplateKeyword, TemplateDecl *TD,
11440                                         SourceLocation Loc);
11441 
11442   ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS,
11443                                  SourceLocation TemplateKWLoc, LookupResult &R,
11444                                  bool RequiresADL,
11445                                  const TemplateArgumentListInfo *TemplateArgs);
11446 
11447   // We actually only call this from template instantiation.
11448   ExprResult
11449   BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
11450                                const DeclarationNameInfo &NameInfo,
11451                                const TemplateArgumentListInfo *TemplateArgs,
11452                                bool IsAddressOfOperand);
11453 
11454   /// Form a template name from a name that is syntactically required to name a
11455   /// template, either due to use of the 'template' keyword or because a name in
11456   /// this syntactic context is assumed to name a template (C++
11457   /// [temp.names]p2-4).
11458   ///
11459   /// This action forms a template name given the name of the template and its
11460   /// optional scope specifier. This is used when the 'template' keyword is used
11461   /// or when the parsing context unambiguously treats a following '<' as
11462   /// introducing a template argument list. Note that this may produce a
11463   /// non-dependent template name if we can perform the lookup now and identify
11464   /// the named template.
11465   ///
11466   /// For example, given "x.MetaFun::template apply", the scope specifier
11467   /// \p SS will be "MetaFun::", \p TemplateKWLoc contains the location
11468   /// of the "template" keyword, and "apply" is the \p Name.
11469   TemplateNameKind ActOnTemplateName(Scope *S, CXXScopeSpec &SS,
11470                                      SourceLocation TemplateKWLoc,
11471                                      const UnqualifiedId &Name,
11472                                      ParsedType ObjectType,
11473                                      bool EnteringContext, TemplateTy &Template,
11474                                      bool AllowInjectedClassName = false);
11475 
11476   DeclResult ActOnClassTemplateSpecialization(
11477       Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
11478       SourceLocation ModulePrivateLoc, CXXScopeSpec &SS,
11479       TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr,
11480       MultiTemplateParamsArg TemplateParameterLists,
11481       SkipBodyInfo *SkipBody = nullptr);
11482 
11483   /// Check the non-type template arguments of a class template
11484   /// partial specialization according to C++ [temp.class.spec]p9.
11485   ///
11486   /// \param TemplateNameLoc the location of the template name.
11487   /// \param PrimaryTemplate the template parameters of the primary class
11488   ///        template.
11489   /// \param NumExplicit the number of explicitly-specified template arguments.
11490   /// \param TemplateArgs the template arguments of the class template
11491   ///        partial specialization.
11492   ///
11493   /// \returns \c true if there was an error, \c false otherwise.
11494   bool CheckTemplatePartialSpecializationArgs(SourceLocation Loc,
11495                                               TemplateDecl *PrimaryTemplate,
11496                                               unsigned NumExplicitArgs,
11497                                               ArrayRef<TemplateArgument> Args);
11498   void CheckTemplatePartialSpecialization(
11499       ClassTemplatePartialSpecializationDecl *Partial);
11500   void CheckTemplatePartialSpecialization(
11501       VarTemplatePartialSpecializationDecl *Partial);
11502 
11503   Decl *ActOnTemplateDeclarator(Scope *S,
11504                                 MultiTemplateParamsArg TemplateParameterLists,
11505                                 Declarator &D);
11506 
11507   /// Diagnose cases where we have an explicit template specialization
11508   /// before/after an explicit template instantiation, producing diagnostics
11509   /// for those cases where they are required and determining whether the
11510   /// new specialization/instantiation will have any effect.
11511   ///
11512   /// \param NewLoc the location of the new explicit specialization or
11513   /// instantiation.
11514   ///
11515   /// \param NewTSK the kind of the new explicit specialization or
11516   /// instantiation.
11517   ///
11518   /// \param PrevDecl the previous declaration of the entity.
11519   ///
11520   /// \param PrevTSK the kind of the old explicit specialization or
11521   /// instantiatin.
11522   ///
11523   /// \param PrevPointOfInstantiation if valid, indicates where the previous
11524   /// declaration was instantiated (either implicitly or explicitly).
11525   ///
11526   /// \param HasNoEffect will be set to true to indicate that the new
11527   /// specialization or instantiation has no effect and should be ignored.
11528   ///
11529   /// \returns true if there was an error that should prevent the introduction
11530   /// of the new declaration into the AST, false otherwise.
11531   bool CheckSpecializationInstantiationRedecl(
11532       SourceLocation NewLoc,
11533       TemplateSpecializationKind ActOnExplicitInstantiationNewTSK,
11534       NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK,
11535       SourceLocation PrevPtOfInstantiation, bool &SuppressNew);
11536 
11537   /// Perform semantic analysis for the given dependent function
11538   /// template specialization.
11539   ///
11540   /// The only possible way to get a dependent function template specialization
11541   /// is with a friend declaration, like so:
11542   ///
11543   /// \code
11544   ///   template \<class T> void foo(T);
11545   ///   template \<class T> class A {
11546   ///     friend void foo<>(T);
11547   ///   };
11548   /// \endcode
11549   ///
11550   /// There really isn't any useful analysis we can do here, so we
11551   /// just store the information.
11552   bool CheckDependentFunctionTemplateSpecialization(
11553       FunctionDecl *FD, const TemplateArgumentListInfo *ExplicitTemplateArgs,
11554       LookupResult &Previous);
11555 
11556   /// Perform semantic analysis for the given function template
11557   /// specialization.
11558   ///
11559   /// This routine performs all of the semantic analysis required for an
11560   /// explicit function template specialization. On successful completion,
11561   /// the function declaration \p FD will become a function template
11562   /// specialization.
11563   ///
11564   /// \param FD the function declaration, which will be updated to become a
11565   /// function template specialization.
11566   ///
11567   /// \param ExplicitTemplateArgs the explicitly-provided template arguments,
11568   /// if any. Note that this may be valid info even when 0 arguments are
11569   /// explicitly provided as in, e.g., \c void sort<>(char*, char*);
11570   /// as it anyway contains info on the angle brackets locations.
11571   ///
11572   /// \param Previous the set of declarations that may be specialized by
11573   /// this function specialization.
11574   ///
11575   /// \param QualifiedFriend whether this is a lookup for a qualified friend
11576   /// declaration with no explicit template argument list that might be
11577   /// befriending a function template specialization.
11578   bool CheckFunctionTemplateSpecialization(
11579       FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs,
11580       LookupResult &Previous, bool QualifiedFriend = false);
11581 
11582   /// Perform semantic analysis for the given non-template member
11583   /// specialization.
11584   ///
11585   /// This routine performs all of the semantic analysis required for an
11586   /// explicit member function specialization. On successful completion,
11587   /// the function declaration \p FD will become a member function
11588   /// specialization.
11589   ///
11590   /// \param Member the member declaration, which will be updated to become a
11591   /// specialization.
11592   ///
11593   /// \param Previous the set of declarations, one of which may be specialized
11594   /// by this function specialization;  the set will be modified to contain the
11595   /// redeclared member.
11596   bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
11597   void CompleteMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
11598 
11599   // Explicit instantiation of a class template specialization
11600   DeclResult ActOnExplicitInstantiation(
11601       Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc,
11602       unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS,
11603       TemplateTy Template, SourceLocation TemplateNameLoc,
11604       SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs,
11605       SourceLocation RAngleLoc, const ParsedAttributesView &Attr);
11606 
11607   // Explicit instantiation of a member class of a class template.
11608   DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc,
11609                                         SourceLocation TemplateLoc,
11610                                         unsigned TagSpec, SourceLocation KWLoc,
11611                                         CXXScopeSpec &SS, IdentifierInfo *Name,
11612                                         SourceLocation NameLoc,
11613                                         const ParsedAttributesView &Attr);
11614 
11615   DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc,
11616                                         SourceLocation TemplateLoc,
11617                                         Declarator &D);
11618 
11619   /// If the given template parameter has a default template
11620   /// argument, substitute into that default template argument and
11621   /// return the corresponding template argument.
11622   TemplateArgumentLoc SubstDefaultTemplateArgumentIfAvailable(
11623       TemplateDecl *Template, SourceLocation TemplateLoc,
11624       SourceLocation RAngleLoc, Decl *Param,
11625       ArrayRef<TemplateArgument> SugaredConverted,
11626       ArrayRef<TemplateArgument> CanonicalConverted, bool &HasDefaultArg);
11627 
11628   /// Returns the top most location responsible for the definition of \p N.
11629   /// If \p N is a a template specialization, this is the location
11630   /// of the top of the instantiation stack.
11631   /// Otherwise, the location of \p N is returned.
11632   SourceLocation getTopMostPointOfInstantiation(const NamedDecl *) const;
11633 
11634   /// Specifies the context in which a particular template
11635   /// argument is being checked.
11636   enum CheckTemplateArgumentKind {
11637     /// The template argument was specified in the code or was
11638     /// instantiated with some deduced template arguments.
11639     CTAK_Specified,
11640 
11641     /// The template argument was deduced via template argument
11642     /// deduction.
11643     CTAK_Deduced,
11644 
11645     /// The template argument was deduced from an array bound
11646     /// via template argument deduction.
11647     CTAK_DeducedFromArrayBound
11648   };
11649 
11650   /// Check that the given template argument corresponds to the given
11651   /// template parameter.
11652   ///
11653   /// \param Param The template parameter against which the argument will be
11654   /// checked.
11655   ///
11656   /// \param Arg The template argument, which may be updated due to conversions.
11657   ///
11658   /// \param Template The template in which the template argument resides.
11659   ///
11660   /// \param TemplateLoc The location of the template name for the template
11661   /// whose argument list we're matching.
11662   ///
11663   /// \param RAngleLoc The location of the right angle bracket ('>') that closes
11664   /// the template argument list.
11665   ///
11666   /// \param ArgumentPackIndex The index into the argument pack where this
11667   /// argument will be placed. Only valid if the parameter is a parameter pack.
11668   ///
11669   /// \param Converted The checked, converted argument will be added to the
11670   /// end of this small vector.
11671   ///
11672   /// \param CTAK Describes how we arrived at this particular template argument:
11673   /// explicitly written, deduced, etc.
11674   ///
11675   /// \returns true on error, false otherwise.
11676   bool
11677   CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg,
11678                         NamedDecl *Template, SourceLocation TemplateLoc,
11679                         SourceLocation RAngleLoc, unsigned ArgumentPackIndex,
11680                         SmallVectorImpl<TemplateArgument> &SugaredConverted,
11681                         SmallVectorImpl<TemplateArgument> &CanonicalConverted,
11682                         CheckTemplateArgumentKind CTAK);
11683 
11684   /// Check that the given template arguments can be provided to
11685   /// the given template, converting the arguments along the way.
11686   ///
11687   /// \param Template The template to which the template arguments are being
11688   /// provided.
11689   ///
11690   /// \param TemplateLoc The location of the template name in the source.
11691   ///
11692   /// \param TemplateArgs The list of template arguments. If the template is
11693   /// a template template parameter, this function may extend the set of
11694   /// template arguments to also include substituted, defaulted template
11695   /// arguments.
11696   ///
11697   /// \param PartialTemplateArgs True if the list of template arguments is
11698   /// intentionally partial, e.g., because we're checking just the initial
11699   /// set of template arguments.
11700   ///
11701   /// \param Converted Will receive the converted, canonicalized template
11702   /// arguments.
11703   ///
11704   /// \param UpdateArgsWithConversions If \c true, update \p TemplateArgs to
11705   /// contain the converted forms of the template arguments as written.
11706   /// Otherwise, \p TemplateArgs will not be modified.
11707   ///
11708   /// \param ConstraintsNotSatisfied If provided, and an error occurred, will
11709   /// receive true if the cause for the error is the associated constraints of
11710   /// the template not being satisfied by the template arguments.
11711   ///
11712   /// \param PartialOrderingTTP If true, assume these template arguments are
11713   /// the injected template arguments for a template template parameter.
11714   /// This will relax the requirement that all its possible uses are valid:
11715   /// TTP checking is loose, and assumes that invalid uses will be diagnosed
11716   /// during instantiation.
11717   ///
11718   /// \returns true if an error occurred, false otherwise.
11719   bool CheckTemplateArgumentList(
11720       TemplateDecl *Template, SourceLocation TemplateLoc,
11721       TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs,
11722       SmallVectorImpl<TemplateArgument> &SugaredConverted,
11723       SmallVectorImpl<TemplateArgument> &CanonicalConverted,
11724       bool UpdateArgsWithConversions = true,
11725       bool *ConstraintsNotSatisfied = nullptr, bool PartialOrderingTTP = false);
11726 
11727   bool CheckTemplateTypeArgument(
11728       TemplateTypeParmDecl *Param, TemplateArgumentLoc &Arg,
11729       SmallVectorImpl<TemplateArgument> &SugaredConverted,
11730       SmallVectorImpl<TemplateArgument> &CanonicalConverted);
11731 
11732   /// Check a template argument against its corresponding
11733   /// template type parameter.
11734   ///
11735   /// This routine implements the semantics of C++ [temp.arg.type]. It
11736   /// returns true if an error occurred, and false otherwise.
11737   bool CheckTemplateArgument(TypeSourceInfo *Arg);
11738 
11739   /// Check a template argument against its corresponding
11740   /// non-type template parameter.
11741   ///
11742   /// This routine implements the semantics of C++ [temp.arg.nontype].
11743   /// If an error occurred, it returns ExprError(); otherwise, it
11744   /// returns the converted template argument. \p ParamType is the
11745   /// type of the non-type template parameter after it has been instantiated.
11746   ExprResult CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
11747                                    QualType InstantiatedParamType, Expr *Arg,
11748                                    TemplateArgument &SugaredConverted,
11749                                    TemplateArgument &CanonicalConverted,
11750                                    CheckTemplateArgumentKind CTAK);
11751 
11752   /// Check a template argument against its corresponding
11753   /// template template parameter.
11754   ///
11755   /// This routine implements the semantics of C++ [temp.arg.template].
11756   /// It returns true if an error occurred, and false otherwise.
11757   bool CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param,
11758                                      TemplateParameterList *Params,
11759                                      TemplateArgumentLoc &Arg, bool IsDeduced);
11760 
11761   void NoteTemplateLocation(const NamedDecl &Decl,
11762                             std::optional<SourceRange> ParamRange = {});
11763   void NoteTemplateParameterLocation(const NamedDecl &Decl);
11764 
11765   /// Given a non-type template argument that refers to a
11766   /// declaration and the type of its corresponding non-type template
11767   /// parameter, produce an expression that properly refers to that
11768   /// declaration.
11769   ExprResult BuildExpressionFromDeclTemplateArgument(
11770       const TemplateArgument &Arg, QualType ParamType, SourceLocation Loc,
11771       NamedDecl *TemplateParam = nullptr);
11772   ExprResult
11773   BuildExpressionFromNonTypeTemplateArgument(const TemplateArgument &Arg,
11774                                              SourceLocation Loc);
11775 
11776   /// Enumeration describing how template parameter lists are compared
11777   /// for equality.
11778   enum TemplateParameterListEqualKind {
11779     /// We are matching the template parameter lists of two templates
11780     /// that might be redeclarations.
11781     ///
11782     /// \code
11783     /// template<typename T> struct X;
11784     /// template<typename T> struct X;
11785     /// \endcode
11786     TPL_TemplateMatch,
11787 
11788     /// We are matching the template parameter lists of two template
11789     /// template parameters as part of matching the template parameter lists
11790     /// of two templates that might be redeclarations.
11791     ///
11792     /// \code
11793     /// template<template<int I> class TT> struct X;
11794     /// template<template<int Value> class Other> struct X;
11795     /// \endcode
11796     TPL_TemplateTemplateParmMatch,
11797 
11798     /// We are matching the template parameter lists of a template
11799     /// template argument against the template parameter lists of a template
11800     /// template parameter.
11801     ///
11802     /// \code
11803     /// template<template<int Value> class Metafun> struct X;
11804     /// template<int Value> struct integer_c;
11805     /// X<integer_c> xic;
11806     /// \endcode
11807     TPL_TemplateTemplateArgumentMatch,
11808 
11809     /// We are determining whether the template-parameters are equivalent
11810     /// according to C++ [temp.over.link]/6. This comparison does not consider
11811     /// constraints.
11812     ///
11813     /// \code
11814     /// template<C1 T> void f(T);
11815     /// template<C2 T> void f(T);
11816     /// \endcode
11817     TPL_TemplateParamsEquivalent,
11818   };
11819 
11820   // A struct to represent the 'new' declaration, which is either itself just
11821   // the named decl, or the important information we need about it in order to
11822   // do constraint comparisons.
11823   class TemplateCompareNewDeclInfo {
11824     const NamedDecl *ND = nullptr;
11825     const DeclContext *DC = nullptr;
11826     const DeclContext *LexicalDC = nullptr;
11827     SourceLocation Loc;
11828 
11829   public:
TemplateCompareNewDeclInfo(const NamedDecl * ND)11830     TemplateCompareNewDeclInfo(const NamedDecl *ND) : ND(ND) {}
TemplateCompareNewDeclInfo(const DeclContext * DeclCtx,const DeclContext * LexicalDeclCtx,SourceLocation Loc)11831     TemplateCompareNewDeclInfo(const DeclContext *DeclCtx,
11832                                const DeclContext *LexicalDeclCtx,
11833                                SourceLocation Loc)
11834 
11835         : DC(DeclCtx), LexicalDC(LexicalDeclCtx), Loc(Loc) {
11836       assert(DC && LexicalDC &&
11837              "Constructor only for cases where we have the information to put "
11838              "in here");
11839     }
11840 
11841     // If this was constructed with no information, we cannot do substitution
11842     // for constraint comparison, so make sure we can check that.
isInvalid()11843     bool isInvalid() const { return !ND && !DC; }
11844 
getDecl()11845     const NamedDecl *getDecl() const { return ND; }
11846 
ContainsDecl(const NamedDecl * ND)11847     bool ContainsDecl(const NamedDecl *ND) const { return this->ND == ND; }
11848 
getLexicalDeclContext()11849     const DeclContext *getLexicalDeclContext() const {
11850       return ND ? ND->getLexicalDeclContext() : LexicalDC;
11851     }
11852 
getDeclContext()11853     const DeclContext *getDeclContext() const {
11854       return ND ? ND->getDeclContext() : DC;
11855     }
11856 
getLocation()11857     SourceLocation getLocation() const { return ND ? ND->getLocation() : Loc; }
11858   };
11859 
11860   /// Determine whether the given template parameter lists are
11861   /// equivalent.
11862   ///
11863   /// \param New  The new template parameter list, typically written in the
11864   /// source code as part of a new template declaration.
11865   ///
11866   /// \param Old  The old template parameter list, typically found via
11867   /// name lookup of the template declared with this template parameter
11868   /// list.
11869   ///
11870   /// \param Complain  If true, this routine will produce a diagnostic if
11871   /// the template parameter lists are not equivalent.
11872   ///
11873   /// \param Kind describes how we are to match the template parameter lists.
11874   ///
11875   /// \param TemplateArgLoc If this source location is valid, then we
11876   /// are actually checking the template parameter list of a template
11877   /// argument (New) against the template parameter list of its
11878   /// corresponding template template parameter (Old). We produce
11879   /// slightly different diagnostics in this scenario.
11880   ///
11881   /// \returns True if the template parameter lists are equal, false
11882   /// otherwise.
11883   bool TemplateParameterListsAreEqual(
11884       const TemplateCompareNewDeclInfo &NewInstFrom, TemplateParameterList *New,
11885       const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain,
11886       TemplateParameterListEqualKind Kind,
11887       SourceLocation TemplateArgLoc = SourceLocation());
11888 
11889   bool TemplateParameterListsAreEqual(
11890       TemplateParameterList *New, TemplateParameterList *Old, bool Complain,
11891       TemplateParameterListEqualKind Kind,
11892       SourceLocation TemplateArgLoc = SourceLocation()) {
11893     return TemplateParameterListsAreEqual(nullptr, New, nullptr, Old, Complain,
11894                                           Kind, TemplateArgLoc);
11895   }
11896 
11897   /// Check whether a template can be declared within this scope.
11898   ///
11899   /// If the template declaration is valid in this scope, returns
11900   /// false. Otherwise, issues a diagnostic and returns true.
11901   bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams);
11902 
11903   /// Called when the parser has parsed a C++ typename
11904   /// specifier, e.g., "typename T::type".
11905   ///
11906   /// \param S The scope in which this typename type occurs.
11907   /// \param TypenameLoc the location of the 'typename' keyword
11908   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
11909   /// \param II the identifier we're retrieving (e.g., 'type' in the example).
11910   /// \param IdLoc the location of the identifier.
11911   /// \param IsImplicitTypename context where T::type refers to a type.
11912   TypeResult ActOnTypenameType(
11913       Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS,
11914       const IdentifierInfo &II, SourceLocation IdLoc,
11915       ImplicitTypenameContext IsImplicitTypename = ImplicitTypenameContext::No);
11916 
11917   /// Called when the parser has parsed a C++ typename
11918   /// specifier that ends in a template-id, e.g.,
11919   /// "typename MetaFun::template apply<T1, T2>".
11920   ///
11921   /// \param S The scope in which this typename type occurs.
11922   /// \param TypenameLoc the location of the 'typename' keyword
11923   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
11924   /// \param TemplateLoc the location of the 'template' keyword, if any.
11925   /// \param TemplateName The template name.
11926   /// \param TemplateII The identifier used to name the template.
11927   /// \param TemplateIILoc The location of the template name.
11928   /// \param LAngleLoc The location of the opening angle bracket  ('<').
11929   /// \param TemplateArgs The template arguments.
11930   /// \param RAngleLoc The location of the closing angle bracket  ('>').
11931   TypeResult
11932   ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
11933                     const CXXScopeSpec &SS, SourceLocation TemplateLoc,
11934                     TemplateTy TemplateName, const IdentifierInfo *TemplateII,
11935                     SourceLocation TemplateIILoc, SourceLocation LAngleLoc,
11936                     ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc);
11937 
11938   QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
11939                              SourceLocation KeywordLoc,
11940                              NestedNameSpecifierLoc QualifierLoc,
11941                              const IdentifierInfo &II, SourceLocation IILoc,
11942                              TypeSourceInfo **TSI, bool DeducedTSTContext);
11943 
11944   QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
11945                              SourceLocation KeywordLoc,
11946                              NestedNameSpecifierLoc QualifierLoc,
11947                              const IdentifierInfo &II, SourceLocation IILoc,
11948                              bool DeducedTSTContext = true);
11949 
11950   /// Rebuilds a type within the context of the current instantiation.
11951   ///
11952   /// The type \p T is part of the type of an out-of-line member definition of
11953   /// a class template (or class template partial specialization) that was
11954   /// parsed and constructed before we entered the scope of the class template
11955   /// (or partial specialization thereof). This routine will rebuild that type
11956   /// now that we have entered the declarator's scope, which may produce
11957   /// different canonical types, e.g.,
11958   ///
11959   /// \code
11960   /// template<typename T>
11961   /// struct X {
11962   ///   typedef T* pointer;
11963   ///   pointer data();
11964   /// };
11965   ///
11966   /// template<typename T>
11967   /// typename X<T>::pointer X<T>::data() { ... }
11968   /// \endcode
11969   ///
11970   /// Here, the type "typename X<T>::pointer" will be created as a
11971   /// DependentNameType, since we do not know that we can look into X<T> when we
11972   /// parsed the type. This function will rebuild the type, performing the
11973   /// lookup of "pointer" in X<T> and returning an ElaboratedType whose
11974   /// canonical type is the same as the canonical type of T*, allowing the
11975   /// return types of the out-of-line definition and the declaration to match.
11976   TypeSourceInfo *RebuildTypeInCurrentInstantiation(TypeSourceInfo *T,
11977                                                     SourceLocation Loc,
11978                                                     DeclarationName Name);
11979   bool RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS);
11980 
11981   ExprResult RebuildExprInCurrentInstantiation(Expr *E);
11982 
11983   /// Rebuild the template parameters now that we know we're in a current
11984   /// instantiation.
11985   bool
11986   RebuildTemplateParamsInCurrentInstantiation(TemplateParameterList *Params);
11987 
11988   /// Produces a formatted string that describes the binding of
11989   /// template parameters to template arguments.
11990   std::string
11991   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
11992                                   const TemplateArgumentList &Args);
11993 
11994   std::string
11995   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
11996                                   const TemplateArgument *Args,
11997                                   unsigned NumArgs);
11998 
11999   void diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName,
12000                                           SourceLocation Less,
12001                                           SourceLocation Greater);
12002 
12003   /// ActOnDependentIdExpression - Handle a dependent id-expression that
12004   /// was just parsed.  This is only possible with an explicit scope
12005   /// specifier naming a dependent type.
12006   ExprResult ActOnDependentIdExpression(
12007       const CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
12008       const DeclarationNameInfo &NameInfo, bool isAddressOfOperand,
12009       const TemplateArgumentListInfo *TemplateArgs);
12010 
12011   ExprResult
12012   BuildDependentDeclRefExpr(const CXXScopeSpec &SS,
12013                             SourceLocation TemplateKWLoc,
12014                             const DeclarationNameInfo &NameInfo,
12015                             const TemplateArgumentListInfo *TemplateArgs);
12016 
12017   // Calculates whether the expression Constraint depends on an enclosing
12018   // template, for the purposes of [temp.friend] p9.
12019   // TemplateDepth is the 'depth' of the friend function, which is used to
12020   // compare whether a declaration reference is referring to a containing
12021   // template, or just the current friend function. A 'lower' TemplateDepth in
12022   // the AST refers to a 'containing' template. As the constraint is
12023   // uninstantiated, this is relative to the 'top' of the TU.
12024   bool
12025   ConstraintExpressionDependsOnEnclosingTemplate(const FunctionDecl *Friend,
12026                                                  unsigned TemplateDepth,
12027                                                  const Expr *Constraint);
12028 
12029   /// Find the failed Boolean condition within a given Boolean
12030   /// constant expression, and describe it with a string.
12031   std::pair<Expr *, std::string> findFailedBooleanCondition(Expr *Cond);
12032 
12033   void CheckDeductionGuideTemplate(FunctionTemplateDecl *TD);
12034 
12035   Decl *ActOnConceptDefinition(Scope *S,
12036                                MultiTemplateParamsArg TemplateParameterLists,
12037                                const IdentifierInfo *Name,
12038                                SourceLocation NameLoc, Expr *ConstraintExpr,
12039                                const ParsedAttributesView &Attrs);
12040 
12041   void CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous,
12042                                 bool &AddToScope);
12043 
12044   TypeResult ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
12045                                const CXXScopeSpec &SS,
12046                                const IdentifierInfo *Name,
12047                                SourceLocation TagLoc, SourceLocation NameLoc);
12048 
12049   void MarkAsLateParsedTemplate(FunctionDecl *FD, Decl *FnD,
12050                                 CachedTokens &Toks);
12051   void UnmarkAsLateParsedTemplate(FunctionDecl *FD);
12052   bool IsInsideALocalClassWithinATemplateFunction();
12053 
12054   /// We've found a use of a templated declaration that would trigger an
12055   /// implicit instantiation. Check that any relevant explicit specializations
12056   /// and partial specializations are visible/reachable, and diagnose if not.
12057   void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec);
12058   void checkSpecializationReachability(SourceLocation Loc, NamedDecl *Spec);
12059 
12060   ///@}
12061 
12062   //
12063   //
12064   // -------------------------------------------------------------------------
12065   //
12066   //
12067 
12068   /// \name C++ Template Argument Deduction
12069   /// Implementations are in SemaTemplateDeduction.cpp
12070   ///@{
12071 
12072 public:
12073   /// When true, access checking violations are treated as SFINAE
12074   /// failures rather than hard errors.
12075   bool AccessCheckingSFINAE;
12076 
12077   /// RAII class used to determine whether SFINAE has
12078   /// trapped any errors that occur during template argument
12079   /// deduction.
12080   class SFINAETrap {
12081     Sema &SemaRef;
12082     unsigned PrevSFINAEErrors;
12083     bool PrevInNonInstantiationSFINAEContext;
12084     bool PrevAccessCheckingSFINAE;
12085     bool PrevLastDiagnosticIgnored;
12086 
12087   public:
12088     explicit SFINAETrap(Sema &SemaRef, bool AccessCheckingSFINAE = false)
SemaRef(SemaRef)12089         : SemaRef(SemaRef), PrevSFINAEErrors(SemaRef.NumSFINAEErrors),
12090           PrevInNonInstantiationSFINAEContext(
12091               SemaRef.InNonInstantiationSFINAEContext),
12092           PrevAccessCheckingSFINAE(SemaRef.AccessCheckingSFINAE),
12093           PrevLastDiagnosticIgnored(
12094               SemaRef.getDiagnostics().isLastDiagnosticIgnored()) {
12095       if (!SemaRef.isSFINAEContext())
12096         SemaRef.InNonInstantiationSFINAEContext = true;
12097       SemaRef.AccessCheckingSFINAE = AccessCheckingSFINAE;
12098     }
12099 
~SFINAETrap()12100     ~SFINAETrap() {
12101       SemaRef.NumSFINAEErrors = PrevSFINAEErrors;
12102       SemaRef.InNonInstantiationSFINAEContext =
12103           PrevInNonInstantiationSFINAEContext;
12104       SemaRef.AccessCheckingSFINAE = PrevAccessCheckingSFINAE;
12105       SemaRef.getDiagnostics().setLastDiagnosticIgnored(
12106           PrevLastDiagnosticIgnored);
12107     }
12108 
12109     /// Determine whether any SFINAE errors have been trapped.
hasErrorOccurred()12110     bool hasErrorOccurred() const {
12111       return SemaRef.NumSFINAEErrors > PrevSFINAEErrors;
12112     }
12113   };
12114 
12115   /// RAII class used to indicate that we are performing provisional
12116   /// semantic analysis to determine the validity of a construct, so
12117   /// typo-correction and diagnostics in the immediate context (not within
12118   /// implicitly-instantiated templates) should be suppressed.
12119   class TentativeAnalysisScope {
12120     Sema &SemaRef;
12121     // FIXME: Using a SFINAETrap for this is a hack.
12122     SFINAETrap Trap;
12123     bool PrevDisableTypoCorrection;
12124 
12125   public:
TentativeAnalysisScope(Sema & SemaRef)12126     explicit TentativeAnalysisScope(Sema &SemaRef)
12127         : SemaRef(SemaRef), Trap(SemaRef, true),
12128           PrevDisableTypoCorrection(SemaRef.DisableTypoCorrection) {
12129       SemaRef.DisableTypoCorrection = true;
12130     }
~TentativeAnalysisScope()12131     ~TentativeAnalysisScope() {
12132       SemaRef.DisableTypoCorrection = PrevDisableTypoCorrection;
12133     }
12134   };
12135 
12136   /// For each declaration that involved template argument deduction, the
12137   /// set of diagnostics that were suppressed during that template argument
12138   /// deduction.
12139   ///
12140   /// FIXME: Serialize this structure to the AST file.
12141   typedef llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1>>
12142       SuppressedDiagnosticsMap;
12143   SuppressedDiagnosticsMap SuppressedDiagnostics;
12144 
12145   /// Compare types for equality with respect to possibly compatible
12146   /// function types (noreturn adjustment, implicit calling conventions). If any
12147   /// of parameter and argument is not a function, just perform type comparison.
12148   ///
12149   /// \param P the template parameter type.
12150   ///
12151   /// \param A the argument type.
12152   bool isSameOrCompatibleFunctionType(QualType Param, QualType Arg);
12153 
12154   /// Allocate a TemplateArgumentLoc where all locations have
12155   /// been initialized to the given location.
12156   ///
12157   /// \param Arg The template argument we are producing template argument
12158   /// location information for.
12159   ///
12160   /// \param NTTPType For a declaration template argument, the type of
12161   /// the non-type template parameter that corresponds to this template
12162   /// argument. Can be null if no type sugar is available to add to the
12163   /// type from the template argument.
12164   ///
12165   /// \param Loc The source location to use for the resulting template
12166   /// argument.
12167   TemplateArgumentLoc
12168   getTrivialTemplateArgumentLoc(const TemplateArgument &Arg, QualType NTTPType,
12169                                 SourceLocation Loc,
12170                                 NamedDecl *TemplateParam = nullptr);
12171 
12172   /// Get a template argument mapping the given template parameter to itself,
12173   /// e.g. for X in \c template<int X>, this would return an expression template
12174   /// argument referencing X.
12175   TemplateArgumentLoc getIdentityTemplateArgumentLoc(NamedDecl *Param,
12176                                                      SourceLocation Location);
12177 
12178   /// Adjust the type \p ArgFunctionType to match the calling convention,
12179   /// noreturn, and optionally the exception specification of \p FunctionType.
12180   /// Deduction often wants to ignore these properties when matching function
12181   /// types.
12182   QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType,
12183                                bool AdjustExceptionSpec = false);
12184 
12185   TemplateDeductionResult
12186   DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
12187                           ArrayRef<TemplateArgument> TemplateArgs,
12188                           sema::TemplateDeductionInfo &Info);
12189 
12190   TemplateDeductionResult
12191   DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial,
12192                           ArrayRef<TemplateArgument> TemplateArgs,
12193                           sema::TemplateDeductionInfo &Info);
12194 
12195   /// Deduce the template arguments of the given template from \p FromType.
12196   /// Used to implement the IsDeducible constraint for alias CTAD per C++
12197   /// [over.match.class.deduct]p4.
12198   ///
12199   /// It only supports class or type alias templates.
12200   TemplateDeductionResult
12201   DeduceTemplateArgumentsFromType(TemplateDecl *TD, QualType FromType,
12202                                   sema::TemplateDeductionInfo &Info);
12203 
12204   TemplateDeductionResult DeduceTemplateArguments(
12205       TemplateParameterList *TemplateParams, ArrayRef<TemplateArgument> Ps,
12206       ArrayRef<TemplateArgument> As, sema::TemplateDeductionInfo &Info,
12207       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
12208       bool NumberOfArgumentsMustMatch);
12209 
12210   /// Substitute the explicitly-provided template arguments into the
12211   /// given function template according to C++ [temp.arg.explicit].
12212   ///
12213   /// \param FunctionTemplate the function template into which the explicit
12214   /// template arguments will be substituted.
12215   ///
12216   /// \param ExplicitTemplateArgs the explicitly-specified template
12217   /// arguments.
12218   ///
12219   /// \param Deduced the deduced template arguments, which will be populated
12220   /// with the converted and checked explicit template arguments.
12221   ///
12222   /// \param ParamTypes will be populated with the instantiated function
12223   /// parameters.
12224   ///
12225   /// \param FunctionType if non-NULL, the result type of the function template
12226   /// will also be instantiated and the pointed-to value will be updated with
12227   /// the instantiated function type.
12228   ///
12229   /// \param Info if substitution fails for any reason, this object will be
12230   /// populated with more information about the failure.
12231   ///
12232   /// \returns TemplateDeductionResult::Success if substitution was successful,
12233   /// or some failure condition.
12234   TemplateDeductionResult SubstituteExplicitTemplateArguments(
12235       FunctionTemplateDecl *FunctionTemplate,
12236       TemplateArgumentListInfo &ExplicitTemplateArgs,
12237       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
12238       SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType,
12239       sema::TemplateDeductionInfo &Info);
12240 
12241   /// brief A function argument from which we performed template argument
12242   // deduction for a call.
12243   struct OriginalCallArg {
OriginalCallArgOriginalCallArg12244     OriginalCallArg(QualType OriginalParamType, bool DecomposedParam,
12245                     unsigned ArgIdx, QualType OriginalArgType)
12246         : OriginalParamType(OriginalParamType),
12247           DecomposedParam(DecomposedParam), ArgIdx(ArgIdx),
12248           OriginalArgType(OriginalArgType) {}
12249 
12250     QualType OriginalParamType;
12251     bool DecomposedParam;
12252     unsigned ArgIdx;
12253     QualType OriginalArgType;
12254   };
12255 
12256   /// Finish template argument deduction for a function template,
12257   /// checking the deduced template arguments for completeness and forming
12258   /// the function template specialization.
12259   ///
12260   /// \param OriginalCallArgs If non-NULL, the original call arguments against
12261   /// which the deduced argument types should be compared.
12262   TemplateDeductionResult FinishTemplateArgumentDeduction(
12263       FunctionTemplateDecl *FunctionTemplate,
12264       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
12265       unsigned NumExplicitlySpecified, FunctionDecl *&Specialization,
12266       sema::TemplateDeductionInfo &Info,
12267       SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs = nullptr,
12268       bool PartialOverloading = false,
12269       llvm::function_ref<bool()> CheckNonDependent = [] { return false; });
12270 
12271   /// Perform template argument deduction from a function call
12272   /// (C++ [temp.deduct.call]).
12273   ///
12274   /// \param FunctionTemplate the function template for which we are performing
12275   /// template argument deduction.
12276   ///
12277   /// \param ExplicitTemplateArgs the explicit template arguments provided
12278   /// for this call.
12279   ///
12280   /// \param Args the function call arguments
12281   ///
12282   /// \param Specialization if template argument deduction was successful,
12283   /// this will be set to the function template specialization produced by
12284   /// template argument deduction.
12285   ///
12286   /// \param Info the argument will be updated to provide additional information
12287   /// about template argument deduction.
12288   ///
12289   /// \param CheckNonDependent A callback to invoke to check conversions for
12290   /// non-dependent parameters, between deduction and substitution, per DR1391.
12291   /// If this returns true, substitution will be skipped and we return
12292   /// TemplateDeductionResult::NonDependentConversionFailure. The callback is
12293   /// passed the parameter types (after substituting explicit template
12294   /// arguments).
12295   ///
12296   /// \returns the result of template argument deduction.
12297   TemplateDeductionResult DeduceTemplateArguments(
12298       FunctionTemplateDecl *FunctionTemplate,
12299       TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
12300       FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info,
12301       bool PartialOverloading, bool AggregateDeductionCandidate,
12302       QualType ObjectType, Expr::Classification ObjectClassification,
12303       llvm::function_ref<bool(ArrayRef<QualType>)> CheckNonDependent);
12304 
12305   /// Deduce template arguments when taking the address of a function
12306   /// template (C++ [temp.deduct.funcaddr]) or matching a specialization to
12307   /// a template.
12308   ///
12309   /// \param FunctionTemplate the function template for which we are performing
12310   /// template argument deduction.
12311   ///
12312   /// \param ExplicitTemplateArgs the explicitly-specified template
12313   /// arguments.
12314   ///
12315   /// \param ArgFunctionType the function type that will be used as the
12316   /// "argument" type (A) when performing template argument deduction from the
12317   /// function template's function type. This type may be NULL, if there is no
12318   /// argument type to compare against, in C++0x [temp.arg.explicit]p3.
12319   ///
12320   /// \param Specialization if template argument deduction was successful,
12321   /// this will be set to the function template specialization produced by
12322   /// template argument deduction.
12323   ///
12324   /// \param Info the argument will be updated to provide additional information
12325   /// about template argument deduction.
12326   ///
12327   /// \param IsAddressOfFunction If \c true, we are deducing as part of taking
12328   /// the address of a function template per [temp.deduct.funcaddr] and
12329   /// [over.over]. If \c false, we are looking up a function template
12330   /// specialization based on its signature, per [temp.deduct.decl].
12331   ///
12332   /// \returns the result of template argument deduction.
12333   TemplateDeductionResult DeduceTemplateArguments(
12334       FunctionTemplateDecl *FunctionTemplate,
12335       TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ArgFunctionType,
12336       FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info,
12337       bool IsAddressOfFunction = false);
12338 
12339   /// Deduce template arguments for a templated conversion
12340   /// function (C++ [temp.deduct.conv]) and, if successful, produce a
12341   /// conversion function template specialization.
12342   TemplateDeductionResult DeduceTemplateArguments(
12343       FunctionTemplateDecl *FunctionTemplate, QualType ObjectType,
12344       Expr::Classification ObjectClassification, QualType ToType,
12345       CXXConversionDecl *&Specialization, sema::TemplateDeductionInfo &Info);
12346 
12347   /// Deduce template arguments for a function template when there is
12348   /// nothing to deduce against (C++0x [temp.arg.explicit]p3).
12349   ///
12350   /// \param FunctionTemplate the function template for which we are performing
12351   /// template argument deduction.
12352   ///
12353   /// \param ExplicitTemplateArgs the explicitly-specified template
12354   /// arguments.
12355   ///
12356   /// \param Specialization if template argument deduction was successful,
12357   /// this will be set to the function template specialization produced by
12358   /// template argument deduction.
12359   ///
12360   /// \param Info the argument will be updated to provide additional information
12361   /// about template argument deduction.
12362   ///
12363   /// \param IsAddressOfFunction If \c true, we are deducing as part of taking
12364   /// the address of a function template in a context where we do not have a
12365   /// target type, per [over.over]. If \c false, we are looking up a function
12366   /// template specialization based on its signature, which only happens when
12367   /// deducing a function parameter type from an argument that is a template-id
12368   /// naming a function template specialization.
12369   ///
12370   /// \returns the result of template argument deduction.
12371   TemplateDeductionResult
12372   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
12373                           TemplateArgumentListInfo *ExplicitTemplateArgs,
12374                           FunctionDecl *&Specialization,
12375                           sema::TemplateDeductionInfo &Info,
12376                           bool IsAddressOfFunction = false);
12377 
12378   /// Substitute Replacement for \p auto in \p TypeWithAuto
12379   QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement);
12380   /// Substitute Replacement for auto in TypeWithAuto
12381   TypeSourceInfo *SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
12382                                           QualType Replacement);
12383 
12384   // Substitute auto in TypeWithAuto for a Dependent auto type
12385   QualType SubstAutoTypeDependent(QualType TypeWithAuto);
12386 
12387   // Substitute auto in TypeWithAuto for a Dependent auto type
12388   TypeSourceInfo *
12389   SubstAutoTypeSourceInfoDependent(TypeSourceInfo *TypeWithAuto);
12390 
12391   /// Completely replace the \c auto in \p TypeWithAuto by
12392   /// \p Replacement. This does not retain any \c auto type sugar.
12393   QualType ReplaceAutoType(QualType TypeWithAuto, QualType Replacement);
12394   TypeSourceInfo *ReplaceAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
12395                                             QualType Replacement);
12396 
12397   /// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)
12398   ///
12399   /// Note that this is done even if the initializer is dependent. (This is
12400   /// necessary to support partial ordering of templates using 'auto'.)
12401   /// A dependent type will be produced when deducing from a dependent type.
12402   ///
12403   /// \param Type the type pattern using the auto type-specifier.
12404   /// \param Init the initializer for the variable whose type is to be deduced.
12405   /// \param Result if type deduction was successful, this will be set to the
12406   ///        deduced type.
12407   /// \param Info the argument will be updated to provide additional information
12408   ///        about template argument deduction.
12409   /// \param DependentDeduction Set if we should permit deduction in
12410   ///        dependent cases. This is necessary for template partial ordering
12411   ///        with 'auto' template parameters. The template parameter depth to be
12412   ///        used should be specified in the 'Info' parameter.
12413   /// \param IgnoreConstraints Set if we should not fail if the deduced type
12414   ///                          does not satisfy the type-constraint in the auto
12415   ///                          type.
12416   TemplateDeductionResult
12417   DeduceAutoType(TypeLoc AutoTypeLoc, Expr *Initializer, QualType &Result,
12418                  sema::TemplateDeductionInfo &Info,
12419                  bool DependentDeduction = false,
12420                  bool IgnoreConstraints = false,
12421                  TemplateSpecCandidateSet *FailedTSC = nullptr);
12422   void DiagnoseAutoDeductionFailure(const VarDecl *VDecl, const Expr *Init);
12423   bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc,
12424                         bool Diagnose = true);
12425 
12426   bool CheckIfFunctionSpecializationIsImmediate(FunctionDecl *FD,
12427                                                 SourceLocation Loc);
12428 
12429   /// Returns the more specialized class template partial specialization
12430   /// according to the rules of partial ordering of class template partial
12431   /// specializations (C++ [temp.class.order]).
12432   ///
12433   /// \param PS1 the first class template partial specialization
12434   ///
12435   /// \param PS2 the second class template partial specialization
12436   ///
12437   /// \returns the more specialized class template partial specialization. If
12438   /// neither partial specialization is more specialized, returns NULL.
12439   ClassTemplatePartialSpecializationDecl *
12440   getMoreSpecializedPartialSpecialization(
12441       ClassTemplatePartialSpecializationDecl *PS1,
12442       ClassTemplatePartialSpecializationDecl *PS2, SourceLocation Loc);
12443 
12444   bool isMoreSpecializedThanPrimary(ClassTemplatePartialSpecializationDecl *T,
12445                                     sema::TemplateDeductionInfo &Info);
12446 
12447   VarTemplatePartialSpecializationDecl *getMoreSpecializedPartialSpecialization(
12448       VarTemplatePartialSpecializationDecl *PS1,
12449       VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc);
12450 
12451   bool isMoreSpecializedThanPrimary(VarTemplatePartialSpecializationDecl *T,
12452                                     sema::TemplateDeductionInfo &Info);
12453 
12454   bool isTemplateTemplateParameterAtLeastAsSpecializedAs(
12455       TemplateParameterList *PParam, TemplateDecl *AArg, SourceLocation Loc,
12456       bool IsDeduced);
12457 
12458   /// Mark which template parameters are used in a given expression.
12459   ///
12460   /// \param E the expression from which template parameters will be deduced.
12461   ///
12462   /// \param Used a bit vector whose elements will be set to \c true
12463   /// to indicate when the corresponding template parameter will be
12464   /// deduced.
12465   void MarkUsedTemplateParameters(const Expr *E, bool OnlyDeduced,
12466                                   unsigned Depth, llvm::SmallBitVector &Used);
12467 
12468   /// Mark which template parameters can be deduced from a given
12469   /// template argument list.
12470   ///
12471   /// \param TemplateArgs the template argument list from which template
12472   /// parameters will be deduced.
12473   ///
12474   /// \param Used a bit vector whose elements will be set to \c true
12475   /// to indicate when the corresponding template parameter will be
12476   /// deduced.
12477   void MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs,
12478                                   bool OnlyDeduced, unsigned Depth,
12479                                   llvm::SmallBitVector &Used);
12480   void
MarkDeducedTemplateParameters(const FunctionTemplateDecl * FunctionTemplate,llvm::SmallBitVector & Deduced)12481   MarkDeducedTemplateParameters(const FunctionTemplateDecl *FunctionTemplate,
12482                                 llvm::SmallBitVector &Deduced) {
12483     return MarkDeducedTemplateParameters(Context, FunctionTemplate, Deduced);
12484   }
12485 
12486   /// Marks all of the template parameters that will be deduced by a
12487   /// call to the given function template.
12488   static void
12489   MarkDeducedTemplateParameters(ASTContext &Ctx,
12490                                 const FunctionTemplateDecl *FunctionTemplate,
12491                                 llvm::SmallBitVector &Deduced);
12492 
12493   /// Returns the more specialized function template according
12494   /// to the rules of function template partial ordering (C++
12495   /// [temp.func.order]).
12496   ///
12497   /// \param FT1 the first function template
12498   ///
12499   /// \param FT2 the second function template
12500   ///
12501   /// \param TPOC the context in which we are performing partial ordering of
12502   /// function templates.
12503   ///
12504   /// \param NumCallArguments1 The number of arguments in the call to FT1, used
12505   /// only when \c TPOC is \c TPOC_Call. Does not include the object argument
12506   /// when calling a member function.
12507   ///
12508   /// \param RawObj1Ty The type of the object parameter of FT1 if a member
12509   /// function only used if \c TPOC is \c TPOC_Call and FT1 is a Function
12510   /// template from a member function
12511   ///
12512   /// \param RawObj2Ty The type of the object parameter of FT2 if a member
12513   /// function only used if \c TPOC is \c TPOC_Call and FT2 is a Function
12514   /// template from a member function
12515   ///
12516   /// \param Reversed If \c true, exactly one of FT1 and FT2 is an overload
12517   /// candidate with a reversed parameter order. In this case, the corresponding
12518   /// P/A pairs between FT1 and FT2 are reversed.
12519   ///
12520   /// \returns the more specialized function template. If neither
12521   /// template is more specialized, returns NULL.
12522   FunctionTemplateDecl *getMoreSpecializedTemplate(
12523       FunctionTemplateDecl *FT1, FunctionTemplateDecl *FT2, SourceLocation Loc,
12524       TemplatePartialOrderingContext TPOC, unsigned NumCallArguments1,
12525       QualType RawObj1Ty = {}, QualType RawObj2Ty = {}, bool Reversed = false);
12526 
12527   /// Retrieve the most specialized of the given function template
12528   /// specializations.
12529   ///
12530   /// \param SpecBegin the start iterator of the function template
12531   /// specializations that we will be comparing.
12532   ///
12533   /// \param SpecEnd the end iterator of the function template
12534   /// specializations, paired with \p SpecBegin.
12535   ///
12536   /// \param Loc the location where the ambiguity or no-specializations
12537   /// diagnostic should occur.
12538   ///
12539   /// \param NoneDiag partial diagnostic used to diagnose cases where there are
12540   /// no matching candidates.
12541   ///
12542   /// \param AmbigDiag partial diagnostic used to diagnose an ambiguity, if one
12543   /// occurs.
12544   ///
12545   /// \param CandidateDiag partial diagnostic used for each function template
12546   /// specialization that is a candidate in the ambiguous ordering. One
12547   /// parameter in this diagnostic should be unbound, which will correspond to
12548   /// the string describing the template arguments for the function template
12549   /// specialization.
12550   ///
12551   /// \returns the most specialized function template specialization, if
12552   /// found. Otherwise, returns SpecEnd.
12553   UnresolvedSetIterator
12554   getMostSpecialized(UnresolvedSetIterator SBegin, UnresolvedSetIterator SEnd,
12555                      TemplateSpecCandidateSet &FailedCandidates,
12556                      SourceLocation Loc, const PartialDiagnostic &NoneDiag,
12557                      const PartialDiagnostic &AmbigDiag,
12558                      const PartialDiagnostic &CandidateDiag,
12559                      bool Complain = true, QualType TargetType = QualType());
12560 
12561   /// Returns the more constrained function according to the rules of
12562   /// partial ordering by constraints (C++ [temp.constr.order]).
12563   ///
12564   /// \param FD1 the first function
12565   ///
12566   /// \param FD2 the second function
12567   ///
12568   /// \returns the more constrained function. If neither function is
12569   /// more constrained, returns NULL.
12570   FunctionDecl *getMoreConstrainedFunction(FunctionDecl *FD1,
12571                                            FunctionDecl *FD2);
12572 
12573   ///@}
12574 
12575   //
12576   //
12577   // -------------------------------------------------------------------------
12578   //
12579   //
12580 
12581   /// \name C++ Template Deduction Guide
12582   /// Implementations are in SemaTemplateDeductionGuide.cpp
12583   ///@{
12584 
12585   /// Declare implicit deduction guides for a class template if we've
12586   /// not already done so.
12587   void DeclareImplicitDeductionGuides(TemplateDecl *Template,
12588                                       SourceLocation Loc);
12589 
12590   FunctionTemplateDecl *DeclareAggregateDeductionGuideFromInitList(
12591       TemplateDecl *Template, MutableArrayRef<QualType> ParamTypes,
12592       SourceLocation Loc);
12593 
12594   ///@}
12595 
12596   //
12597   //
12598   // -------------------------------------------------------------------------
12599   //
12600   //
12601 
12602   /// \name C++ Template Instantiation
12603   /// Implementations are in SemaTemplateInstantiate.cpp
12604   ///@{
12605 
12606 public:
12607   /// A helper class for building up ExtParameterInfos.
12608   class ExtParameterInfoBuilder {
12609     SmallVector<FunctionProtoType::ExtParameterInfo, 16> Infos;
12610     bool HasInteresting = false;
12611 
12612   public:
12613     /// Set the ExtParameterInfo for the parameter at the given index,
12614     ///
set(unsigned index,FunctionProtoType::ExtParameterInfo info)12615     void set(unsigned index, FunctionProtoType::ExtParameterInfo info) {
12616       assert(Infos.size() <= index);
12617       Infos.resize(index);
12618       Infos.push_back(info);
12619 
12620       if (!HasInteresting)
12621         HasInteresting = (info != FunctionProtoType::ExtParameterInfo());
12622     }
12623 
12624     /// Return a pointer (suitable for setting in an ExtProtoInfo) to the
12625     /// ExtParameterInfo array we've built up.
12626     const FunctionProtoType::ExtParameterInfo *
getPointerOrNull(unsigned numParams)12627     getPointerOrNull(unsigned numParams) {
12628       if (!HasInteresting)
12629         return nullptr;
12630       Infos.resize(numParams);
12631       return Infos.data();
12632     }
12633   };
12634 
12635   /// The current instantiation scope used to store local
12636   /// variables.
12637   LocalInstantiationScope *CurrentInstantiationScope;
12638 
12639   typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>>
12640       UnparsedDefaultArgInstantiationsMap;
12641 
12642   /// A mapping from parameters with unparsed default arguments to the
12643   /// set of instantiations of each parameter.
12644   ///
12645   /// This mapping is a temporary data structure used when parsing
12646   /// nested class templates or nested classes of class templates,
12647   /// where we might end up instantiating an inner class before the
12648   /// default arguments of its methods have been parsed.
12649   UnparsedDefaultArgInstantiationsMap UnparsedDefaultArgInstantiations;
12650 
12651   /// A context in which code is being synthesized (where a source location
12652   /// alone is not sufficient to identify the context). This covers template
12653   /// instantiation and various forms of implicitly-generated functions.
12654   struct CodeSynthesisContext {
12655     /// The kind of template instantiation we are performing
12656     enum SynthesisKind {
12657       /// We are instantiating a template declaration. The entity is
12658       /// the declaration we're instantiating (e.g., a CXXRecordDecl).
12659       TemplateInstantiation,
12660 
12661       /// We are instantiating a default argument for a template
12662       /// parameter. The Entity is the template parameter whose argument is
12663       /// being instantiated, the Template is the template, and the
12664       /// TemplateArgs/NumTemplateArguments provide the template arguments as
12665       /// specified.
12666       DefaultTemplateArgumentInstantiation,
12667 
12668       /// We are instantiating a default argument for a function.
12669       /// The Entity is the ParmVarDecl, and TemplateArgs/NumTemplateArgs
12670       /// provides the template arguments as specified.
12671       DefaultFunctionArgumentInstantiation,
12672 
12673       /// We are substituting explicit template arguments provided for
12674       /// a function template. The entity is a FunctionTemplateDecl.
12675       ExplicitTemplateArgumentSubstitution,
12676 
12677       /// We are substituting template argument determined as part of
12678       /// template argument deduction for either a class template
12679       /// partial specialization or a function template. The
12680       /// Entity is either a {Class|Var}TemplatePartialSpecializationDecl or
12681       /// a TemplateDecl.
12682       DeducedTemplateArgumentSubstitution,
12683 
12684       /// We are substituting into a lambda expression.
12685       LambdaExpressionSubstitution,
12686 
12687       /// We are substituting prior template arguments into a new
12688       /// template parameter. The template parameter itself is either a
12689       /// NonTypeTemplateParmDecl or a TemplateTemplateParmDecl.
12690       PriorTemplateArgumentSubstitution,
12691 
12692       /// We are checking the validity of a default template argument that
12693       /// has been used when naming a template-id.
12694       DefaultTemplateArgumentChecking,
12695 
12696       /// We are computing the exception specification for a defaulted special
12697       /// member function.
12698       ExceptionSpecEvaluation,
12699 
12700       /// We are instantiating the exception specification for a function
12701       /// template which was deferred until it was needed.
12702       ExceptionSpecInstantiation,
12703 
12704       /// We are instantiating a requirement of a requires expression.
12705       RequirementInstantiation,
12706 
12707       /// We are checking the satisfaction of a nested requirement of a requires
12708       /// expression.
12709       NestedRequirementConstraintsCheck,
12710 
12711       /// We are declaring an implicit special member function.
12712       DeclaringSpecialMember,
12713 
12714       /// We are declaring an implicit 'operator==' for a defaulted
12715       /// 'operator<=>'.
12716       DeclaringImplicitEqualityComparison,
12717 
12718       /// We are defining a synthesized function (such as a defaulted special
12719       /// member).
12720       DefiningSynthesizedFunction,
12721 
12722       // We are checking the constraints associated with a constrained entity or
12723       // the constraint expression of a concept. This includes the checks that
12724       // atomic constraints have the type 'bool' and that they can be constant
12725       // evaluated.
12726       ConstraintsCheck,
12727 
12728       // We are substituting template arguments into a constraint expression.
12729       ConstraintSubstitution,
12730 
12731       // We are normalizing a constraint expression.
12732       ConstraintNormalization,
12733 
12734       // Instantiating a Requires Expression parameter clause.
12735       RequirementParameterInstantiation,
12736 
12737       // We are substituting into the parameter mapping of an atomic constraint
12738       // during normalization.
12739       ParameterMappingSubstitution,
12740 
12741       /// We are rewriting a comparison operator in terms of an operator<=>.
12742       RewritingOperatorAsSpaceship,
12743 
12744       /// We are initializing a structured binding.
12745       InitializingStructuredBinding,
12746 
12747       /// We are marking a class as __dllexport.
12748       MarkingClassDllexported,
12749 
12750       /// We are building an implied call from __builtin_dump_struct. The
12751       /// arguments are in CallArgs.
12752       BuildingBuiltinDumpStructCall,
12753 
12754       /// Added for Template instantiation observation.
12755       /// Memoization means we are _not_ instantiating a template because
12756       /// it is already instantiated (but we entered a context where we
12757       /// would have had to if it was not already instantiated).
12758       Memoization,
12759 
12760       /// We are building deduction guides for a class.
12761       BuildingDeductionGuides,
12762 
12763       /// We are instantiating a type alias template declaration.
12764       TypeAliasTemplateInstantiation,
12765     } Kind;
12766 
12767     /// Was the enclosing context a non-instantiation SFINAE context?
12768     bool SavedInNonInstantiationSFINAEContext;
12769 
12770     /// The point of instantiation or synthesis within the source code.
12771     SourceLocation PointOfInstantiation;
12772 
12773     /// The entity that is being synthesized.
12774     Decl *Entity;
12775 
12776     /// The template (or partial specialization) in which we are
12777     /// performing the instantiation, for substitutions of prior template
12778     /// arguments.
12779     NamedDecl *Template;
12780 
12781     union {
12782       /// The list of template arguments we are substituting, if they
12783       /// are not part of the entity.
12784       const TemplateArgument *TemplateArgs;
12785 
12786       /// The list of argument expressions in a synthesized call.
12787       const Expr *const *CallArgs;
12788     };
12789 
12790     // FIXME: Wrap this union around more members, or perhaps store the
12791     // kind-specific members in the RAII object owning the context.
12792     union {
12793       /// The number of template arguments in TemplateArgs.
12794       unsigned NumTemplateArgs;
12795 
12796       /// The number of expressions in CallArgs.
12797       unsigned NumCallArgs;
12798 
12799       /// The special member being declared or defined.
12800       CXXSpecialMemberKind SpecialMember;
12801     };
12802 
template_argumentsCodeSynthesisContext12803     ArrayRef<TemplateArgument> template_arguments() const {
12804       assert(Kind != DeclaringSpecialMember);
12805       return {TemplateArgs, NumTemplateArgs};
12806     }
12807 
12808     /// The template deduction info object associated with the
12809     /// substitution or checking of explicit or deduced template arguments.
12810     sema::TemplateDeductionInfo *DeductionInfo;
12811 
12812     /// The source range that covers the construct that cause
12813     /// the instantiation, e.g., the template-id that causes a class
12814     /// template instantiation.
12815     SourceRange InstantiationRange;
12816 
CodeSynthesisContextCodeSynthesisContext12817     CodeSynthesisContext()
12818         : Kind(TemplateInstantiation),
12819           SavedInNonInstantiationSFINAEContext(false), Entity(nullptr),
12820           Template(nullptr), TemplateArgs(nullptr), NumTemplateArgs(0),
12821           DeductionInfo(nullptr) {}
12822 
12823     /// Determines whether this template is an actual instantiation
12824     /// that should be counted toward the maximum instantiation depth.
12825     bool isInstantiationRecord() const;
12826   };
12827 
12828   /// A stack object to be created when performing template
12829   /// instantiation.
12830   ///
12831   /// Construction of an object of type \c InstantiatingTemplate
12832   /// pushes the current instantiation onto the stack of active
12833   /// instantiations. If the size of this stack exceeds the maximum
12834   /// number of recursive template instantiations, construction
12835   /// produces an error and evaluates true.
12836   ///
12837   /// Destruction of this object will pop the named instantiation off
12838   /// the stack.
12839   struct InstantiatingTemplate {
12840     /// Note that we are instantiating a class template,
12841     /// function template, variable template, alias template,
12842     /// or a member thereof.
12843     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12844                           Decl *Entity,
12845                           SourceRange InstantiationRange = SourceRange());
12846 
12847     struct ExceptionSpecification {};
12848     /// Note that we are instantiating an exception specification
12849     /// of a function template.
12850     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12851                           FunctionDecl *Entity, ExceptionSpecification,
12852                           SourceRange InstantiationRange = SourceRange());
12853 
12854     /// Note that we are instantiating a type alias template declaration.
12855     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12856                           TypeAliasTemplateDecl *Entity,
12857                           ArrayRef<TemplateArgument> TemplateArgs,
12858                           SourceRange InstantiationRange = SourceRange());
12859 
12860     /// Note that we are instantiating a default argument in a
12861     /// template-id.
12862     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12863                           TemplateParameter Param, TemplateDecl *Template,
12864                           ArrayRef<TemplateArgument> TemplateArgs,
12865                           SourceRange InstantiationRange = SourceRange());
12866 
12867     /// Note that we are substituting either explicitly-specified or
12868     /// deduced template arguments during function template argument deduction.
12869     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12870                           FunctionTemplateDecl *FunctionTemplate,
12871                           ArrayRef<TemplateArgument> TemplateArgs,
12872                           CodeSynthesisContext::SynthesisKind Kind,
12873                           sema::TemplateDeductionInfo &DeductionInfo,
12874                           SourceRange InstantiationRange = SourceRange());
12875 
12876     /// Note that we are instantiating as part of template
12877     /// argument deduction for a class template declaration.
12878     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12879                           TemplateDecl *Template,
12880                           ArrayRef<TemplateArgument> TemplateArgs,
12881                           sema::TemplateDeductionInfo &DeductionInfo,
12882                           SourceRange InstantiationRange = SourceRange());
12883 
12884     /// Note that we are instantiating as part of template
12885     /// argument deduction for a class template partial
12886     /// specialization.
12887     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12888                           ClassTemplatePartialSpecializationDecl *PartialSpec,
12889                           ArrayRef<TemplateArgument> TemplateArgs,
12890                           sema::TemplateDeductionInfo &DeductionInfo,
12891                           SourceRange InstantiationRange = SourceRange());
12892 
12893     /// Note that we are instantiating as part of template
12894     /// argument deduction for a variable template partial
12895     /// specialization.
12896     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12897                           VarTemplatePartialSpecializationDecl *PartialSpec,
12898                           ArrayRef<TemplateArgument> TemplateArgs,
12899                           sema::TemplateDeductionInfo &DeductionInfo,
12900                           SourceRange InstantiationRange = SourceRange());
12901 
12902     /// Note that we are instantiating a default argument for a function
12903     /// parameter.
12904     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12905                           ParmVarDecl *Param,
12906                           ArrayRef<TemplateArgument> TemplateArgs,
12907                           SourceRange InstantiationRange = SourceRange());
12908 
12909     /// Note that we are substituting prior template arguments into a
12910     /// non-type parameter.
12911     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12912                           NamedDecl *Template, NonTypeTemplateParmDecl *Param,
12913                           ArrayRef<TemplateArgument> TemplateArgs,
12914                           SourceRange InstantiationRange);
12915 
12916     /// Note that we are substituting prior template arguments into a
12917     /// template template parameter.
12918     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12919                           NamedDecl *Template, TemplateTemplateParmDecl *Param,
12920                           ArrayRef<TemplateArgument> TemplateArgs,
12921                           SourceRange InstantiationRange);
12922 
12923     /// Note that we are checking the default template argument
12924     /// against the template parameter for a given template-id.
12925     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12926                           TemplateDecl *Template, NamedDecl *Param,
12927                           ArrayRef<TemplateArgument> TemplateArgs,
12928                           SourceRange InstantiationRange);
12929 
12930     struct ConstraintsCheck {};
12931     /// \brief Note that we are checking the constraints associated with some
12932     /// constrained entity (a concept declaration or a template with associated
12933     /// constraints).
12934     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12935                           ConstraintsCheck, NamedDecl *Template,
12936                           ArrayRef<TemplateArgument> TemplateArgs,
12937                           SourceRange InstantiationRange);
12938 
12939     struct ConstraintSubstitution {};
12940     /// \brief Note that we are checking a constraint expression associated
12941     /// with a template declaration or as part of the satisfaction check of a
12942     /// concept.
12943     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12944                           ConstraintSubstitution, NamedDecl *Template,
12945                           sema::TemplateDeductionInfo &DeductionInfo,
12946                           SourceRange InstantiationRange);
12947 
12948     struct ConstraintNormalization {};
12949     /// \brief Note that we are normalizing a constraint expression.
12950     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12951                           ConstraintNormalization, NamedDecl *Template,
12952                           SourceRange InstantiationRange);
12953 
12954     struct ParameterMappingSubstitution {};
12955     /// \brief Note that we are subtituting into the parameter mapping of an
12956     /// atomic constraint during constraint normalization.
12957     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12958                           ParameterMappingSubstitution, NamedDecl *Template,
12959                           SourceRange InstantiationRange);
12960 
12961     /// \brief Note that we are substituting template arguments into a part of
12962     /// a requirement of a requires expression.
12963     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12964                           concepts::Requirement *Req,
12965                           sema::TemplateDeductionInfo &DeductionInfo,
12966                           SourceRange InstantiationRange = SourceRange());
12967 
12968     /// \brief Note that we are checking the satisfaction of the constraint
12969     /// expression inside of a nested requirement.
12970     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12971                           concepts::NestedRequirement *Req, ConstraintsCheck,
12972                           SourceRange InstantiationRange = SourceRange());
12973 
12974     /// \brief Note that we are checking a requires clause.
12975     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12976                           const RequiresExpr *E,
12977                           sema::TemplateDeductionInfo &DeductionInfo,
12978                           SourceRange InstantiationRange);
12979 
12980     struct BuildingDeductionGuidesTag {};
12981     /// \brief Note that we are building deduction guides.
12982     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
12983                           TemplateDecl *Entity, BuildingDeductionGuidesTag,
12984                           SourceRange InstantiationRange = SourceRange());
12985 
12986     /// Note that we have finished instantiating this template.
12987     void Clear();
12988 
~InstantiatingTemplateInstantiatingTemplate12989     ~InstantiatingTemplate() { Clear(); }
12990 
12991     /// Determines whether we have exceeded the maximum
12992     /// recursive template instantiations.
isInvalidInstantiatingTemplate12993     bool isInvalid() const { return Invalid; }
12994 
12995     /// Determine whether we are already instantiating this
12996     /// specialization in some surrounding active instantiation.
isAlreadyInstantiatingInstantiatingTemplate12997     bool isAlreadyInstantiating() const { return AlreadyInstantiating; }
12998 
12999   private:
13000     Sema &SemaRef;
13001     bool Invalid;
13002     bool AlreadyInstantiating;
13003     bool CheckInstantiationDepth(SourceLocation PointOfInstantiation,
13004                                  SourceRange InstantiationRange);
13005 
13006     InstantiatingTemplate(
13007         Sema &SemaRef, CodeSynthesisContext::SynthesisKind Kind,
13008         SourceLocation PointOfInstantiation, SourceRange InstantiationRange,
13009         Decl *Entity, NamedDecl *Template = nullptr,
13010         ArrayRef<TemplateArgument> TemplateArgs = std::nullopt,
13011         sema::TemplateDeductionInfo *DeductionInfo = nullptr);
13012 
13013     InstantiatingTemplate(const InstantiatingTemplate &) = delete;
13014 
13015     InstantiatingTemplate &operator=(const InstantiatingTemplate &) = delete;
13016   };
13017 
13018   bool SubstTemplateArgument(const TemplateArgumentLoc &Input,
13019                              const MultiLevelTemplateArgumentList &TemplateArgs,
13020                              TemplateArgumentLoc &Output,
13021                              SourceLocation Loc = {},
13022                              const DeclarationName &Entity = {});
13023   bool
13024   SubstTemplateArguments(ArrayRef<TemplateArgumentLoc> Args,
13025                          const MultiLevelTemplateArgumentList &TemplateArgs,
13026                          TemplateArgumentListInfo &Outputs);
13027 
13028   /// Retrieve the template argument list(s) that should be used to
13029   /// instantiate the definition of the given declaration.
13030   ///
13031   /// \param ND the declaration for which we are computing template
13032   /// instantiation arguments.
13033   ///
13034   /// \param DC In the event we don't HAVE a declaration yet, we instead provide
13035   ///  the decl context where it will be created.  In this case, the `Innermost`
13036   ///  should likely be provided.  If ND is non-null, this is ignored.
13037   ///
13038   /// \param Innermost if non-NULL, specifies a template argument list for the
13039   /// template declaration passed as ND.
13040   ///
13041   /// \param RelativeToPrimary true if we should get the template
13042   /// arguments relative to the primary template, even when we're
13043   /// dealing with a specialization. This is only relevant for function
13044   /// template specializations.
13045   ///
13046   /// \param Pattern If non-NULL, indicates the pattern from which we will be
13047   /// instantiating the definition of the given declaration, \p ND. This is
13048   /// used to determine the proper set of template instantiation arguments for
13049   /// friend function template specializations.
13050   ///
13051   /// \param ForConstraintInstantiation when collecting arguments,
13052   /// ForConstraintInstantiation indicates we should continue looking when
13053   /// encountering a lambda generic call operator, and continue looking for
13054   /// arguments on an enclosing class template.
13055   MultiLevelTemplateArgumentList getTemplateInstantiationArgs(
13056       const NamedDecl *D, const DeclContext *DC = nullptr, bool Final = false,
13057       std::optional<ArrayRef<TemplateArgument>> Innermost = std::nullopt,
13058       bool RelativeToPrimary = false, const FunctionDecl *Pattern = nullptr,
13059       bool ForConstraintInstantiation = false,
13060       bool SkipForSpecialization = false);
13061 
13062   /// RAII object to handle the state changes required to synthesize
13063   /// a function body.
13064   class SynthesizedFunctionScope {
13065     Sema &S;
13066     Sema::ContextRAII SavedContext;
13067     bool PushedCodeSynthesisContext = false;
13068 
13069   public:
SynthesizedFunctionScope(Sema & S,DeclContext * DC)13070     SynthesizedFunctionScope(Sema &S, DeclContext *DC)
13071         : S(S), SavedContext(S, DC) {
13072       auto *FD = dyn_cast<FunctionDecl>(DC);
13073       S.PushFunctionScope();
13074       S.PushExpressionEvaluationContext(
13075           (FD && FD->isConsteval())
13076               ? ExpressionEvaluationContext::ImmediateFunctionContext
13077               : ExpressionEvaluationContext::PotentiallyEvaluated);
13078       if (FD) {
13079         FD->setWillHaveBody(true);
13080         S.ExprEvalContexts.back().InImmediateFunctionContext =
13081             FD->isImmediateFunction() ||
13082             S.ExprEvalContexts[S.ExprEvalContexts.size() - 2]
13083                 .isConstantEvaluated() ||
13084             S.ExprEvalContexts[S.ExprEvalContexts.size() - 2]
13085                 .isImmediateFunctionContext();
13086         S.ExprEvalContexts.back().InImmediateEscalatingFunctionContext =
13087             S.getLangOpts().CPlusPlus20 && FD->isImmediateEscalating();
13088       } else
13089         assert(isa<ObjCMethodDecl>(DC));
13090     }
13091 
addContextNote(SourceLocation UseLoc)13092     void addContextNote(SourceLocation UseLoc) {
13093       assert(!PushedCodeSynthesisContext);
13094 
13095       Sema::CodeSynthesisContext Ctx;
13096       Ctx.Kind = Sema::CodeSynthesisContext::DefiningSynthesizedFunction;
13097       Ctx.PointOfInstantiation = UseLoc;
13098       Ctx.Entity = cast<Decl>(S.CurContext);
13099       S.pushCodeSynthesisContext(Ctx);
13100 
13101       PushedCodeSynthesisContext = true;
13102     }
13103 
~SynthesizedFunctionScope()13104     ~SynthesizedFunctionScope() {
13105       if (PushedCodeSynthesisContext)
13106         S.popCodeSynthesisContext();
13107       if (auto *FD = dyn_cast<FunctionDecl>(S.CurContext)) {
13108         FD->setWillHaveBody(false);
13109         S.CheckImmediateEscalatingFunctionDefinition(FD, S.getCurFunction());
13110       }
13111       S.PopExpressionEvaluationContext();
13112       S.PopFunctionScopeInfo();
13113     }
13114   };
13115 
13116   /// List of active code synthesis contexts.
13117   ///
13118   /// This vector is treated as a stack. As synthesis of one entity requires
13119   /// synthesis of another, additional contexts are pushed onto the stack.
13120   SmallVector<CodeSynthesisContext, 16> CodeSynthesisContexts;
13121 
13122   /// Specializations whose definitions are currently being instantiated.
13123   llvm::DenseSet<std::pair<Decl *, unsigned>> InstantiatingSpecializations;
13124 
13125   /// Non-dependent types used in templates that have already been instantiated
13126   /// by some template instantiation.
13127   llvm::DenseSet<QualType> InstantiatedNonDependentTypes;
13128 
13129   /// Extra modules inspected when performing a lookup during a template
13130   /// instantiation. Computed lazily.
13131   SmallVector<Module *, 16> CodeSynthesisContextLookupModules;
13132 
13133   /// Cache of additional modules that should be used for name lookup
13134   /// within the current template instantiation. Computed lazily; use
13135   /// getLookupModules() to get a complete set.
13136   llvm::DenseSet<Module *> LookupModulesCache;
13137 
13138   /// Map from the most recent declaration of a namespace to the most
13139   /// recent visible declaration of that namespace.
13140   llvm::DenseMap<NamedDecl *, NamedDecl *> VisibleNamespaceCache;
13141 
13142   /// Whether we are in a SFINAE context that is not associated with
13143   /// template instantiation.
13144   ///
13145   /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside
13146   /// of a template instantiation or template argument deduction.
13147   bool InNonInstantiationSFINAEContext;
13148 
13149   /// The number of \p CodeSynthesisContexts that are not template
13150   /// instantiations and, therefore, should not be counted as part of the
13151   /// instantiation depth.
13152   ///
13153   /// When the instantiation depth reaches the user-configurable limit
13154   /// \p LangOptions::InstantiationDepth we will abort instantiation.
13155   // FIXME: Should we have a similar limit for other forms of synthesis?
13156   unsigned NonInstantiationEntries;
13157 
13158   /// The depth of the context stack at the point when the most recent
13159   /// error or warning was produced.
13160   ///
13161   /// This value is used to suppress printing of redundant context stacks
13162   /// when there are multiple errors or warnings in the same instantiation.
13163   // FIXME: Does this belong in Sema? It's tough to implement it anywhere else.
13164   unsigned LastEmittedCodeSynthesisContextDepth = 0;
13165 
13166   /// The template instantiation callbacks to trace or track
13167   /// instantiations (objects can be chained).
13168   ///
13169   /// This callbacks is used to print, trace or track template
13170   /// instantiations as they are being constructed.
13171   std::vector<std::unique_ptr<TemplateInstantiationCallback>>
13172       TemplateInstCallbacks;
13173 
13174   /// The current index into pack expansion arguments that will be
13175   /// used for substitution of parameter packs.
13176   ///
13177   /// The pack expansion index will be -1 to indicate that parameter packs
13178   /// should be instantiated as themselves. Otherwise, the index specifies
13179   /// which argument within the parameter pack will be used for substitution.
13180   int ArgumentPackSubstitutionIndex;
13181 
13182   /// RAII object used to change the argument pack substitution index
13183   /// within a \c Sema object.
13184   ///
13185   /// See \c ArgumentPackSubstitutionIndex for more information.
13186   class ArgumentPackSubstitutionIndexRAII {
13187     Sema &Self;
13188     int OldSubstitutionIndex;
13189 
13190   public:
ArgumentPackSubstitutionIndexRAII(Sema & Self,int NewSubstitutionIndex)13191     ArgumentPackSubstitutionIndexRAII(Sema &Self, int NewSubstitutionIndex)
13192         : Self(Self), OldSubstitutionIndex(Self.ArgumentPackSubstitutionIndex) {
13193       Self.ArgumentPackSubstitutionIndex = NewSubstitutionIndex;
13194     }
13195 
~ArgumentPackSubstitutionIndexRAII()13196     ~ArgumentPackSubstitutionIndexRAII() {
13197       Self.ArgumentPackSubstitutionIndex = OldSubstitutionIndex;
13198     }
13199   };
13200 
13201   friend class ArgumentPackSubstitutionRAII;
13202 
13203   void pushCodeSynthesisContext(CodeSynthesisContext Ctx);
13204   void popCodeSynthesisContext();
13205 
PrintContextStack()13206   void PrintContextStack() {
13207     if (!CodeSynthesisContexts.empty() &&
13208         CodeSynthesisContexts.size() != LastEmittedCodeSynthesisContextDepth) {
13209       PrintInstantiationStack();
13210       LastEmittedCodeSynthesisContextDepth = CodeSynthesisContexts.size();
13211     }
13212     if (PragmaAttributeCurrentTargetDecl)
13213       PrintPragmaAttributeInstantiationPoint();
13214   }
13215   /// Prints the current instantiation stack through a series of
13216   /// notes.
13217   void PrintInstantiationStack();
13218 
13219   /// Determines whether we are currently in a context where
13220   /// template argument substitution failures are not considered
13221   /// errors.
13222   ///
13223   /// \returns An empty \c Optional if we're not in a SFINAE context.
13224   /// Otherwise, contains a pointer that, if non-NULL, contains the nearest
13225   /// template-deduction context object, which can be used to capture
13226   /// diagnostics that will be suppressed.
13227   std::optional<sema::TemplateDeductionInfo *> isSFINAEContext() const;
13228 
13229   /// Perform substitution on the type T with a given set of template
13230   /// arguments.
13231   ///
13232   /// This routine substitutes the given template arguments into the
13233   /// type T and produces the instantiated type.
13234   ///
13235   /// \param T the type into which the template arguments will be
13236   /// substituted. If this type is not dependent, it will be returned
13237   /// immediately.
13238   ///
13239   /// \param Args the template arguments that will be
13240   /// substituted for the top-level template parameters within T.
13241   ///
13242   /// \param Loc the location in the source code where this substitution
13243   /// is being performed. It will typically be the location of the
13244   /// declarator (if we're instantiating the type of some declaration)
13245   /// or the location of the type in the source code (if, e.g., we're
13246   /// instantiating the type of a cast expression).
13247   ///
13248   /// \param Entity the name of the entity associated with a declaration
13249   /// being instantiated (if any). May be empty to indicate that there
13250   /// is no such entity (if, e.g., this is a type that occurs as part of
13251   /// a cast expression) or that the entity has no name (e.g., an
13252   /// unnamed function parameter).
13253   ///
13254   /// \param AllowDeducedTST Whether a DeducedTemplateSpecializationType is
13255   /// acceptable as the top level type of the result.
13256   ///
13257   /// \returns If the instantiation succeeds, the instantiated
13258   /// type. Otherwise, produces diagnostics and returns a NULL type.
13259   TypeSourceInfo *SubstType(TypeSourceInfo *T,
13260                             const MultiLevelTemplateArgumentList &TemplateArgs,
13261                             SourceLocation Loc, DeclarationName Entity,
13262                             bool AllowDeducedTST = false);
13263 
13264   QualType SubstType(QualType T,
13265                      const MultiLevelTemplateArgumentList &TemplateArgs,
13266                      SourceLocation Loc, DeclarationName Entity);
13267 
13268   TypeSourceInfo *SubstType(TypeLoc TL,
13269                             const MultiLevelTemplateArgumentList &TemplateArgs,
13270                             SourceLocation Loc, DeclarationName Entity);
13271 
13272   /// A form of SubstType intended specifically for instantiating the
13273   /// type of a FunctionDecl.  Its purpose is solely to force the
13274   /// instantiation of default-argument expressions and to avoid
13275   /// instantiating an exception-specification.
13276   TypeSourceInfo *SubstFunctionDeclType(
13277       TypeSourceInfo *T, const MultiLevelTemplateArgumentList &TemplateArgs,
13278       SourceLocation Loc, DeclarationName Entity, CXXRecordDecl *ThisContext,
13279       Qualifiers ThisTypeQuals, bool EvaluateConstraints = true);
13280   void SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto,
13281                           const MultiLevelTemplateArgumentList &Args);
13282   bool SubstExceptionSpec(SourceLocation Loc,
13283                           FunctionProtoType::ExceptionSpecInfo &ESI,
13284                           SmallVectorImpl<QualType> &ExceptionStorage,
13285                           const MultiLevelTemplateArgumentList &Args);
13286   ParmVarDecl *
13287   SubstParmVarDecl(ParmVarDecl *D,
13288                    const MultiLevelTemplateArgumentList &TemplateArgs,
13289                    int indexAdjustment, std::optional<unsigned> NumExpansions,
13290                    bool ExpectParameterPack, bool EvaluateConstraints = true);
13291 
13292   /// Substitute the given template arguments into the given set of
13293   /// parameters, producing the set of parameter types that would be generated
13294   /// from such a substitution.
13295   bool SubstParmTypes(SourceLocation Loc, ArrayRef<ParmVarDecl *> Params,
13296                       const FunctionProtoType::ExtParameterInfo *ExtParamInfos,
13297                       const MultiLevelTemplateArgumentList &TemplateArgs,
13298                       SmallVectorImpl<QualType> &ParamTypes,
13299                       SmallVectorImpl<ParmVarDecl *> *OutParams,
13300                       ExtParameterInfoBuilder &ParamInfos);
13301 
13302   /// Substitute the given template arguments into the default argument.
13303   bool SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param,
13304                             const MultiLevelTemplateArgumentList &TemplateArgs,
13305                             bool ForCallExpr = false);
13306   ExprResult SubstExpr(Expr *E,
13307                        const MultiLevelTemplateArgumentList &TemplateArgs);
13308 
13309   // A RAII type used by the TemplateDeclInstantiator and TemplateInstantiator
13310   // to disable constraint evaluation, then restore the state.
13311   template <typename InstTy> struct ConstraintEvalRAII {
13312     InstTy &TI;
13313     bool OldValue;
13314 
ConstraintEvalRAIIConstraintEvalRAII13315     ConstraintEvalRAII(InstTy &TI)
13316         : TI(TI), OldValue(TI.getEvaluateConstraints()) {
13317       TI.setEvaluateConstraints(false);
13318     }
~ConstraintEvalRAIIConstraintEvalRAII13319     ~ConstraintEvalRAII() { TI.setEvaluateConstraints(OldValue); }
13320   };
13321 
13322   // Must be used instead of SubstExpr at 'constraint checking' time.
13323   ExprResult
13324   SubstConstraintExpr(Expr *E,
13325                       const MultiLevelTemplateArgumentList &TemplateArgs);
13326   // Unlike the above, this does not evaluates constraints.
13327   ExprResult SubstConstraintExprWithoutSatisfaction(
13328       Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs);
13329 
13330   /// Substitute the given template arguments into a list of
13331   /// expressions, expanding pack expansions if required.
13332   ///
13333   /// \param Exprs The list of expressions to substitute into.
13334   ///
13335   /// \param IsCall Whether this is some form of call, in which case
13336   /// default arguments will be dropped.
13337   ///
13338   /// \param TemplateArgs The set of template arguments to substitute.
13339   ///
13340   /// \param Outputs Will receive all of the substituted arguments.
13341   ///
13342   /// \returns true if an error occurred, false otherwise.
13343   bool SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall,
13344                   const MultiLevelTemplateArgumentList &TemplateArgs,
13345                   SmallVectorImpl<Expr *> &Outputs);
13346 
13347   StmtResult SubstStmt(Stmt *S,
13348                        const MultiLevelTemplateArgumentList &TemplateArgs);
13349 
13350   ExprResult
13351   SubstInitializer(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs,
13352                    bool CXXDirectInit);
13353 
13354   /// Perform substitution on the base class specifiers of the
13355   /// given class template specialization.
13356   ///
13357   /// Produces a diagnostic and returns true on error, returns false and
13358   /// attaches the instantiated base classes to the class template
13359   /// specialization if successful.
13360   bool SubstBaseSpecifiers(CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
13361                            const MultiLevelTemplateArgumentList &TemplateArgs);
13362 
13363   /// Instantiate the definition of a class from a given pattern.
13364   ///
13365   /// \param PointOfInstantiation The point of instantiation within the
13366   /// source code.
13367   ///
13368   /// \param Instantiation is the declaration whose definition is being
13369   /// instantiated. This will be either a class template specialization
13370   /// or a member class of a class template specialization.
13371   ///
13372   /// \param Pattern is the pattern from which the instantiation
13373   /// occurs. This will be either the declaration of a class template or
13374   /// the declaration of a member class of a class template.
13375   ///
13376   /// \param TemplateArgs The template arguments to be substituted into
13377   /// the pattern.
13378   ///
13379   /// \param TSK the kind of implicit or explicit instantiation to perform.
13380   ///
13381   /// \param Complain whether to complain if the class cannot be instantiated
13382   /// due to the lack of a definition.
13383   ///
13384   /// \returns true if an error occurred, false otherwise.
13385   bool InstantiateClass(SourceLocation PointOfInstantiation,
13386                         CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
13387                         const MultiLevelTemplateArgumentList &TemplateArgs,
13388                         TemplateSpecializationKind TSK, bool Complain = true);
13389 
13390   /// Instantiate the definition of an enum from a given pattern.
13391   ///
13392   /// \param PointOfInstantiation The point of instantiation within the
13393   ///        source code.
13394   /// \param Instantiation is the declaration whose definition is being
13395   ///        instantiated. This will be a member enumeration of a class
13396   ///        temploid specialization, or a local enumeration within a
13397   ///        function temploid specialization.
13398   /// \param Pattern The templated declaration from which the instantiation
13399   ///        occurs.
13400   /// \param TemplateArgs The template arguments to be substituted into
13401   ///        the pattern.
13402   /// \param TSK The kind of implicit or explicit instantiation to perform.
13403   ///
13404   /// \return \c true if an error occurred, \c false otherwise.
13405   bool InstantiateEnum(SourceLocation PointOfInstantiation,
13406                        EnumDecl *Instantiation, EnumDecl *Pattern,
13407                        const MultiLevelTemplateArgumentList &TemplateArgs,
13408                        TemplateSpecializationKind TSK);
13409 
13410   /// Instantiate the definition of a field from the given pattern.
13411   ///
13412   /// \param PointOfInstantiation The point of instantiation within the
13413   ///        source code.
13414   /// \param Instantiation is the declaration whose definition is being
13415   ///        instantiated. This will be a class of a class temploid
13416   ///        specialization, or a local enumeration within a function temploid
13417   ///        specialization.
13418   /// \param Pattern The templated declaration from which the instantiation
13419   ///        occurs.
13420   /// \param TemplateArgs The template arguments to be substituted into
13421   ///        the pattern.
13422   ///
13423   /// \return \c true if an error occurred, \c false otherwise.
13424   bool InstantiateInClassInitializer(
13425       SourceLocation PointOfInstantiation, FieldDecl *Instantiation,
13426       FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs);
13427 
13428   bool usesPartialOrExplicitSpecialization(
13429       SourceLocation Loc, ClassTemplateSpecializationDecl *ClassTemplateSpec);
13430 
13431   bool InstantiateClassTemplateSpecialization(
13432       SourceLocation PointOfInstantiation,
13433       ClassTemplateSpecializationDecl *ClassTemplateSpec,
13434       TemplateSpecializationKind TSK, bool Complain = true);
13435 
13436   /// Instantiates the definitions of all of the member
13437   /// of the given class, which is an instantiation of a class template
13438   /// or a member class of a template.
13439   void
13440   InstantiateClassMembers(SourceLocation PointOfInstantiation,
13441                           CXXRecordDecl *Instantiation,
13442                           const MultiLevelTemplateArgumentList &TemplateArgs,
13443                           TemplateSpecializationKind TSK);
13444 
13445   /// Instantiate the definitions of all of the members of the
13446   /// given class template specialization, which was named as part of an
13447   /// explicit instantiation.
13448   void InstantiateClassTemplateSpecializationMembers(
13449       SourceLocation PointOfInstantiation,
13450       ClassTemplateSpecializationDecl *ClassTemplateSpec,
13451       TemplateSpecializationKind TSK);
13452 
13453   NestedNameSpecifierLoc SubstNestedNameSpecifierLoc(
13454       NestedNameSpecifierLoc NNS,
13455       const MultiLevelTemplateArgumentList &TemplateArgs);
13456 
13457   /// Do template substitution on declaration name info.
13458   DeclarationNameInfo
13459   SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
13460                            const MultiLevelTemplateArgumentList &TemplateArgs);
13461   TemplateName
13462   SubstTemplateName(NestedNameSpecifierLoc QualifierLoc, TemplateName Name,
13463                     SourceLocation Loc,
13464                     const MultiLevelTemplateArgumentList &TemplateArgs);
13465 
13466   bool SubstTypeConstraint(TemplateTypeParmDecl *Inst, const TypeConstraint *TC,
13467                            const MultiLevelTemplateArgumentList &TemplateArgs,
13468                            bool EvaluateConstraint);
13469 
13470   /// Determine whether we are currently performing template instantiation.
inTemplateInstantiation()13471   bool inTemplateInstantiation() const {
13472     return CodeSynthesisContexts.size() > NonInstantiationEntries;
13473   }
13474 
13475   ///@}
13476 
13477   //
13478   //
13479   // -------------------------------------------------------------------------
13480   //
13481   //
13482 
13483   /// \name C++ Template Declaration Instantiation
13484   /// Implementations are in SemaTemplateInstantiateDecl.cpp
13485   ///@{
13486 
13487 public:
13488   /// An entity for which implicit template instantiation is required.
13489   ///
13490   /// The source location associated with the declaration is the first place in
13491   /// the source code where the declaration was "used". It is not necessarily
13492   /// the point of instantiation (which will be either before or after the
13493   /// namespace-scope declaration that triggered this implicit instantiation),
13494   /// However, it is the location that diagnostics should generally refer to,
13495   /// because users will need to know what code triggered the instantiation.
13496   typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation;
13497 
13498   /// The queue of implicit template instantiations that are required
13499   /// but have not yet been performed.
13500   std::deque<PendingImplicitInstantiation> PendingInstantiations;
13501 
13502   /// Queue of implicit template instantiations that cannot be performed
13503   /// eagerly.
13504   SmallVector<PendingImplicitInstantiation, 1> LateParsedInstantiations;
13505 
13506   SmallVector<SmallVector<VTableUse, 16>, 8> SavedVTableUses;
13507   SmallVector<std::deque<PendingImplicitInstantiation>, 8>
13508       SavedPendingInstantiations;
13509 
13510   /// The queue of implicit template instantiations that are required
13511   /// and must be performed within the current local scope.
13512   ///
13513   /// This queue is only used for member functions of local classes in
13514   /// templates, which must be instantiated in the same scope as their
13515   /// enclosing function, so that they can reference function-local
13516   /// types, static variables, enumerators, etc.
13517   std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations;
13518 
13519   class LocalEagerInstantiationScope {
13520   public:
LocalEagerInstantiationScope(Sema & S)13521     LocalEagerInstantiationScope(Sema &S) : S(S) {
13522       SavedPendingLocalImplicitInstantiations.swap(
13523           S.PendingLocalImplicitInstantiations);
13524     }
13525 
perform()13526     void perform() { S.PerformPendingInstantiations(/*LocalOnly=*/true); }
13527 
~LocalEagerInstantiationScope()13528     ~LocalEagerInstantiationScope() {
13529       assert(S.PendingLocalImplicitInstantiations.empty() &&
13530              "there shouldn't be any pending local implicit instantiations");
13531       SavedPendingLocalImplicitInstantiations.swap(
13532           S.PendingLocalImplicitInstantiations);
13533     }
13534 
13535   private:
13536     Sema &S;
13537     std::deque<PendingImplicitInstantiation>
13538         SavedPendingLocalImplicitInstantiations;
13539   };
13540 
13541   /// Records and restores the CurFPFeatures state on entry/exit of compound
13542   /// statements.
13543   class FPFeaturesStateRAII {
13544   public:
13545     FPFeaturesStateRAII(Sema &S);
13546     ~FPFeaturesStateRAII();
getOverrides()13547     FPOptionsOverride getOverrides() { return OldOverrides; }
13548 
13549   private:
13550     Sema &S;
13551     FPOptions OldFPFeaturesState;
13552     FPOptionsOverride OldOverrides;
13553     LangOptions::FPEvalMethodKind OldEvalMethod;
13554     SourceLocation OldFPPragmaLocation;
13555   };
13556 
13557   class GlobalEagerInstantiationScope {
13558   public:
GlobalEagerInstantiationScope(Sema & S,bool Enabled)13559     GlobalEagerInstantiationScope(Sema &S, bool Enabled)
13560         : S(S), Enabled(Enabled) {
13561       if (!Enabled)
13562         return;
13563 
13564       S.SavedPendingInstantiations.emplace_back();
13565       S.SavedPendingInstantiations.back().swap(S.PendingInstantiations);
13566 
13567       S.SavedVTableUses.emplace_back();
13568       S.SavedVTableUses.back().swap(S.VTableUses);
13569     }
13570 
perform()13571     void perform() {
13572       if (Enabled) {
13573         S.DefineUsedVTables();
13574         S.PerformPendingInstantiations();
13575       }
13576     }
13577 
~GlobalEagerInstantiationScope()13578     ~GlobalEagerInstantiationScope() {
13579       if (!Enabled)
13580         return;
13581 
13582       // Restore the set of pending vtables.
13583       assert(S.VTableUses.empty() &&
13584              "VTableUses should be empty before it is discarded.");
13585       S.VTableUses.swap(S.SavedVTableUses.back());
13586       S.SavedVTableUses.pop_back();
13587 
13588       // Restore the set of pending implicit instantiations.
13589       if (S.TUKind != TU_Prefix || !S.LangOpts.PCHInstantiateTemplates) {
13590         assert(S.PendingInstantiations.empty() &&
13591                "PendingInstantiations should be empty before it is discarded.");
13592         S.PendingInstantiations.swap(S.SavedPendingInstantiations.back());
13593         S.SavedPendingInstantiations.pop_back();
13594       } else {
13595         // Template instantiations in the PCH may be delayed until the TU.
13596         S.PendingInstantiations.swap(S.SavedPendingInstantiations.back());
13597         S.PendingInstantiations.insert(
13598             S.PendingInstantiations.end(),
13599             S.SavedPendingInstantiations.back().begin(),
13600             S.SavedPendingInstantiations.back().end());
13601         S.SavedPendingInstantiations.pop_back();
13602       }
13603     }
13604 
13605   private:
13606     Sema &S;
13607     bool Enabled;
13608   };
13609 
13610   ExplicitSpecifier instantiateExplicitSpecifier(
13611       const MultiLevelTemplateArgumentList &TemplateArgs, ExplicitSpecifier ES);
13612 
13613   struct LateInstantiatedAttribute {
13614     const Attr *TmplAttr;
13615     LocalInstantiationScope *Scope;
13616     Decl *NewDecl;
13617 
LateInstantiatedAttributeLateInstantiatedAttribute13618     LateInstantiatedAttribute(const Attr *A, LocalInstantiationScope *S,
13619                               Decl *D)
13620         : TmplAttr(A), Scope(S), NewDecl(D) {}
13621   };
13622   typedef SmallVector<LateInstantiatedAttribute, 16> LateInstantiatedAttrVec;
13623 
13624   void InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
13625                         const Decl *Pattern, Decl *Inst,
13626                         LateInstantiatedAttrVec *LateAttrs = nullptr,
13627                         LocalInstantiationScope *OuterMostScope = nullptr);
13628 
13629   /// Update instantiation attributes after template was late parsed.
13630   ///
13631   /// Some attributes are evaluated based on the body of template. If it is
13632   /// late parsed, such attributes cannot be evaluated when declaration is
13633   /// instantiated. This function is used to update instantiation attributes
13634   /// when template definition is ready.
13635   void updateAttrsForLateParsedTemplate(const Decl *Pattern, Decl *Inst);
13636 
13637   void
13638   InstantiateAttrsForDecl(const MultiLevelTemplateArgumentList &TemplateArgs,
13639                           const Decl *Pattern, Decl *Inst,
13640                           LateInstantiatedAttrVec *LateAttrs = nullptr,
13641                           LocalInstantiationScope *OuterMostScope = nullptr);
13642 
13643   /// In the MS ABI, we need to instantiate default arguments of dllexported
13644   /// default constructors along with the constructor definition. This allows IR
13645   /// gen to emit a constructor closure which calls the default constructor with
13646   /// its default arguments.
13647   void InstantiateDefaultCtorDefaultArgs(CXXConstructorDecl *Ctor);
13648 
13649   bool InstantiateDefaultArgument(SourceLocation CallLoc, FunctionDecl *FD,
13650                                   ParmVarDecl *Param);
13651   void InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
13652                                 FunctionDecl *Function);
13653 
13654   /// Instantiate (or find existing instantiation of) a function template with a
13655   /// given set of template arguments.
13656   ///
13657   /// Usually this should not be used, and template argument deduction should be
13658   /// used in its place.
13659   FunctionDecl *InstantiateFunctionDeclaration(
13660       FunctionTemplateDecl *FTD, const TemplateArgumentList *Args,
13661       SourceLocation Loc,
13662       CodeSynthesisContext::SynthesisKind CSC =
13663           CodeSynthesisContext::ExplicitTemplateArgumentSubstitution);
13664 
13665   /// Instantiate the definition of the given function from its
13666   /// template.
13667   ///
13668   /// \param PointOfInstantiation the point at which the instantiation was
13669   /// required. Note that this is not precisely a "point of instantiation"
13670   /// for the function, but it's close.
13671   ///
13672   /// \param Function the already-instantiated declaration of a
13673   /// function template specialization or member function of a class template
13674   /// specialization.
13675   ///
13676   /// \param Recursive if true, recursively instantiates any functions that
13677   /// are required by this instantiation.
13678   ///
13679   /// \param DefinitionRequired if true, then we are performing an explicit
13680   /// instantiation where the body of the function is required. Complain if
13681   /// there is no such body.
13682   void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
13683                                      FunctionDecl *Function,
13684                                      bool Recursive = false,
13685                                      bool DefinitionRequired = false,
13686                                      bool AtEndOfTU = false);
13687   VarTemplateSpecializationDecl *BuildVarTemplateInstantiation(
13688       VarTemplateDecl *VarTemplate, VarDecl *FromVar,
13689       const TemplateArgumentList *PartialSpecArgs,
13690       const TemplateArgumentListInfo &TemplateArgsInfo,
13691       SmallVectorImpl<TemplateArgument> &Converted,
13692       SourceLocation PointOfInstantiation,
13693       LateInstantiatedAttrVec *LateAttrs = nullptr,
13694       LocalInstantiationScope *StartingScope = nullptr);
13695 
13696   /// Instantiates a variable template specialization by completing it
13697   /// with appropriate type information and initializer.
13698   VarTemplateSpecializationDecl *CompleteVarTemplateSpecializationDecl(
13699       VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
13700       const MultiLevelTemplateArgumentList &TemplateArgs);
13701 
13702   /// BuildVariableInstantiation - Used after a new variable has been created.
13703   /// Sets basic variable data and decides whether to postpone the
13704   /// variable instantiation.
13705   void
13706   BuildVariableInstantiation(VarDecl *NewVar, VarDecl *OldVar,
13707                              const MultiLevelTemplateArgumentList &TemplateArgs,
13708                              LateInstantiatedAttrVec *LateAttrs,
13709                              DeclContext *Owner,
13710                              LocalInstantiationScope *StartingScope,
13711                              bool InstantiatingVarTemplate = false,
13712                              VarTemplateSpecializationDecl *PrevVTSD = nullptr);
13713 
13714   /// Instantiate the initializer of a variable.
13715   void InstantiateVariableInitializer(
13716       VarDecl *Var, VarDecl *OldVar,
13717       const MultiLevelTemplateArgumentList &TemplateArgs);
13718 
13719   /// Instantiate the definition of the given variable from its
13720   /// template.
13721   ///
13722   /// \param PointOfInstantiation the point at which the instantiation was
13723   /// required. Note that this is not precisely a "point of instantiation"
13724   /// for the variable, but it's close.
13725   ///
13726   /// \param Var the already-instantiated declaration of a templated variable.
13727   ///
13728   /// \param Recursive if true, recursively instantiates any functions that
13729   /// are required by this instantiation.
13730   ///
13731   /// \param DefinitionRequired if true, then we are performing an explicit
13732   /// instantiation where a definition of the variable is required. Complain
13733   /// if there is no such definition.
13734   void InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
13735                                      VarDecl *Var, bool Recursive = false,
13736                                      bool DefinitionRequired = false,
13737                                      bool AtEndOfTU = false);
13738 
13739   void InstantiateMemInitializers(
13740       CXXConstructorDecl *New, const CXXConstructorDecl *Tmpl,
13741       const MultiLevelTemplateArgumentList &TemplateArgs);
13742 
13743   /// Find the instantiation of the given declaration within the
13744   /// current instantiation.
13745   ///
13746   /// This routine is intended to be used when \p D is a declaration
13747   /// referenced from within a template, that needs to mapped into the
13748   /// corresponding declaration within an instantiation. For example,
13749   /// given:
13750   ///
13751   /// \code
13752   /// template<typename T>
13753   /// struct X {
13754   ///   enum Kind {
13755   ///     KnownValue = sizeof(T)
13756   ///   };
13757   ///
13758   ///   bool getKind() const { return KnownValue; }
13759   /// };
13760   ///
13761   /// template struct X<int>;
13762   /// \endcode
13763   ///
13764   /// In the instantiation of X<int>::getKind(), we need to map the \p
13765   /// EnumConstantDecl for \p KnownValue (which refers to
13766   /// X<T>::<Kind>::KnownValue) to its instantiation
13767   /// (X<int>::<Kind>::KnownValue).
13768   /// \p FindInstantiatedDecl performs this mapping from within the
13769   /// instantiation of X<int>.
13770   NamedDecl *
13771   FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
13772                        const MultiLevelTemplateArgumentList &TemplateArgs,
13773                        bool FindingInstantiatedContext = false);
13774 
13775   /// Finds the instantiation of the given declaration context
13776   /// within the current instantiation.
13777   ///
13778   /// \returns NULL if there was an error
13779   DeclContext *
13780   FindInstantiatedContext(SourceLocation Loc, DeclContext *DC,
13781                           const MultiLevelTemplateArgumentList &TemplateArgs);
13782 
13783   Decl *SubstDecl(Decl *D, DeclContext *Owner,
13784                   const MultiLevelTemplateArgumentList &TemplateArgs);
13785 
13786   /// Substitute the name and return type of a defaulted 'operator<=>' to form
13787   /// an implicit 'operator=='.
13788   FunctionDecl *SubstSpaceshipAsEqualEqual(CXXRecordDecl *RD,
13789                                            FunctionDecl *Spaceship);
13790 
13791   /// Performs template instantiation for all implicit template
13792   /// instantiations we have seen until this point.
13793   void PerformPendingInstantiations(bool LocalOnly = false);
13794 
13795   TemplateParameterList *
13796   SubstTemplateParams(TemplateParameterList *Params, DeclContext *Owner,
13797                       const MultiLevelTemplateArgumentList &TemplateArgs,
13798                       bool EvaluateConstraints = true);
13799 
13800   void PerformDependentDiagnostics(
13801       const DeclContext *Pattern,
13802       const MultiLevelTemplateArgumentList &TemplateArgs);
13803 
13804 private:
13805   /// Introduce the instantiated local variables into the local
13806   /// instantiation scope.
13807   void addInstantiatedLocalVarsToScope(FunctionDecl *Function,
13808                                        const FunctionDecl *PatternDecl,
13809                                        LocalInstantiationScope &Scope);
13810   /// Introduce the instantiated function parameters into the local
13811   /// instantiation scope, and set the parameter names to those used
13812   /// in the template.
13813   bool addInstantiatedParametersToScope(
13814       FunctionDecl *Function, const FunctionDecl *PatternDecl,
13815       LocalInstantiationScope &Scope,
13816       const MultiLevelTemplateArgumentList &TemplateArgs);
13817 
13818   int ParsingClassDepth = 0;
13819 
13820   class SavePendingParsedClassStateRAII {
13821   public:
SavePendingParsedClassStateRAII(Sema & S)13822     SavePendingParsedClassStateRAII(Sema &S) : S(S) { swapSavedState(); }
13823 
~SavePendingParsedClassStateRAII()13824     ~SavePendingParsedClassStateRAII() {
13825       assert(S.DelayedOverridingExceptionSpecChecks.empty() &&
13826              "there shouldn't be any pending delayed exception spec checks");
13827       assert(S.DelayedEquivalentExceptionSpecChecks.empty() &&
13828              "there shouldn't be any pending delayed exception spec checks");
13829       swapSavedState();
13830     }
13831 
13832   private:
13833     Sema &S;
13834     decltype(DelayedOverridingExceptionSpecChecks)
13835         SavedOverridingExceptionSpecChecks;
13836     decltype(DelayedEquivalentExceptionSpecChecks)
13837         SavedEquivalentExceptionSpecChecks;
13838 
swapSavedState()13839     void swapSavedState() {
13840       SavedOverridingExceptionSpecChecks.swap(
13841           S.DelayedOverridingExceptionSpecChecks);
13842       SavedEquivalentExceptionSpecChecks.swap(
13843           S.DelayedEquivalentExceptionSpecChecks);
13844     }
13845   };
13846 
13847   ///@}
13848 
13849   //
13850   //
13851   // -------------------------------------------------------------------------
13852   //
13853   //
13854 
13855   /// \name C++ Variadic Templates
13856   /// Implementations are in SemaTemplateVariadic.cpp
13857   ///@{
13858 
13859 public:
13860   /// Determine whether an unexpanded parameter pack might be permitted in this
13861   /// location. Useful for error recovery.
13862   bool isUnexpandedParameterPackPermitted();
13863 
13864   /// The context in which an unexpanded parameter pack is
13865   /// being diagnosed.
13866   ///
13867   /// Note that the values of this enumeration line up with the first
13868   /// argument to the \c err_unexpanded_parameter_pack diagnostic.
13869   enum UnexpandedParameterPackContext {
13870     /// An arbitrary expression.
13871     UPPC_Expression = 0,
13872 
13873     /// The base type of a class type.
13874     UPPC_BaseType,
13875 
13876     /// The type of an arbitrary declaration.
13877     UPPC_DeclarationType,
13878 
13879     /// The type of a data member.
13880     UPPC_DataMemberType,
13881 
13882     /// The size of a bit-field.
13883     UPPC_BitFieldWidth,
13884 
13885     /// The expression in a static assertion.
13886     UPPC_StaticAssertExpression,
13887 
13888     /// The fixed underlying type of an enumeration.
13889     UPPC_FixedUnderlyingType,
13890 
13891     /// The enumerator value.
13892     UPPC_EnumeratorValue,
13893 
13894     /// A using declaration.
13895     UPPC_UsingDeclaration,
13896 
13897     /// A friend declaration.
13898     UPPC_FriendDeclaration,
13899 
13900     /// A declaration qualifier.
13901     UPPC_DeclarationQualifier,
13902 
13903     /// An initializer.
13904     UPPC_Initializer,
13905 
13906     /// A default argument.
13907     UPPC_DefaultArgument,
13908 
13909     /// The type of a non-type template parameter.
13910     UPPC_NonTypeTemplateParameterType,
13911 
13912     /// The type of an exception.
13913     UPPC_ExceptionType,
13914 
13915     /// Explicit specialization.
13916     UPPC_ExplicitSpecialization,
13917 
13918     /// Partial specialization.
13919     UPPC_PartialSpecialization,
13920 
13921     /// Microsoft __if_exists.
13922     UPPC_IfExists,
13923 
13924     /// Microsoft __if_not_exists.
13925     UPPC_IfNotExists,
13926 
13927     /// Lambda expression.
13928     UPPC_Lambda,
13929 
13930     /// Block expression.
13931     UPPC_Block,
13932 
13933     /// A type constraint.
13934     UPPC_TypeConstraint,
13935 
13936     // A requirement in a requires-expression.
13937     UPPC_Requirement,
13938 
13939     // A requires-clause.
13940     UPPC_RequiresClause,
13941   };
13942 
13943   /// Diagnose unexpanded parameter packs.
13944   ///
13945   /// \param Loc The location at which we should emit the diagnostic.
13946   ///
13947   /// \param UPPC The context in which we are diagnosing unexpanded
13948   /// parameter packs.
13949   ///
13950   /// \param Unexpanded the set of unexpanded parameter packs.
13951   ///
13952   /// \returns true if an error occurred, false otherwise.
13953   bool DiagnoseUnexpandedParameterPacks(
13954       SourceLocation Loc, UnexpandedParameterPackContext UPPC,
13955       ArrayRef<UnexpandedParameterPack> Unexpanded);
13956 
13957   /// If the given type contains an unexpanded parameter pack,
13958   /// diagnose the error.
13959   ///
13960   /// \param Loc The source location where a diagnostc should be emitted.
13961   ///
13962   /// \param T The type that is being checked for unexpanded parameter
13963   /// packs.
13964   ///
13965   /// \returns true if an error occurred, false otherwise.
13966   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T,
13967                                        UnexpandedParameterPackContext UPPC);
13968 
13969   /// If the given expression contains an unexpanded parameter
13970   /// pack, diagnose the error.
13971   ///
13972   /// \param E The expression that is being checked for unexpanded
13973   /// parameter packs.
13974   ///
13975   /// \returns true if an error occurred, false otherwise.
13976   bool DiagnoseUnexpandedParameterPack(
13977       Expr *E, UnexpandedParameterPackContext UPPC = UPPC_Expression);
13978 
13979   /// If the given requirees-expression contains an unexpanded reference to one
13980   /// of its own parameter packs, diagnose the error.
13981   ///
13982   /// \param RE The requiress-expression that is being checked for unexpanded
13983   /// parameter packs.
13984   ///
13985   /// \returns true if an error occurred, false otherwise.
13986   bool DiagnoseUnexpandedParameterPackInRequiresExpr(RequiresExpr *RE);
13987 
13988   /// If the given nested-name-specifier contains an unexpanded
13989   /// parameter pack, diagnose the error.
13990   ///
13991   /// \param SS The nested-name-specifier that is being checked for
13992   /// unexpanded parameter packs.
13993   ///
13994   /// \returns true if an error occurred, false otherwise.
13995   bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS,
13996                                        UnexpandedParameterPackContext UPPC);
13997 
13998   /// If the given name contains an unexpanded parameter pack,
13999   /// diagnose the error.
14000   ///
14001   /// \param NameInfo The name (with source location information) that
14002   /// is being checked for unexpanded parameter packs.
14003   ///
14004   /// \returns true if an error occurred, false otherwise.
14005   bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo,
14006                                        UnexpandedParameterPackContext UPPC);
14007 
14008   /// If the given template name contains an unexpanded parameter pack,
14009   /// diagnose the error.
14010   ///
14011   /// \param Loc The location of the template name.
14012   ///
14013   /// \param Template The template name that is being checked for unexpanded
14014   /// parameter packs.
14015   ///
14016   /// \returns true if an error occurred, false otherwise.
14017   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc,
14018                                        TemplateName Template,
14019                                        UnexpandedParameterPackContext UPPC);
14020 
14021   /// If the given template argument contains an unexpanded parameter
14022   /// pack, diagnose the error.
14023   ///
14024   /// \param Arg The template argument that is being checked for unexpanded
14025   /// parameter packs.
14026   ///
14027   /// \returns true if an error occurred, false otherwise.
14028   bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg,
14029                                        UnexpandedParameterPackContext UPPC);
14030 
14031   /// Collect the set of unexpanded parameter packs within the given
14032   /// template argument.
14033   ///
14034   /// \param Arg The template argument that will be traversed to find
14035   /// unexpanded parameter packs.
14036   void collectUnexpandedParameterPacks(
14037       TemplateArgument Arg,
14038       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14039 
14040   /// Collect the set of unexpanded parameter packs within the given
14041   /// template argument.
14042   ///
14043   /// \param Arg The template argument that will be traversed to find
14044   /// unexpanded parameter packs.
14045   void collectUnexpandedParameterPacks(
14046       TemplateArgumentLoc Arg,
14047       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14048 
14049   /// Collect the set of unexpanded parameter packs within the given
14050   /// type.
14051   ///
14052   /// \param T The type that will be traversed to find
14053   /// unexpanded parameter packs.
14054   void collectUnexpandedParameterPacks(
14055       QualType T, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14056 
14057   /// Collect the set of unexpanded parameter packs within the given
14058   /// type.
14059   ///
14060   /// \param TL The type that will be traversed to find
14061   /// unexpanded parameter packs.
14062   void collectUnexpandedParameterPacks(
14063       TypeLoc TL, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14064 
14065   /// Collect the set of unexpanded parameter packs within the given
14066   /// nested-name-specifier.
14067   ///
14068   /// \param NNS The nested-name-specifier that will be traversed to find
14069   /// unexpanded parameter packs.
14070   void collectUnexpandedParameterPacks(
14071       NestedNameSpecifierLoc NNS,
14072       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14073 
14074   /// Collect the set of unexpanded parameter packs within the given
14075   /// name.
14076   ///
14077   /// \param NameInfo The name that will be traversed to find
14078   /// unexpanded parameter packs.
14079   void collectUnexpandedParameterPacks(
14080       const DeclarationNameInfo &NameInfo,
14081       SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14082 
14083   /// Collect the set of unexpanded parameter packs within the given
14084   /// expression.
14085   static void collectUnexpandedParameterPacks(
14086       Expr *E, SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
14087 
14088   /// Invoked when parsing a template argument followed by an
14089   /// ellipsis, which creates a pack expansion.
14090   ///
14091   /// \param Arg The template argument preceding the ellipsis, which
14092   /// may already be invalid.
14093   ///
14094   /// \param EllipsisLoc The location of the ellipsis.
14095   ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg,
14096                                             SourceLocation EllipsisLoc);
14097 
14098   /// Invoked when parsing a type followed by an ellipsis, which
14099   /// creates a pack expansion.
14100   ///
14101   /// \param Type The type preceding the ellipsis, which will become
14102   /// the pattern of the pack expansion.
14103   ///
14104   /// \param EllipsisLoc The location of the ellipsis.
14105   TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc);
14106 
14107   /// Construct a pack expansion type from the pattern of the pack
14108   /// expansion.
14109   TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern,
14110                                      SourceLocation EllipsisLoc,
14111                                      std::optional<unsigned> NumExpansions);
14112 
14113   /// Construct a pack expansion type from the pattern of the pack
14114   /// expansion.
14115   QualType CheckPackExpansion(QualType Pattern, SourceRange PatternRange,
14116                               SourceLocation EllipsisLoc,
14117                               std::optional<unsigned> NumExpansions);
14118 
14119   /// Invoked when parsing an expression followed by an ellipsis, which
14120   /// creates a pack expansion.
14121   ///
14122   /// \param Pattern The expression preceding the ellipsis, which will become
14123   /// the pattern of the pack expansion.
14124   ///
14125   /// \param EllipsisLoc The location of the ellipsis.
14126   ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc);
14127 
14128   /// Invoked when parsing an expression followed by an ellipsis, which
14129   /// creates a pack expansion.
14130   ///
14131   /// \param Pattern The expression preceding the ellipsis, which will become
14132   /// the pattern of the pack expansion.
14133   ///
14134   /// \param EllipsisLoc The location of the ellipsis.
14135   ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc,
14136                                 std::optional<unsigned> NumExpansions);
14137 
14138   /// Determine whether we could expand a pack expansion with the
14139   /// given set of parameter packs into separate arguments by repeatedly
14140   /// transforming the pattern.
14141   ///
14142   /// \param EllipsisLoc The location of the ellipsis that identifies the
14143   /// pack expansion.
14144   ///
14145   /// \param PatternRange The source range that covers the entire pattern of
14146   /// the pack expansion.
14147   ///
14148   /// \param Unexpanded The set of unexpanded parameter packs within the
14149   /// pattern.
14150   ///
14151   /// \param ShouldExpand Will be set to \c true if the transformer should
14152   /// expand the corresponding pack expansions into separate arguments. When
14153   /// set, \c NumExpansions must also be set.
14154   ///
14155   /// \param RetainExpansion Whether the caller should add an unexpanded
14156   /// pack expansion after all of the expanded arguments. This is used
14157   /// when extending explicitly-specified template argument packs per
14158   /// C++0x [temp.arg.explicit]p9.
14159   ///
14160   /// \param NumExpansions The number of separate arguments that will be in
14161   /// the expanded form of the corresponding pack expansion. This is both an
14162   /// input and an output parameter, which can be set by the caller if the
14163   /// number of expansions is known a priori (e.g., due to a prior substitution)
14164   /// and will be set by the callee when the number of expansions is known.
14165   /// The callee must set this value when \c ShouldExpand is \c true; it may
14166   /// set this value in other cases.
14167   ///
14168   /// \returns true if an error occurred (e.g., because the parameter packs
14169   /// are to be instantiated with arguments of different lengths), false
14170   /// otherwise. If false, \c ShouldExpand (and possibly \c NumExpansions)
14171   /// must be set.
14172   bool CheckParameterPacksForExpansion(
14173       SourceLocation EllipsisLoc, SourceRange PatternRange,
14174       ArrayRef<UnexpandedParameterPack> Unexpanded,
14175       const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand,
14176       bool &RetainExpansion, std::optional<unsigned> &NumExpansions);
14177 
14178   /// Determine the number of arguments in the given pack expansion
14179   /// type.
14180   ///
14181   /// This routine assumes that the number of arguments in the expansion is
14182   /// consistent across all of the unexpanded parameter packs in its pattern.
14183   ///
14184   /// Returns an empty Optional if the type can't be expanded.
14185   std::optional<unsigned> getNumArgumentsInExpansion(
14186       QualType T, const MultiLevelTemplateArgumentList &TemplateArgs);
14187 
14188   /// Determine whether the given declarator contains any unexpanded
14189   /// parameter packs.
14190   ///
14191   /// This routine is used by the parser to disambiguate function declarators
14192   /// with an ellipsis prior to the ')', e.g.,
14193   ///
14194   /// \code
14195   ///   void f(T...);
14196   /// \endcode
14197   ///
14198   /// To determine whether we have an (unnamed) function parameter pack or
14199   /// a variadic function.
14200   ///
14201   /// \returns true if the declarator contains any unexpanded parameter packs,
14202   /// false otherwise.
14203   bool containsUnexpandedParameterPacks(Declarator &D);
14204 
14205   /// Returns the pattern of the pack expansion for a template argument.
14206   ///
14207   /// \param OrigLoc The template argument to expand.
14208   ///
14209   /// \param Ellipsis Will be set to the location of the ellipsis.
14210   ///
14211   /// \param NumExpansions Will be set to the number of expansions that will
14212   /// be generated from this pack expansion, if known a priori.
14213   TemplateArgumentLoc getTemplateArgumentPackExpansionPattern(
14214       TemplateArgumentLoc OrigLoc, SourceLocation &Ellipsis,
14215       std::optional<unsigned> &NumExpansions) const;
14216 
14217   /// Given a template argument that contains an unexpanded parameter pack, but
14218   /// which has already been substituted, attempt to determine the number of
14219   /// elements that will be produced once this argument is fully-expanded.
14220   ///
14221   /// This is intended for use when transforming 'sizeof...(Arg)' in order to
14222   /// avoid actually expanding the pack where possible.
14223   std::optional<unsigned> getFullyPackExpandedSize(TemplateArgument Arg);
14224 
14225   /// Called when an expression computing the size of a parameter pack
14226   /// is parsed.
14227   ///
14228   /// \code
14229   /// template<typename ...Types> struct count {
14230   ///   static const unsigned value = sizeof...(Types);
14231   /// };
14232   /// \endcode
14233   ///
14234   //
14235   /// \param OpLoc The location of the "sizeof" keyword.
14236   /// \param Name The name of the parameter pack whose size will be determined.
14237   /// \param NameLoc The source location of the name of the parameter pack.
14238   /// \param RParenLoc The location of the closing parentheses.
14239   ExprResult ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc,
14240                                           IdentifierInfo &Name,
14241                                           SourceLocation NameLoc,
14242                                           SourceLocation RParenLoc);
14243 
14244   ExprResult ActOnPackIndexingExpr(Scope *S, Expr *PackExpression,
14245                                    SourceLocation EllipsisLoc,
14246                                    SourceLocation LSquareLoc, Expr *IndexExpr,
14247                                    SourceLocation RSquareLoc);
14248 
14249   ExprResult BuildPackIndexingExpr(Expr *PackExpression,
14250                                    SourceLocation EllipsisLoc, Expr *IndexExpr,
14251                                    SourceLocation RSquareLoc,
14252                                    ArrayRef<Expr *> ExpandedExprs = {},
14253                                    bool EmptyPack = false);
14254 
14255   /// Handle a C++1z fold-expression: ( expr op ... op expr ).
14256   ExprResult ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS,
14257                               tok::TokenKind Operator,
14258                               SourceLocation EllipsisLoc, Expr *RHS,
14259                               SourceLocation RParenLoc);
14260   ExprResult BuildCXXFoldExpr(UnresolvedLookupExpr *Callee,
14261                               SourceLocation LParenLoc, Expr *LHS,
14262                               BinaryOperatorKind Operator,
14263                               SourceLocation EllipsisLoc, Expr *RHS,
14264                               SourceLocation RParenLoc,
14265                               std::optional<unsigned> NumExpansions);
14266   ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc,
14267                                    BinaryOperatorKind Operator);
14268 
14269   ///@}
14270 
14271   //
14272   //
14273   // -------------------------------------------------------------------------
14274   //
14275   //
14276 
14277   /// \name Constraints and Concepts
14278   /// Implementations are in SemaConcept.cpp
14279   ///@{
14280 
14281 public:
PushSatisfactionStackEntry(const NamedDecl * D,const llvm::FoldingSetNodeID & ID)14282   void PushSatisfactionStackEntry(const NamedDecl *D,
14283                                   const llvm::FoldingSetNodeID &ID) {
14284     const NamedDecl *Can = cast<NamedDecl>(D->getCanonicalDecl());
14285     SatisfactionStack.emplace_back(Can, ID);
14286   }
14287 
PopSatisfactionStackEntry()14288   void PopSatisfactionStackEntry() { SatisfactionStack.pop_back(); }
14289 
SatisfactionStackContains(const NamedDecl * D,const llvm::FoldingSetNodeID & ID)14290   bool SatisfactionStackContains(const NamedDecl *D,
14291                                  const llvm::FoldingSetNodeID &ID) const {
14292     const NamedDecl *Can = cast<NamedDecl>(D->getCanonicalDecl());
14293     return llvm::find(SatisfactionStack, SatisfactionStackEntryTy{Can, ID}) !=
14294            SatisfactionStack.end();
14295   }
14296 
14297   using SatisfactionStackEntryTy =
14298       std::pair<const NamedDecl *, llvm::FoldingSetNodeID>;
14299 
14300   // Resets the current SatisfactionStack for cases where we are instantiating
14301   // constraints as a 'side effect' of normal instantiation in a way that is not
14302   // indicative of recursive definition.
14303   class SatisfactionStackResetRAII {
14304     llvm::SmallVector<SatisfactionStackEntryTy, 10> BackupSatisfactionStack;
14305     Sema &SemaRef;
14306 
14307   public:
SatisfactionStackResetRAII(Sema & S)14308     SatisfactionStackResetRAII(Sema &S) : SemaRef(S) {
14309       SemaRef.SwapSatisfactionStack(BackupSatisfactionStack);
14310     }
14311 
~SatisfactionStackResetRAII()14312     ~SatisfactionStackResetRAII() {
14313       SemaRef.SwapSatisfactionStack(BackupSatisfactionStack);
14314     }
14315   };
14316 
SwapSatisfactionStack(llvm::SmallVectorImpl<SatisfactionStackEntryTy> & NewSS)14317   void SwapSatisfactionStack(
14318       llvm::SmallVectorImpl<SatisfactionStackEntryTy> &NewSS) {
14319     SatisfactionStack.swap(NewSS);
14320   }
14321 
14322   /// Check whether the given expression is a valid constraint expression.
14323   /// A diagnostic is emitted if it is not, false is returned, and
14324   /// PossibleNonPrimary will be set to true if the failure might be due to a
14325   /// non-primary expression being used as an atomic constraint.
14326   bool CheckConstraintExpression(const Expr *CE, Token NextToken = Token(),
14327                                  bool *PossibleNonPrimary = nullptr,
14328                                  bool IsTrailingRequiresClause = false);
14329 
14330   /// \brief Check whether the given list of constraint expressions are
14331   /// satisfied (as if in a 'conjunction') given template arguments.
14332   /// \param Template the template-like entity that triggered the constraints
14333   /// check (either a concept or a constrained entity).
14334   /// \param ConstraintExprs a list of constraint expressions, treated as if
14335   /// they were 'AND'ed together.
14336   /// \param TemplateArgLists the list of template arguments to substitute into
14337   /// the constraint expression.
14338   /// \param TemplateIDRange The source range of the template id that
14339   /// caused the constraints check.
14340   /// \param Satisfaction if true is returned, will contain details of the
14341   /// satisfaction, with enough information to diagnose an unsatisfied
14342   /// expression.
14343   /// \returns true if an error occurred and satisfaction could not be checked,
14344   /// false otherwise.
CheckConstraintSatisfaction(const NamedDecl * Template,ArrayRef<const Expr * > ConstraintExprs,const MultiLevelTemplateArgumentList & TemplateArgLists,SourceRange TemplateIDRange,ConstraintSatisfaction & Satisfaction)14345   bool CheckConstraintSatisfaction(
14346       const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs,
14347       const MultiLevelTemplateArgumentList &TemplateArgLists,
14348       SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction) {
14349     llvm::SmallVector<Expr *, 4> Converted;
14350     return CheckConstraintSatisfaction(Template, ConstraintExprs, Converted,
14351                                        TemplateArgLists, TemplateIDRange,
14352                                        Satisfaction);
14353   }
14354 
14355   /// \brief Check whether the given list of constraint expressions are
14356   /// satisfied (as if in a 'conjunction') given template arguments.
14357   /// Additionally, takes an empty list of Expressions which is populated with
14358   /// the instantiated versions of the ConstraintExprs.
14359   /// \param Template the template-like entity that triggered the constraints
14360   /// check (either a concept or a constrained entity).
14361   /// \param ConstraintExprs a list of constraint expressions, treated as if
14362   /// they were 'AND'ed together.
14363   /// \param ConvertedConstraints a out parameter that will get populated with
14364   /// the instantiated version of the ConstraintExprs if we successfully checked
14365   /// satisfaction.
14366   /// \param TemplateArgList the multi-level list of template arguments to
14367   /// substitute into the constraint expression. This should be relative to the
14368   /// top-level (hence multi-level), since we need to instantiate fully at the
14369   /// time of checking.
14370   /// \param TemplateIDRange The source range of the template id that
14371   /// caused the constraints check.
14372   /// \param Satisfaction if true is returned, will contain details of the
14373   /// satisfaction, with enough information to diagnose an unsatisfied
14374   /// expression.
14375   /// \returns true if an error occurred and satisfaction could not be checked,
14376   /// false otherwise.
14377   bool CheckConstraintSatisfaction(
14378       const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs,
14379       llvm::SmallVectorImpl<Expr *> &ConvertedConstraints,
14380       const MultiLevelTemplateArgumentList &TemplateArgList,
14381       SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction);
14382 
14383   /// \brief Check whether the given non-dependent constraint expression is
14384   /// satisfied. Returns false and updates Satisfaction with the satisfaction
14385   /// verdict if successful, emits a diagnostic and returns true if an error
14386   /// occurred and satisfaction could not be determined.
14387   ///
14388   /// \returns true if an error occurred, false otherwise.
14389   bool CheckConstraintSatisfaction(const Expr *ConstraintExpr,
14390                                    ConstraintSatisfaction &Satisfaction);
14391 
14392   /// Check whether the given function decl's trailing requires clause is
14393   /// satisfied, if any. Returns false and updates Satisfaction with the
14394   /// satisfaction verdict if successful, emits a diagnostic and returns true if
14395   /// an error occurred and satisfaction could not be determined.
14396   ///
14397   /// \returns true if an error occurred, false otherwise.
14398   bool CheckFunctionConstraints(const FunctionDecl *FD,
14399                                 ConstraintSatisfaction &Satisfaction,
14400                                 SourceLocation UsageLoc = SourceLocation(),
14401                                 bool ForOverloadResolution = false);
14402 
14403   // Calculates whether two constraint expressions are equal irrespective of a
14404   // difference in 'depth'. This takes a pair of optional 'NamedDecl's 'Old' and
14405   // 'New', which are the "source" of the constraint, since this is necessary
14406   // for figuring out the relative 'depth' of the constraint. The depth of the
14407   // 'primary template' and the 'instantiated from' templates aren't necessarily
14408   // the same, such as a case when one is a 'friend' defined in a class.
14409   bool AreConstraintExpressionsEqual(const NamedDecl *Old,
14410                                      const Expr *OldConstr,
14411                                      const TemplateCompareNewDeclInfo &New,
14412                                      const Expr *NewConstr);
14413 
14414   // Calculates whether the friend function depends on an enclosing template for
14415   // the purposes of [temp.friend] p9.
14416   bool FriendConstraintsDependOnEnclosingTemplate(const FunctionDecl *FD);
14417 
14418   /// \brief Ensure that the given template arguments satisfy the constraints
14419   /// associated with the given template, emitting a diagnostic if they do not.
14420   ///
14421   /// \param Template The template to which the template arguments are being
14422   /// provided.
14423   ///
14424   /// \param TemplateArgs The converted, canonicalized template arguments.
14425   ///
14426   /// \param TemplateIDRange The source range of the template id that
14427   /// caused the constraints check.
14428   ///
14429   /// \returns true if the constrains are not satisfied or could not be checked
14430   /// for satisfaction, false if the constraints are satisfied.
14431   bool EnsureTemplateArgumentListConstraints(
14432       TemplateDecl *Template,
14433       const MultiLevelTemplateArgumentList &TemplateArgs,
14434       SourceRange TemplateIDRange);
14435 
14436   bool CheckInstantiatedFunctionTemplateConstraints(
14437       SourceLocation PointOfInstantiation, FunctionDecl *Decl,
14438       ArrayRef<TemplateArgument> TemplateArgs,
14439       ConstraintSatisfaction &Satisfaction);
14440 
14441   /// \brief Emit diagnostics explaining why a constraint expression was deemed
14442   /// unsatisfied.
14443   /// \param First whether this is the first time an unsatisfied constraint is
14444   /// diagnosed for this error.
14445   void DiagnoseUnsatisfiedConstraint(const ConstraintSatisfaction &Satisfaction,
14446                                      bool First = true);
14447 
14448   /// \brief Emit diagnostics explaining why a constraint expression was deemed
14449   /// unsatisfied.
14450   void
14451   DiagnoseUnsatisfiedConstraint(const ASTConstraintSatisfaction &Satisfaction,
14452                                 bool First = true);
14453 
14454   const NormalizedConstraint *getNormalizedAssociatedConstraints(
14455       NamedDecl *ConstrainedDecl, ArrayRef<const Expr *> AssociatedConstraints);
14456 
14457   /// \brief Check whether the given declaration's associated constraints are
14458   /// at least as constrained than another declaration's according to the
14459   /// partial ordering of constraints.
14460   ///
14461   /// \param Result If no error occurred, receives the result of true if D1 is
14462   /// at least constrained than D2, and false otherwise.
14463   ///
14464   /// \returns true if an error occurred, false otherwise.
14465   bool IsAtLeastAsConstrained(NamedDecl *D1, MutableArrayRef<const Expr *> AC1,
14466                               NamedDecl *D2, MutableArrayRef<const Expr *> AC2,
14467                               bool &Result);
14468 
14469   /// If D1 was not at least as constrained as D2, but would've been if a pair
14470   /// of atomic constraints involved had been declared in a concept and not
14471   /// repeated in two separate places in code.
14472   /// \returns true if such a diagnostic was emitted, false otherwise.
14473   bool MaybeEmitAmbiguousAtomicConstraintsDiagnostic(
14474       NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2,
14475       ArrayRef<const Expr *> AC2);
14476 
14477 private:
14478   /// Caches pairs of template-like decls whose associated constraints were
14479   /// checked for subsumption and whether or not the first's constraints did in
14480   /// fact subsume the second's.
14481   llvm::DenseMap<std::pair<NamedDecl *, NamedDecl *>, bool> SubsumptionCache;
14482   /// Caches the normalized associated constraints of declarations (concepts or
14483   /// constrained declarations). If an error occurred while normalizing the
14484   /// associated constraints of the template or concept, nullptr will be cached
14485   /// here.
14486   llvm::DenseMap<NamedDecl *, NormalizedConstraint *> NormalizationCache;
14487 
14488   llvm::ContextualFoldingSet<ConstraintSatisfaction, const ASTContext &>
14489       SatisfactionCache;
14490 
14491   // The current stack of constraint satisfactions, so we can exit-early.
14492   llvm::SmallVector<SatisfactionStackEntryTy, 10> SatisfactionStack;
14493 
14494   /// Introduce the instantiated captures of the lambda into the local
14495   /// instantiation scope.
14496   bool addInstantiatedCapturesToScope(
14497       FunctionDecl *Function, const FunctionDecl *PatternDecl,
14498       LocalInstantiationScope &Scope,
14499       const MultiLevelTemplateArgumentList &TemplateArgs);
14500 
14501   /// Used by SetupConstraintCheckingTemplateArgumentsAndScope to recursively(in
14502   /// the case of lambdas) set up the LocalInstantiationScope of the current
14503   /// function.
14504   bool
14505   SetupConstraintScope(FunctionDecl *FD,
14506                        std::optional<ArrayRef<TemplateArgument>> TemplateArgs,
14507                        const MultiLevelTemplateArgumentList &MLTAL,
14508                        LocalInstantiationScope &Scope);
14509 
14510   /// Used during constraint checking, sets up the constraint template argument
14511   /// lists, and calls SetupConstraintScope to set up the
14512   /// LocalInstantiationScope to have the proper set of ParVarDecls configured.
14513   std::optional<MultiLevelTemplateArgumentList>
14514   SetupConstraintCheckingTemplateArgumentsAndScope(
14515       FunctionDecl *FD, std::optional<ArrayRef<TemplateArgument>> TemplateArgs,
14516       LocalInstantiationScope &Scope);
14517 
14518   ///@}
14519 
14520   //
14521   //
14522   // -------------------------------------------------------------------------
14523   //
14524   //
14525 
14526   /// \name Types
14527   /// Implementations are in SemaType.cpp
14528   ///@{
14529 
14530 public:
14531   /// A mapping that describes the nullability we've seen in each header file.
14532   FileNullabilityMap NullabilityMap;
14533 
getPrintable(int I)14534   static int getPrintable(int I) { return I; }
getPrintable(unsigned I)14535   static unsigned getPrintable(unsigned I) { return I; }
getPrintable(bool B)14536   static bool getPrintable(bool B) { return B; }
getPrintable(const char * S)14537   static const char *getPrintable(const char *S) { return S; }
getPrintable(StringRef S)14538   static StringRef getPrintable(StringRef S) { return S; }
getPrintable(const std::string & S)14539   static const std::string &getPrintable(const std::string &S) { return S; }
getPrintable(const IdentifierInfo * II)14540   static const IdentifierInfo *getPrintable(const IdentifierInfo *II) {
14541     return II;
14542   }
getPrintable(DeclarationName N)14543   static DeclarationName getPrintable(DeclarationName N) { return N; }
getPrintable(QualType T)14544   static QualType getPrintable(QualType T) { return T; }
getPrintable(SourceRange R)14545   static SourceRange getPrintable(SourceRange R) { return R; }
getPrintable(SourceLocation L)14546   static SourceRange getPrintable(SourceLocation L) { return L; }
getPrintable(const Expr * E)14547   static SourceRange getPrintable(const Expr *E) { return E->getSourceRange(); }
getPrintable(TypeLoc TL)14548   static SourceRange getPrintable(TypeLoc TL) { return TL.getSourceRange(); }
14549 
14550   enum class CompleteTypeKind {
14551     /// Apply the normal rules for complete types.  In particular,
14552     /// treat all sizeless types as incomplete.
14553     Normal,
14554 
14555     /// Relax the normal rules for complete types so that they include
14556     /// sizeless built-in types.
14557     AcceptSizeless,
14558 
14559     // FIXME: Eventually we should flip the default to Normal and opt in
14560     // to AcceptSizeless rather than opt out of it.
14561     Default = AcceptSizeless
14562   };
14563 
14564   QualType BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs,
14565                               const DeclSpec *DS = nullptr);
14566   QualType BuildQualifiedType(QualType T, SourceLocation Loc, unsigned CVRA,
14567                               const DeclSpec *DS = nullptr);
14568 
14569   /// Build a pointer type.
14570   ///
14571   /// \param T The type to which we'll be building a pointer.
14572   ///
14573   /// \param Loc The location of the entity whose type involves this
14574   /// pointer type or, if there is no such entity, the location of the
14575   /// type that will have pointer type.
14576   ///
14577   /// \param Entity The name of the entity that involves the pointer
14578   /// type, if known.
14579   ///
14580   /// \returns A suitable pointer type, if there are no
14581   /// errors. Otherwise, returns a NULL type.
14582   QualType BuildPointerType(QualType T, SourceLocation Loc,
14583                             DeclarationName Entity);
14584 
14585   /// Build a reference type.
14586   ///
14587   /// \param T The type to which we'll be building a reference.
14588   ///
14589   /// \param Loc The location of the entity whose type involves this
14590   /// reference type or, if there is no such entity, the location of the
14591   /// type that will have reference type.
14592   ///
14593   /// \param Entity The name of the entity that involves the reference
14594   /// type, if known.
14595   ///
14596   /// \returns A suitable reference type, if there are no
14597   /// errors. Otherwise, returns a NULL type.
14598   QualType BuildReferenceType(QualType T, bool LValueRef, SourceLocation Loc,
14599                               DeclarationName Entity);
14600 
14601   /// Build an array type.
14602   ///
14603   /// \param T The type of each element in the array.
14604   ///
14605   /// \param ASM C99 array size modifier (e.g., '*', 'static').
14606   ///
14607   /// \param ArraySize Expression describing the size of the array.
14608   ///
14609   /// \param Brackets The range from the opening '[' to the closing ']'.
14610   ///
14611   /// \param Entity The name of the entity that involves the array
14612   /// type, if known.
14613   ///
14614   /// \returns A suitable array type, if there are no errors. Otherwise,
14615   /// returns a NULL type.
14616   QualType BuildArrayType(QualType T, ArraySizeModifier ASM, Expr *ArraySize,
14617                           unsigned Quals, SourceRange Brackets,
14618                           DeclarationName Entity);
14619   QualType BuildVectorType(QualType T, Expr *VecSize, SourceLocation AttrLoc);
14620 
14621   /// Build an ext-vector type.
14622   ///
14623   /// Run the required checks for the extended vector type.
14624   QualType BuildExtVectorType(QualType T, Expr *ArraySize,
14625                               SourceLocation AttrLoc);
14626   QualType BuildMatrixType(QualType T, Expr *NumRows, Expr *NumColumns,
14627                            SourceLocation AttrLoc);
14628 
14629   QualType BuildCountAttributedArrayOrPointerType(QualType WrappedTy,
14630                                                   Expr *CountExpr,
14631                                                   bool CountInBytes,
14632                                                   bool OrNull);
14633 
14634   /// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an
14635   /// expression is uninstantiated. If instantiated it will apply the
14636   /// appropriate address space to the type. This function allows dependent
14637   /// template variables to be used in conjunction with the address_space
14638   /// attribute
14639   QualType BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace,
14640                                  SourceLocation AttrLoc);
14641 
14642   /// Same as above, but constructs the AddressSpace index if not provided.
14643   QualType BuildAddressSpaceAttr(QualType &T, Expr *AddrSpace,
14644                                  SourceLocation AttrLoc);
14645 
14646   bool CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc);
14647 
14648   bool CheckFunctionReturnType(QualType T, SourceLocation Loc);
14649 
14650   /// Build a function type.
14651   ///
14652   /// This routine checks the function type according to C++ rules and
14653   /// under the assumption that the result type and parameter types have
14654   /// just been instantiated from a template. It therefore duplicates
14655   /// some of the behavior of GetTypeForDeclarator, but in a much
14656   /// simpler form that is only suitable for this narrow use case.
14657   ///
14658   /// \param T The return type of the function.
14659   ///
14660   /// \param ParamTypes The parameter types of the function. This array
14661   /// will be modified to account for adjustments to the types of the
14662   /// function parameters.
14663   ///
14664   /// \param Loc The location of the entity whose type involves this
14665   /// function type or, if there is no such entity, the location of the
14666   /// type that will have function type.
14667   ///
14668   /// \param Entity The name of the entity that involves the function
14669   /// type, if known.
14670   ///
14671   /// \param EPI Extra information about the function type. Usually this will
14672   /// be taken from an existing function with the same prototype.
14673   ///
14674   /// \returns A suitable function type, if there are no errors. The
14675   /// unqualified type will always be a FunctionProtoType.
14676   /// Otherwise, returns a NULL type.
14677   QualType BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes,
14678                              SourceLocation Loc, DeclarationName Entity,
14679                              const FunctionProtoType::ExtProtoInfo &EPI);
14680 
14681   /// Build a member pointer type \c T Class::*.
14682   ///
14683   /// \param T the type to which the member pointer refers.
14684   /// \param Class the class type into which the member pointer points.
14685   /// \param Loc the location where this type begins
14686   /// \param Entity the name of the entity that will have this member pointer
14687   /// type
14688   ///
14689   /// \returns a member pointer type, if successful, or a NULL type if there was
14690   /// an error.
14691   QualType BuildMemberPointerType(QualType T, QualType Class,
14692                                   SourceLocation Loc, DeclarationName Entity);
14693 
14694   /// Build a block pointer type.
14695   ///
14696   /// \param T The type to which we'll be building a block pointer.
14697   ///
14698   /// \param Loc The source location, used for diagnostics.
14699   ///
14700   /// \param Entity The name of the entity that involves the block pointer
14701   /// type, if known.
14702   ///
14703   /// \returns A suitable block pointer type, if there are no
14704   /// errors. Otherwise, returns a NULL type.
14705   QualType BuildBlockPointerType(QualType T, SourceLocation Loc,
14706                                  DeclarationName Entity);
14707 
14708   /// Build a paren type including \p T.
14709   QualType BuildParenType(QualType T);
14710   QualType BuildAtomicType(QualType T, SourceLocation Loc);
14711 
14712   /// Build a Read-only Pipe type.
14713   ///
14714   /// \param T The type to which we'll be building a Pipe.
14715   ///
14716   /// \param Loc We do not use it for now.
14717   ///
14718   /// \returns A suitable pipe type, if there are no errors. Otherwise, returns
14719   /// a NULL type.
14720   QualType BuildReadPipeType(QualType T, SourceLocation Loc);
14721 
14722   /// Build a Write-only Pipe type.
14723   ///
14724   /// \param T The type to which we'll be building a Pipe.
14725   ///
14726   /// \param Loc We do not use it for now.
14727   ///
14728   /// \returns A suitable pipe type, if there are no errors. Otherwise, returns
14729   /// a NULL type.
14730   QualType BuildWritePipeType(QualType T, SourceLocation Loc);
14731 
14732   /// Build a bit-precise integer type.
14733   ///
14734   /// \param IsUnsigned Boolean representing the signedness of the type.
14735   ///
14736   /// \param BitWidth Size of this int type in bits, or an expression
14737   /// representing that.
14738   ///
14739   /// \param Loc Location of the keyword.
14740   QualType BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc);
14741 
14742   /// GetTypeForDeclarator - Convert the type for the specified
14743   /// declarator to Type instances.
14744   ///
14745   /// The result of this call will never be null, but the associated
14746   /// type may be a null type if there's an unrecoverable error.
14747   TypeSourceInfo *GetTypeForDeclarator(Declarator &D);
14748   TypeSourceInfo *GetTypeForDeclaratorCast(Declarator &D, QualType FromTy);
14749 
14750   /// Package the given type and TSI into a ParsedType.
14751   ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo);
14752   static QualType GetTypeFromParser(ParsedType Ty,
14753                                     TypeSourceInfo **TInfo = nullptr);
14754 
14755   TypeResult ActOnTypeName(Declarator &D);
14756 
14757   // Check whether the size of array element of type \p EltTy is a multiple of
14758   // its alignment and return false if it isn't.
14759   bool checkArrayElementAlignment(QualType EltTy, SourceLocation Loc);
14760 
14761   void
14762   diagnoseIgnoredQualifiers(unsigned DiagID, unsigned Quals,
14763                             SourceLocation FallbackLoc,
14764                             SourceLocation ConstQualLoc = SourceLocation(),
14765                             SourceLocation VolatileQualLoc = SourceLocation(),
14766                             SourceLocation RestrictQualLoc = SourceLocation(),
14767                             SourceLocation AtomicQualLoc = SourceLocation(),
14768                             SourceLocation UnalignedQualLoc = SourceLocation());
14769 
14770   /// Retrieve the keyword associated
14771   IdentifierInfo *getNullabilityKeyword(NullabilityKind nullability);
14772 
14773   /// Adjust the calling convention of a method to be the ABI default if it
14774   /// wasn't specified explicitly.  This handles method types formed from
14775   /// function type typedefs and typename template arguments.
14776   void adjustMemberFunctionCC(QualType &T, bool HasThisPointer,
14777                               bool IsCtorOrDtor, SourceLocation Loc);
14778 
14779   // Check if there is an explicit attribute, but only look through parens.
14780   // The intent is to look for an attribute on the current declarator, but not
14781   // one that came from a typedef.
14782   bool hasExplicitCallingConv(QualType T);
14783 
14784   /// Check whether a nullability type specifier can be added to the given
14785   /// type through some means not written in source (e.g. API notes).
14786   ///
14787   /// \param Type The type to which the nullability specifier will be
14788   /// added. On success, this type will be updated appropriately.
14789   ///
14790   /// \param Nullability The nullability specifier to add.
14791   ///
14792   /// \param DiagLoc The location to use for diagnostics.
14793   ///
14794   /// \param AllowArrayTypes Whether to accept nullability specifiers on an
14795   /// array type (e.g., because it will decay to a pointer).
14796   ///
14797   /// \param OverrideExisting Whether to override an existing, locally-specified
14798   /// nullability specifier rather than complaining about the conflict.
14799   ///
14800   /// \returns true if nullability cannot be applied, false otherwise.
14801   bool CheckImplicitNullabilityTypeSpecifier(QualType &Type,
14802                                              NullabilityKind Nullability,
14803                                              SourceLocation DiagLoc,
14804                                              bool AllowArrayTypes,
14805                                              bool OverrideExisting);
14806 
14807   /// Get the type of expression E, triggering instantiation to complete the
14808   /// type if necessary -- that is, if the expression refers to a templated
14809   /// static data member of incomplete array type.
14810   ///
14811   /// May still return an incomplete type if instantiation was not possible or
14812   /// if the type is incomplete for a different reason. Use
14813   /// RequireCompleteExprType instead if a diagnostic is expected for an
14814   /// incomplete expression type.
14815   QualType getCompletedType(Expr *E);
14816 
14817   void completeExprArrayBound(Expr *E);
14818 
14819   /// Ensure that the type of the given expression is complete.
14820   ///
14821   /// This routine checks whether the expression \p E has a complete type. If
14822   /// the expression refers to an instantiable construct, that instantiation is
14823   /// performed as needed to complete its type. Furthermore
14824   /// Sema::RequireCompleteType is called for the expression's type (or in the
14825   /// case of a reference type, the referred-to type).
14826   ///
14827   /// \param E The expression whose type is required to be complete.
14828   /// \param Kind Selects which completeness rules should be applied.
14829   /// \param Diagnoser The object that will emit a diagnostic if the type is
14830   /// incomplete.
14831   ///
14832   /// \returns \c true if the type of \p E is incomplete and diagnosed, \c false
14833   /// otherwise.
14834   bool RequireCompleteExprType(Expr *E, CompleteTypeKind Kind,
14835                                TypeDiagnoser &Diagnoser);
14836   bool RequireCompleteExprType(Expr *E, unsigned DiagID);
14837 
14838   template <typename... Ts>
RequireCompleteExprType(Expr * E,unsigned DiagID,const Ts &...Args)14839   bool RequireCompleteExprType(Expr *E, unsigned DiagID, const Ts &...Args) {
14840     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
14841     return RequireCompleteExprType(E, CompleteTypeKind::Default, Diagnoser);
14842   }
14843 
14844   /// Retrieve a version of the type 'T' that is elaborated by Keyword,
14845   /// qualified by the nested-name-specifier contained in SS, and that is
14846   /// (re)declared by OwnedTagDecl, which is nullptr if this is not a
14847   /// (re)declaration.
14848   QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
14849                              const CXXScopeSpec &SS, QualType T,
14850                              TagDecl *OwnedTagDecl = nullptr);
14851 
14852   // Returns the underlying type of a decltype with the given expression.
14853   QualType getDecltypeForExpr(Expr *E);
14854 
14855   QualType BuildTypeofExprType(Expr *E, TypeOfKind Kind);
14856   /// If AsUnevaluated is false, E is treated as though it were an evaluated
14857   /// context, such as when building a type for decltype(auto).
14858   QualType BuildDecltypeType(Expr *E, bool AsUnevaluated = true);
14859 
14860   QualType ActOnPackIndexingType(QualType Pattern, Expr *IndexExpr,
14861                                  SourceLocation Loc,
14862                                  SourceLocation EllipsisLoc);
14863   QualType BuildPackIndexingType(QualType Pattern, Expr *IndexExpr,
14864                                  SourceLocation Loc, SourceLocation EllipsisLoc,
14865                                  bool FullySubstituted = false,
14866                                  ArrayRef<QualType> Expansions = {});
14867 
14868   using UTTKind = UnaryTransformType::UTTKind;
14869   QualType BuildUnaryTransformType(QualType BaseType, UTTKind UKind,
14870                                    SourceLocation Loc);
14871   QualType BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc);
14872   QualType BuiltinAddPointer(QualType BaseType, SourceLocation Loc);
14873   QualType BuiltinRemovePointer(QualType BaseType, SourceLocation Loc);
14874   QualType BuiltinDecay(QualType BaseType, SourceLocation Loc);
14875   QualType BuiltinAddReference(QualType BaseType, UTTKind UKind,
14876                                SourceLocation Loc);
14877   QualType BuiltinRemoveExtent(QualType BaseType, UTTKind UKind,
14878                                SourceLocation Loc);
14879   QualType BuiltinRemoveReference(QualType BaseType, UTTKind UKind,
14880                                   SourceLocation Loc);
14881   QualType BuiltinChangeCVRQualifiers(QualType BaseType, UTTKind UKind,
14882                                       SourceLocation Loc);
14883   QualType BuiltinChangeSignedness(QualType BaseType, UTTKind UKind,
14884                                    SourceLocation Loc);
14885 
14886   /// Ensure that the type T is a literal type.
14887   ///
14888   /// This routine checks whether the type @p T is a literal type. If @p T is an
14889   /// incomplete type, an attempt is made to complete it. If @p T is a literal
14890   /// type, or @p AllowIncompleteType is true and @p T is an incomplete type,
14891   /// returns false. Otherwise, this routine issues the diagnostic @p PD (giving
14892   /// it the type @p T), along with notes explaining why the type is not a
14893   /// literal type, and returns true.
14894   ///
14895   /// @param Loc  The location in the source that the non-literal type
14896   /// diagnostic should refer to.
14897   ///
14898   /// @param T  The type that this routine is examining for literalness.
14899   ///
14900   /// @param Diagnoser Emits a diagnostic if T is not a literal type.
14901   ///
14902   /// @returns @c true if @p T is not a literal type and a diagnostic was
14903   /// emitted, @c false otherwise.
14904   bool RequireLiteralType(SourceLocation Loc, QualType T,
14905                           TypeDiagnoser &Diagnoser);
14906   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID);
14907 
14908   template <typename... Ts>
RequireLiteralType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)14909   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID,
14910                           const Ts &...Args) {
14911     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
14912     return RequireLiteralType(Loc, T, Diagnoser);
14913   }
14914 
14915   bool isCompleteType(SourceLocation Loc, QualType T,
14916                       CompleteTypeKind Kind = CompleteTypeKind::Default) {
14917     return !RequireCompleteTypeImpl(Loc, T, Kind, nullptr);
14918   }
14919 
14920   /// Ensure that the type T is a complete type.
14921   ///
14922   /// This routine checks whether the type @p T is complete in any
14923   /// context where a complete type is required. If @p T is a complete
14924   /// type, returns false. If @p T is a class template specialization,
14925   /// this routine then attempts to perform class template
14926   /// instantiation. If instantiation fails, or if @p T is incomplete
14927   /// and cannot be completed, issues the diagnostic @p diag (giving it
14928   /// the type @p T) and returns true.
14929   ///
14930   /// @param Loc  The location in the source that the incomplete type
14931   /// diagnostic should refer to.
14932   ///
14933   /// @param T  The type that this routine is examining for completeness.
14934   ///
14935   /// @param Kind Selects which completeness rules should be applied.
14936   ///
14937   /// @returns @c true if @p T is incomplete and a diagnostic was emitted,
14938   /// @c false otherwise.
14939   bool RequireCompleteType(SourceLocation Loc, QualType T,
14940                            CompleteTypeKind Kind, TypeDiagnoser &Diagnoser);
14941   bool RequireCompleteType(SourceLocation Loc, QualType T,
14942                            CompleteTypeKind Kind, unsigned DiagID);
14943 
RequireCompleteType(SourceLocation Loc,QualType T,TypeDiagnoser & Diagnoser)14944   bool RequireCompleteType(SourceLocation Loc, QualType T,
14945                            TypeDiagnoser &Diagnoser) {
14946     return RequireCompleteType(Loc, T, CompleteTypeKind::Default, Diagnoser);
14947   }
RequireCompleteType(SourceLocation Loc,QualType T,unsigned DiagID)14948   bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID) {
14949     return RequireCompleteType(Loc, T, CompleteTypeKind::Default, DiagID);
14950   }
14951 
14952   template <typename... Ts>
RequireCompleteType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)14953   bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID,
14954                            const Ts &...Args) {
14955     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
14956     return RequireCompleteType(Loc, T, Diagnoser);
14957   }
14958 
14959   /// Determine whether a declaration is visible to name lookup.
isVisible(const NamedDecl * D)14960   bool isVisible(const NamedDecl *D) {
14961     return D->isUnconditionallyVisible() ||
14962            isAcceptableSlow(D, AcceptableKind::Visible);
14963   }
14964 
14965   /// Determine whether a declaration is reachable.
isReachable(const NamedDecl * D)14966   bool isReachable(const NamedDecl *D) {
14967     // All visible declarations are reachable.
14968     return D->isUnconditionallyVisible() ||
14969            isAcceptableSlow(D, AcceptableKind::Reachable);
14970   }
14971 
14972   /// Determine whether a declaration is acceptable (visible/reachable).
isAcceptable(const NamedDecl * D,AcceptableKind Kind)14973   bool isAcceptable(const NamedDecl *D, AcceptableKind Kind) {
14974     return Kind == AcceptableKind::Visible ? isVisible(D) : isReachable(D);
14975   }
14976 
14977   /// Determine if \p D and \p Suggested have a structurally compatible
14978   /// layout as described in C11 6.2.7/1.
14979   bool hasStructuralCompatLayout(Decl *D, Decl *Suggested);
14980 
14981   /// Determine if \p D has a visible definition. If not, suggest a declaration
14982   /// that should be made visible to expose the definition.
14983   bool hasVisibleDefinition(NamedDecl *D, NamedDecl **Suggested,
14984                             bool OnlyNeedComplete = false);
hasVisibleDefinition(const NamedDecl * D)14985   bool hasVisibleDefinition(const NamedDecl *D) {
14986     NamedDecl *Hidden;
14987     return hasVisibleDefinition(const_cast<NamedDecl *>(D), &Hidden);
14988   }
14989 
14990   /// Determine if \p D has a reachable definition. If not, suggest a
14991   /// declaration that should be made reachable to expose the definition.
14992   bool hasReachableDefinition(NamedDecl *D, NamedDecl **Suggested,
14993                               bool OnlyNeedComplete = false);
hasReachableDefinition(NamedDecl * D)14994   bool hasReachableDefinition(NamedDecl *D) {
14995     NamedDecl *Hidden;
14996     return hasReachableDefinition(D, &Hidden);
14997   }
14998 
14999   bool hasAcceptableDefinition(NamedDecl *D, NamedDecl **Suggested,
15000                                AcceptableKind Kind,
15001                                bool OnlyNeedComplete = false);
hasAcceptableDefinition(NamedDecl * D,AcceptableKind Kind)15002   bool hasAcceptableDefinition(NamedDecl *D, AcceptableKind Kind) {
15003     NamedDecl *Hidden;
15004     return hasAcceptableDefinition(D, &Hidden, Kind);
15005   }
15006 
15007 private:
15008   /// The implementation of RequireCompleteType
15009   bool RequireCompleteTypeImpl(SourceLocation Loc, QualType T,
15010                                CompleteTypeKind Kind, TypeDiagnoser *Diagnoser);
15011 
15012   /// Nullability type specifiers.
15013   IdentifierInfo *Ident__Nonnull = nullptr;
15014   IdentifierInfo *Ident__Nullable = nullptr;
15015   IdentifierInfo *Ident__Nullable_result = nullptr;
15016   IdentifierInfo *Ident__Null_unspecified = nullptr;
15017 
15018   ///@}
15019 
15020   //
15021   //
15022   // -------------------------------------------------------------------------
15023   //
15024   //
15025 
15026   /// \name FixIt Helpers
15027   /// Implementations are in SemaFixItUtils.cpp
15028   ///@{
15029 
15030 public:
15031   /// Get a string to suggest for zero-initialization of a type.
15032   std::string getFixItZeroInitializerForType(QualType T,
15033                                              SourceLocation Loc) const;
15034   std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const;
15035 
15036   ///@}
15037 
15038   //
15039   //
15040   // -------------------------------------------------------------------------
15041   //
15042   //
15043 
15044   /// \name API Notes
15045   /// Implementations are in SemaAPINotes.cpp
15046   ///@{
15047 
15048 public:
15049   /// Map any API notes provided for this declaration to attributes on the
15050   /// declaration.
15051   ///
15052   /// Triggered by declaration-attribute processing.
15053   void ProcessAPINotes(Decl *D);
15054 
15055   ///@}
15056 
15057   //
15058   //
15059   // -------------------------------------------------------------------------
15060   //
15061   //
15062 
15063   /// \name Bounds Safety
15064   /// Implementations are in SemaBoundsSafety.cpp
15065   ///@{
15066 public:
15067   /// Check if applying the specified attribute variant from the "counted by"
15068   /// family of attributes to FieldDecl \p FD is semantically valid. If
15069   /// semantically invalid diagnostics will be emitted explaining the problems.
15070   ///
15071   /// \param FD The FieldDecl to apply the attribute to
15072   /// \param E The count expression on the attribute
15073   /// \param[out] Decls If the attribute is semantically valid \p Decls
15074   ///             is populated with TypeCoupledDeclRefInfo objects, each
15075   ///             describing Decls referred to in \p E.
15076   /// \param CountInBytes If true the attribute is from the "sized_by" family of
15077   ///                     attributes. If the false the attribute is from
15078   ///                     "counted_by" family of attributes.
15079   /// \param OrNull If true the attribute is from the "_or_null" suffixed family
15080   ///               of attributes. If false the attribute does not have the
15081   ///               suffix.
15082   ///
15083   /// Together \p CountInBytes and \p OrNull decide the attribute variant. E.g.
15084   /// \p CountInBytes and \p OrNull both being true indicates the
15085   /// `counted_by_or_null` attribute.
15086   ///
15087   /// \returns false iff semantically valid.
15088   bool CheckCountedByAttrOnField(
15089       FieldDecl *FD, Expr *E,
15090       llvm::SmallVectorImpl<TypeCoupledDeclRefInfo> &Decls, bool CountInBytes,
15091       bool OrNull);
15092 
15093   ///@}
15094 };
15095 
15096 DeductionFailureInfo
15097 MakeDeductionFailureInfo(ASTContext &Context, TemplateDeductionResult TDK,
15098                          sema::TemplateDeductionInfo &Info);
15099 
15100 /// Contains a late templated function.
15101 /// Will be parsed at the end of the translation unit, used by Sema & Parser.
15102 struct LateParsedTemplate {
15103   CachedTokens Toks;
15104   /// The template function declaration to be late parsed.
15105   Decl *D;
15106   /// Floating-point options in the point of definition.
15107   FPOptions FPO;
15108 };
15109 
15110 template <>
15111 void Sema::PragmaStack<Sema::AlignPackInfo>::Act(SourceLocation PragmaLocation,
15112                                                  PragmaMsStackAction Action,
15113                                                  llvm::StringRef StackSlotLabel,
15114                                                  AlignPackInfo Value);
15115 } // end namespace clang
15116 
15117 #endif
15118