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