Home | History | Annotate | Line # | Download | only in Sema
      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/AST/ASTConcept.h"
     18 #include "clang/AST/ASTFwd.h"
     19 #include "clang/AST/Attr.h"
     20 #include "clang/AST/Availability.h"
     21 #include "clang/AST/ComparisonCategories.h"
     22 #include "clang/AST/DeclTemplate.h"
     23 #include "clang/AST/DeclarationName.h"
     24 #include "clang/AST/Expr.h"
     25 #include "clang/AST/ExprCXX.h"
     26 #include "clang/AST/ExprConcepts.h"
     27 #include "clang/AST/ExprObjC.h"
     28 #include "clang/AST/ExprOpenMP.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/ExpressionTraits.h"
     39 #include "clang/Basic/Module.h"
     40 #include "clang/Basic/OpenCLOptions.h"
     41 #include "clang/Basic/OpenMPKinds.h"
     42 #include "clang/Basic/PragmaKinds.h"
     43 #include "clang/Basic/Specifiers.h"
     44 #include "clang/Basic/TemplateKinds.h"
     45 #include "clang/Basic/TypeTraits.h"
     46 #include "clang/Sema/AnalysisBasedWarnings.h"
     47 #include "clang/Sema/CleanupInfo.h"
     48 #include "clang/Sema/DeclSpec.h"
     49 #include "clang/Sema/ExternalSemaSource.h"
     50 #include "clang/Sema/IdentifierResolver.h"
     51 #include "clang/Sema/ObjCMethodList.h"
     52 #include "clang/Sema/Ownership.h"
     53 #include "clang/Sema/Scope.h"
     54 #include "clang/Sema/SemaConcept.h"
     55 #include "clang/Sema/TypoCorrection.h"
     56 #include "clang/Sema/Weak.h"
     57 #include "llvm/ADT/ArrayRef.h"
     58 #include "llvm/ADT/Optional.h"
     59 #include "llvm/ADT/SetVector.h"
     60 #include "llvm/ADT/SmallBitVector.h"
     61 #include "llvm/ADT/SmallPtrSet.h"
     62 #include "llvm/ADT/SmallSet.h"
     63 #include "llvm/ADT/SmallVector.h"
     64 #include "llvm/ADT/TinyPtrVector.h"
     65 #include "llvm/Frontend/OpenMP/OMPConstants.h"
     66 #include <deque>
     67 #include <memory>
     68 #include <string>
     69 #include <tuple>
     70 #include <vector>
     71 
     72 namespace llvm {
     73   class APSInt;
     74   template <typename ValueT> struct DenseMapInfo;
     75   template <typename ValueT, typename ValueInfoT> class DenseSet;
     76   class SmallBitVector;
     77   struct InlineAsmIdentifierInfo;
     78 }
     79 
     80 namespace clang {
     81   class ADLResult;
     82   class ASTConsumer;
     83   class ASTContext;
     84   class ASTMutationListener;
     85   class ASTReader;
     86   class ASTWriter;
     87   class ArrayType;
     88   class ParsedAttr;
     89   class BindingDecl;
     90   class BlockDecl;
     91   class CapturedDecl;
     92   class CXXBasePath;
     93   class CXXBasePaths;
     94   class CXXBindTemporaryExpr;
     95   typedef SmallVector<CXXBaseSpecifier*, 4> CXXCastPath;
     96   class CXXConstructorDecl;
     97   class CXXConversionDecl;
     98   class CXXDeleteExpr;
     99   class CXXDestructorDecl;
    100   class CXXFieldCollector;
    101   class CXXMemberCallExpr;
    102   class CXXMethodDecl;
    103   class CXXScopeSpec;
    104   class CXXTemporary;
    105   class CXXTryStmt;
    106   class CallExpr;
    107   class ClassTemplateDecl;
    108   class ClassTemplatePartialSpecializationDecl;
    109   class ClassTemplateSpecializationDecl;
    110   class VarTemplatePartialSpecializationDecl;
    111   class CodeCompleteConsumer;
    112   class CodeCompletionAllocator;
    113   class CodeCompletionTUInfo;
    114   class CodeCompletionResult;
    115   class CoroutineBodyStmt;
    116   class Decl;
    117   class DeclAccessPair;
    118   class DeclContext;
    119   class DeclRefExpr;
    120   class DeclaratorDecl;
    121   class DeducedTemplateArgument;
    122   class DependentDiagnostic;
    123   class DesignatedInitExpr;
    124   class Designation;
    125   class EnableIfAttr;
    126   class EnumConstantDecl;
    127   class Expr;
    128   class ExtVectorType;
    129   class FormatAttr;
    130   class FriendDecl;
    131   class FunctionDecl;
    132   class FunctionProtoType;
    133   class FunctionTemplateDecl;
    134   class ImplicitConversionSequence;
    135   typedef MutableArrayRef<ImplicitConversionSequence> ConversionSequenceList;
    136   class InitListExpr;
    137   class InitializationKind;
    138   class InitializationSequence;
    139   class InitializedEntity;
    140   class IntegerLiteral;
    141   class LabelStmt;
    142   class LambdaExpr;
    143   class LangOptions;
    144   class LocalInstantiationScope;
    145   class LookupResult;
    146   class MacroInfo;
    147   typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath;
    148   class ModuleLoader;
    149   class MultiLevelTemplateArgumentList;
    150   class NamedDecl;
    151   class ObjCCategoryDecl;
    152   class ObjCCategoryImplDecl;
    153   class ObjCCompatibleAliasDecl;
    154   class ObjCContainerDecl;
    155   class ObjCImplDecl;
    156   class ObjCImplementationDecl;
    157   class ObjCInterfaceDecl;
    158   class ObjCIvarDecl;
    159   template <class T> class ObjCList;
    160   class ObjCMessageExpr;
    161   class ObjCMethodDecl;
    162   class ObjCPropertyDecl;
    163   class ObjCProtocolDecl;
    164   class OMPThreadPrivateDecl;
    165   class OMPRequiresDecl;
    166   class OMPDeclareReductionDecl;
    167   class OMPDeclareSimdDecl;
    168   class OMPClause;
    169   struct OMPVarListLocTy;
    170   struct OverloadCandidate;
    171   enum class OverloadCandidateParamOrder : char;
    172   enum OverloadCandidateRewriteKind : unsigned;
    173   class OverloadCandidateSet;
    174   class OverloadExpr;
    175   class ParenListExpr;
    176   class ParmVarDecl;
    177   class Preprocessor;
    178   class PseudoDestructorTypeStorage;
    179   class PseudoObjectExpr;
    180   class QualType;
    181   class StandardConversionSequence;
    182   class Stmt;
    183   class StringLiteral;
    184   class SwitchStmt;
    185   class TemplateArgument;
    186   class TemplateArgumentList;
    187   class TemplateArgumentLoc;
    188   class TemplateDecl;
    189   class TemplateInstantiationCallback;
    190   class TemplateParameterList;
    191   class TemplatePartialOrderingContext;
    192   class TemplateTemplateParmDecl;
    193   class Token;
    194   class TypeAliasDecl;
    195   class TypedefDecl;
    196   class TypedefNameDecl;
    197   class TypeLoc;
    198   class TypoCorrectionConsumer;
    199   class UnqualifiedId;
    200   class UnresolvedLookupExpr;
    201   class UnresolvedMemberExpr;
    202   class UnresolvedSetImpl;
    203   class UnresolvedSetIterator;
    204   class UsingDecl;
    205   class UsingShadowDecl;
    206   class ValueDecl;
    207   class VarDecl;
    208   class VarTemplateSpecializationDecl;
    209   class VisibilityAttr;
    210   class VisibleDeclConsumer;
    211   class IndirectFieldDecl;
    212   struct DeductionFailureInfo;
    213   class TemplateSpecCandidateSet;
    214 
    215 namespace sema {
    216   class AccessedEntity;
    217   class BlockScopeInfo;
    218   class Capture;
    219   class CapturedRegionScopeInfo;
    220   class CapturingScopeInfo;
    221   class CompoundScopeInfo;
    222   class DelayedDiagnostic;
    223   class DelayedDiagnosticPool;
    224   class FunctionScopeInfo;
    225   class LambdaScopeInfo;
    226   class PossiblyUnreachableDiag;
    227   class SemaPPCallbacks;
    228   class TemplateDeductionInfo;
    229 }
    230 
    231 namespace threadSafety {
    232   class BeforeSet;
    233   void threadSafetyCleanup(BeforeSet* Cache);
    234 }
    235 
    236 // FIXME: No way to easily map from TemplateTypeParmTypes to
    237 // TemplateTypeParmDecls, so we have this horrible PointerUnion.
    238 typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType*, NamedDecl*>,
    239                   SourceLocation> UnexpandedParameterPack;
    240 
    241 /// Describes whether we've seen any nullability information for the given
    242 /// file.
    243 struct FileNullability {
    244   /// The first pointer declarator (of any pointer kind) in the file that does
    245   /// not have a corresponding nullability annotation.
    246   SourceLocation PointerLoc;
    247 
    248   /// The end location for the first pointer declarator in the file. Used for
    249   /// placing fix-its.
    250   SourceLocation PointerEndLoc;
    251 
    252   /// Which kind of pointer declarator we saw.
    253   uint8_t PointerKind;
    254 
    255   /// Whether we saw any type nullability annotations in the given file.
    256   bool SawTypeNullability = false;
    257 };
    258 
    259 /// A mapping from file IDs to a record of whether we've seen nullability
    260 /// information in that file.
    261 class FileNullabilityMap {
    262   /// A mapping from file IDs to the nullability information for each file ID.
    263   llvm::DenseMap<FileID, FileNullability> Map;
    264 
    265   /// A single-element cache based on the file ID.
    266   struct {
    267     FileID File;
    268     FileNullability Nullability;
    269   } Cache;
    270 
    271 public:
    272   FileNullability &operator[](FileID file) {
    273     // Check the single-element cache.
    274     if (file == Cache.File)
    275       return Cache.Nullability;
    276 
    277     // It's not in the single-element cache; flush the cache if we have one.
    278     if (!Cache.File.isInvalid()) {
    279       Map[Cache.File] = Cache.Nullability;
    280     }
    281 
    282     // Pull this entry into the cache.
    283     Cache.File = file;
    284     Cache.Nullability = Map[file];
    285     return Cache.Nullability;
    286   }
    287 };
    288 
    289 /// Tracks expected type during expression parsing, for use in code completion.
    290 /// The type is tied to a particular token, all functions that update or consume
    291 /// the type take a start location of the token they are looking at as a
    292 /// parameter. This avoids updating the type on hot paths in the parser.
    293 class PreferredTypeBuilder {
    294 public:
    295   PreferredTypeBuilder(bool Enabled) : Enabled(Enabled) {}
    296 
    297   void enterCondition(Sema &S, SourceLocation Tok);
    298   void enterReturn(Sema &S, SourceLocation Tok);
    299   void enterVariableInit(SourceLocation Tok, Decl *D);
    300   /// Handles e.g. BaseType{ .D = Tok...
    301   void enterDesignatedInitializer(SourceLocation Tok, QualType BaseType,
    302                                   const Designation &D);
    303   /// Computing a type for the function argument may require running
    304   /// overloading, so we postpone its computation until it is actually needed.
    305   ///
    306   /// Clients should be very careful when using this funciton, as it stores a
    307   /// function_ref, clients should make sure all calls to get() with the same
    308   /// location happen while function_ref is alive.
    309   ///
    310   /// The callback should also emit signature help as a side-effect, but only
    311   /// if the completion point has been reached.
    312   void enterFunctionArgument(SourceLocation Tok,
    313                              llvm::function_ref<QualType()> ComputeType);
    314 
    315   void enterParenExpr(SourceLocation Tok, SourceLocation LParLoc);
    316   void enterUnary(Sema &S, SourceLocation Tok, tok::TokenKind OpKind,
    317                   SourceLocation OpLoc);
    318   void enterBinary(Sema &S, SourceLocation Tok, Expr *LHS, tok::TokenKind Op);
    319   void enterMemAccess(Sema &S, SourceLocation Tok, Expr *Base);
    320   void enterSubscript(Sema &S, SourceLocation Tok, Expr *LHS);
    321   /// Handles all type casts, including C-style cast, C++ casts, etc.
    322   void enterTypeCast(SourceLocation Tok, QualType CastType);
    323 
    324   /// Get the expected type associated with this location, if any.
    325   ///
    326   /// If the location is a function argument, determining the expected type
    327   /// involves considering all function overloads and the arguments so far.
    328   /// In this case, signature help for these function overloads will be reported
    329   /// as a side-effect (only if the completion point has been reached).
    330   QualType get(SourceLocation Tok) const {
    331     if (!Enabled || Tok != ExpectedLoc)
    332       return QualType();
    333     if (!Type.isNull())
    334       return Type;
    335     if (ComputeType)
    336       return ComputeType();
    337     return QualType();
    338   }
    339 
    340 private:
    341   bool Enabled;
    342   /// Start position of a token for which we store expected type.
    343   SourceLocation ExpectedLoc;
    344   /// Expected type for a token starting at ExpectedLoc.
    345   QualType Type;
    346   /// A function to compute expected type at ExpectedLoc. It is only considered
    347   /// if Type is null.
    348   llvm::function_ref<QualType()> ComputeType;
    349 };
    350 
    351 /// Sema - This implements semantic analysis and AST building for C.
    352 class Sema final {
    353   Sema(const Sema &) = delete;
    354   void operator=(const Sema &) = delete;
    355 
    356   ///Source of additional semantic information.
    357   ExternalSemaSource *ExternalSource;
    358 
    359   ///Whether Sema has generated a multiplexer and has to delete it.
    360   bool isMultiplexExternalSource;
    361 
    362   static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD);
    363 
    364   bool isVisibleSlow(const NamedDecl *D);
    365 
    366   /// Determine whether two declarations should be linked together, given that
    367   /// the old declaration might not be visible and the new declaration might
    368   /// not have external linkage.
    369   bool shouldLinkPossiblyHiddenDecl(const NamedDecl *Old,
    370                                     const NamedDecl *New) {
    371     if (isVisible(Old))
    372      return true;
    373     // See comment in below overload for why it's safe to compute the linkage
    374     // of the new declaration here.
    375     if (New->isExternallyDeclarable()) {
    376       assert(Old->isExternallyDeclarable() &&
    377              "should not have found a non-externally-declarable previous decl");
    378       return true;
    379     }
    380     return false;
    381   }
    382   bool shouldLinkPossiblyHiddenDecl(LookupResult &Old, const NamedDecl *New);
    383 
    384   void setupImplicitSpecialMemberType(CXXMethodDecl *SpecialMem,
    385                                       QualType ResultTy,
    386                                       ArrayRef<QualType> Args);
    387 
    388 public:
    389   /// The maximum alignment, same as in llvm::Value. We duplicate them here
    390   /// because that allows us not to duplicate the constants in clang code,
    391   /// which we must to since we can't directly use the llvm constants.
    392   /// The value is verified against llvm here: lib/CodeGen/CGDecl.cpp
    393   ///
    394   /// This is the greatest alignment value supported by load, store, and alloca
    395   /// instructions, and global values.
    396   static const unsigned MaxAlignmentExponent = 29;
    397   static const unsigned MaximumAlignment = 1u << MaxAlignmentExponent;
    398 
    399   typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
    400   typedef OpaquePtr<TemplateName> TemplateTy;
    401   typedef OpaquePtr<QualType> TypeTy;
    402 
    403   OpenCLOptions OpenCLFeatures;
    404   FPOptions CurFPFeatures;
    405 
    406   const LangOptions &LangOpts;
    407   Preprocessor &PP;
    408   ASTContext &Context;
    409   ASTConsumer &Consumer;
    410   DiagnosticsEngine &Diags;
    411   SourceManager &SourceMgr;
    412 
    413   /// Flag indicating whether or not to collect detailed statistics.
    414   bool CollectStats;
    415 
    416   /// Code-completion consumer.
    417   CodeCompleteConsumer *CodeCompleter;
    418 
    419   /// CurContext - This is the current declaration context of parsing.
    420   DeclContext *CurContext;
    421 
    422   /// Generally null except when we temporarily switch decl contexts,
    423   /// like in \see ActOnObjCTemporaryExitContainerContext.
    424   DeclContext *OriginalLexicalContext;
    425 
    426   /// VAListTagName - The declaration name corresponding to __va_list_tag.
    427   /// This is used as part of a hack to omit that class from ADL results.
    428   DeclarationName VAListTagName;
    429 
    430   bool MSStructPragmaOn; // True when \#pragma ms_struct on
    431 
    432   /// Controls member pointer representation format under the MS ABI.
    433   LangOptions::PragmaMSPointersToMembersKind
    434       MSPointerToMemberRepresentationMethod;
    435 
    436   /// Stack of active SEH __finally scopes.  Can be empty.
    437   SmallVector<Scope*, 2> CurrentSEHFinally;
    438 
    439   /// Source location for newly created implicit MSInheritanceAttrs
    440   SourceLocation ImplicitMSInheritanceAttrLoc;
    441 
    442   /// Holds TypoExprs that are created from `createDelayedTypo`. This is used by
    443   /// `TransformTypos` in order to keep track of any TypoExprs that are created
    444   /// recursively during typo correction and wipe them away if the correction
    445   /// fails.
    446   llvm::SmallVector<TypoExpr *, 2> TypoExprs;
    447 
    448   /// pragma clang section kind
    449   enum PragmaClangSectionKind {
    450     PCSK_Invalid      = 0,
    451     PCSK_BSS          = 1,
    452     PCSK_Data         = 2,
    453     PCSK_Rodata       = 3,
    454     PCSK_Text         = 4,
    455     PCSK_Relro        = 5
    456    };
    457 
    458   enum PragmaClangSectionAction {
    459     PCSA_Set     = 0,
    460     PCSA_Clear   = 1
    461   };
    462 
    463   struct PragmaClangSection {
    464     std::string SectionName;
    465     bool Valid = false;
    466     SourceLocation PragmaLocation;
    467   };
    468 
    469    PragmaClangSection PragmaClangBSSSection;
    470    PragmaClangSection PragmaClangDataSection;
    471    PragmaClangSection PragmaClangRodataSection;
    472    PragmaClangSection PragmaClangRelroSection;
    473    PragmaClangSection PragmaClangTextSection;
    474 
    475   enum PragmaMsStackAction {
    476     PSK_Reset     = 0x0,                // #pragma ()
    477     PSK_Set       = 0x1,                // #pragma (value)
    478     PSK_Push      = 0x2,                // #pragma (push[, id])
    479     PSK_Pop       = 0x4,                // #pragma (pop[, id])
    480     PSK_Show      = 0x8,                // #pragma (show) -- only for "pack"!
    481     PSK_Push_Set  = PSK_Push | PSK_Set, // #pragma (push[, id], value)
    482     PSK_Pop_Set   = PSK_Pop | PSK_Set,  // #pragma (pop[, id], value)
    483   };
    484 
    485   // #pragma pack and align.
    486   class AlignPackInfo {
    487   public:
    488     // `Native` represents default align mode, which may vary based on the
    489     // platform.
    490     enum Mode : unsigned char { Native, Natural, Packed, Mac68k };
    491 
    492     // #pragma pack info constructor
    493     AlignPackInfo(AlignPackInfo::Mode M, unsigned Num, bool IsXL)
    494         : PackAttr(true), AlignMode(M), PackNumber(Num), XLStack(IsXL) {
    495       assert(Num == PackNumber && "The pack number has been truncated.");
    496     }
    497 
    498     // #pragma align info constructor
    499     AlignPackInfo(AlignPackInfo::Mode M, bool IsXL)
    500         : PackAttr(false), AlignMode(M),
    501           PackNumber(M == Packed ? 1 : UninitPackVal), XLStack(IsXL) {}
    502 
    503     explicit AlignPackInfo(bool IsXL) : AlignPackInfo(Native, IsXL) {}
    504 
    505     AlignPackInfo() : AlignPackInfo(Native, false) {}
    506 
    507     // When a AlignPackInfo itself cannot be used, this returns an 32-bit
    508     // integer encoding for it. This should only be passed to
    509     // AlignPackInfo::getFromRawEncoding, it should not be inspected directly.
    510     static uint32_t getRawEncoding(const AlignPackInfo &Info) {
    511       std::uint32_t Encoding{};
    512       if (Info.IsXLStack())
    513         Encoding |= IsXLMask;
    514 
    515       Encoding |= static_cast<uint32_t>(Info.getAlignMode()) << 1;
    516 
    517       if (Info.IsPackAttr())
    518         Encoding |= PackAttrMask;
    519 
    520       Encoding |= static_cast<uint32_t>(Info.getPackNumber()) << 4;
    521 
    522       return Encoding;
    523     }
    524 
    525     static AlignPackInfo getFromRawEncoding(unsigned Encoding) {
    526       bool IsXL = static_cast<bool>(Encoding & IsXLMask);
    527       AlignPackInfo::Mode M =
    528           static_cast<AlignPackInfo::Mode>((Encoding & AlignModeMask) >> 1);
    529       int PackNumber = (Encoding & PackNumMask) >> 4;
    530 
    531       if (Encoding & PackAttrMask)
    532         return AlignPackInfo(M, PackNumber, IsXL);
    533 
    534       return AlignPackInfo(M, IsXL);
    535     }
    536 
    537     bool IsPackAttr() const { return PackAttr; }
    538 
    539     bool IsAlignAttr() const { return !PackAttr; }
    540 
    541     Mode getAlignMode() const { return AlignMode; }
    542 
    543     unsigned getPackNumber() const { return PackNumber; }
    544 
    545     bool IsPackSet() const {
    546       // #pragma align, #pragma pack(), and #pragma pack(0) do not set the pack
    547       // attriute on a decl.
    548       return PackNumber != UninitPackVal && PackNumber != 0;
    549     }
    550 
    551     bool IsXLStack() const { return XLStack; }
    552 
    553     bool operator==(const AlignPackInfo &Info) const {
    554       return std::tie(AlignMode, PackNumber, PackAttr, XLStack) ==
    555              std::tie(Info.AlignMode, Info.PackNumber, Info.PackAttr,
    556                       Info.XLStack);
    557     }
    558 
    559     bool operator!=(const AlignPackInfo &Info) const {
    560       return !(*this == Info);
    561     }
    562 
    563   private:
    564     /// \brief True if this is a pragma pack attribute,
    565     ///         not a pragma align attribute.
    566     bool PackAttr;
    567 
    568     /// \brief The alignment mode that is in effect.
    569     Mode AlignMode;
    570 
    571     /// \brief The pack number of the stack.
    572     unsigned char PackNumber;
    573 
    574     /// \brief True if it is a XL #pragma align/pack stack.
    575     bool XLStack;
    576 
    577     /// \brief Uninitialized pack value.
    578     static constexpr unsigned char UninitPackVal = -1;
    579 
    580     // Masks to encode and decode an AlignPackInfo.
    581     static constexpr uint32_t IsXLMask{0x0000'0001};
    582     static constexpr uint32_t AlignModeMask{0x0000'0006};
    583     static constexpr uint32_t PackAttrMask{0x00000'0008};
    584     static constexpr uint32_t PackNumMask{0x0000'01F0};
    585   };
    586 
    587   template<typename ValueType>
    588   struct PragmaStack {
    589     struct Slot {
    590       llvm::StringRef StackSlotLabel;
    591       ValueType Value;
    592       SourceLocation PragmaLocation;
    593       SourceLocation PragmaPushLocation;
    594       Slot(llvm::StringRef StackSlotLabel, ValueType Value,
    595            SourceLocation PragmaLocation, SourceLocation PragmaPushLocation)
    596           : StackSlotLabel(StackSlotLabel), Value(Value),
    597             PragmaLocation(PragmaLocation),
    598             PragmaPushLocation(PragmaPushLocation) {}
    599     };
    600 
    601     void Act(SourceLocation PragmaLocation, PragmaMsStackAction Action,
    602              llvm::StringRef StackSlotLabel, ValueType Value) {
    603       if (Action == PSK_Reset) {
    604         CurrentValue = DefaultValue;
    605         CurrentPragmaLocation = PragmaLocation;
    606         return;
    607       }
    608       if (Action & PSK_Push)
    609         Stack.emplace_back(StackSlotLabel, CurrentValue, CurrentPragmaLocation,
    610                            PragmaLocation);
    611       else if (Action & PSK_Pop) {
    612         if (!StackSlotLabel.empty()) {
    613           // If we've got a label, try to find it and jump there.
    614           auto I = llvm::find_if(llvm::reverse(Stack), [&](const Slot &x) {
    615             return x.StackSlotLabel == StackSlotLabel;
    616           });
    617           // If we found the label so pop from there.
    618           if (I != Stack.rend()) {
    619             CurrentValue = I->Value;
    620             CurrentPragmaLocation = I->PragmaLocation;
    621             Stack.erase(std::prev(I.base()), Stack.end());
    622           }
    623         } else if (!Stack.empty()) {
    624           // We do not have a label, just pop the last entry.
    625           CurrentValue = Stack.back().Value;
    626           CurrentPragmaLocation = Stack.back().PragmaLocation;
    627           Stack.pop_back();
    628         }
    629       }
    630       if (Action & PSK_Set) {
    631         CurrentValue = Value;
    632         CurrentPragmaLocation = PragmaLocation;
    633       }
    634     }
    635 
    636     // MSVC seems to add artificial slots to #pragma stacks on entering a C++
    637     // method body to restore the stacks on exit, so it works like this:
    638     //
    639     //   struct S {
    640     //     #pragma <name>(push, InternalPragmaSlot, <current_pragma_value>)
    641     //     void Method {}
    642     //     #pragma <name>(pop, InternalPragmaSlot)
    643     //   };
    644     //
    645     // It works even with #pragma vtordisp, although MSVC doesn't support
    646     //   #pragma vtordisp(push [, id], n)
    647     // syntax.
    648     //
    649     // Push / pop a named sentinel slot.
    650     void SentinelAction(PragmaMsStackAction Action, StringRef Label) {
    651       assert((Action == PSK_Push || Action == PSK_Pop) &&
    652              "Can only push / pop #pragma stack sentinels!");
    653       Act(CurrentPragmaLocation, Action, Label, CurrentValue);
    654     }
    655 
    656     // Constructors.
    657     explicit PragmaStack(const ValueType &Default)
    658         : DefaultValue(Default), CurrentValue(Default) {}
    659 
    660     bool hasValue() const { return CurrentValue != DefaultValue; }
    661 
    662     SmallVector<Slot, 2> Stack;
    663     ValueType DefaultValue; // Value used for PSK_Reset action.
    664     ValueType CurrentValue;
    665     SourceLocation CurrentPragmaLocation;
    666   };
    667   // FIXME: We should serialize / deserialize these if they occur in a PCH (but
    668   // we shouldn't do so if they're in a module).
    669 
    670   /// Whether to insert vtordisps prior to virtual bases in the Microsoft
    671   /// C++ ABI.  Possible values are 0, 1, and 2, which mean:
    672   ///
    673   /// 0: Suppress all vtordisps
    674   /// 1: Insert vtordisps in the presence of vbase overrides and non-trivial
    675   ///    structors
    676   /// 2: Always insert vtordisps to support RTTI on partially constructed
    677   ///    objects
    678   PragmaStack<MSVtorDispMode> VtorDispStack;
    679   PragmaStack<AlignPackInfo> AlignPackStack;
    680   // The current #pragma align/pack values and locations at each #include.
    681   struct AlignPackIncludeState {
    682     AlignPackInfo CurrentValue;
    683     SourceLocation CurrentPragmaLocation;
    684     bool HasNonDefaultValue, ShouldWarnOnInclude;
    685   };
    686   SmallVector<AlignPackIncludeState, 8> AlignPackIncludeStack;
    687   // Segment #pragmas.
    688   PragmaStack<StringLiteral *> DataSegStack;
    689   PragmaStack<StringLiteral *> BSSSegStack;
    690   PragmaStack<StringLiteral *> ConstSegStack;
    691   PragmaStack<StringLiteral *> CodeSegStack;
    692 
    693   // This stack tracks the current state of Sema.CurFPFeatures.
    694   PragmaStack<FPOptionsOverride> FpPragmaStack;
    695   FPOptionsOverride CurFPFeatureOverrides() {
    696     FPOptionsOverride result;
    697     if (!FpPragmaStack.hasValue()) {
    698       result = FPOptionsOverride();
    699     } else {
    700       result = FpPragmaStack.CurrentValue;
    701     }
    702     return result;
    703   }
    704 
    705   // RAII object to push / pop sentinel slots for all MS #pragma stacks.
    706   // Actions should be performed only if we enter / exit a C++ method body.
    707   class PragmaStackSentinelRAII {
    708   public:
    709     PragmaStackSentinelRAII(Sema &S, StringRef SlotLabel, bool ShouldAct);
    710     ~PragmaStackSentinelRAII();
    711 
    712   private:
    713     Sema &S;
    714     StringRef SlotLabel;
    715     bool ShouldAct;
    716   };
    717 
    718   /// A mapping that describes the nullability we've seen in each header file.
    719   FileNullabilityMap NullabilityMap;
    720 
    721   /// Last section used with #pragma init_seg.
    722   StringLiteral *CurInitSeg;
    723   SourceLocation CurInitSegLoc;
    724 
    725   /// VisContext - Manages the stack for \#pragma GCC visibility.
    726   void *VisContext; // Really a "PragmaVisStack*"
    727 
    728   /// This an attribute introduced by \#pragma clang attribute.
    729   struct PragmaAttributeEntry {
    730     SourceLocation Loc;
    731     ParsedAttr *Attribute;
    732     SmallVector<attr::SubjectMatchRule, 4> MatchRules;
    733     bool IsUsed;
    734   };
    735 
    736   /// A push'd group of PragmaAttributeEntries.
    737   struct PragmaAttributeGroup {
    738     /// The location of the push attribute.
    739     SourceLocation Loc;
    740     /// The namespace of this push group.
    741     const IdentifierInfo *Namespace;
    742     SmallVector<PragmaAttributeEntry, 2> Entries;
    743   };
    744 
    745   SmallVector<PragmaAttributeGroup, 2> PragmaAttributeStack;
    746 
    747   /// The declaration that is currently receiving an attribute from the
    748   /// #pragma attribute stack.
    749   const Decl *PragmaAttributeCurrentTargetDecl;
    750 
    751   /// This represents the last location of a "#pragma clang optimize off"
    752   /// directive if such a directive has not been closed by an "on" yet. If
    753   /// optimizations are currently "on", this is set to an invalid location.
    754   SourceLocation OptimizeOffPragmaLocation;
    755 
    756   /// Flag indicating if Sema is building a recovery call expression.
    757   ///
    758   /// This flag is used to avoid building recovery call expressions
    759   /// if Sema is already doing so, which would cause infinite recursions.
    760   bool IsBuildingRecoveryCallExpr;
    761 
    762   /// Used to control the generation of ExprWithCleanups.
    763   CleanupInfo Cleanup;
    764 
    765   /// ExprCleanupObjects - This is the stack of objects requiring
    766   /// cleanup that are created by the current full expression.
    767   SmallVector<ExprWithCleanups::CleanupObject, 8> ExprCleanupObjects;
    768 
    769   /// Store a set of either DeclRefExprs or MemberExprs that contain a reference
    770   /// to a variable (constant) that may or may not be odr-used in this Expr, and
    771   /// we won't know until all lvalue-to-rvalue and discarded value conversions
    772   /// have been applied to all subexpressions of the enclosing full expression.
    773   /// This is cleared at the end of each full expression.
    774   using MaybeODRUseExprSet = llvm::SetVector<Expr *, SmallVector<Expr *, 4>,
    775                                              llvm::SmallPtrSet<Expr *, 4>>;
    776   MaybeODRUseExprSet MaybeODRUseExprs;
    777 
    778   std::unique_ptr<sema::FunctionScopeInfo> CachedFunctionScope;
    779 
    780   /// Stack containing information about each of the nested
    781   /// function, block, and method scopes that are currently active.
    782   SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes;
    783 
    784   /// The index of the first FunctionScope that corresponds to the current
    785   /// context.
    786   unsigned FunctionScopesStart = 0;
    787 
    788   ArrayRef<sema::FunctionScopeInfo*> getFunctionScopes() const {
    789     return llvm::makeArrayRef(FunctionScopes.begin() + FunctionScopesStart,
    790                               FunctionScopes.end());
    791   }
    792 
    793   /// Stack containing information needed when in C++2a an 'auto' is encountered
    794   /// in a function declaration parameter type specifier in order to invent a
    795   /// corresponding template parameter in the enclosing abbreviated function
    796   /// template. This information is also present in LambdaScopeInfo, stored in
    797   /// the FunctionScopes stack.
    798   SmallVector<InventedTemplateParameterInfo, 4> InventedParameterInfos;
    799 
    800   /// The index of the first InventedParameterInfo that refers to the current
    801   /// context.
    802   unsigned InventedParameterInfosStart = 0;
    803 
    804   ArrayRef<InventedTemplateParameterInfo> getInventedParameterInfos() const {
    805     return llvm::makeArrayRef(InventedParameterInfos.begin() +
    806                                   InventedParameterInfosStart,
    807                               InventedParameterInfos.end());
    808   }
    809 
    810   typedef LazyVector<TypedefNameDecl *, ExternalSemaSource,
    811                      &ExternalSemaSource::ReadExtVectorDecls, 2, 2>
    812     ExtVectorDeclsType;
    813 
    814   /// ExtVectorDecls - This is a list all the extended vector types. This allows
    815   /// us to associate a raw vector type with one of the ext_vector type names.
    816   /// This is only necessary for issuing pretty diagnostics.
    817   ExtVectorDeclsType ExtVectorDecls;
    818 
    819   /// FieldCollector - Collects CXXFieldDecls during parsing of C++ classes.
    820   std::unique_ptr<CXXFieldCollector> FieldCollector;
    821 
    822   typedef llvm::SmallSetVector<NamedDecl *, 16> NamedDeclSetType;
    823 
    824   /// Set containing all declared private fields that are not used.
    825   NamedDeclSetType UnusedPrivateFields;
    826 
    827   /// Set containing all typedefs that are likely unused.
    828   llvm::SmallSetVector<const TypedefNameDecl *, 4>
    829       UnusedLocalTypedefNameCandidates;
    830 
    831   /// Delete-expressions to be analyzed at the end of translation unit
    832   ///
    833   /// This list contains class members, and locations of delete-expressions
    834   /// that could not be proven as to whether they mismatch with new-expression
    835   /// used in initializer of the field.
    836   typedef std::pair<SourceLocation, bool> DeleteExprLoc;
    837   typedef llvm::SmallVector<DeleteExprLoc, 4> DeleteLocs;
    838   llvm::MapVector<FieldDecl *, DeleteLocs> DeleteExprs;
    839 
    840   typedef llvm::SmallPtrSet<const CXXRecordDecl*, 8> RecordDeclSetTy;
    841 
    842   /// PureVirtualClassDiagSet - a set of class declarations which we have
    843   /// emitted a list of pure virtual functions. Used to prevent emitting the
    844   /// same list more than once.
    845   std::unique_ptr<RecordDeclSetTy> PureVirtualClassDiagSet;
    846 
    847   /// ParsingInitForAutoVars - a set of declarations with auto types for which
    848   /// we are currently parsing the initializer.
    849   llvm::SmallPtrSet<const Decl*, 4> ParsingInitForAutoVars;
    850 
    851   /// Look for a locally scoped extern "C" declaration by the given name.
    852   NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
    853 
    854   typedef LazyVector<VarDecl *, ExternalSemaSource,
    855                      &ExternalSemaSource::ReadTentativeDefinitions, 2, 2>
    856     TentativeDefinitionsType;
    857 
    858   /// All the tentative definitions encountered in the TU.
    859   TentativeDefinitionsType TentativeDefinitions;
    860 
    861   /// All the external declarations encoutered and used in the TU.
    862   SmallVector<VarDecl *, 4> ExternalDeclarations;
    863 
    864   typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource,
    865                      &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2>
    866     UnusedFileScopedDeclsType;
    867 
    868   /// The set of file scoped decls seen so far that have not been used
    869   /// and must warn if not used. Only contains the first declaration.
    870   UnusedFileScopedDeclsType UnusedFileScopedDecls;
    871 
    872   typedef LazyVector<CXXConstructorDecl *, ExternalSemaSource,
    873                      &ExternalSemaSource::ReadDelegatingConstructors, 2, 2>
    874     DelegatingCtorDeclsType;
    875 
    876   /// All the delegating constructors seen so far in the file, used for
    877   /// cycle detection at the end of the TU.
    878   DelegatingCtorDeclsType DelegatingCtorDecls;
    879 
    880   /// All the overriding functions seen during a class definition
    881   /// that had their exception spec checks delayed, plus the overridden
    882   /// function.
    883   SmallVector<std::pair<const CXXMethodDecl*, const CXXMethodDecl*>, 2>
    884     DelayedOverridingExceptionSpecChecks;
    885 
    886   /// All the function redeclarations seen during a class definition that had
    887   /// their exception spec checks delayed, plus the prior declaration they
    888   /// should be checked against. Except during error recovery, the new decl
    889   /// should always be a friend declaration, as that's the only valid way to
    890   /// redeclare a special member before its class is complete.
    891   SmallVector<std::pair<FunctionDecl*, FunctionDecl*>, 2>
    892     DelayedEquivalentExceptionSpecChecks;
    893 
    894   typedef llvm::MapVector<const FunctionDecl *,
    895                           std::unique_ptr<LateParsedTemplate>>
    896       LateParsedTemplateMapT;
    897   LateParsedTemplateMapT LateParsedTemplateMap;
    898 
    899   /// Callback to the parser to parse templated functions when needed.
    900   typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT);
    901   typedef void LateTemplateParserCleanupCB(void *P);
    902   LateTemplateParserCB *LateTemplateParser;
    903   LateTemplateParserCleanupCB *LateTemplateParserCleanup;
    904   void *OpaqueParser;
    905 
    906   void SetLateTemplateParser(LateTemplateParserCB *LTP,
    907                              LateTemplateParserCleanupCB *LTPCleanup,
    908                              void *P) {
    909     LateTemplateParser = LTP;
    910     LateTemplateParserCleanup = LTPCleanup;
    911     OpaqueParser = P;
    912   }
    913 
    914   class DelayedDiagnostics;
    915 
    916   class DelayedDiagnosticsState {
    917     sema::DelayedDiagnosticPool *SavedPool;
    918     friend class Sema::DelayedDiagnostics;
    919   };
    920   typedef DelayedDiagnosticsState ParsingDeclState;
    921   typedef DelayedDiagnosticsState ProcessingContextState;
    922 
    923   /// A class which encapsulates the logic for delaying diagnostics
    924   /// during parsing and other processing.
    925   class DelayedDiagnostics {
    926     /// The current pool of diagnostics into which delayed
    927     /// diagnostics should go.
    928     sema::DelayedDiagnosticPool *CurPool;
    929 
    930   public:
    931     DelayedDiagnostics() : CurPool(nullptr) {}
    932 
    933     /// Adds a delayed diagnostic.
    934     void add(const sema::DelayedDiagnostic &diag); // in DelayedDiagnostic.h
    935 
    936     /// Determines whether diagnostics should be delayed.
    937     bool shouldDelayDiagnostics() { return CurPool != nullptr; }
    938 
    939     /// Returns the current delayed-diagnostics pool.
    940     sema::DelayedDiagnosticPool *getCurrentPool() const {
    941       return CurPool;
    942     }
    943 
    944     /// Enter a new scope.  Access and deprecation diagnostics will be
    945     /// collected in this pool.
    946     DelayedDiagnosticsState push(sema::DelayedDiagnosticPool &pool) {
    947       DelayedDiagnosticsState state;
    948       state.SavedPool = CurPool;
    949       CurPool = &pool;
    950       return state;
    951     }
    952 
    953     /// Leave a delayed-diagnostic state that was previously pushed.
    954     /// Do not emit any of the diagnostics.  This is performed as part
    955     /// of the bookkeeping of popping a pool "properly".
    956     void popWithoutEmitting(DelayedDiagnosticsState state) {
    957       CurPool = state.SavedPool;
    958     }
    959 
    960     /// Enter a new scope where access and deprecation diagnostics are
    961     /// not delayed.
    962     DelayedDiagnosticsState pushUndelayed() {
    963       DelayedDiagnosticsState state;
    964       state.SavedPool = CurPool;
    965       CurPool = nullptr;
    966       return state;
    967     }
    968 
    969     /// Undo a previous pushUndelayed().
    970     void popUndelayed(DelayedDiagnosticsState state) {
    971       assert(CurPool == nullptr);
    972       CurPool = state.SavedPool;
    973     }
    974   } DelayedDiagnostics;
    975 
    976   /// A RAII object to temporarily push a declaration context.
    977   class ContextRAII {
    978   private:
    979     Sema &S;
    980     DeclContext *SavedContext;
    981     ProcessingContextState SavedContextState;
    982     QualType SavedCXXThisTypeOverride;
    983     unsigned SavedFunctionScopesStart;
    984     unsigned SavedInventedParameterInfosStart;
    985 
    986   public:
    987     ContextRAII(Sema &S, DeclContext *ContextToPush, bool NewThisContext = true)
    988       : S(S), SavedContext(S.CurContext),
    989         SavedContextState(S.DelayedDiagnostics.pushUndelayed()),
    990         SavedCXXThisTypeOverride(S.CXXThisTypeOverride),
    991         SavedFunctionScopesStart(S.FunctionScopesStart),
    992         SavedInventedParameterInfosStart(S.InventedParameterInfosStart)
    993     {
    994       assert(ContextToPush && "pushing null context");
    995       S.CurContext = ContextToPush;
    996       if (NewThisContext)
    997         S.CXXThisTypeOverride = QualType();
    998       // Any saved FunctionScopes do not refer to this context.
    999       S.FunctionScopesStart = S.FunctionScopes.size();
   1000       S.InventedParameterInfosStart = S.InventedParameterInfos.size();
   1001     }
   1002 
   1003     void pop() {
   1004       if (!SavedContext) return;
   1005       S.CurContext = SavedContext;
   1006       S.DelayedDiagnostics.popUndelayed(SavedContextState);
   1007       S.CXXThisTypeOverride = SavedCXXThisTypeOverride;
   1008       S.FunctionScopesStart = SavedFunctionScopesStart;
   1009       S.InventedParameterInfosStart = SavedInventedParameterInfosStart;
   1010       SavedContext = nullptr;
   1011     }
   1012 
   1013     ~ContextRAII() {
   1014       pop();
   1015     }
   1016   };
   1017 
   1018   /// Whether the AST is currently being rebuilt to correct immediate
   1019   /// invocations. Immediate invocation candidates and references to consteval
   1020   /// functions aren't tracked when this is set.
   1021   bool RebuildingImmediateInvocation = false;
   1022 
   1023   /// Used to change context to isConstantEvaluated without pushing a heavy
   1024   /// ExpressionEvaluationContextRecord object.
   1025   bool isConstantEvaluatedOverride;
   1026 
   1027   bool isConstantEvaluated() {
   1028     return ExprEvalContexts.back().isConstantEvaluated() ||
   1029            isConstantEvaluatedOverride;
   1030   }
   1031 
   1032   /// RAII object to handle the state changes required to synthesize
   1033   /// a function body.
   1034   class SynthesizedFunctionScope {
   1035     Sema &S;
   1036     Sema::ContextRAII SavedContext;
   1037     bool PushedCodeSynthesisContext = false;
   1038 
   1039   public:
   1040     SynthesizedFunctionScope(Sema &S, DeclContext *DC)
   1041         : S(S), SavedContext(S, DC) {
   1042       S.PushFunctionScope();
   1043       S.PushExpressionEvaluationContext(
   1044           Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
   1045       if (auto *FD = dyn_cast<FunctionDecl>(DC))
   1046         FD->setWillHaveBody(true);
   1047       else
   1048         assert(isa<ObjCMethodDecl>(DC));
   1049     }
   1050 
   1051     void addContextNote(SourceLocation UseLoc) {
   1052       assert(!PushedCodeSynthesisContext);
   1053 
   1054       Sema::CodeSynthesisContext Ctx;
   1055       Ctx.Kind = Sema::CodeSynthesisContext::DefiningSynthesizedFunction;
   1056       Ctx.PointOfInstantiation = UseLoc;
   1057       Ctx.Entity = cast<Decl>(S.CurContext);
   1058       S.pushCodeSynthesisContext(Ctx);
   1059 
   1060       PushedCodeSynthesisContext = true;
   1061     }
   1062 
   1063     ~SynthesizedFunctionScope() {
   1064       if (PushedCodeSynthesisContext)
   1065         S.popCodeSynthesisContext();
   1066       if (auto *FD = dyn_cast<FunctionDecl>(S.CurContext))
   1067         FD->setWillHaveBody(false);
   1068       S.PopExpressionEvaluationContext();
   1069       S.PopFunctionScopeInfo();
   1070     }
   1071   };
   1072 
   1073   /// WeakUndeclaredIdentifiers - Identifiers contained in
   1074   /// \#pragma weak before declared. rare. may alias another
   1075   /// identifier, declared or undeclared
   1076   llvm::MapVector<IdentifierInfo *, WeakInfo> WeakUndeclaredIdentifiers;
   1077 
   1078   /// ExtnameUndeclaredIdentifiers - Identifiers contained in
   1079   /// \#pragma redefine_extname before declared.  Used in Solaris system headers
   1080   /// to define functions that occur in multiple standards to call the version
   1081   /// in the currently selected standard.
   1082   llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*> ExtnameUndeclaredIdentifiers;
   1083 
   1084 
   1085   /// Load weak undeclared identifiers from the external source.
   1086   void LoadExternalWeakUndeclaredIdentifiers();
   1087 
   1088   /// WeakTopLevelDecl - Translation-unit scoped declarations generated by
   1089   /// \#pragma weak during processing of other Decls.
   1090   /// I couldn't figure out a clean way to generate these in-line, so
   1091   /// we store them here and handle separately -- which is a hack.
   1092   /// It would be best to refactor this.
   1093   SmallVector<Decl*,2> WeakTopLevelDecl;
   1094 
   1095   IdentifierResolver IdResolver;
   1096 
   1097   /// Translation Unit Scope - useful to Objective-C actions that need
   1098   /// to lookup file scope declarations in the "ordinary" C decl namespace.
   1099   /// For example, user-defined classes, built-in "id" type, etc.
   1100   Scope *TUScope;
   1101 
   1102   /// The C++ "std" namespace, where the standard library resides.
   1103   LazyDeclPtr StdNamespace;
   1104 
   1105   /// The C++ "std::bad_alloc" class, which is defined by the C++
   1106   /// standard library.
   1107   LazyDeclPtr StdBadAlloc;
   1108 
   1109   /// The C++ "std::align_val_t" enum class, which is defined by the C++
   1110   /// standard library.
   1111   LazyDeclPtr StdAlignValT;
   1112 
   1113   /// The C++ "std::experimental" namespace, where the experimental parts
   1114   /// of the standard library resides.
   1115   NamespaceDecl *StdExperimentalNamespaceCache;
   1116 
   1117   /// The C++ "std::initializer_list" template, which is defined in
   1118   /// \<initializer_list>.
   1119   ClassTemplateDecl *StdInitializerList;
   1120 
   1121   /// The C++ "std::coroutine_traits" template, which is defined in
   1122   /// \<coroutine_traits>
   1123   ClassTemplateDecl *StdCoroutineTraitsCache;
   1124 
   1125   /// The C++ "type_info" declaration, which is defined in \<typeinfo>.
   1126   RecordDecl *CXXTypeInfoDecl;
   1127 
   1128   /// The MSVC "_GUID" struct, which is defined in MSVC header files.
   1129   RecordDecl *MSVCGuidDecl;
   1130 
   1131   /// Caches identifiers/selectors for NSFoundation APIs.
   1132   std::unique_ptr<NSAPI> NSAPIObj;
   1133 
   1134   /// The declaration of the Objective-C NSNumber class.
   1135   ObjCInterfaceDecl *NSNumberDecl;
   1136 
   1137   /// The declaration of the Objective-C NSValue class.
   1138   ObjCInterfaceDecl *NSValueDecl;
   1139 
   1140   /// Pointer to NSNumber type (NSNumber *).
   1141   QualType NSNumberPointer;
   1142 
   1143   /// Pointer to NSValue type (NSValue *).
   1144   QualType NSValuePointer;
   1145 
   1146   /// The Objective-C NSNumber methods used to create NSNumber literals.
   1147   ObjCMethodDecl *NSNumberLiteralMethods[NSAPI::NumNSNumberLiteralMethods];
   1148 
   1149   /// The declaration of the Objective-C NSString class.
   1150   ObjCInterfaceDecl *NSStringDecl;
   1151 
   1152   /// Pointer to NSString type (NSString *).
   1153   QualType NSStringPointer;
   1154 
   1155   /// The declaration of the stringWithUTF8String: method.
   1156   ObjCMethodDecl *StringWithUTF8StringMethod;
   1157 
   1158   /// The declaration of the valueWithBytes:objCType: method.
   1159   ObjCMethodDecl *ValueWithBytesObjCTypeMethod;
   1160 
   1161   /// The declaration of the Objective-C NSArray class.
   1162   ObjCInterfaceDecl *NSArrayDecl;
   1163 
   1164   /// The declaration of the arrayWithObjects:count: method.
   1165   ObjCMethodDecl *ArrayWithObjectsMethod;
   1166 
   1167   /// The declaration of the Objective-C NSDictionary class.
   1168   ObjCInterfaceDecl *NSDictionaryDecl;
   1169 
   1170   /// The declaration of the dictionaryWithObjects:forKeys:count: method.
   1171   ObjCMethodDecl *DictionaryWithObjectsMethod;
   1172 
   1173   /// id<NSCopying> type.
   1174   QualType QIDNSCopying;
   1175 
   1176   /// will hold 'respondsToSelector:'
   1177   Selector RespondsToSelectorSel;
   1178 
   1179   /// A flag to remember whether the implicit forms of operator new and delete
   1180   /// have been declared.
   1181   bool GlobalNewDeleteDeclared;
   1182 
   1183   /// Describes how the expressions currently being parsed are
   1184   /// evaluated at run-time, if at all.
   1185   enum class ExpressionEvaluationContext {
   1186     /// The current expression and its subexpressions occur within an
   1187     /// unevaluated operand (C++11 [expr]p7), such as the subexpression of
   1188     /// \c sizeof, where the type of the expression may be significant but
   1189     /// no code will be generated to evaluate the value of the expression at
   1190     /// run time.
   1191     Unevaluated,
   1192 
   1193     /// The current expression occurs within a braced-init-list within
   1194     /// an unevaluated operand. This is mostly like a regular unevaluated
   1195     /// context, except that we still instantiate constexpr functions that are
   1196     /// referenced here so that we can perform narrowing checks correctly.
   1197     UnevaluatedList,
   1198 
   1199     /// The current expression occurs within a discarded statement.
   1200     /// This behaves largely similarly to an unevaluated operand in preventing
   1201     /// definitions from being required, but not in other ways.
   1202     DiscardedStatement,
   1203 
   1204     /// The current expression occurs within an unevaluated
   1205     /// operand that unconditionally permits abstract references to
   1206     /// fields, such as a SIZE operator in MS-style inline assembly.
   1207     UnevaluatedAbstract,
   1208 
   1209     /// The current context is "potentially evaluated" in C++11 terms,
   1210     /// but the expression is evaluated at compile-time (like the values of
   1211     /// cases in a switch statement).
   1212     ConstantEvaluated,
   1213 
   1214     /// The current expression is potentially evaluated at run time,
   1215     /// which means that code may be generated to evaluate the value of the
   1216     /// expression at run time.
   1217     PotentiallyEvaluated,
   1218 
   1219     /// The current expression is potentially evaluated, but any
   1220     /// declarations referenced inside that expression are only used if
   1221     /// in fact the current expression is used.
   1222     ///
   1223     /// This value is used when parsing default function arguments, for which
   1224     /// we would like to provide diagnostics (e.g., passing non-POD arguments
   1225     /// through varargs) but do not want to mark declarations as "referenced"
   1226     /// until the default argument is used.
   1227     PotentiallyEvaluatedIfUsed
   1228   };
   1229 
   1230   using ImmediateInvocationCandidate = llvm::PointerIntPair<ConstantExpr *, 1>;
   1231 
   1232   /// Data structure used to record current or nested
   1233   /// expression evaluation contexts.
   1234   struct ExpressionEvaluationContextRecord {
   1235     /// The expression evaluation context.
   1236     ExpressionEvaluationContext Context;
   1237 
   1238     /// Whether the enclosing context needed a cleanup.
   1239     CleanupInfo ParentCleanup;
   1240 
   1241     /// The number of active cleanup objects when we entered
   1242     /// this expression evaluation context.
   1243     unsigned NumCleanupObjects;
   1244 
   1245     /// The number of typos encountered during this expression evaluation
   1246     /// context (i.e. the number of TypoExprs created).
   1247     unsigned NumTypos;
   1248 
   1249     MaybeODRUseExprSet SavedMaybeODRUseExprs;
   1250 
   1251     /// The lambdas that are present within this context, if it
   1252     /// is indeed an unevaluated context.
   1253     SmallVector<LambdaExpr *, 2> Lambdas;
   1254 
   1255     /// The declaration that provides context for lambda expressions
   1256     /// and block literals if the normal declaration context does not
   1257     /// suffice, e.g., in a default function argument.
   1258     Decl *ManglingContextDecl;
   1259 
   1260     /// If we are processing a decltype type, a set of call expressions
   1261     /// for which we have deferred checking the completeness of the return type.
   1262     SmallVector<CallExpr *, 8> DelayedDecltypeCalls;
   1263 
   1264     /// If we are processing a decltype type, a set of temporary binding
   1265     /// expressions for which we have deferred checking the destructor.
   1266     SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds;
   1267 
   1268     llvm::SmallPtrSet<const Expr *, 8> PossibleDerefs;
   1269 
   1270     /// Expressions appearing as the LHS of a volatile assignment in this
   1271     /// context. We produce a warning for these when popping the context if
   1272     /// they are not discarded-value expressions nor unevaluated operands.
   1273     SmallVector<Expr*, 2> VolatileAssignmentLHSs;
   1274 
   1275     /// Set of candidates for starting an immediate invocation.
   1276     llvm::SmallVector<ImmediateInvocationCandidate, 4> ImmediateInvocationCandidates;
   1277 
   1278     /// Set of DeclRefExprs referencing a consteval function when used in a
   1279     /// context not already known to be immediately invoked.
   1280     llvm::SmallPtrSet<DeclRefExpr *, 4> ReferenceToConsteval;
   1281 
   1282     /// \brief Describes whether we are in an expression constext which we have
   1283     /// to handle differently.
   1284     enum ExpressionKind {
   1285       EK_Decltype, EK_TemplateArgument, EK_Other
   1286     } ExprContext;
   1287 
   1288     ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context,
   1289                                       unsigned NumCleanupObjects,
   1290                                       CleanupInfo ParentCleanup,
   1291                                       Decl *ManglingContextDecl,
   1292                                       ExpressionKind ExprContext)
   1293         : Context(Context), ParentCleanup(ParentCleanup),
   1294           NumCleanupObjects(NumCleanupObjects), NumTypos(0),
   1295           ManglingContextDecl(ManglingContextDecl), ExprContext(ExprContext) {}
   1296 
   1297     bool isUnevaluated() const {
   1298       return Context == ExpressionEvaluationContext::Unevaluated ||
   1299              Context == ExpressionEvaluationContext::UnevaluatedAbstract ||
   1300              Context == ExpressionEvaluationContext::UnevaluatedList;
   1301     }
   1302     bool isConstantEvaluated() const {
   1303       return Context == ExpressionEvaluationContext::ConstantEvaluated;
   1304     }
   1305   };
   1306 
   1307   /// A stack of expression evaluation contexts.
   1308   SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts;
   1309 
   1310   /// Emit a warning for all pending noderef expressions that we recorded.
   1311   void WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec);
   1312 
   1313   /// Compute the mangling number context for a lambda expression or
   1314   /// block literal. Also return the extra mangling decl if any.
   1315   ///
   1316   /// \param DC - The DeclContext containing the lambda expression or
   1317   /// block literal.
   1318   std::tuple<MangleNumberingContext *, Decl *>
   1319   getCurrentMangleNumberContext(const DeclContext *DC);
   1320 
   1321 
   1322   /// SpecialMemberOverloadResult - The overloading result for a special member
   1323   /// function.
   1324   ///
   1325   /// This is basically a wrapper around PointerIntPair. The lowest bits of the
   1326   /// integer are used to determine whether overload resolution succeeded.
   1327   class SpecialMemberOverloadResult {
   1328   public:
   1329     enum Kind {
   1330       NoMemberOrDeleted,
   1331       Ambiguous,
   1332       Success
   1333     };
   1334 
   1335   private:
   1336     llvm::PointerIntPair<CXXMethodDecl*, 2> Pair;
   1337 
   1338   public:
   1339     SpecialMemberOverloadResult() : Pair() {}
   1340     SpecialMemberOverloadResult(CXXMethodDecl *MD)
   1341         : Pair(MD, MD->isDeleted() ? NoMemberOrDeleted : Success) {}
   1342 
   1343     CXXMethodDecl *getMethod() const { return Pair.getPointer(); }
   1344     void setMethod(CXXMethodDecl *MD) { Pair.setPointer(MD); }
   1345 
   1346     Kind getKind() const { return static_cast<Kind>(Pair.getInt()); }
   1347     void setKind(Kind K) { Pair.setInt(K); }
   1348   };
   1349 
   1350   class SpecialMemberOverloadResultEntry
   1351       : public llvm::FastFoldingSetNode,
   1352         public SpecialMemberOverloadResult {
   1353   public:
   1354     SpecialMemberOverloadResultEntry(const llvm::FoldingSetNodeID &ID)
   1355       : FastFoldingSetNode(ID)
   1356     {}
   1357   };
   1358 
   1359   /// A cache of special member function overload resolution results
   1360   /// for C++ records.
   1361   llvm::FoldingSet<SpecialMemberOverloadResultEntry> SpecialMemberCache;
   1362 
   1363   /// A cache of the flags available in enumerations with the flag_bits
   1364   /// attribute.
   1365   mutable llvm::DenseMap<const EnumDecl*, llvm::APInt> FlagBitsCache;
   1366 
   1367   /// The kind of translation unit we are processing.
   1368   ///
   1369   /// When we're processing a complete translation unit, Sema will perform
   1370   /// end-of-translation-unit semantic tasks (such as creating
   1371   /// initializers for tentative definitions in C) once parsing has
   1372   /// completed. Modules and precompiled headers perform different kinds of
   1373   /// checks.
   1374   TranslationUnitKind TUKind;
   1375 
   1376   llvm::BumpPtrAllocator BumpAlloc;
   1377 
   1378   /// The number of SFINAE diagnostics that have been trapped.
   1379   unsigned NumSFINAEErrors;
   1380 
   1381   typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>>
   1382     UnparsedDefaultArgInstantiationsMap;
   1383 
   1384   /// A mapping from parameters with unparsed default arguments to the
   1385   /// set of instantiations of each parameter.
   1386   ///
   1387   /// This mapping is a temporary data structure used when parsing
   1388   /// nested class templates or nested classes of class templates,
   1389   /// where we might end up instantiating an inner class before the
   1390   /// default arguments of its methods have been parsed.
   1391   UnparsedDefaultArgInstantiationsMap UnparsedDefaultArgInstantiations;
   1392 
   1393   // Contains the locations of the beginning of unparsed default
   1394   // argument locations.
   1395   llvm::DenseMap<ParmVarDecl *, SourceLocation> UnparsedDefaultArgLocs;
   1396 
   1397   /// UndefinedInternals - all the used, undefined objects which require a
   1398   /// definition in this translation unit.
   1399   llvm::MapVector<NamedDecl *, SourceLocation> UndefinedButUsed;
   1400 
   1401   /// Determine if VD, which must be a variable or function, is an external
   1402   /// symbol that nonetheless can't be referenced from outside this translation
   1403   /// unit because its type has no linkage and it's not extern "C".
   1404   bool isExternalWithNoLinkageType(ValueDecl *VD);
   1405 
   1406   /// Obtain a sorted list of functions that are undefined but ODR-used.
   1407   void getUndefinedButUsed(
   1408       SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined);
   1409 
   1410   /// Retrieves list of suspicious delete-expressions that will be checked at
   1411   /// the end of translation unit.
   1412   const llvm::MapVector<FieldDecl *, DeleteLocs> &
   1413   getMismatchingDeleteExpressions() const;
   1414 
   1415   typedef std::pair<ObjCMethodList, ObjCMethodList> GlobalMethods;
   1416   typedef llvm::DenseMap<Selector, GlobalMethods> GlobalMethodPool;
   1417 
   1418   /// Method Pool - allows efficient lookup when typechecking messages to "id".
   1419   /// We need to maintain a list, since selectors can have differing signatures
   1420   /// across classes. In Cocoa, this happens to be extremely uncommon (only 1%
   1421   /// of selectors are "overloaded").
   1422   /// At the head of the list it is recorded whether there were 0, 1, or >= 2
   1423   /// methods inside categories with a particular selector.
   1424   GlobalMethodPool MethodPool;
   1425 
   1426   /// Method selectors used in a \@selector expression. Used for implementation
   1427   /// of -Wselector.
   1428   llvm::MapVector<Selector, SourceLocation> ReferencedSelectors;
   1429 
   1430   /// List of SourceLocations where 'self' is implicitly retained inside a
   1431   /// block.
   1432   llvm::SmallVector<std::pair<SourceLocation, const BlockDecl *>, 1>
   1433       ImplicitlyRetainedSelfLocs;
   1434 
   1435   /// Kinds of C++ special members.
   1436   enum CXXSpecialMember {
   1437     CXXDefaultConstructor,
   1438     CXXCopyConstructor,
   1439     CXXMoveConstructor,
   1440     CXXCopyAssignment,
   1441     CXXMoveAssignment,
   1442     CXXDestructor,
   1443     CXXInvalid
   1444   };
   1445 
   1446   typedef llvm::PointerIntPair<CXXRecordDecl *, 3, CXXSpecialMember>
   1447       SpecialMemberDecl;
   1448 
   1449   /// The C++ special members which we are currently in the process of
   1450   /// declaring. If this process recursively triggers the declaration of the
   1451   /// same special member, we should act as if it is not yet declared.
   1452   llvm::SmallPtrSet<SpecialMemberDecl, 4> SpecialMembersBeingDeclared;
   1453 
   1454   /// Kinds of defaulted comparison operator functions.
   1455   enum class DefaultedComparisonKind : unsigned char {
   1456     /// This is not a defaultable comparison operator.
   1457     None,
   1458     /// This is an operator== that should be implemented as a series of
   1459     /// subobject comparisons.
   1460     Equal,
   1461     /// This is an operator<=> that should be implemented as a series of
   1462     /// subobject comparisons.
   1463     ThreeWay,
   1464     /// This is an operator!= that should be implemented as a rewrite in terms
   1465     /// of a == comparison.
   1466     NotEqual,
   1467     /// This is an <, <=, >, or >= that should be implemented as a rewrite in
   1468     /// terms of a <=> comparison.
   1469     Relational,
   1470   };
   1471 
   1472   /// The function definitions which were renamed as part of typo-correction
   1473   /// to match their respective declarations. We want to keep track of them
   1474   /// to ensure that we don't emit a "redefinition" error if we encounter a
   1475   /// correctly named definition after the renamed definition.
   1476   llvm::SmallPtrSet<const NamedDecl *, 4> TypoCorrectedFunctionDefinitions;
   1477 
   1478   /// Stack of types that correspond to the parameter entities that are
   1479   /// currently being copy-initialized. Can be empty.
   1480   llvm::SmallVector<QualType, 4> CurrentParameterCopyTypes;
   1481 
   1482   void ReadMethodPool(Selector Sel);
   1483   void updateOutOfDateSelector(Selector Sel);
   1484 
   1485   /// Private Helper predicate to check for 'self'.
   1486   bool isSelfExpr(Expr *RExpr);
   1487   bool isSelfExpr(Expr *RExpr, const ObjCMethodDecl *Method);
   1488 
   1489   /// Cause the active diagnostic on the DiagosticsEngine to be
   1490   /// emitted. This is closely coupled to the SemaDiagnosticBuilder class and
   1491   /// should not be used elsewhere.
   1492   void EmitCurrentDiagnostic(unsigned DiagID);
   1493 
   1494   /// Records and restores the CurFPFeatures state on entry/exit of compound
   1495   /// statements.
   1496   class FPFeaturesStateRAII {
   1497   public:
   1498     FPFeaturesStateRAII(Sema &S) : S(S), OldFPFeaturesState(S.CurFPFeatures) {
   1499       OldOverrides = S.FpPragmaStack.CurrentValue;
   1500     }
   1501     ~FPFeaturesStateRAII() {
   1502       S.CurFPFeatures = OldFPFeaturesState;
   1503       S.FpPragmaStack.CurrentValue = OldOverrides;
   1504     }
   1505     FPOptionsOverride getOverrides() { return OldOverrides; }
   1506 
   1507   private:
   1508     Sema& S;
   1509     FPOptions OldFPFeaturesState;
   1510     FPOptionsOverride OldOverrides;
   1511   };
   1512 
   1513   void addImplicitTypedef(StringRef Name, QualType T);
   1514 
   1515   bool WarnedStackExhausted = false;
   1516 
   1517 public:
   1518   Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
   1519        TranslationUnitKind TUKind = TU_Complete,
   1520        CodeCompleteConsumer *CompletionConsumer = nullptr);
   1521   ~Sema();
   1522 
   1523   /// Perform initialization that occurs after the parser has been
   1524   /// initialized but before it parses anything.
   1525   void Initialize();
   1526 
   1527   /// This virtual key function only exists to limit the emission of debug info
   1528   /// describing the Sema class. GCC and Clang only emit debug info for a class
   1529   /// with a vtable when the vtable is emitted. Sema is final and not
   1530   /// polymorphic, but the debug info size savings are so significant that it is
   1531   /// worth adding a vtable just to take advantage of this optimization.
   1532   virtual void anchor();
   1533 
   1534   const LangOptions &getLangOpts() const { return LangOpts; }
   1535   OpenCLOptions &getOpenCLOptions() { return OpenCLFeatures; }
   1536   FPOptions     &getCurFPFeatures() { return CurFPFeatures; }
   1537 
   1538   DiagnosticsEngine &getDiagnostics() const { return Diags; }
   1539   SourceManager &getSourceManager() const { return SourceMgr; }
   1540   Preprocessor &getPreprocessor() const { return PP; }
   1541   ASTContext &getASTContext() const { return Context; }
   1542   ASTConsumer &getASTConsumer() const { return Consumer; }
   1543   ASTMutationListener *getASTMutationListener() const;
   1544   ExternalSemaSource* getExternalSource() const { return ExternalSource; }
   1545 
   1546   ///Registers an external source. If an external source already exists,
   1547   /// creates a multiplex external source and appends to it.
   1548   ///
   1549   ///\param[in] E - A non-null external sema source.
   1550   ///
   1551   void addExternalSource(ExternalSemaSource *E);
   1552 
   1553   void PrintStats() const;
   1554 
   1555   /// Warn that the stack is nearly exhausted.
   1556   void warnStackExhausted(SourceLocation Loc);
   1557 
   1558   /// Run some code with "sufficient" stack space. (Currently, at least 256K is
   1559   /// guaranteed). Produces a warning if we're low on stack space and allocates
   1560   /// more in that case. Use this in code that may recurse deeply (for example,
   1561   /// in template instantiation) to avoid stack overflow.
   1562   void runWithSufficientStackSpace(SourceLocation Loc,
   1563                                    llvm::function_ref<void()> Fn);
   1564 
   1565   /// Helper class that creates diagnostics with optional
   1566   /// template instantiation stacks.
   1567   ///
   1568   /// This class provides a wrapper around the basic DiagnosticBuilder
   1569   /// class that emits diagnostics. ImmediateDiagBuilder is
   1570   /// responsible for emitting the diagnostic (as DiagnosticBuilder
   1571   /// does) and, if the diagnostic comes from inside a template
   1572   /// instantiation, printing the template instantiation stack as
   1573   /// well.
   1574   class ImmediateDiagBuilder : public DiagnosticBuilder {
   1575     Sema &SemaRef;
   1576     unsigned DiagID;
   1577 
   1578   public:
   1579     ImmediateDiagBuilder(DiagnosticBuilder &DB, Sema &SemaRef, unsigned DiagID)
   1580         : DiagnosticBuilder(DB), SemaRef(SemaRef), DiagID(DiagID) {}
   1581     ImmediateDiagBuilder(DiagnosticBuilder &&DB, Sema &SemaRef, unsigned DiagID)
   1582         : DiagnosticBuilder(DB), SemaRef(SemaRef), DiagID(DiagID) {}
   1583 
   1584     // This is a cunning lie. DiagnosticBuilder actually performs move
   1585     // construction in its copy constructor (but due to varied uses, it's not
   1586     // possible to conveniently express this as actual move construction). So
   1587     // the default copy ctor here is fine, because the base class disables the
   1588     // source anyway, so the user-defined ~ImmediateDiagBuilder is a safe no-op
   1589     // in that case anwyay.
   1590     ImmediateDiagBuilder(const ImmediateDiagBuilder &) = default;
   1591 
   1592     ~ImmediateDiagBuilder() {
   1593       // If we aren't active, there is nothing to do.
   1594       if (!isActive()) return;
   1595 
   1596       // Otherwise, we need to emit the diagnostic. First clear the diagnostic
   1597       // builder itself so it won't emit the diagnostic in its own destructor.
   1598       //
   1599       // This seems wasteful, in that as written the DiagnosticBuilder dtor will
   1600       // do its own needless checks to see if the diagnostic needs to be
   1601       // emitted. However, because we take care to ensure that the builder
   1602       // objects never escape, a sufficiently smart compiler will be able to
   1603       // eliminate that code.
   1604       Clear();
   1605 
   1606       // Dispatch to Sema to emit the diagnostic.
   1607       SemaRef.EmitCurrentDiagnostic(DiagID);
   1608     }
   1609 
   1610     /// Teach operator<< to produce an object of the correct type.
   1611     template <typename T>
   1612     friend const ImmediateDiagBuilder &
   1613     operator<<(const ImmediateDiagBuilder &Diag, const T &Value) {
   1614       const DiagnosticBuilder &BaseDiag = Diag;
   1615       BaseDiag << Value;
   1616       return Diag;
   1617     }
   1618 
   1619     // It is necessary to limit this to rvalue reference to avoid calling this
   1620     // function with a bitfield lvalue argument since non-const reference to
   1621     // bitfield is not allowed.
   1622     template <typename T, typename = typename std::enable_if<
   1623                               !std::is_lvalue_reference<T>::value>::type>
   1624     const ImmediateDiagBuilder &operator<<(T &&V) const {
   1625       const DiagnosticBuilder &BaseDiag = *this;
   1626       BaseDiag << std::move(V);
   1627       return *this;
   1628     }
   1629   };
   1630 
   1631   /// A generic diagnostic builder for errors which may or may not be deferred.
   1632   ///
   1633   /// In CUDA, there exist constructs (e.g. variable-length arrays, try/catch)
   1634   /// which are not allowed to appear inside __device__ functions and are
   1635   /// allowed to appear in __host__ __device__ functions only if the host+device
   1636   /// function is never codegen'ed.
   1637   ///
   1638   /// To handle this, we use the notion of "deferred diagnostics", where we
   1639   /// attach a diagnostic to a FunctionDecl that's emitted iff it's codegen'ed.
   1640   ///
   1641   /// This class lets you emit either a regular diagnostic, a deferred
   1642   /// diagnostic, or no diagnostic at all, according to an argument you pass to
   1643   /// its constructor, thus simplifying the process of creating these "maybe
   1644   /// deferred" diagnostics.
   1645   class SemaDiagnosticBuilder {
   1646   public:
   1647     enum Kind {
   1648       /// Emit no diagnostics.
   1649       K_Nop,
   1650       /// Emit the diagnostic immediately (i.e., behave like Sema::Diag()).
   1651       K_Immediate,
   1652       /// Emit the diagnostic immediately, and, if it's a warning or error, also
   1653       /// emit a call stack showing how this function can be reached by an a
   1654       /// priori known-emitted function.
   1655       K_ImmediateWithCallStack,
   1656       /// Create a deferred diagnostic, which is emitted only if the function
   1657       /// it's attached to is codegen'ed.  Also emit a call stack as with
   1658       /// K_ImmediateWithCallStack.
   1659       K_Deferred
   1660     };
   1661 
   1662     SemaDiagnosticBuilder(Kind K, SourceLocation Loc, unsigned DiagID,
   1663                           FunctionDecl *Fn, Sema &S);
   1664     SemaDiagnosticBuilder(SemaDiagnosticBuilder &&D);
   1665     SemaDiagnosticBuilder(const SemaDiagnosticBuilder &) = default;
   1666     ~SemaDiagnosticBuilder();
   1667 
   1668     bool isImmediate() const { return ImmediateDiag.hasValue(); }
   1669 
   1670     /// Convertible to bool: True if we immediately emitted an error, false if
   1671     /// we didn't emit an error or we created a deferred error.
   1672     ///
   1673     /// Example usage:
   1674     ///
   1675     ///   if (SemaDiagnosticBuilder(...) << foo << bar)
   1676     ///     return ExprError();
   1677     ///
   1678     /// But see CUDADiagIfDeviceCode() and CUDADiagIfHostCode() -- you probably
   1679     /// want to use these instead of creating a SemaDiagnosticBuilder yourself.
   1680     operator bool() const { return isImmediate(); }
   1681 
   1682     template <typename T>
   1683     friend const SemaDiagnosticBuilder &
   1684     operator<<(const SemaDiagnosticBuilder &Diag, const T &Value) {
   1685       if (Diag.ImmediateDiag.hasValue())
   1686         *Diag.ImmediateDiag << Value;
   1687       else if (Diag.PartialDiagId.hasValue())
   1688         Diag.S.DeviceDeferredDiags[Diag.Fn][*Diag.PartialDiagId].second
   1689             << Value;
   1690       return Diag;
   1691     }
   1692 
   1693     // It is necessary to limit this to rvalue reference to avoid calling this
   1694     // function with a bitfield lvalue argument since non-const reference to
   1695     // bitfield is not allowed.
   1696     template <typename T, typename = typename std::enable_if<
   1697                               !std::is_lvalue_reference<T>::value>::type>
   1698     const SemaDiagnosticBuilder &operator<<(T &&V) const {
   1699       if (ImmediateDiag.hasValue())
   1700         *ImmediateDiag << std::move(V);
   1701       else if (PartialDiagId.hasValue())
   1702         S.DeviceDeferredDiags[Fn][*PartialDiagId].second << std::move(V);
   1703       return *this;
   1704     }
   1705 
   1706     friend const SemaDiagnosticBuilder &
   1707     operator<<(const SemaDiagnosticBuilder &Diag, const PartialDiagnostic &PD) {
   1708       if (Diag.ImmediateDiag.hasValue())
   1709         PD.Emit(*Diag.ImmediateDiag);
   1710       else if (Diag.PartialDiagId.hasValue())
   1711         Diag.S.DeviceDeferredDiags[Diag.Fn][*Diag.PartialDiagId].second = PD;
   1712       return Diag;
   1713     }
   1714 
   1715     void AddFixItHint(const FixItHint &Hint) const {
   1716       if (ImmediateDiag.hasValue())
   1717         ImmediateDiag->AddFixItHint(Hint);
   1718       else if (PartialDiagId.hasValue())
   1719         S.DeviceDeferredDiags[Fn][*PartialDiagId].second.AddFixItHint(Hint);
   1720     }
   1721 
   1722     friend ExprResult ExprError(const SemaDiagnosticBuilder &) {
   1723       return ExprError();
   1724     }
   1725     friend StmtResult StmtError(const SemaDiagnosticBuilder &) {
   1726       return StmtError();
   1727     }
   1728     operator ExprResult() const { return ExprError(); }
   1729     operator StmtResult() const { return StmtError(); }
   1730     operator TypeResult() const { return TypeError(); }
   1731     operator DeclResult() const { return DeclResult(true); }
   1732     operator MemInitResult() const { return MemInitResult(true); }
   1733 
   1734   private:
   1735     Sema &S;
   1736     SourceLocation Loc;
   1737     unsigned DiagID;
   1738     FunctionDecl *Fn;
   1739     bool ShowCallStack;
   1740 
   1741     // Invariant: At most one of these Optionals has a value.
   1742     // FIXME: Switch these to a Variant once that exists.
   1743     llvm::Optional<ImmediateDiagBuilder> ImmediateDiag;
   1744     llvm::Optional<unsigned> PartialDiagId;
   1745   };
   1746 
   1747   /// Is the last error level diagnostic immediate. This is used to determined
   1748   /// whether the next info diagnostic should be immediate.
   1749   bool IsLastErrorImmediate = true;
   1750 
   1751   /// Emit a diagnostic.
   1752   SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID,
   1753                              bool DeferHint = false);
   1754 
   1755   /// Emit a partial diagnostic.
   1756   SemaDiagnosticBuilder Diag(SourceLocation Loc, const PartialDiagnostic &PD,
   1757                              bool DeferHint = false);
   1758 
   1759   /// Build a partial diagnostic.
   1760   PartialDiagnostic PDiag(unsigned DiagID = 0); // in SemaInternal.h
   1761 
   1762   /// Whether uncompilable error has occurred. This includes error happens
   1763   /// in deferred diagnostics.
   1764   bool hasUncompilableErrorOccurred() const;
   1765 
   1766   bool findMacroSpelling(SourceLocation &loc, StringRef name);
   1767 
   1768   /// Get a string to suggest for zero-initialization of a type.
   1769   std::string
   1770   getFixItZeroInitializerForType(QualType T, SourceLocation Loc) const;
   1771   std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const;
   1772 
   1773   /// Calls \c Lexer::getLocForEndOfToken()
   1774   SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0);
   1775 
   1776   /// Retrieve the module loader associated with the preprocessor.
   1777   ModuleLoader &getModuleLoader() const;
   1778 
   1779   /// Invent a new identifier for parameters of abbreviated templates.
   1780   IdentifierInfo *
   1781   InventAbbreviatedTemplateParameterTypeName(IdentifierInfo *ParamName,
   1782                                              unsigned Index);
   1783 
   1784   void emitAndClearUnusedLocalTypedefWarnings();
   1785 
   1786   private:
   1787     /// Function or variable declarations to be checked for whether the deferred
   1788     /// diagnostics should be emitted.
   1789     llvm::SmallSetVector<Decl *, 4> DeclsToCheckForDeferredDiags;
   1790 
   1791   public:
   1792   // Emit all deferred diagnostics.
   1793   void emitDeferredDiags();
   1794 
   1795   enum TUFragmentKind {
   1796     /// The global module fragment, between 'module;' and a module-declaration.
   1797     Global,
   1798     /// A normal translation unit fragment. For a non-module unit, this is the
   1799     /// entire translation unit. Otherwise, it runs from the module-declaration
   1800     /// to the private-module-fragment (if any) or the end of the TU (if not).
   1801     Normal,
   1802     /// The private module fragment, between 'module :private;' and the end of
   1803     /// the translation unit.
   1804     Private
   1805   };
   1806 
   1807   void ActOnStartOfTranslationUnit();
   1808   void ActOnEndOfTranslationUnit();
   1809   void ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind);
   1810 
   1811   void CheckDelegatingCtorCycles();
   1812 
   1813   Scope *getScopeForContext(DeclContext *Ctx);
   1814 
   1815   void PushFunctionScope();
   1816   void PushBlockScope(Scope *BlockScope, BlockDecl *Block);
   1817   sema::LambdaScopeInfo *PushLambdaScope();
   1818 
   1819   /// This is used to inform Sema what the current TemplateParameterDepth
   1820   /// is during Parsing.  Currently it is used to pass on the depth
   1821   /// when parsing generic lambda 'auto' parameters.
   1822   void RecordParsingTemplateParameterDepth(unsigned Depth);
   1823 
   1824   void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD,
   1825                                RecordDecl *RD, CapturedRegionKind K,
   1826                                unsigned OpenMPCaptureLevel = 0);
   1827 
   1828   /// Custom deleter to allow FunctionScopeInfos to be kept alive for a short
   1829   /// time after they've been popped.
   1830   class PoppedFunctionScopeDeleter {
   1831     Sema *Self;
   1832 
   1833   public:
   1834     explicit PoppedFunctionScopeDeleter(Sema *Self) : Self(Self) {}
   1835     void operator()(sema::FunctionScopeInfo *Scope) const;
   1836   };
   1837 
   1838   using PoppedFunctionScopePtr =
   1839       std::unique_ptr<sema::FunctionScopeInfo, PoppedFunctionScopeDeleter>;
   1840 
   1841   PoppedFunctionScopePtr
   1842   PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr,
   1843                        const Decl *D = nullptr,
   1844                        QualType BlockType = QualType());
   1845 
   1846   sema::FunctionScopeInfo *getCurFunction() const {
   1847     return FunctionScopes.empty() ? nullptr : FunctionScopes.back();
   1848   }
   1849 
   1850   sema::FunctionScopeInfo *getEnclosingFunction() const;
   1851 
   1852   void setFunctionHasBranchIntoScope();
   1853   void setFunctionHasBranchProtectedScope();
   1854   void setFunctionHasIndirectGoto();
   1855   void setFunctionHasMustTail();
   1856 
   1857   void PushCompoundScope(bool IsStmtExpr);
   1858   void PopCompoundScope();
   1859 
   1860   sema::CompoundScopeInfo &getCurCompoundScope() const;
   1861 
   1862   bool hasAnyUnrecoverableErrorsInThisFunction() const;
   1863 
   1864   /// Retrieve the current block, if any.
   1865   sema::BlockScopeInfo *getCurBlock();
   1866 
   1867   /// Get the innermost lambda enclosing the current location, if any. This
   1868   /// looks through intervening non-lambda scopes such as local functions and
   1869   /// blocks.
   1870   sema::LambdaScopeInfo *getEnclosingLambda() const;
   1871 
   1872   /// Retrieve the current lambda scope info, if any.
   1873   /// \param IgnoreNonLambdaCapturingScope true if should find the top-most
   1874   /// lambda scope info ignoring all inner capturing scopes that are not
   1875   /// lambda scopes.
   1876   sema::LambdaScopeInfo *
   1877   getCurLambda(bool IgnoreNonLambdaCapturingScope = false);
   1878 
   1879   /// Retrieve the current generic lambda info, if any.
   1880   sema::LambdaScopeInfo *getCurGenericLambda();
   1881 
   1882   /// Retrieve the current captured region, if any.
   1883   sema::CapturedRegionScopeInfo *getCurCapturedRegion();
   1884 
   1885   /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls
   1886   SmallVectorImpl<Decl *> &WeakTopLevelDecls() { return WeakTopLevelDecl; }
   1887 
   1888   /// Called before parsing a function declarator belonging to a function
   1889   /// declaration.
   1890   void ActOnStartFunctionDeclarationDeclarator(Declarator &D,
   1891                                                unsigned TemplateParameterDepth);
   1892 
   1893   /// Called after parsing a function declarator belonging to a function
   1894   /// declaration.
   1895   void ActOnFinishFunctionDeclarationDeclarator(Declarator &D);
   1896 
   1897   void ActOnComment(SourceRange Comment);
   1898 
   1899   //===--------------------------------------------------------------------===//
   1900   // Type Analysis / Processing: SemaType.cpp.
   1901   //
   1902 
   1903   QualType BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs,
   1904                               const DeclSpec *DS = nullptr);
   1905   QualType BuildQualifiedType(QualType T, SourceLocation Loc, unsigned CVRA,
   1906                               const DeclSpec *DS = nullptr);
   1907   QualType BuildPointerType(QualType T,
   1908                             SourceLocation Loc, DeclarationName Entity);
   1909   QualType BuildReferenceType(QualType T, bool LValueRef,
   1910                               SourceLocation Loc, DeclarationName Entity);
   1911   QualType BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
   1912                           Expr *ArraySize, unsigned Quals,
   1913                           SourceRange Brackets, DeclarationName Entity);
   1914   QualType BuildVectorType(QualType T, Expr *VecSize, SourceLocation AttrLoc);
   1915   QualType BuildExtVectorType(QualType T, Expr *ArraySize,
   1916                               SourceLocation AttrLoc);
   1917   QualType BuildMatrixType(QualType T, Expr *NumRows, Expr *NumColumns,
   1918                            SourceLocation AttrLoc);
   1919 
   1920   QualType BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace,
   1921                                  SourceLocation AttrLoc);
   1922 
   1923   /// Same as above, but constructs the AddressSpace index if not provided.
   1924   QualType BuildAddressSpaceAttr(QualType &T, Expr *AddrSpace,
   1925                                  SourceLocation AttrLoc);
   1926 
   1927   bool CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc);
   1928 
   1929   bool CheckFunctionReturnType(QualType T, SourceLocation Loc);
   1930 
   1931   /// Build a function type.
   1932   ///
   1933   /// This routine checks the function type according to C++ rules and
   1934   /// under the assumption that the result type and parameter types have
   1935   /// just been instantiated from a template. It therefore duplicates
   1936   /// some of the behavior of GetTypeForDeclarator, but in a much
   1937   /// simpler form that is only suitable for this narrow use case.
   1938   ///
   1939   /// \param T The return type of the function.
   1940   ///
   1941   /// \param ParamTypes The parameter types of the function. This array
   1942   /// will be modified to account for adjustments to the types of the
   1943   /// function parameters.
   1944   ///
   1945   /// \param Loc The location of the entity whose type involves this
   1946   /// function type or, if there is no such entity, the location of the
   1947   /// type that will have function type.
   1948   ///
   1949   /// \param Entity The name of the entity that involves the function
   1950   /// type, if known.
   1951   ///
   1952   /// \param EPI Extra information about the function type. Usually this will
   1953   /// be taken from an existing function with the same prototype.
   1954   ///
   1955   /// \returns A suitable function type, if there are no errors. The
   1956   /// unqualified type will always be a FunctionProtoType.
   1957   /// Otherwise, returns a NULL type.
   1958   QualType BuildFunctionType(QualType T,
   1959                              MutableArrayRef<QualType> ParamTypes,
   1960                              SourceLocation Loc, DeclarationName Entity,
   1961                              const FunctionProtoType::ExtProtoInfo &EPI);
   1962 
   1963   QualType BuildMemberPointerType(QualType T, QualType Class,
   1964                                   SourceLocation Loc,
   1965                                   DeclarationName Entity);
   1966   QualType BuildBlockPointerType(QualType T,
   1967                                  SourceLocation Loc, DeclarationName Entity);
   1968   QualType BuildParenType(QualType T);
   1969   QualType BuildAtomicType(QualType T, SourceLocation Loc);
   1970   QualType BuildReadPipeType(QualType T,
   1971                          SourceLocation Loc);
   1972   QualType BuildWritePipeType(QualType T,
   1973                          SourceLocation Loc);
   1974   QualType BuildExtIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc);
   1975 
   1976   TypeSourceInfo *GetTypeForDeclarator(Declarator &D, Scope *S);
   1977   TypeSourceInfo *GetTypeForDeclaratorCast(Declarator &D, QualType FromTy);
   1978 
   1979   /// Package the given type and TSI into a ParsedType.
   1980   ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo);
   1981   DeclarationNameInfo GetNameForDeclarator(Declarator &D);
   1982   DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name);
   1983   static QualType GetTypeFromParser(ParsedType Ty,
   1984                                     TypeSourceInfo **TInfo = nullptr);
   1985   CanThrowResult canThrow(const Stmt *E);
   1986   /// Determine whether the callee of a particular function call can throw.
   1987   /// E, D and Loc are all optional.
   1988   static CanThrowResult canCalleeThrow(Sema &S, const Expr *E, const Decl *D,
   1989                                        SourceLocation Loc = SourceLocation());
   1990   const FunctionProtoType *ResolveExceptionSpec(SourceLocation Loc,
   1991                                                 const FunctionProtoType *FPT);
   1992   void UpdateExceptionSpec(FunctionDecl *FD,
   1993                            const FunctionProtoType::ExceptionSpecInfo &ESI);
   1994   bool CheckSpecifiedExceptionType(QualType &T, SourceRange Range);
   1995   bool CheckDistantExceptionSpec(QualType T);
   1996   bool CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New);
   1997   bool CheckEquivalentExceptionSpec(
   1998       const FunctionProtoType *Old, SourceLocation OldLoc,
   1999       const FunctionProtoType *New, SourceLocation NewLoc);
   2000   bool CheckEquivalentExceptionSpec(
   2001       const PartialDiagnostic &DiagID, const PartialDiagnostic & NoteID,
   2002       const FunctionProtoType *Old, SourceLocation OldLoc,
   2003       const FunctionProtoType *New, SourceLocation NewLoc);
   2004   bool handlerCanCatch(QualType HandlerType, QualType ExceptionType);
   2005   bool CheckExceptionSpecSubset(const PartialDiagnostic &DiagID,
   2006                                 const PartialDiagnostic &NestedDiagID,
   2007                                 const PartialDiagnostic &NoteID,
   2008                                 const PartialDiagnostic &NoThrowDiagID,
   2009                                 const FunctionProtoType *Superset,
   2010                                 SourceLocation SuperLoc,
   2011                                 const FunctionProtoType *Subset,
   2012                                 SourceLocation SubLoc);
   2013   bool CheckParamExceptionSpec(const PartialDiagnostic &NestedDiagID,
   2014                                const PartialDiagnostic &NoteID,
   2015                                const FunctionProtoType *Target,
   2016                                SourceLocation TargetLoc,
   2017                                const FunctionProtoType *Source,
   2018                                SourceLocation SourceLoc);
   2019 
   2020   TypeResult ActOnTypeName(Scope *S, Declarator &D);
   2021 
   2022   /// The parser has parsed the context-sensitive type 'instancetype'
   2023   /// in an Objective-C message declaration. Return the appropriate type.
   2024   ParsedType ActOnObjCInstanceType(SourceLocation Loc);
   2025 
   2026   /// Abstract class used to diagnose incomplete types.
   2027   struct TypeDiagnoser {
   2028     TypeDiagnoser() {}
   2029 
   2030     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) = 0;
   2031     virtual ~TypeDiagnoser() {}
   2032   };
   2033 
   2034   static int getPrintable(int I) { return I; }
   2035   static unsigned getPrintable(unsigned I) { return I; }
   2036   static bool getPrintable(bool B) { return B; }
   2037   static const char * getPrintable(const char *S) { return S; }
   2038   static StringRef getPrintable(StringRef S) { return S; }
   2039   static const std::string &getPrintable(const std::string &S) { return S; }
   2040   static const IdentifierInfo *getPrintable(const IdentifierInfo *II) {
   2041     return II;
   2042   }
   2043   static DeclarationName getPrintable(DeclarationName N) { return N; }
   2044   static QualType getPrintable(QualType T) { return T; }
   2045   static SourceRange getPrintable(SourceRange R) { return R; }
   2046   static SourceRange getPrintable(SourceLocation L) { return L; }
   2047   static SourceRange getPrintable(const Expr *E) { return E->getSourceRange(); }
   2048   static SourceRange getPrintable(TypeLoc TL) { return TL.getSourceRange();}
   2049 
   2050   template <typename... Ts> class BoundTypeDiagnoser : public TypeDiagnoser {
   2051   protected:
   2052     unsigned DiagID;
   2053     std::tuple<const Ts &...> Args;
   2054 
   2055     template <std::size_t... Is>
   2056     void emit(const SemaDiagnosticBuilder &DB,
   2057               std::index_sequence<Is...>) const {
   2058       // Apply all tuple elements to the builder in order.
   2059       bool Dummy[] = {false, (DB << getPrintable(std::get<Is>(Args)))...};
   2060       (void)Dummy;
   2061     }
   2062 
   2063   public:
   2064     BoundTypeDiagnoser(unsigned DiagID, const Ts &...Args)
   2065         : TypeDiagnoser(), DiagID(DiagID), Args(Args...) {
   2066       assert(DiagID != 0 && "no diagnostic for type diagnoser");
   2067     }
   2068 
   2069     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
   2070       const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID);
   2071       emit(DB, std::index_sequence_for<Ts...>());
   2072       DB << T;
   2073     }
   2074   };
   2075 
   2076   /// Do a check to make sure \p Name looks like a legal argument for the
   2077   /// swift_name attribute applied to decl \p D.  Raise a diagnostic if the name
   2078   /// is invalid for the given declaration.
   2079   ///
   2080   /// \p AL is used to provide caret diagnostics in case of a malformed name.
   2081   ///
   2082   /// \returns true if the name is a valid swift name for \p D, false otherwise.
   2083   bool DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc,
   2084                          const ParsedAttr &AL, bool IsAsync);
   2085 
   2086   /// A derivative of BoundTypeDiagnoser for which the diagnostic's type
   2087   /// parameter is preceded by a 0/1 enum that is 1 if the type is sizeless.
   2088   /// For example, a diagnostic with no other parameters would generally have
   2089   /// the form "...%select{incomplete|sizeless}0 type %1...".
   2090   template <typename... Ts>
   2091   class SizelessTypeDiagnoser : public BoundTypeDiagnoser<Ts...> {
   2092   public:
   2093     SizelessTypeDiagnoser(unsigned DiagID, const Ts &... Args)
   2094         : BoundTypeDiagnoser<Ts...>(DiagID, Args...) {}
   2095 
   2096     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
   2097       const SemaDiagnosticBuilder &DB = S.Diag(Loc, this->DiagID);
   2098       this->emit(DB, std::index_sequence_for<Ts...>());
   2099       DB << T->isSizelessType() << T;
   2100     }
   2101   };
   2102 
   2103   enum class CompleteTypeKind {
   2104     /// Apply the normal rules for complete types.  In particular,
   2105     /// treat all sizeless types as incomplete.
   2106     Normal,
   2107 
   2108     /// Relax the normal rules for complete types so that they include
   2109     /// sizeless built-in types.
   2110     AcceptSizeless,
   2111 
   2112     // FIXME: Eventually we should flip the default to Normal and opt in
   2113     // to AcceptSizeless rather than opt out of it.
   2114     Default = AcceptSizeless
   2115   };
   2116 
   2117 private:
   2118   /// Methods for marking which expressions involve dereferencing a pointer
   2119   /// marked with the 'noderef' attribute. Expressions are checked bottom up as
   2120   /// they are parsed, meaning that a noderef pointer may not be accessed. For
   2121   /// example, in `&*p` where `p` is a noderef pointer, we will first parse the
   2122   /// `*p`, but need to check that `address of` is called on it. This requires
   2123   /// keeping a container of all pending expressions and checking if the address
   2124   /// of them are eventually taken.
   2125   void CheckSubscriptAccessOfNoDeref(const ArraySubscriptExpr *E);
   2126   void CheckAddressOfNoDeref(const Expr *E);
   2127   void CheckMemberAccessOfNoDeref(const MemberExpr *E);
   2128 
   2129   bool RequireCompleteTypeImpl(SourceLocation Loc, QualType T,
   2130                                CompleteTypeKind Kind, TypeDiagnoser *Diagnoser);
   2131 
   2132   struct ModuleScope {
   2133     SourceLocation BeginLoc;
   2134     clang::Module *Module = nullptr;
   2135     bool ModuleInterface = false;
   2136     bool ImplicitGlobalModuleFragment = false;
   2137     VisibleModuleSet OuterVisibleModules;
   2138   };
   2139   /// The modules we're currently parsing.
   2140   llvm::SmallVector<ModuleScope, 16> ModuleScopes;
   2141 
   2142   /// Namespace definitions that we will export when they finish.
   2143   llvm::SmallPtrSet<const NamespaceDecl*, 8> DeferredExportedNamespaces;
   2144 
   2145   /// Get the module whose scope we are currently within.
   2146   Module *getCurrentModule() const {
   2147     return ModuleScopes.empty() ? nullptr : ModuleScopes.back().Module;
   2148   }
   2149 
   2150   VisibleModuleSet VisibleModules;
   2151 
   2152 public:
   2153   /// Get the module owning an entity.
   2154   Module *getOwningModule(const Decl *Entity) {
   2155     return Entity->getOwningModule();
   2156   }
   2157 
   2158   /// Make a merged definition of an existing hidden definition \p ND
   2159   /// visible at the specified location.
   2160   void makeMergedDefinitionVisible(NamedDecl *ND);
   2161 
   2162   bool isModuleVisible(const Module *M, bool ModulePrivate = false);
   2163 
   2164   // When loading a non-modular PCH files, this is used to restore module
   2165   // visibility.
   2166   void makeModuleVisible(Module *Mod, SourceLocation ImportLoc) {
   2167     VisibleModules.setVisible(Mod, ImportLoc);
   2168   }
   2169 
   2170   /// Determine whether a declaration is visible to name lookup.
   2171   bool isVisible(const NamedDecl *D) {
   2172     return D->isUnconditionallyVisible() || isVisibleSlow(D);
   2173   }
   2174 
   2175   /// Determine whether any declaration of an entity is visible.
   2176   bool
   2177   hasVisibleDeclaration(const NamedDecl *D,
   2178                         llvm::SmallVectorImpl<Module *> *Modules = nullptr) {
   2179     return isVisible(D) || hasVisibleDeclarationSlow(D, Modules);
   2180   }
   2181   bool hasVisibleDeclarationSlow(const NamedDecl *D,
   2182                                  llvm::SmallVectorImpl<Module *> *Modules);
   2183 
   2184   bool hasVisibleMergedDefinition(NamedDecl *Def);
   2185   bool hasMergedDefinitionInCurrentModule(NamedDecl *Def);
   2186 
   2187   /// Determine if \p D and \p Suggested have a structurally compatible
   2188   /// layout as described in C11 6.2.7/1.
   2189   bool hasStructuralCompatLayout(Decl *D, Decl *Suggested);
   2190 
   2191   /// Determine if \p D has a visible definition. If not, suggest a declaration
   2192   /// that should be made visible to expose the definition.
   2193   bool hasVisibleDefinition(NamedDecl *D, NamedDecl **Suggested,
   2194                             bool OnlyNeedComplete = false);
   2195   bool hasVisibleDefinition(const NamedDecl *D) {
   2196     NamedDecl *Hidden;
   2197     return hasVisibleDefinition(const_cast<NamedDecl*>(D), &Hidden);
   2198   }
   2199 
   2200   /// Determine if the template parameter \p D has a visible default argument.
   2201   bool
   2202   hasVisibleDefaultArgument(const NamedDecl *D,
   2203                             llvm::SmallVectorImpl<Module *> *Modules = nullptr);
   2204 
   2205   /// Determine if there is a visible declaration of \p D that is an explicit
   2206   /// specialization declaration for a specialization of a template. (For a
   2207   /// member specialization, use hasVisibleMemberSpecialization.)
   2208   bool hasVisibleExplicitSpecialization(
   2209       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
   2210 
   2211   /// Determine if there is a visible declaration of \p D that is a member
   2212   /// specialization declaration (as opposed to an instantiated declaration).
   2213   bool hasVisibleMemberSpecialization(
   2214       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
   2215 
   2216   /// Determine if \p A and \p B are equivalent internal linkage declarations
   2217   /// from different modules, and thus an ambiguity error can be downgraded to
   2218   /// an extension warning.
   2219   bool isEquivalentInternalLinkageDeclaration(const NamedDecl *A,
   2220                                               const NamedDecl *B);
   2221   void diagnoseEquivalentInternalLinkageDeclarations(
   2222       SourceLocation Loc, const NamedDecl *D,
   2223       ArrayRef<const NamedDecl *> Equiv);
   2224 
   2225   bool isUsualDeallocationFunction(const CXXMethodDecl *FD);
   2226 
   2227   bool isCompleteType(SourceLocation Loc, QualType T,
   2228                       CompleteTypeKind Kind = CompleteTypeKind::Default) {
   2229     return !RequireCompleteTypeImpl(Loc, T, Kind, nullptr);
   2230   }
   2231   bool RequireCompleteType(SourceLocation Loc, QualType T,
   2232                            CompleteTypeKind Kind, TypeDiagnoser &Diagnoser);
   2233   bool RequireCompleteType(SourceLocation Loc, QualType T,
   2234                            CompleteTypeKind Kind, unsigned DiagID);
   2235 
   2236   bool RequireCompleteType(SourceLocation Loc, QualType T,
   2237                            TypeDiagnoser &Diagnoser) {
   2238     return RequireCompleteType(Loc, T, CompleteTypeKind::Default, Diagnoser);
   2239   }
   2240   bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID) {
   2241     return RequireCompleteType(Loc, T, CompleteTypeKind::Default, DiagID);
   2242   }
   2243 
   2244   template <typename... Ts>
   2245   bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID,
   2246                            const Ts &...Args) {
   2247     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
   2248     return RequireCompleteType(Loc, T, Diagnoser);
   2249   }
   2250 
   2251   template <typename... Ts>
   2252   bool RequireCompleteSizedType(SourceLocation Loc, QualType T, unsigned DiagID,
   2253                                 const Ts &... Args) {
   2254     SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
   2255     return RequireCompleteType(Loc, T, CompleteTypeKind::Normal, Diagnoser);
   2256   }
   2257 
   2258   /// Get the type of expression E, triggering instantiation to complete the
   2259   /// type if necessary -- that is, if the expression refers to a templated
   2260   /// static data member of incomplete array type.
   2261   ///
   2262   /// May still return an incomplete type if instantiation was not possible or
   2263   /// if the type is incomplete for a different reason. Use
   2264   /// RequireCompleteExprType instead if a diagnostic is expected for an
   2265   /// incomplete expression type.
   2266   QualType getCompletedType(Expr *E);
   2267 
   2268   void completeExprArrayBound(Expr *E);
   2269   bool RequireCompleteExprType(Expr *E, CompleteTypeKind Kind,
   2270                                TypeDiagnoser &Diagnoser);
   2271   bool RequireCompleteExprType(Expr *E, unsigned DiagID);
   2272 
   2273   template <typename... Ts>
   2274   bool RequireCompleteExprType(Expr *E, unsigned DiagID, const Ts &...Args) {
   2275     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
   2276     return RequireCompleteExprType(E, CompleteTypeKind::Default, Diagnoser);
   2277   }
   2278 
   2279   template <typename... Ts>
   2280   bool RequireCompleteSizedExprType(Expr *E, unsigned DiagID,
   2281                                     const Ts &... Args) {
   2282     SizelessTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
   2283     return RequireCompleteExprType(E, CompleteTypeKind::Normal, Diagnoser);
   2284   }
   2285 
   2286   bool RequireLiteralType(SourceLocation Loc, QualType T,
   2287                           TypeDiagnoser &Diagnoser);
   2288   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID);
   2289 
   2290   template <typename... Ts>
   2291   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID,
   2292                           const Ts &...Args) {
   2293     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
   2294     return RequireLiteralType(Loc, T, Diagnoser);
   2295   }
   2296 
   2297   QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
   2298                              const CXXScopeSpec &SS, QualType T,
   2299                              TagDecl *OwnedTagDecl = nullptr);
   2300 
   2301   QualType getDecltypeForParenthesizedExpr(Expr *E);
   2302   QualType BuildTypeofExprType(Expr *E, SourceLocation Loc);
   2303   /// If AsUnevaluated is false, E is treated as though it were an evaluated
   2304   /// context, such as when building a type for decltype(auto).
   2305   QualType BuildDecltypeType(Expr *E, SourceLocation Loc,
   2306                              bool AsUnevaluated = true);
   2307   QualType BuildUnaryTransformType(QualType BaseType,
   2308                                    UnaryTransformType::UTTKind UKind,
   2309                                    SourceLocation Loc);
   2310 
   2311   //===--------------------------------------------------------------------===//
   2312   // Symbol table / Decl tracking callbacks: SemaDecl.cpp.
   2313   //
   2314 
   2315   struct SkipBodyInfo {
   2316     SkipBodyInfo()
   2317         : ShouldSkip(false), CheckSameAsPrevious(false), Previous(nullptr),
   2318           New(nullptr) {}
   2319     bool ShouldSkip;
   2320     bool CheckSameAsPrevious;
   2321     NamedDecl *Previous;
   2322     NamedDecl *New;
   2323   };
   2324 
   2325   DeclGroupPtrTy ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType = nullptr);
   2326 
   2327   void DiagnoseUseOfUnimplementedSelectors();
   2328 
   2329   bool isSimpleTypeSpecifier(tok::TokenKind Kind) const;
   2330 
   2331   ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
   2332                          Scope *S, CXXScopeSpec *SS = nullptr,
   2333                          bool isClassName = false, bool HasTrailingDot = false,
   2334                          ParsedType ObjectType = nullptr,
   2335                          bool IsCtorOrDtorName = false,
   2336                          bool WantNontrivialTypeSourceInfo = false,
   2337                          bool IsClassTemplateDeductionContext = true,
   2338                          IdentifierInfo **CorrectedII = nullptr);
   2339   TypeSpecifierType isTagName(IdentifierInfo &II, Scope *S);
   2340   bool isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S);
   2341   void DiagnoseUnknownTypeName(IdentifierInfo *&II,
   2342                                SourceLocation IILoc,
   2343                                Scope *S,
   2344                                CXXScopeSpec *SS,
   2345                                ParsedType &SuggestedType,
   2346                                bool IsTemplateName = false);
   2347 
   2348   /// Attempt to behave like MSVC in situations where lookup of an unqualified
   2349   /// type name has failed in a dependent context. In these situations, we
   2350   /// automatically form a DependentTypeName that will retry lookup in a related
   2351   /// scope during instantiation.
   2352   ParsedType ActOnMSVCUnknownTypeName(const IdentifierInfo &II,
   2353                                       SourceLocation NameLoc,
   2354                                       bool IsTemplateTypeArg);
   2355 
   2356   /// Describes the result of the name lookup and resolution performed
   2357   /// by \c ClassifyName().
   2358   enum NameClassificationKind {
   2359     /// This name is not a type or template in this context, but might be
   2360     /// something else.
   2361     NC_Unknown,
   2362     /// Classification failed; an error has been produced.
   2363     NC_Error,
   2364     /// The name has been typo-corrected to a keyword.
   2365     NC_Keyword,
   2366     /// The name was classified as a type.
   2367     NC_Type,
   2368     /// The name was classified as a specific non-type, non-template
   2369     /// declaration. ActOnNameClassifiedAsNonType should be called to
   2370     /// convert the declaration to an expression.
   2371     NC_NonType,
   2372     /// The name was classified as an ADL-only function name.
   2373     /// ActOnNameClassifiedAsUndeclaredNonType should be called to convert the
   2374     /// result to an expression.
   2375     NC_UndeclaredNonType,
   2376     /// The name denotes a member of a dependent type that could not be
   2377     /// resolved. ActOnNameClassifiedAsDependentNonType should be called to
   2378     /// convert the result to an expression.
   2379     NC_DependentNonType,
   2380     /// The name was classified as an overload set, and an expression
   2381     /// representing that overload set has been formed.
   2382     /// ActOnNameClassifiedAsOverloadSet should be called to form a suitable
   2383     /// expression referencing the overload set.
   2384     NC_OverloadSet,
   2385     /// The name was classified as a template whose specializations are types.
   2386     NC_TypeTemplate,
   2387     /// The name was classified as a variable template name.
   2388     NC_VarTemplate,
   2389     /// The name was classified as a function template name.
   2390     NC_FunctionTemplate,
   2391     /// The name was classified as an ADL-only function template name.
   2392     NC_UndeclaredTemplate,
   2393     /// The name was classified as a concept name.
   2394     NC_Concept,
   2395   };
   2396 
   2397   class NameClassification {
   2398     NameClassificationKind Kind;
   2399     union {
   2400       ExprResult Expr;
   2401       NamedDecl *NonTypeDecl;
   2402       TemplateName Template;
   2403       ParsedType Type;
   2404     };
   2405 
   2406     explicit NameClassification(NameClassificationKind Kind) : Kind(Kind) {}
   2407 
   2408   public:
   2409     NameClassification(ParsedType Type) : Kind(NC_Type), Type(Type) {}
   2410 
   2411     NameClassification(const IdentifierInfo *Keyword) : Kind(NC_Keyword) {}
   2412 
   2413     static NameClassification Error() {
   2414       return NameClassification(NC_Error);
   2415     }
   2416 
   2417     static NameClassification Unknown() {
   2418       return NameClassification(NC_Unknown);
   2419     }
   2420 
   2421     static NameClassification OverloadSet(ExprResult E) {
   2422       NameClassification Result(NC_OverloadSet);
   2423       Result.Expr = E;
   2424       return Result;
   2425     }
   2426 
   2427     static NameClassification NonType(NamedDecl *D) {
   2428       NameClassification Result(NC_NonType);
   2429       Result.NonTypeDecl = D;
   2430       return Result;
   2431     }
   2432 
   2433     static NameClassification UndeclaredNonType() {
   2434       return NameClassification(NC_UndeclaredNonType);
   2435     }
   2436 
   2437     static NameClassification DependentNonType() {
   2438       return NameClassification(NC_DependentNonType);
   2439     }
   2440 
   2441     static NameClassification TypeTemplate(TemplateName Name) {
   2442       NameClassification Result(NC_TypeTemplate);
   2443       Result.Template = Name;
   2444       return Result;
   2445     }
   2446 
   2447     static NameClassification VarTemplate(TemplateName Name) {
   2448       NameClassification Result(NC_VarTemplate);
   2449       Result.Template = Name;
   2450       return Result;
   2451     }
   2452 
   2453     static NameClassification FunctionTemplate(TemplateName Name) {
   2454       NameClassification Result(NC_FunctionTemplate);
   2455       Result.Template = Name;
   2456       return Result;
   2457     }
   2458 
   2459     static NameClassification Concept(TemplateName Name) {
   2460       NameClassification Result(NC_Concept);
   2461       Result.Template = Name;
   2462       return Result;
   2463     }
   2464 
   2465     static NameClassification UndeclaredTemplate(TemplateName Name) {
   2466       NameClassification Result(NC_UndeclaredTemplate);
   2467       Result.Template = Name;
   2468       return Result;
   2469     }
   2470 
   2471     NameClassificationKind getKind() const { return Kind; }
   2472 
   2473     ExprResult getExpression() const {
   2474       assert(Kind == NC_OverloadSet);
   2475       return Expr;
   2476     }
   2477 
   2478     ParsedType getType() const {
   2479       assert(Kind == NC_Type);
   2480       return Type;
   2481     }
   2482 
   2483     NamedDecl *getNonTypeDecl() const {
   2484       assert(Kind == NC_NonType);
   2485       return NonTypeDecl;
   2486     }
   2487 
   2488     TemplateName getTemplateName() const {
   2489       assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate ||
   2490              Kind == NC_VarTemplate || Kind == NC_Concept ||
   2491              Kind == NC_UndeclaredTemplate);
   2492       return Template;
   2493     }
   2494 
   2495     TemplateNameKind getTemplateNameKind() const {
   2496       switch (Kind) {
   2497       case NC_TypeTemplate:
   2498         return TNK_Type_template;
   2499       case NC_FunctionTemplate:
   2500         return TNK_Function_template;
   2501       case NC_VarTemplate:
   2502         return TNK_Var_template;
   2503       case NC_Concept:
   2504         return TNK_Concept_template;
   2505       case NC_UndeclaredTemplate:
   2506         return TNK_Undeclared_template;
   2507       default:
   2508         llvm_unreachable("unsupported name classification.");
   2509       }
   2510     }
   2511   };
   2512 
   2513   /// Perform name lookup on the given name, classifying it based on
   2514   /// the results of name lookup and the following token.
   2515   ///
   2516   /// This routine is used by the parser to resolve identifiers and help direct
   2517   /// parsing. When the identifier cannot be found, this routine will attempt
   2518   /// to correct the typo and classify based on the resulting name.
   2519   ///
   2520   /// \param S The scope in which we're performing name lookup.
   2521   ///
   2522   /// \param SS The nested-name-specifier that precedes the name.
   2523   ///
   2524   /// \param Name The identifier. If typo correction finds an alternative name,
   2525   /// this pointer parameter will be updated accordingly.
   2526   ///
   2527   /// \param NameLoc The location of the identifier.
   2528   ///
   2529   /// \param NextToken The token following the identifier. Used to help
   2530   /// disambiguate the name.
   2531   ///
   2532   /// \param CCC The correction callback, if typo correction is desired.
   2533   NameClassification ClassifyName(Scope *S, CXXScopeSpec &SS,
   2534                                   IdentifierInfo *&Name, SourceLocation NameLoc,
   2535                                   const Token &NextToken,
   2536                                   CorrectionCandidateCallback *CCC = nullptr);
   2537 
   2538   /// Act on the result of classifying a name as an undeclared (ADL-only)
   2539   /// non-type declaration.
   2540   ExprResult ActOnNameClassifiedAsUndeclaredNonType(IdentifierInfo *Name,
   2541                                                     SourceLocation NameLoc);
   2542   /// Act on the result of classifying a name as an undeclared member of a
   2543   /// dependent base class.
   2544   ExprResult ActOnNameClassifiedAsDependentNonType(const CXXScopeSpec &SS,
   2545                                                    IdentifierInfo *Name,
   2546                                                    SourceLocation NameLoc,
   2547                                                    bool IsAddressOfOperand);
   2548   /// Act on the result of classifying a name as a specific non-type
   2549   /// declaration.
   2550   ExprResult ActOnNameClassifiedAsNonType(Scope *S, const CXXScopeSpec &SS,
   2551                                           NamedDecl *Found,
   2552                                           SourceLocation NameLoc,
   2553                                           const Token &NextToken);
   2554   /// Act on the result of classifying a name as an overload set.
   2555   ExprResult ActOnNameClassifiedAsOverloadSet(Scope *S, Expr *OverloadSet);
   2556 
   2557   /// Describes the detailed kind of a template name. Used in diagnostics.
   2558   enum class TemplateNameKindForDiagnostics {
   2559     ClassTemplate,
   2560     FunctionTemplate,
   2561     VarTemplate,
   2562     AliasTemplate,
   2563     TemplateTemplateParam,
   2564     Concept,
   2565     DependentTemplate
   2566   };
   2567   TemplateNameKindForDiagnostics
   2568   getTemplateNameKindForDiagnostics(TemplateName Name);
   2569 
   2570   /// Determine whether it's plausible that E was intended to be a
   2571   /// template-name.
   2572   bool mightBeIntendedToBeTemplateName(ExprResult E, bool &Dependent) {
   2573     if (!getLangOpts().CPlusPlus || E.isInvalid())
   2574       return false;
   2575     Dependent = false;
   2576     if (auto *DRE = dyn_cast<DeclRefExpr>(E.get()))
   2577       return !DRE->hasExplicitTemplateArgs();
   2578     if (auto *ME = dyn_cast<MemberExpr>(E.get()))
   2579       return !ME->hasExplicitTemplateArgs();
   2580     Dependent = true;
   2581     if (auto *DSDRE = dyn_cast<DependentScopeDeclRefExpr>(E.get()))
   2582       return !DSDRE->hasExplicitTemplateArgs();
   2583     if (auto *DSME = dyn_cast<CXXDependentScopeMemberExpr>(E.get()))
   2584       return !DSME->hasExplicitTemplateArgs();
   2585     // Any additional cases recognized here should also be handled by
   2586     // diagnoseExprIntendedAsTemplateName.
   2587     return false;
   2588   }
   2589   void diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName,
   2590                                           SourceLocation Less,
   2591                                           SourceLocation Greater);
   2592 
   2593   void warnOnReservedIdentifier(const NamedDecl *D);
   2594 
   2595   Decl *ActOnDeclarator(Scope *S, Declarator &D);
   2596 
   2597   NamedDecl *HandleDeclarator(Scope *S, Declarator &D,
   2598                               MultiTemplateParamsArg TemplateParameterLists);
   2599   bool tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo,
   2600                                        QualType &T, SourceLocation Loc,
   2601                                        unsigned FailedFoldDiagID);
   2602   void RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S);
   2603   bool DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo Info);
   2604   bool diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
   2605                                     DeclarationName Name, SourceLocation Loc,
   2606                                     bool IsTemplateId);
   2607   void
   2608   diagnoseIgnoredQualifiers(unsigned DiagID, unsigned Quals,
   2609                             SourceLocation FallbackLoc,
   2610                             SourceLocation ConstQualLoc = SourceLocation(),
   2611                             SourceLocation VolatileQualLoc = SourceLocation(),
   2612                             SourceLocation RestrictQualLoc = SourceLocation(),
   2613                             SourceLocation AtomicQualLoc = SourceLocation(),
   2614                             SourceLocation UnalignedQualLoc = SourceLocation());
   2615 
   2616   static bool adjustContextForLocalExternDecl(DeclContext *&DC);
   2617   void DiagnoseFunctionSpecifiers(const DeclSpec &DS);
   2618   NamedDecl *getShadowedDeclaration(const TypedefNameDecl *D,
   2619                                     const LookupResult &R);
   2620   NamedDecl *getShadowedDeclaration(const VarDecl *D, const LookupResult &R);
   2621   NamedDecl *getShadowedDeclaration(const BindingDecl *D,
   2622                                     const LookupResult &R);
   2623   void CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl,
   2624                    const LookupResult &R);
   2625   void CheckShadow(Scope *S, VarDecl *D);
   2626 
   2627   /// Warn if 'E', which is an expression that is about to be modified, refers
   2628   /// to a shadowing declaration.
   2629   void CheckShadowingDeclModification(Expr *E, SourceLocation Loc);
   2630 
   2631   void DiagnoseShadowingLambdaDecls(const sema::LambdaScopeInfo *LSI);
   2632 
   2633 private:
   2634   /// Map of current shadowing declarations to shadowed declarations. Warn if
   2635   /// it looks like the user is trying to modify the shadowing declaration.
   2636   llvm::DenseMap<const NamedDecl *, const NamedDecl *> ShadowingDecls;
   2637 
   2638 public:
   2639   void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange);
   2640   void handleTagNumbering(const TagDecl *Tag, Scope *TagScope);
   2641   void setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec,
   2642                                     TypedefNameDecl *NewTD);
   2643   void CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *D);
   2644   NamedDecl* ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
   2645                                     TypeSourceInfo *TInfo,
   2646                                     LookupResult &Previous);
   2647   NamedDecl* ActOnTypedefNameDecl(Scope* S, DeclContext* DC, TypedefNameDecl *D,
   2648                                   LookupResult &Previous, bool &Redeclaration);
   2649   NamedDecl *ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
   2650                                      TypeSourceInfo *TInfo,
   2651                                      LookupResult &Previous,
   2652                                      MultiTemplateParamsArg TemplateParamLists,
   2653                                      bool &AddToScope,
   2654                                      ArrayRef<BindingDecl *> Bindings = None);
   2655   NamedDecl *
   2656   ActOnDecompositionDeclarator(Scope *S, Declarator &D,
   2657                                MultiTemplateParamsArg TemplateParamLists);
   2658   // Returns true if the variable declaration is a redeclaration
   2659   bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous);
   2660   void CheckVariableDeclarationType(VarDecl *NewVD);
   2661   bool DeduceVariableDeclarationType(VarDecl *VDecl, bool DirectInit,
   2662                                      Expr *Init);
   2663   void CheckCompleteVariableDeclaration(VarDecl *VD);
   2664   void CheckCompleteDecompositionDeclaration(DecompositionDecl *DD);
   2665   void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D);
   2666 
   2667   NamedDecl* ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
   2668                                      TypeSourceInfo *TInfo,
   2669                                      LookupResult &Previous,
   2670                                      MultiTemplateParamsArg TemplateParamLists,
   2671                                      bool &AddToScope);
   2672   bool AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD);
   2673 
   2674   enum class CheckConstexprKind {
   2675     /// Diagnose issues that are non-constant or that are extensions.
   2676     Diagnose,
   2677     /// Identify whether this function satisfies the formal rules for constexpr
   2678     /// functions in the current lanugage mode (with no extensions).
   2679     CheckValid
   2680   };
   2681 
   2682   bool CheckConstexprFunctionDefinition(const FunctionDecl *FD,
   2683                                         CheckConstexprKind Kind);
   2684 
   2685   void DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD);
   2686   void FindHiddenVirtualMethods(CXXMethodDecl *MD,
   2687                           SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods);
   2688   void NoteHiddenVirtualMethods(CXXMethodDecl *MD,
   2689                           SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods);
   2690   // Returns true if the function declaration is a redeclaration
   2691   bool CheckFunctionDeclaration(Scope *S,
   2692                                 FunctionDecl *NewFD, LookupResult &Previous,
   2693                                 bool IsMemberSpecialization);
   2694   bool shouldLinkDependentDeclWithPrevious(Decl *D, Decl *OldDecl);
   2695   bool canFullyTypeCheckRedeclaration(ValueDecl *NewD, ValueDecl *OldD,
   2696                                       QualType NewT, QualType OldT);
   2697   void CheckMain(FunctionDecl *FD, const DeclSpec &D);
   2698   void CheckMSVCRTEntryPoint(FunctionDecl *FD);
   2699   Attr *getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD,
   2700                                                    bool IsDefinition);
   2701   void CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D);
   2702   Decl *ActOnParamDeclarator(Scope *S, Declarator &D);
   2703   ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC,
   2704                                           SourceLocation Loc,
   2705                                           QualType T);
   2706   ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc,
   2707                               SourceLocation NameLoc, IdentifierInfo *Name,
   2708                               QualType T, TypeSourceInfo *TSInfo,
   2709                               StorageClass SC);
   2710   void ActOnParamDefaultArgument(Decl *param,
   2711                                  SourceLocation EqualLoc,
   2712                                  Expr *defarg);
   2713   void ActOnParamUnparsedDefaultArgument(Decl *param, SourceLocation EqualLoc,
   2714                                          SourceLocation ArgLoc);
   2715   void ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc);
   2716   ExprResult ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
   2717                                          SourceLocation EqualLoc);
   2718   void SetParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
   2719                                SourceLocation EqualLoc);
   2720 
   2721   // Contexts where using non-trivial C union types can be disallowed. This is
   2722   // passed to err_non_trivial_c_union_in_invalid_context.
   2723   enum NonTrivialCUnionContext {
   2724     // Function parameter.
   2725     NTCUC_FunctionParam,
   2726     // Function return.
   2727     NTCUC_FunctionReturn,
   2728     // Default-initialized object.
   2729     NTCUC_DefaultInitializedObject,
   2730     // Variable with automatic storage duration.
   2731     NTCUC_AutoVar,
   2732     // Initializer expression that might copy from another object.
   2733     NTCUC_CopyInit,
   2734     // Assignment.
   2735     NTCUC_Assignment,
   2736     // Compound literal.
   2737     NTCUC_CompoundLiteral,
   2738     // Block capture.
   2739     NTCUC_BlockCapture,
   2740     // lvalue-to-rvalue conversion of volatile type.
   2741     NTCUC_LValueToRValueVolatile,
   2742   };
   2743 
   2744   /// Emit diagnostics if the initializer or any of its explicit or
   2745   /// implicitly-generated subexpressions require copying or
   2746   /// default-initializing a type that is or contains a C union type that is
   2747   /// non-trivial to copy or default-initialize.
   2748   void checkNonTrivialCUnionInInitializer(const Expr *Init, SourceLocation Loc);
   2749 
   2750   // These flags are passed to checkNonTrivialCUnion.
   2751   enum NonTrivialCUnionKind {
   2752     NTCUK_Init = 0x1,
   2753     NTCUK_Destruct = 0x2,
   2754     NTCUK_Copy = 0x4,
   2755   };
   2756 
   2757   /// Emit diagnostics if a non-trivial C union type or a struct that contains
   2758   /// a non-trivial C union is used in an invalid context.
   2759   void checkNonTrivialCUnion(QualType QT, SourceLocation Loc,
   2760                              NonTrivialCUnionContext UseContext,
   2761                              unsigned NonTrivialKind);
   2762 
   2763   void AddInitializerToDecl(Decl *dcl, Expr *init, bool DirectInit);
   2764   void ActOnUninitializedDecl(Decl *dcl);
   2765   void ActOnInitializerError(Decl *Dcl);
   2766 
   2767   void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc);
   2768   void ActOnCXXForRangeDecl(Decl *D);
   2769   StmtResult ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc,
   2770                                         IdentifierInfo *Ident,
   2771                                         ParsedAttributes &Attrs,
   2772                                         SourceLocation AttrEnd);
   2773   void SetDeclDeleted(Decl *dcl, SourceLocation DelLoc);
   2774   void SetDeclDefaulted(Decl *dcl, SourceLocation DefaultLoc);
   2775   void CheckStaticLocalForDllExport(VarDecl *VD);
   2776   void FinalizeDeclaration(Decl *D);
   2777   DeclGroupPtrTy FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
   2778                                          ArrayRef<Decl *> Group);
   2779   DeclGroupPtrTy BuildDeclaratorGroup(MutableArrayRef<Decl *> Group);
   2780 
   2781   /// Should be called on all declarations that might have attached
   2782   /// documentation comments.
   2783   void ActOnDocumentableDecl(Decl *D);
   2784   void ActOnDocumentableDecls(ArrayRef<Decl *> Group);
   2785 
   2786   void ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
   2787                                        SourceLocation LocAfterDecls);
   2788   void CheckForFunctionRedefinition(
   2789       FunctionDecl *FD, const FunctionDecl *EffectiveDefinition = nullptr,
   2790       SkipBodyInfo *SkipBody = nullptr);
   2791   Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D,
   2792                                 MultiTemplateParamsArg TemplateParamLists,
   2793                                 SkipBodyInfo *SkipBody = nullptr);
   2794   Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D,
   2795                                 SkipBodyInfo *SkipBody = nullptr);
   2796   void ActOnStartTrailingRequiresClause(Scope *S, Declarator &D);
   2797   ExprResult ActOnFinishTrailingRequiresClause(ExprResult ConstraintExpr);
   2798   ExprResult ActOnRequiresClause(ExprResult ConstraintExpr);
   2799   void ActOnStartOfObjCMethodDef(Scope *S, Decl *D);
   2800   bool isObjCMethodDecl(Decl *D) {
   2801     return D && isa<ObjCMethodDecl>(D);
   2802   }
   2803 
   2804   /// Determine whether we can delay parsing the body of a function or
   2805   /// function template until it is used, assuming we don't care about emitting
   2806   /// code for that function.
   2807   ///
   2808   /// This will be \c false if we may need the body of the function in the
   2809   /// middle of parsing an expression (where it's impractical to switch to
   2810   /// parsing a different function), for instance, if it's constexpr in C++11
   2811   /// or has an 'auto' return type in C++14. These cases are essentially bugs.
   2812   bool canDelayFunctionBody(const Declarator &D);
   2813 
   2814   /// Determine whether we can skip parsing the body of a function
   2815   /// definition, assuming we don't care about analyzing its body or emitting
   2816   /// code for that function.
   2817   ///
   2818   /// This will be \c false only if we may need the body of the function in
   2819   /// order to parse the rest of the program (for instance, if it is
   2820   /// \c constexpr in C++11 or has an 'auto' return type in C++14).
   2821   bool canSkipFunctionBody(Decl *D);
   2822 
   2823   void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope);
   2824   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body);
   2825   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation);
   2826   Decl *ActOnSkippedFunctionBody(Decl *Decl);
   2827   void ActOnFinishInlineFunctionDef(FunctionDecl *D);
   2828 
   2829   /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an
   2830   /// attribute for which parsing is delayed.
   2831   void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs);
   2832 
   2833   /// Diagnose any unused parameters in the given sequence of
   2834   /// ParmVarDecl pointers.
   2835   void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters);
   2836 
   2837   /// Diagnose whether the size of parameters or return value of a
   2838   /// function or obj-c method definition is pass-by-value and larger than a
   2839   /// specified threshold.
   2840   void
   2841   DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters,
   2842                                          QualType ReturnTy, NamedDecl *D);
   2843 
   2844   void DiagnoseInvalidJumps(Stmt *Body);
   2845   Decl *ActOnFileScopeAsmDecl(Expr *expr,
   2846                               SourceLocation AsmLoc,
   2847                               SourceLocation RParenLoc);
   2848 
   2849   /// Handle a C++11 empty-declaration and attribute-declaration.
   2850   Decl *ActOnEmptyDeclaration(Scope *S, const ParsedAttributesView &AttrList,
   2851                               SourceLocation SemiLoc);
   2852 
   2853   enum class ModuleDeclKind {
   2854     Interface,      ///< 'export module X;'
   2855     Implementation, ///< 'module X;'
   2856   };
   2857 
   2858   /// The parser has processed a module-declaration that begins the definition
   2859   /// of a module interface or implementation.
   2860   DeclGroupPtrTy ActOnModuleDecl(SourceLocation StartLoc,
   2861                                  SourceLocation ModuleLoc, ModuleDeclKind MDK,
   2862                                  ModuleIdPath Path, bool IsFirstDecl);
   2863 
   2864   /// The parser has processed a global-module-fragment declaration that begins
   2865   /// the definition of the global module fragment of the current module unit.
   2866   /// \param ModuleLoc The location of the 'module' keyword.
   2867   DeclGroupPtrTy ActOnGlobalModuleFragmentDecl(SourceLocation ModuleLoc);
   2868 
   2869   /// The parser has processed a private-module-fragment declaration that begins
   2870   /// the definition of the private module fragment of the current module unit.
   2871   /// \param ModuleLoc The location of the 'module' keyword.
   2872   /// \param PrivateLoc The location of the 'private' keyword.
   2873   DeclGroupPtrTy ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc,
   2874                                                 SourceLocation PrivateLoc);
   2875 
   2876   /// The parser has processed a module import declaration.
   2877   ///
   2878   /// \param StartLoc The location of the first token in the declaration. This
   2879   ///        could be the location of an '@', 'export', or 'import'.
   2880   /// \param ExportLoc The location of the 'export' keyword, if any.
   2881   /// \param ImportLoc The location of the 'import' keyword.
   2882   /// \param Path The module access path.
   2883   DeclResult ActOnModuleImport(SourceLocation StartLoc,
   2884                                SourceLocation ExportLoc,
   2885                                SourceLocation ImportLoc, ModuleIdPath Path);
   2886   DeclResult ActOnModuleImport(SourceLocation StartLoc,
   2887                                SourceLocation ExportLoc,
   2888                                SourceLocation ImportLoc, Module *M,
   2889                                ModuleIdPath Path = {});
   2890 
   2891   /// The parser has processed a module import translated from a
   2892   /// #include or similar preprocessing directive.
   2893   void ActOnModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
   2894   void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
   2895 
   2896   /// The parsed has entered a submodule.
   2897   void ActOnModuleBegin(SourceLocation DirectiveLoc, Module *Mod);
   2898   /// The parser has left a submodule.
   2899   void ActOnModuleEnd(SourceLocation DirectiveLoc, Module *Mod);
   2900 
   2901   /// Create an implicit import of the given module at the given
   2902   /// source location, for error recovery, if possible.
   2903   ///
   2904   /// This routine is typically used when an entity found by name lookup
   2905   /// is actually hidden within a module that we know about but the user
   2906   /// has forgotten to import.
   2907   void createImplicitModuleImportForErrorRecovery(SourceLocation Loc,
   2908                                                   Module *Mod);
   2909 
   2910   /// Kinds of missing import. Note, the values of these enumerators correspond
   2911   /// to %select values in diagnostics.
   2912   enum class MissingImportKind {
   2913     Declaration,
   2914     Definition,
   2915     DefaultArgument,
   2916     ExplicitSpecialization,
   2917     PartialSpecialization
   2918   };
   2919 
   2920   /// Diagnose that the specified declaration needs to be visible but
   2921   /// isn't, and suggest a module import that would resolve the problem.
   2922   void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl,
   2923                              MissingImportKind MIK, bool Recover = true);
   2924   void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl,
   2925                              SourceLocation DeclLoc, ArrayRef<Module *> Modules,
   2926                              MissingImportKind MIK, bool Recover);
   2927 
   2928   Decl *ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc,
   2929                              SourceLocation LBraceLoc);
   2930   Decl *ActOnFinishExportDecl(Scope *S, Decl *ExportDecl,
   2931                               SourceLocation RBraceLoc);
   2932 
   2933   /// We've found a use of a templated declaration that would trigger an
   2934   /// implicit instantiation. Check that any relevant explicit specializations
   2935   /// and partial specializations are visible, and diagnose if not.
   2936   void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec);
   2937 
   2938   /// Retrieve a suitable printing policy for diagnostics.
   2939   PrintingPolicy getPrintingPolicy() const {
   2940     return getPrintingPolicy(Context, PP);
   2941   }
   2942 
   2943   /// Retrieve a suitable printing policy for diagnostics.
   2944   static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx,
   2945                                           const Preprocessor &PP);
   2946 
   2947   /// Scope actions.
   2948   void ActOnPopScope(SourceLocation Loc, Scope *S);
   2949   void ActOnTranslationUnitScope(Scope *S);
   2950 
   2951   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
   2952                                    RecordDecl *&AnonRecord);
   2953   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
   2954                                    MultiTemplateParamsArg TemplateParams,
   2955                                    bool IsExplicitInstantiation,
   2956                                    RecordDecl *&AnonRecord);
   2957 
   2958   Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
   2959                                     AccessSpecifier AS,
   2960                                     RecordDecl *Record,
   2961                                     const PrintingPolicy &Policy);
   2962 
   2963   Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
   2964                                        RecordDecl *Record);
   2965 
   2966   /// Common ways to introduce type names without a tag for use in diagnostics.
   2967   /// Keep in sync with err_tag_reference_non_tag.
   2968   enum NonTagKind {
   2969     NTK_NonStruct,
   2970     NTK_NonClass,
   2971     NTK_NonUnion,
   2972     NTK_NonEnum,
   2973     NTK_Typedef,
   2974     NTK_TypeAlias,
   2975     NTK_Template,
   2976     NTK_TypeAliasTemplate,
   2977     NTK_TemplateTemplateArgument,
   2978   };
   2979 
   2980   /// Given a non-tag type declaration, returns an enum useful for indicating
   2981   /// what kind of non-tag type this is.
   2982   NonTagKind getNonTagTypeDeclKind(const Decl *D, TagTypeKind TTK);
   2983 
   2984   bool isAcceptableTagRedeclaration(const TagDecl *Previous,
   2985                                     TagTypeKind NewTag, bool isDefinition,
   2986                                     SourceLocation NewTagLoc,
   2987                                     const IdentifierInfo *Name);
   2988 
   2989   enum TagUseKind {
   2990     TUK_Reference,   // Reference to a tag:  'struct foo *X;'
   2991     TUK_Declaration, // Fwd decl of a tag:   'struct foo;'
   2992     TUK_Definition,  // Definition of a tag: 'struct foo { int X; } Y;'
   2993     TUK_Friend       // Friend declaration:  'friend struct foo;'
   2994   };
   2995 
   2996   Decl *ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
   2997                  SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name,
   2998                  SourceLocation NameLoc, const ParsedAttributesView &Attr,
   2999                  AccessSpecifier AS, SourceLocation ModulePrivateLoc,
   3000                  MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl,
   3001                  bool &IsDependent, SourceLocation ScopedEnumKWLoc,
   3002                  bool ScopedEnumUsesClassTag, TypeResult UnderlyingType,
   3003                  bool IsTypeSpecifier, bool IsTemplateParamOrArg,
   3004                  SkipBodyInfo *SkipBody = nullptr);
   3005 
   3006   Decl *ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
   3007                                 unsigned TagSpec, SourceLocation TagLoc,
   3008                                 CXXScopeSpec &SS, IdentifierInfo *Name,
   3009                                 SourceLocation NameLoc,
   3010                                 const ParsedAttributesView &Attr,
   3011                                 MultiTemplateParamsArg TempParamLists);
   3012 
   3013   TypeResult ActOnDependentTag(Scope *S,
   3014                                unsigned TagSpec,
   3015                                TagUseKind TUK,
   3016                                const CXXScopeSpec &SS,
   3017                                IdentifierInfo *Name,
   3018                                SourceLocation TagLoc,
   3019                                SourceLocation NameLoc);
   3020 
   3021   void ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart,
   3022                  IdentifierInfo *ClassName,
   3023                  SmallVectorImpl<Decl *> &Decls);
   3024   Decl *ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
   3025                    Declarator &D, Expr *BitfieldWidth);
   3026 
   3027   FieldDecl *HandleField(Scope *S, RecordDecl *TagD, SourceLocation DeclStart,
   3028                          Declarator &D, Expr *BitfieldWidth,
   3029                          InClassInitStyle InitStyle,
   3030                          AccessSpecifier AS);
   3031   MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD,
   3032                                    SourceLocation DeclStart, Declarator &D,
   3033                                    Expr *BitfieldWidth,
   3034                                    InClassInitStyle InitStyle,
   3035                                    AccessSpecifier AS,
   3036                                    const ParsedAttr &MSPropertyAttr);
   3037 
   3038   FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T,
   3039                             TypeSourceInfo *TInfo,
   3040                             RecordDecl *Record, SourceLocation Loc,
   3041                             bool Mutable, Expr *BitfieldWidth,
   3042                             InClassInitStyle InitStyle,
   3043                             SourceLocation TSSL,
   3044                             AccessSpecifier AS, NamedDecl *PrevDecl,
   3045                             Declarator *D = nullptr);
   3046 
   3047   bool CheckNontrivialField(FieldDecl *FD);
   3048   void DiagnoseNontrivial(const CXXRecordDecl *Record, CXXSpecialMember CSM);
   3049 
   3050   enum TrivialABIHandling {
   3051     /// The triviality of a method unaffected by "trivial_abi".
   3052     TAH_IgnoreTrivialABI,
   3053 
   3054     /// The triviality of a method affected by "trivial_abi".
   3055     TAH_ConsiderTrivialABI
   3056   };
   3057 
   3058   bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
   3059                               TrivialABIHandling TAH = TAH_IgnoreTrivialABI,
   3060                               bool Diagnose = false);
   3061 
   3062   /// For a defaulted function, the kind of defaulted function that it is.
   3063   class DefaultedFunctionKind {
   3064     CXXSpecialMember SpecialMember : 8;
   3065     DefaultedComparisonKind Comparison : 8;
   3066 
   3067   public:
   3068     DefaultedFunctionKind()
   3069         : SpecialMember(CXXInvalid), Comparison(DefaultedComparisonKind::None) {
   3070     }
   3071     DefaultedFunctionKind(CXXSpecialMember CSM)
   3072         : SpecialMember(CSM), Comparison(DefaultedComparisonKind::None) {}
   3073     DefaultedFunctionKind(DefaultedComparisonKind Comp)
   3074         : SpecialMember(CXXInvalid), Comparison(Comp) {}
   3075 
   3076     bool isSpecialMember() const { return SpecialMember != CXXInvalid; }
   3077     bool isComparison() const {
   3078       return Comparison != DefaultedComparisonKind::None;
   3079     }
   3080 
   3081     explicit operator bool() const {
   3082       return isSpecialMember() || isComparison();
   3083     }
   3084 
   3085     CXXSpecialMember asSpecialMember() const { return SpecialMember; }
   3086     DefaultedComparisonKind asComparison() const { return Comparison; }
   3087 
   3088     /// Get the index of this function kind for use in diagnostics.
   3089     unsigned getDiagnosticIndex() const {
   3090       static_assert(CXXInvalid > CXXDestructor,
   3091                     "invalid should have highest index");
   3092       static_assert((unsigned)DefaultedComparisonKind::None == 0,
   3093                     "none should be equal to zero");
   3094       return SpecialMember + (unsigned)Comparison;
   3095     }
   3096   };
   3097 
   3098   DefaultedFunctionKind getDefaultedFunctionKind(const FunctionDecl *FD);
   3099 
   3100   CXXSpecialMember getSpecialMember(const CXXMethodDecl *MD) {
   3101     return getDefaultedFunctionKind(MD).asSpecialMember();
   3102   }
   3103   DefaultedComparisonKind getDefaultedComparisonKind(const FunctionDecl *FD) {
   3104     return getDefaultedFunctionKind(FD).asComparison();
   3105   }
   3106 
   3107   void ActOnLastBitfield(SourceLocation DeclStart,
   3108                          SmallVectorImpl<Decl *> &AllIvarDecls);
   3109   Decl *ActOnIvar(Scope *S, SourceLocation DeclStart,
   3110                   Declarator &D, Expr *BitfieldWidth,
   3111                   tok::ObjCKeywordKind visibility);
   3112 
   3113   // This is used for both record definitions and ObjC interface declarations.
   3114   void ActOnFields(Scope *S, SourceLocation RecLoc, Decl *TagDecl,
   3115                    ArrayRef<Decl *> Fields, SourceLocation LBrac,
   3116                    SourceLocation RBrac, const ParsedAttributesView &AttrList);
   3117 
   3118   /// ActOnTagStartDefinition - Invoked when we have entered the
   3119   /// scope of a tag's definition (e.g., for an enumeration, class,
   3120   /// struct, or union).
   3121   void ActOnTagStartDefinition(Scope *S, Decl *TagDecl);
   3122 
   3123   /// Perform ODR-like check for C/ObjC when merging tag types from modules.
   3124   /// Differently from C++, actually parse the body and reject / error out
   3125   /// in case of a structural mismatch.
   3126   bool ActOnDuplicateDefinition(DeclSpec &DS, Decl *Prev,
   3127                                 SkipBodyInfo &SkipBody);
   3128 
   3129   typedef void *SkippedDefinitionContext;
   3130 
   3131   /// Invoked when we enter a tag definition that we're skipping.
   3132   SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD);
   3133 
   3134   Decl *ActOnObjCContainerStartDefinition(Decl *IDecl);
   3135 
   3136   /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a
   3137   /// C++ record definition's base-specifiers clause and are starting its
   3138   /// member declarations.
   3139   void ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagDecl,
   3140                                        SourceLocation FinalLoc,
   3141                                        bool IsFinalSpelledSealed,
   3142                                        SourceLocation LBraceLoc);
   3143 
   3144   /// ActOnTagFinishDefinition - Invoked once we have finished parsing
   3145   /// the definition of a tag (enumeration, class, struct, or union).
   3146   void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl,
   3147                                 SourceRange BraceRange);
   3148 
   3149   void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context);
   3150 
   3151   void ActOnObjCContainerFinishDefinition();
   3152 
   3153   /// Invoked when we must temporarily exit the objective-c container
   3154   /// scope for parsing/looking-up C constructs.
   3155   ///
   3156   /// Must be followed by a call to \see ActOnObjCReenterContainerContext
   3157   void ActOnObjCTemporaryExitContainerContext(DeclContext *DC);
   3158   void ActOnObjCReenterContainerContext(DeclContext *DC);
   3159 
   3160   /// ActOnTagDefinitionError - Invoked when there was an unrecoverable
   3161   /// error parsing the definition of a tag.
   3162   void ActOnTagDefinitionError(Scope *S, Decl *TagDecl);
   3163 
   3164   EnumConstantDecl *CheckEnumConstant(EnumDecl *Enum,
   3165                                       EnumConstantDecl *LastEnumConst,
   3166                                       SourceLocation IdLoc,
   3167                                       IdentifierInfo *Id,
   3168                                       Expr *val);
   3169   bool CheckEnumUnderlyingType(TypeSourceInfo *TI);
   3170   bool CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
   3171                               QualType EnumUnderlyingTy, bool IsFixed,
   3172                               const EnumDecl *Prev);
   3173 
   3174   /// Determine whether the body of an anonymous enumeration should be skipped.
   3175   /// \param II The name of the first enumerator.
   3176   SkipBodyInfo shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II,
   3177                                       SourceLocation IILoc);
   3178 
   3179   Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant,
   3180                           SourceLocation IdLoc, IdentifierInfo *Id,
   3181                           const ParsedAttributesView &Attrs,
   3182                           SourceLocation EqualLoc, Expr *Val);
   3183   void ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange,
   3184                      Decl *EnumDecl, ArrayRef<Decl *> Elements, Scope *S,
   3185                      const ParsedAttributesView &Attr);
   3186 
   3187   /// Set the current declaration context until it gets popped.
   3188   void PushDeclContext(Scope *S, DeclContext *DC);
   3189   void PopDeclContext();
   3190 
   3191   /// EnterDeclaratorContext - Used when we must lookup names in the context
   3192   /// of a declarator's nested name specifier.
   3193   void EnterDeclaratorContext(Scope *S, DeclContext *DC);
   3194   void ExitDeclaratorContext(Scope *S);
   3195 
   3196   /// Enter a template parameter scope, after it's been associated with a particular
   3197   /// DeclContext. Causes lookup within the scope to chain through enclosing contexts
   3198   /// in the correct order.
   3199   void EnterTemplatedContext(Scope *S, DeclContext *DC);
   3200 
   3201   /// Push the parameters of D, which must be a function, into scope.
   3202   void ActOnReenterFunctionContext(Scope* S, Decl* D);
   3203   void ActOnExitFunctionContext();
   3204 
   3205   DeclContext *getFunctionLevelDeclContext();
   3206 
   3207   /// getCurFunctionDecl - If inside of a function body, this returns a pointer
   3208   /// to the function decl for the function being parsed.  If we're currently
   3209   /// in a 'block', this returns the containing context.
   3210   FunctionDecl *getCurFunctionDecl();
   3211 
   3212   /// getCurMethodDecl - If inside of a method body, this returns a pointer to
   3213   /// the method decl for the method being parsed.  If we're currently
   3214   /// in a 'block', this returns the containing context.
   3215   ObjCMethodDecl *getCurMethodDecl();
   3216 
   3217   /// getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method
   3218   /// or C function we're in, otherwise return null.  If we're currently
   3219   /// in a 'block', this returns the containing context.
   3220   NamedDecl *getCurFunctionOrMethodDecl();
   3221 
   3222   /// Add this decl to the scope shadowed decl chains.
   3223   void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true);
   3224 
   3225   /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true
   3226   /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns
   3227   /// true if 'D' belongs to the given declaration context.
   3228   ///
   3229   /// \param AllowInlineNamespace If \c true, allow the declaration to be in the
   3230   ///        enclosing namespace set of the context, rather than contained
   3231   ///        directly within it.
   3232   bool isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S = nullptr,
   3233                      bool AllowInlineNamespace = false);
   3234 
   3235   /// Finds the scope corresponding to the given decl context, if it
   3236   /// happens to be an enclosing scope.  Otherwise return NULL.
   3237   static Scope *getScopeForDeclContext(Scope *S, DeclContext *DC);
   3238 
   3239   /// Subroutines of ActOnDeclarator().
   3240   TypedefDecl *ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
   3241                                 TypeSourceInfo *TInfo);
   3242   bool isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New);
   3243 
   3244   /// Describes the kind of merge to perform for availability
   3245   /// attributes (including "deprecated", "unavailable", and "availability").
   3246   enum AvailabilityMergeKind {
   3247     /// Don't merge availability attributes at all.
   3248     AMK_None,
   3249     /// Merge availability attributes for a redeclaration, which requires
   3250     /// an exact match.
   3251     AMK_Redeclaration,
   3252     /// Merge availability attributes for an override, which requires
   3253     /// an exact match or a weakening of constraints.
   3254     AMK_Override,
   3255     /// Merge availability attributes for an implementation of
   3256     /// a protocol requirement.
   3257     AMK_ProtocolImplementation,
   3258     /// Merge availability attributes for an implementation of
   3259     /// an optional protocol requirement.
   3260     AMK_OptionalProtocolImplementation
   3261   };
   3262 
   3263   /// Describes the kind of priority given to an availability attribute.
   3264   ///
   3265   /// The sum of priorities deteremines the final priority of the attribute.
   3266   /// The final priority determines how the attribute will be merged.
   3267   /// An attribute with a lower priority will always remove higher priority
   3268   /// attributes for the specified platform when it is being applied. An
   3269   /// attribute with a higher priority will not be applied if the declaration
   3270   /// already has an availability attribute with a lower priority for the
   3271   /// specified platform. The final prirority values are not expected to match
   3272   /// the values in this enumeration, but instead should be treated as a plain
   3273   /// integer value. This enumeration just names the priority weights that are
   3274   /// used to calculate that final vaue.
   3275   enum AvailabilityPriority : int {
   3276     /// The availability attribute was specified explicitly next to the
   3277     /// declaration.
   3278     AP_Explicit = 0,
   3279 
   3280     /// The availability attribute was applied using '#pragma clang attribute'.
   3281     AP_PragmaClangAttribute = 1,
   3282 
   3283     /// The availability attribute for a specific platform was inferred from
   3284     /// an availability attribute for another platform.
   3285     AP_InferredFromOtherPlatform = 2
   3286   };
   3287 
   3288   /// Attribute merging methods. Return true if a new attribute was added.
   3289   AvailabilityAttr *
   3290   mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI,
   3291                         IdentifierInfo *Platform, bool Implicit,
   3292                         VersionTuple Introduced, VersionTuple Deprecated,
   3293                         VersionTuple Obsoleted, bool IsUnavailable,
   3294                         StringRef Message, bool IsStrict, StringRef Replacement,
   3295                         AvailabilityMergeKind AMK, int Priority);
   3296   TypeVisibilityAttr *
   3297   mergeTypeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI,
   3298                           TypeVisibilityAttr::VisibilityType Vis);
   3299   VisibilityAttr *mergeVisibilityAttr(Decl *D, const AttributeCommonInfo &CI,
   3300                                       VisibilityAttr::VisibilityType Vis);
   3301   UuidAttr *mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI,
   3302                           StringRef UuidAsWritten, MSGuidDecl *GuidDecl);
   3303   DLLImportAttr *mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI);
   3304   DLLExportAttr *mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI);
   3305   MSInheritanceAttr *mergeMSInheritanceAttr(Decl *D,
   3306                                             const AttributeCommonInfo &CI,
   3307                                             bool BestCase,
   3308                                             MSInheritanceModel Model);
   3309   FormatAttr *mergeFormatAttr(Decl *D, const AttributeCommonInfo &CI,
   3310                               IdentifierInfo *Format, int FormatIdx,
   3311                               int FirstArg);
   3312   SectionAttr *mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI,
   3313                                 StringRef Name);
   3314   CodeSegAttr *mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI,
   3315                                 StringRef Name);
   3316   AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D,
   3317                                           const AttributeCommonInfo &CI,
   3318                                           const IdentifierInfo *Ident);
   3319   MinSizeAttr *mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI);
   3320   SwiftNameAttr *mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA,
   3321                                     StringRef Name);
   3322   OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D,
   3323                                           const AttributeCommonInfo &CI);
   3324   InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL);
   3325   InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D,
   3326                                                 const InternalLinkageAttr &AL);
   3327   WebAssemblyImportNameAttr *mergeImportNameAttr(
   3328       Decl *D, const WebAssemblyImportNameAttr &AL);
   3329   WebAssemblyImportModuleAttr *mergeImportModuleAttr(
   3330       Decl *D, const WebAssemblyImportModuleAttr &AL);
   3331   EnforceTCBAttr *mergeEnforceTCBAttr(Decl *D, const EnforceTCBAttr &AL);
   3332   EnforceTCBLeafAttr *mergeEnforceTCBLeafAttr(Decl *D,
   3333                                               const EnforceTCBLeafAttr &AL);
   3334 
   3335   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
   3336                            AvailabilityMergeKind AMK = AMK_Redeclaration);
   3337   void MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New,
   3338                             LookupResult &OldDecls);
   3339   bool MergeFunctionDecl(FunctionDecl *New, NamedDecl *&Old, Scope *S,
   3340                          bool MergeTypeWithOld);
   3341   bool MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
   3342                                     Scope *S, bool MergeTypeWithOld);
   3343   void mergeObjCMethodDecls(ObjCMethodDecl *New, ObjCMethodDecl *Old);
   3344   void MergeVarDecl(VarDecl *New, LookupResult &Previous);
   3345   void MergeVarDeclTypes(VarDecl *New, VarDecl *Old, bool MergeTypeWithOld);
   3346   void MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old);
   3347   bool checkVarDeclRedefinition(VarDecl *OldDefn, VarDecl *NewDefn);
   3348   void notePreviousDefinition(const NamedDecl *Old, SourceLocation New);
   3349   bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S);
   3350 
   3351   // AssignmentAction - This is used by all the assignment diagnostic functions
   3352   // to represent what is actually causing the operation
   3353   enum AssignmentAction {
   3354     AA_Assigning,
   3355     AA_Passing,
   3356     AA_Returning,
   3357     AA_Converting,
   3358     AA_Initializing,
   3359     AA_Sending,
   3360     AA_Casting,
   3361     AA_Passing_CFAudited
   3362   };
   3363 
   3364   /// C++ Overloading.
   3365   enum OverloadKind {
   3366     /// This is a legitimate overload: the existing declarations are
   3367     /// functions or function templates with different signatures.
   3368     Ovl_Overload,
   3369 
   3370     /// This is not an overload because the signature exactly matches
   3371     /// an existing declaration.
   3372     Ovl_Match,
   3373 
   3374     /// This is not an overload because the lookup results contain a
   3375     /// non-function.
   3376     Ovl_NonFunction
   3377   };
   3378   OverloadKind CheckOverload(Scope *S,
   3379                              FunctionDecl *New,
   3380                              const LookupResult &OldDecls,
   3381                              NamedDecl *&OldDecl,
   3382                              bool IsForUsingDecl);
   3383   bool IsOverload(FunctionDecl *New, FunctionDecl *Old, bool IsForUsingDecl,
   3384                   bool ConsiderCudaAttrs = true,
   3385                   bool ConsiderRequiresClauses = true);
   3386 
   3387   enum class AllowedExplicit {
   3388     /// Allow no explicit functions to be used.
   3389     None,
   3390     /// Allow explicit conversion functions but not explicit constructors.
   3391     Conversions,
   3392     /// Allow both explicit conversion functions and explicit constructors.
   3393     All
   3394   };
   3395 
   3396   ImplicitConversionSequence
   3397   TryImplicitConversion(Expr *From, QualType ToType,
   3398                         bool SuppressUserConversions,
   3399                         AllowedExplicit AllowExplicit,
   3400                         bool InOverloadResolution,
   3401                         bool CStyle,
   3402                         bool AllowObjCWritebackConversion);
   3403 
   3404   bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType);
   3405   bool IsFloatingPointPromotion(QualType FromType, QualType ToType);
   3406   bool IsComplexPromotion(QualType FromType, QualType ToType);
   3407   bool IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
   3408                            bool InOverloadResolution,
   3409                            QualType& ConvertedType, bool &IncompatibleObjC);
   3410   bool isObjCPointerConversion(QualType FromType, QualType ToType,
   3411                                QualType& ConvertedType, bool &IncompatibleObjC);
   3412   bool isObjCWritebackConversion(QualType FromType, QualType ToType,
   3413                                  QualType &ConvertedType);
   3414   bool IsBlockPointerConversion(QualType FromType, QualType ToType,
   3415                                 QualType& ConvertedType);
   3416   bool FunctionParamTypesAreEqual(const FunctionProtoType *OldType,
   3417                                   const FunctionProtoType *NewType,
   3418                                   unsigned *ArgPos = nullptr);
   3419   void HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
   3420                                   QualType FromType, QualType ToType);
   3421 
   3422   void maybeExtendBlockObject(ExprResult &E);
   3423   CastKind PrepareCastToObjCObjectPointer(ExprResult &E);
   3424   bool CheckPointerConversion(Expr *From, QualType ToType,
   3425                               CastKind &Kind,
   3426                               CXXCastPath& BasePath,
   3427                               bool IgnoreBaseAccess,
   3428                               bool Diagnose = true);
   3429   bool IsMemberPointerConversion(Expr *From, QualType FromType, QualType ToType,
   3430                                  bool InOverloadResolution,
   3431                                  QualType &ConvertedType);
   3432   bool CheckMemberPointerConversion(Expr *From, QualType ToType,
   3433                                     CastKind &Kind,
   3434                                     CXXCastPath &BasePath,
   3435                                     bool IgnoreBaseAccess);
   3436   bool IsQualificationConversion(QualType FromType, QualType ToType,
   3437                                  bool CStyle, bool &ObjCLifetimeConversion);
   3438   bool IsFunctionConversion(QualType FromType, QualType ToType,
   3439                             QualType &ResultTy);
   3440   bool DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType);
   3441   bool isSameOrCompatibleFunctionType(CanQualType Param, CanQualType Arg);
   3442 
   3443   ExprResult PerformMoveOrCopyInitialization(const InitializedEntity &Entity,
   3444                                              const VarDecl *NRVOCandidate,
   3445                                              QualType ResultType,
   3446                                              Expr *Value,
   3447                                              bool AllowNRVO = true);
   3448 
   3449   bool CanPerformAggregateInitializationForOverloadResolution(
   3450       const InitializedEntity &Entity, InitListExpr *From);
   3451 
   3452   bool IsStringInit(Expr *Init, const ArrayType *AT);
   3453 
   3454   bool CanPerformCopyInitialization(const InitializedEntity &Entity,
   3455                                     ExprResult Init);
   3456   ExprResult PerformCopyInitialization(const InitializedEntity &Entity,
   3457                                        SourceLocation EqualLoc,
   3458                                        ExprResult Init,
   3459                                        bool TopLevelOfInitList = false,
   3460                                        bool AllowExplicit = false);
   3461   ExprResult PerformObjectArgumentInitialization(Expr *From,
   3462                                                  NestedNameSpecifier *Qualifier,
   3463                                                  NamedDecl *FoundDecl,
   3464                                                  CXXMethodDecl *Method);
   3465 
   3466   /// Check that the lifetime of the initializer (and its subobjects) is
   3467   /// sufficient for initializing the entity, and perform lifetime extension
   3468   /// (when permitted) if not.
   3469   void checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init);
   3470 
   3471   ExprResult PerformContextuallyConvertToBool(Expr *From);
   3472   ExprResult PerformContextuallyConvertToObjCPointer(Expr *From);
   3473 
   3474   /// Contexts in which a converted constant expression is required.
   3475   enum CCEKind {
   3476     CCEK_CaseValue,   ///< Expression in a case label.
   3477     CCEK_Enumerator,  ///< Enumerator value with fixed underlying type.
   3478     CCEK_TemplateArg, ///< Value of a non-type template parameter.
   3479     CCEK_ArrayBound,  ///< Array bound in array declarator or new-expression.
   3480     CCEK_ConstexprIf, ///< Condition in a constexpr if statement.
   3481     CCEK_ExplicitBool ///< Condition in an explicit(bool) specifier.
   3482   };
   3483   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
   3484                                               llvm::APSInt &Value, CCEKind CCE);
   3485   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
   3486                                               APValue &Value, CCEKind CCE,
   3487                                               NamedDecl *Dest = nullptr);
   3488 
   3489   /// Abstract base class used to perform a contextual implicit
   3490   /// conversion from an expression to any type passing a filter.
   3491   class ContextualImplicitConverter {
   3492   public:
   3493     bool Suppress;
   3494     bool SuppressConversion;
   3495 
   3496     ContextualImplicitConverter(bool Suppress = false,
   3497                                 bool SuppressConversion = false)
   3498         : Suppress(Suppress), SuppressConversion(SuppressConversion) {}
   3499 
   3500     /// Determine whether the specified type is a valid destination type
   3501     /// for this conversion.
   3502     virtual bool match(QualType T) = 0;
   3503 
   3504     /// Emits a diagnostic complaining that the expression does not have
   3505     /// integral or enumeration type.
   3506     virtual SemaDiagnosticBuilder
   3507     diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) = 0;
   3508 
   3509     /// Emits a diagnostic when the expression has incomplete class type.
   3510     virtual SemaDiagnosticBuilder
   3511     diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0;
   3512 
   3513     /// Emits a diagnostic when the only matching conversion function
   3514     /// is explicit.
   3515     virtual SemaDiagnosticBuilder diagnoseExplicitConv(
   3516         Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
   3517 
   3518     /// Emits a note for the explicit conversion function.
   3519     virtual SemaDiagnosticBuilder
   3520     noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
   3521 
   3522     /// Emits a diagnostic when there are multiple possible conversion
   3523     /// functions.
   3524     virtual SemaDiagnosticBuilder
   3525     diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) = 0;
   3526 
   3527     /// Emits a note for one of the candidate conversions.
   3528     virtual SemaDiagnosticBuilder
   3529     noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
   3530 
   3531     /// Emits a diagnostic when we picked a conversion function
   3532     /// (for cases when we are not allowed to pick a conversion function).
   3533     virtual SemaDiagnosticBuilder diagnoseConversion(
   3534         Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
   3535 
   3536     virtual ~ContextualImplicitConverter() {}
   3537   };
   3538 
   3539   class ICEConvertDiagnoser : public ContextualImplicitConverter {
   3540     bool AllowScopedEnumerations;
   3541 
   3542   public:
   3543     ICEConvertDiagnoser(bool AllowScopedEnumerations,
   3544                         bool Suppress, bool SuppressConversion)
   3545         : ContextualImplicitConverter(Suppress, SuppressConversion),
   3546           AllowScopedEnumerations(AllowScopedEnumerations) {}
   3547 
   3548     /// Match an integral or (possibly scoped) enumeration type.
   3549     bool match(QualType T) override;
   3550 
   3551     SemaDiagnosticBuilder
   3552     diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) override {
   3553       return diagnoseNotInt(S, Loc, T);
   3554     }
   3555 
   3556     /// Emits a diagnostic complaining that the expression does not have
   3557     /// integral or enumeration type.
   3558     virtual SemaDiagnosticBuilder
   3559     diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) = 0;
   3560   };
   3561 
   3562   /// Perform a contextual implicit conversion.
   3563   ExprResult PerformContextualImplicitConversion(
   3564       SourceLocation Loc, Expr *FromE, ContextualImplicitConverter &Converter);
   3565 
   3566 
   3567   enum ObjCSubscriptKind {
   3568     OS_Array,
   3569     OS_Dictionary,
   3570     OS_Error
   3571   };
   3572   ObjCSubscriptKind CheckSubscriptingKind(Expr *FromE);
   3573 
   3574   // Note that LK_String is intentionally after the other literals, as
   3575   // this is used for diagnostics logic.
   3576   enum ObjCLiteralKind {
   3577     LK_Array,
   3578     LK_Dictionary,
   3579     LK_Numeric,
   3580     LK_Boxed,
   3581     LK_String,
   3582     LK_Block,
   3583     LK_None
   3584   };
   3585   ObjCLiteralKind CheckLiteralKind(Expr *FromE);
   3586 
   3587   ExprResult PerformObjectMemberConversion(Expr *From,
   3588                                            NestedNameSpecifier *Qualifier,
   3589                                            NamedDecl *FoundDecl,
   3590                                            NamedDecl *Member);
   3591 
   3592   // Members have to be NamespaceDecl* or TranslationUnitDecl*.
   3593   // TODO: make this is a typesafe union.
   3594   typedef llvm::SmallSetVector<DeclContext   *, 16> AssociatedNamespaceSet;
   3595   typedef llvm::SmallSetVector<CXXRecordDecl *, 16> AssociatedClassSet;
   3596 
   3597   using ADLCallKind = CallExpr::ADLCallKind;
   3598 
   3599   void AddOverloadCandidate(FunctionDecl *Function, DeclAccessPair FoundDecl,
   3600                             ArrayRef<Expr *> Args,
   3601                             OverloadCandidateSet &CandidateSet,
   3602                             bool SuppressUserConversions = false,
   3603                             bool PartialOverloading = false,
   3604                             bool AllowExplicit = true,
   3605                             bool AllowExplicitConversion = false,
   3606                             ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
   3607                             ConversionSequenceList EarlyConversions = None,
   3608                             OverloadCandidateParamOrder PO = {});
   3609   void AddFunctionCandidates(const UnresolvedSetImpl &Functions,
   3610                       ArrayRef<Expr *> Args,
   3611                       OverloadCandidateSet &CandidateSet,
   3612                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
   3613                       bool SuppressUserConversions = false,
   3614                       bool PartialOverloading = false,
   3615                       bool FirstArgumentIsBase = false);
   3616   void AddMethodCandidate(DeclAccessPair FoundDecl,
   3617                           QualType ObjectType,
   3618                           Expr::Classification ObjectClassification,
   3619                           ArrayRef<Expr *> Args,
   3620                           OverloadCandidateSet& CandidateSet,
   3621                           bool SuppressUserConversion = false,
   3622                           OverloadCandidateParamOrder PO = {});
   3623   void AddMethodCandidate(CXXMethodDecl *Method,
   3624                           DeclAccessPair FoundDecl,
   3625                           CXXRecordDecl *ActingContext, QualType ObjectType,
   3626                           Expr::Classification ObjectClassification,
   3627                           ArrayRef<Expr *> Args,
   3628                           OverloadCandidateSet& CandidateSet,
   3629                           bool SuppressUserConversions = false,
   3630                           bool PartialOverloading = false,
   3631                           ConversionSequenceList EarlyConversions = None,
   3632                           OverloadCandidateParamOrder PO = {});
   3633   void AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
   3634                                   DeclAccessPair FoundDecl,
   3635                                   CXXRecordDecl *ActingContext,
   3636                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
   3637                                   QualType ObjectType,
   3638                                   Expr::Classification ObjectClassification,
   3639                                   ArrayRef<Expr *> Args,
   3640                                   OverloadCandidateSet& CandidateSet,
   3641                                   bool SuppressUserConversions = false,
   3642                                   bool PartialOverloading = false,
   3643                                   OverloadCandidateParamOrder PO = {});
   3644   void AddTemplateOverloadCandidate(
   3645       FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
   3646       TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
   3647       OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false,
   3648       bool PartialOverloading = false, bool AllowExplicit = true,
   3649       ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
   3650       OverloadCandidateParamOrder PO = {});
   3651   bool CheckNonDependentConversions(
   3652       FunctionTemplateDecl *FunctionTemplate, ArrayRef<QualType> ParamTypes,
   3653       ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet,
   3654       ConversionSequenceList &Conversions, bool SuppressUserConversions,
   3655       CXXRecordDecl *ActingContext = nullptr, QualType ObjectType = QualType(),
   3656       Expr::Classification ObjectClassification = {},
   3657       OverloadCandidateParamOrder PO = {});
   3658   void AddConversionCandidate(
   3659       CXXConversionDecl *Conversion, DeclAccessPair FoundDecl,
   3660       CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
   3661       OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
   3662       bool AllowExplicit, bool AllowResultConversion = true);
   3663   void AddTemplateConversionCandidate(
   3664       FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
   3665       CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
   3666       OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
   3667       bool AllowExplicit, bool AllowResultConversion = true);
   3668   void AddSurrogateCandidate(CXXConversionDecl *Conversion,
   3669                              DeclAccessPair FoundDecl,
   3670                              CXXRecordDecl *ActingContext,
   3671                              const FunctionProtoType *Proto,
   3672                              Expr *Object, ArrayRef<Expr *> Args,
   3673                              OverloadCandidateSet& CandidateSet);
   3674   void AddNonMemberOperatorCandidates(
   3675       const UnresolvedSetImpl &Functions, ArrayRef<Expr *> Args,
   3676       OverloadCandidateSet &CandidateSet,
   3677       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
   3678   void AddMemberOperatorCandidates(OverloadedOperatorKind Op,
   3679                                    SourceLocation OpLoc, ArrayRef<Expr *> Args,
   3680                                    OverloadCandidateSet &CandidateSet,
   3681                                    OverloadCandidateParamOrder PO = {});
   3682   void AddBuiltinCandidate(QualType *ParamTys, ArrayRef<Expr *> Args,
   3683                            OverloadCandidateSet& CandidateSet,
   3684                            bool IsAssignmentOperator = false,
   3685                            unsigned NumContextualBoolArguments = 0);
   3686   void AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
   3687                                     SourceLocation OpLoc, ArrayRef<Expr *> Args,
   3688                                     OverloadCandidateSet& CandidateSet);
   3689   void AddArgumentDependentLookupCandidates(DeclarationName Name,
   3690                                             SourceLocation Loc,
   3691                                             ArrayRef<Expr *> Args,
   3692                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
   3693                                             OverloadCandidateSet& CandidateSet,
   3694                                             bool PartialOverloading = false);
   3695 
   3696   // Emit as a 'note' the specific overload candidate
   3697   void NoteOverloadCandidate(
   3698       NamedDecl *Found, FunctionDecl *Fn,
   3699       OverloadCandidateRewriteKind RewriteKind = OverloadCandidateRewriteKind(),
   3700       QualType DestType = QualType(), bool TakingAddress = false);
   3701 
   3702   // Emit as a series of 'note's all template and non-templates identified by
   3703   // the expression Expr
   3704   void NoteAllOverloadCandidates(Expr *E, QualType DestType = QualType(),
   3705                                  bool TakingAddress = false);
   3706 
   3707   /// Check the enable_if expressions on the given function. Returns the first
   3708   /// failing attribute, or NULL if they were all successful.
   3709   EnableIfAttr *CheckEnableIf(FunctionDecl *Function, SourceLocation CallLoc,
   3710                               ArrayRef<Expr *> Args,
   3711                               bool MissingImplicitThis = false);
   3712 
   3713   /// Find the failed Boolean condition within a given Boolean
   3714   /// constant expression, and describe it with a string.
   3715   std::pair<Expr *, std::string> findFailedBooleanCondition(Expr *Cond);
   3716 
   3717   /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
   3718   /// non-ArgDependent DiagnoseIfAttrs.
   3719   ///
   3720   /// Argument-dependent diagnose_if attributes should be checked each time a
   3721   /// function is used as a direct callee of a function call.
   3722   ///
   3723   /// Returns true if any errors were emitted.
   3724   bool diagnoseArgDependentDiagnoseIfAttrs(const FunctionDecl *Function,
   3725                                            const Expr *ThisArg,
   3726                                            ArrayRef<const Expr *> Args,
   3727                                            SourceLocation Loc);
   3728 
   3729   /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
   3730   /// ArgDependent DiagnoseIfAttrs.
   3731   ///
   3732   /// Argument-independent diagnose_if attributes should be checked on every use
   3733   /// of a function.
   3734   ///
   3735   /// Returns true if any errors were emitted.
   3736   bool diagnoseArgIndependentDiagnoseIfAttrs(const NamedDecl *ND,
   3737                                              SourceLocation Loc);
   3738 
   3739   /// Returns whether the given function's address can be taken or not,
   3740   /// optionally emitting a diagnostic if the address can't be taken.
   3741   ///
   3742   /// Returns false if taking the address of the function is illegal.
   3743   bool checkAddressOfFunctionIsAvailable(const FunctionDecl *Function,
   3744                                          bool Complain = false,
   3745                                          SourceLocation Loc = SourceLocation());
   3746 
   3747   // [PossiblyAFunctionType]  -->   [Return]
   3748   // NonFunctionType --> NonFunctionType
   3749   // R (A) --> R(A)
   3750   // R (*)(A) --> R (A)
   3751   // R (&)(A) --> R (A)
   3752   // R (S::*)(A) --> R (A)
   3753   QualType ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType);
   3754 
   3755   FunctionDecl *
   3756   ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
   3757                                      QualType TargetType,
   3758                                      bool Complain,
   3759                                      DeclAccessPair &Found,
   3760                                      bool *pHadMultipleCandidates = nullptr);
   3761 
   3762   FunctionDecl *
   3763   resolveAddressOfSingleOverloadCandidate(Expr *E, DeclAccessPair &FoundResult);
   3764 
   3765   bool resolveAndFixAddressOfSingleOverloadCandidate(
   3766       ExprResult &SrcExpr, bool DoFunctionPointerConversion = false);
   3767 
   3768   FunctionDecl *
   3769   ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
   3770                                               bool Complain = false,
   3771                                               DeclAccessPair *Found = nullptr);
   3772 
   3773   bool ResolveAndFixSingleFunctionTemplateSpecialization(
   3774                       ExprResult &SrcExpr,
   3775                       bool DoFunctionPointerConverion = false,
   3776                       bool Complain = false,
   3777                       SourceRange OpRangeForComplaining = SourceRange(),
   3778                       QualType DestTypeForComplaining = QualType(),
   3779                       unsigned DiagIDForComplaining = 0);
   3780 
   3781 
   3782   Expr *FixOverloadedFunctionReference(Expr *E,
   3783                                        DeclAccessPair FoundDecl,
   3784                                        FunctionDecl *Fn);
   3785   ExprResult FixOverloadedFunctionReference(ExprResult,
   3786                                             DeclAccessPair FoundDecl,
   3787                                             FunctionDecl *Fn);
   3788 
   3789   void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
   3790                                    ArrayRef<Expr *> Args,
   3791                                    OverloadCandidateSet &CandidateSet,
   3792                                    bool PartialOverloading = false);
   3793   void AddOverloadedCallCandidates(
   3794       LookupResult &R, TemplateArgumentListInfo *ExplicitTemplateArgs,
   3795       ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet);
   3796 
   3797   // An enum used to represent the different possible results of building a
   3798   // range-based for loop.
   3799   enum ForRangeStatus {
   3800     FRS_Success,
   3801     FRS_NoViableFunction,
   3802     FRS_DiagnosticIssued
   3803   };
   3804 
   3805   ForRangeStatus BuildForRangeBeginEndCall(SourceLocation Loc,
   3806                                            SourceLocation RangeLoc,
   3807                                            const DeclarationNameInfo &NameInfo,
   3808                                            LookupResult &MemberLookup,
   3809                                            OverloadCandidateSet *CandidateSet,
   3810                                            Expr *Range, ExprResult *CallExpr);
   3811 
   3812   ExprResult BuildOverloadedCallExpr(Scope *S, Expr *Fn,
   3813                                      UnresolvedLookupExpr *ULE,
   3814                                      SourceLocation LParenLoc,
   3815                                      MultiExprArg Args,
   3816                                      SourceLocation RParenLoc,
   3817                                      Expr *ExecConfig,
   3818                                      bool AllowTypoCorrection=true,
   3819                                      bool CalleesAddressIsTaken=false);
   3820 
   3821   bool buildOverloadedCallSet(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
   3822                               MultiExprArg Args, SourceLocation RParenLoc,
   3823                               OverloadCandidateSet *CandidateSet,
   3824                               ExprResult *Result);
   3825 
   3826   ExprResult CreateUnresolvedLookupExpr(CXXRecordDecl *NamingClass,
   3827                                         NestedNameSpecifierLoc NNSLoc,
   3828                                         DeclarationNameInfo DNI,
   3829                                         const UnresolvedSetImpl &Fns,
   3830                                         bool PerformADL = true);
   3831 
   3832   ExprResult CreateOverloadedUnaryOp(SourceLocation OpLoc,
   3833                                      UnaryOperatorKind Opc,
   3834                                      const UnresolvedSetImpl &Fns,
   3835                                      Expr *input, bool RequiresADL = true);
   3836 
   3837   void LookupOverloadedBinOp(OverloadCandidateSet &CandidateSet,
   3838                              OverloadedOperatorKind Op,
   3839                              const UnresolvedSetImpl &Fns,
   3840                              ArrayRef<Expr *> Args, bool RequiresADL = true);
   3841   ExprResult CreateOverloadedBinOp(SourceLocation OpLoc,
   3842                                    BinaryOperatorKind Opc,
   3843                                    const UnresolvedSetImpl &Fns,
   3844                                    Expr *LHS, Expr *RHS,
   3845                                    bool RequiresADL = true,
   3846                                    bool AllowRewrittenCandidates = true,
   3847                                    FunctionDecl *DefaultedFn = nullptr);
   3848   ExprResult BuildSynthesizedThreeWayComparison(SourceLocation OpLoc,
   3849                                                 const UnresolvedSetImpl &Fns,
   3850                                                 Expr *LHS, Expr *RHS,
   3851                                                 FunctionDecl *DefaultedFn);
   3852 
   3853   ExprResult CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
   3854                                                 SourceLocation RLoc,
   3855                                                 Expr *Base,Expr *Idx);
   3856 
   3857   ExprResult BuildCallToMemberFunction(Scope *S, Expr *MemExpr,
   3858                                        SourceLocation LParenLoc,
   3859                                        MultiExprArg Args,
   3860                                        SourceLocation RParenLoc,
   3861                                        bool AllowRecovery = false);
   3862   ExprResult
   3863   BuildCallToObjectOfClassType(Scope *S, Expr *Object, SourceLocation LParenLoc,
   3864                                MultiExprArg Args,
   3865                                SourceLocation RParenLoc);
   3866 
   3867   ExprResult BuildOverloadedArrowExpr(Scope *S, Expr *Base,
   3868                                       SourceLocation OpLoc,
   3869                                       bool *NoArrowOperatorFound = nullptr);
   3870 
   3871   /// CheckCallReturnType - Checks that a call expression's return type is
   3872   /// complete. Returns true on failure. The location passed in is the location
   3873   /// that best represents the call.
   3874   bool CheckCallReturnType(QualType ReturnType, SourceLocation Loc,
   3875                            CallExpr *CE, FunctionDecl *FD);
   3876 
   3877   /// Helpers for dealing with blocks and functions.
   3878   bool CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters,
   3879                                 bool CheckParameterNames);
   3880   void CheckCXXDefaultArguments(FunctionDecl *FD);
   3881   void CheckExtraCXXDefaultArguments(Declarator &D);
   3882   Scope *getNonFieldDeclScope(Scope *S);
   3883 
   3884   /// \name Name lookup
   3885   ///
   3886   /// These routines provide name lookup that is used during semantic
   3887   /// analysis to resolve the various kinds of names (identifiers,
   3888   /// overloaded operator names, constructor names, etc.) into zero or
   3889   /// more declarations within a particular scope. The major entry
   3890   /// points are LookupName, which performs unqualified name lookup,
   3891   /// and LookupQualifiedName, which performs qualified name lookup.
   3892   ///
   3893   /// All name lookup is performed based on some specific criteria,
   3894   /// which specify what names will be visible to name lookup and how
   3895   /// far name lookup should work. These criteria are important both
   3896   /// for capturing language semantics (certain lookups will ignore
   3897   /// certain names, for example) and for performance, since name
   3898   /// lookup is often a bottleneck in the compilation of C++. Name
   3899   /// lookup criteria is specified via the LookupCriteria enumeration.
   3900   ///
   3901   /// The results of name lookup can vary based on the kind of name
   3902   /// lookup performed, the current language, and the translation
   3903   /// unit. In C, for example, name lookup will either return nothing
   3904   /// (no entity found) or a single declaration. In C++, name lookup
   3905   /// can additionally refer to a set of overloaded functions or
   3906   /// result in an ambiguity. All of the possible results of name
   3907   /// lookup are captured by the LookupResult class, which provides
   3908   /// the ability to distinguish among them.
   3909   //@{
   3910 
   3911   /// Describes the kind of name lookup to perform.
   3912   enum LookupNameKind {
   3913     /// Ordinary name lookup, which finds ordinary names (functions,
   3914     /// variables, typedefs, etc.) in C and most kinds of names
   3915     /// (functions, variables, members, types, etc.) in C++.
   3916     LookupOrdinaryName = 0,
   3917     /// Tag name lookup, which finds the names of enums, classes,
   3918     /// structs, and unions.
   3919     LookupTagName,
   3920     /// Label name lookup.
   3921     LookupLabel,
   3922     /// Member name lookup, which finds the names of
   3923     /// class/struct/union members.
   3924     LookupMemberName,
   3925     /// Look up of an operator name (e.g., operator+) for use with
   3926     /// operator overloading. This lookup is similar to ordinary name
   3927     /// lookup, but will ignore any declarations that are class members.
   3928     LookupOperatorName,
   3929     /// Look up a name following ~ in a destructor name. This is an ordinary
   3930     /// lookup, but prefers tags to typedefs.
   3931     LookupDestructorName,
   3932     /// Look up of a name that precedes the '::' scope resolution
   3933     /// operator in C++. This lookup completely ignores operator, object,
   3934     /// function, and enumerator names (C++ [basic.lookup.qual]p1).
   3935     LookupNestedNameSpecifierName,
   3936     /// Look up a namespace name within a C++ using directive or
   3937     /// namespace alias definition, ignoring non-namespace names (C++
   3938     /// [basic.lookup.udir]p1).
   3939     LookupNamespaceName,
   3940     /// Look up all declarations in a scope with the given name,
   3941     /// including resolved using declarations.  This is appropriate
   3942     /// for checking redeclarations for a using declaration.
   3943     LookupUsingDeclName,
   3944     /// Look up an ordinary name that is going to be redeclared as a
   3945     /// name with linkage. This lookup ignores any declarations that
   3946     /// are outside of the current scope unless they have linkage. See
   3947     /// C99 6.2.2p4-5 and C++ [basic.link]p6.
   3948     LookupRedeclarationWithLinkage,
   3949     /// Look up a friend of a local class. This lookup does not look
   3950     /// outside the innermost non-class scope. See C++11 [class.friend]p11.
   3951     LookupLocalFriendName,
   3952     /// Look up the name of an Objective-C protocol.
   3953     LookupObjCProtocolName,
   3954     /// Look up implicit 'self' parameter of an objective-c method.
   3955     LookupObjCImplicitSelfParam,
   3956     /// Look up the name of an OpenMP user-defined reduction operation.
   3957     LookupOMPReductionName,
   3958     /// Look up the name of an OpenMP user-defined mapper.
   3959     LookupOMPMapperName,
   3960     /// Look up any declaration with any name.
   3961     LookupAnyName
   3962   };
   3963 
   3964   /// Specifies whether (or how) name lookup is being performed for a
   3965   /// redeclaration (vs. a reference).
   3966   enum RedeclarationKind {
   3967     /// The lookup is a reference to this name that is not for the
   3968     /// purpose of redeclaring the name.
   3969     NotForRedeclaration = 0,
   3970     /// The lookup results will be used for redeclaration of a name,
   3971     /// if an entity by that name already exists and is visible.
   3972     ForVisibleRedeclaration,
   3973     /// The lookup results will be used for redeclaration of a name
   3974     /// with external linkage; non-visible lookup results with external linkage
   3975     /// may also be found.
   3976     ForExternalRedeclaration
   3977   };
   3978 
   3979   RedeclarationKind forRedeclarationInCurContext() {
   3980     // A declaration with an owning module for linkage can never link against
   3981     // anything that is not visible. We don't need to check linkage here; if
   3982     // the context has internal linkage, redeclaration lookup won't find things
   3983     // from other TUs, and we can't safely compute linkage yet in general.
   3984     if (cast<Decl>(CurContext)
   3985             ->getOwningModuleForLinkage(/*IgnoreLinkage*/true))
   3986       return ForVisibleRedeclaration;
   3987     return ForExternalRedeclaration;
   3988   }
   3989 
   3990   /// The possible outcomes of name lookup for a literal operator.
   3991   enum LiteralOperatorLookupResult {
   3992     /// The lookup resulted in an error.
   3993     LOLR_Error,
   3994     /// The lookup found no match but no diagnostic was issued.
   3995     LOLR_ErrorNoDiagnostic,
   3996     /// The lookup found a single 'cooked' literal operator, which
   3997     /// expects a normal literal to be built and passed to it.
   3998     LOLR_Cooked,
   3999     /// The lookup found a single 'raw' literal operator, which expects
   4000     /// a string literal containing the spelling of the literal token.
   4001     LOLR_Raw,
   4002     /// The lookup found an overload set of literal operator templates,
   4003     /// which expect the characters of the spelling of the literal token to be
   4004     /// passed as a non-type template argument pack.
   4005     LOLR_Template,
   4006     /// The lookup found an overload set of literal operator templates,
   4007     /// which expect the character type and characters of the spelling of the
   4008     /// string literal token to be passed as template arguments.
   4009     LOLR_StringTemplatePack,
   4010   };
   4011 
   4012   SpecialMemberOverloadResult LookupSpecialMember(CXXRecordDecl *D,
   4013                                                   CXXSpecialMember SM,
   4014                                                   bool ConstArg,
   4015                                                   bool VolatileArg,
   4016                                                   bool RValueThis,
   4017                                                   bool ConstThis,
   4018                                                   bool VolatileThis);
   4019 
   4020   typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator;
   4021   typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)>
   4022       TypoRecoveryCallback;
   4023 
   4024 private:
   4025   bool CppLookupName(LookupResult &R, Scope *S);
   4026 
   4027   struct TypoExprState {
   4028     std::unique_ptr<TypoCorrectionConsumer> Consumer;
   4029     TypoDiagnosticGenerator DiagHandler;
   4030     TypoRecoveryCallback RecoveryHandler;
   4031     TypoExprState();
   4032     TypoExprState(TypoExprState &&other) noexcept;
   4033     TypoExprState &operator=(TypoExprState &&other) noexcept;
   4034   };
   4035 
   4036   /// The set of unhandled TypoExprs and their associated state.
   4037   llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos;
   4038 
   4039   /// Creates a new TypoExpr AST node.
   4040   TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC,
   4041                               TypoDiagnosticGenerator TDG,
   4042                               TypoRecoveryCallback TRC, SourceLocation TypoLoc);
   4043 
   4044   // The set of known/encountered (unique, canonicalized) NamespaceDecls.
   4045   //
   4046   // The boolean value will be true to indicate that the namespace was loaded
   4047   // from an AST/PCH file, or false otherwise.
   4048   llvm::MapVector<NamespaceDecl*, bool> KnownNamespaces;
   4049 
   4050   /// Whether we have already loaded known namespaces from an extenal
   4051   /// source.
   4052   bool LoadedExternalKnownNamespaces;
   4053 
   4054   /// Helper for CorrectTypo and CorrectTypoDelayed used to create and
   4055   /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction
   4056   /// should be skipped entirely.
   4057   std::unique_ptr<TypoCorrectionConsumer>
   4058   makeTypoCorrectionConsumer(const DeclarationNameInfo &Typo,
   4059                              Sema::LookupNameKind LookupKind, Scope *S,
   4060                              CXXScopeSpec *SS,
   4061                              CorrectionCandidateCallback &CCC,
   4062                              DeclContext *MemberContext, bool EnteringContext,
   4063                              const ObjCObjectPointerType *OPT,
   4064                              bool ErrorRecovery);
   4065 
   4066 public:
   4067   const TypoExprState &getTypoExprState(TypoExpr *TE) const;
   4068 
   4069   /// Clears the state of the given TypoExpr.
   4070   void clearDelayedTypo(TypoExpr *TE);
   4071 
   4072   /// Look up a name, looking for a single declaration.  Return
   4073   /// null if the results were absent, ambiguous, or overloaded.
   4074   ///
   4075   /// It is preferable to use the elaborated form and explicitly handle
   4076   /// ambiguity and overloaded.
   4077   NamedDecl *LookupSingleName(Scope *S, DeclarationName Name,
   4078                               SourceLocation Loc,
   4079                               LookupNameKind NameKind,
   4080                               RedeclarationKind Redecl
   4081                                 = NotForRedeclaration);
   4082   bool LookupBuiltin(LookupResult &R);
   4083   void LookupNecessaryTypesForBuiltin(Scope *S, unsigned ID);
   4084   bool LookupName(LookupResult &R, Scope *S,
   4085                   bool AllowBuiltinCreation = false);
   4086   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
   4087                            bool InUnqualifiedLookup = false);
   4088   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
   4089                            CXXScopeSpec &SS);
   4090   bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS,
   4091                         bool AllowBuiltinCreation = false,
   4092                         bool EnteringContext = false);
   4093   ObjCProtocolDecl *LookupProtocol(IdentifierInfo *II, SourceLocation IdLoc,
   4094                                    RedeclarationKind Redecl
   4095                                      = NotForRedeclaration);
   4096   bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class);
   4097 
   4098   void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,
   4099                                     UnresolvedSetImpl &Functions);
   4100 
   4101   LabelDecl *LookupOrCreateLabel(IdentifierInfo *II, SourceLocation IdentLoc,
   4102                                  SourceLocation GnuLabelLoc = SourceLocation());
   4103 
   4104   DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class);
   4105   CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class);
   4106   CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class,
   4107                                                unsigned Quals);
   4108   CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals,
   4109                                          bool RValueThis, unsigned ThisQuals);
   4110   CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class,
   4111                                               unsigned Quals);
   4112   CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, unsigned Quals,
   4113                                         bool RValueThis, unsigned ThisQuals);
   4114   CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class);
   4115 
   4116   bool checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Id);
   4117   LiteralOperatorLookupResult
   4118   LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys,
   4119                         bool AllowRaw, bool AllowTemplate,
   4120                         bool AllowStringTemplate, bool DiagnoseMissing,
   4121                         StringLiteral *StringLit = nullptr);
   4122   bool isKnownName(StringRef name);
   4123 
   4124   /// Status of the function emission on the CUDA/HIP/OpenMP host/device attrs.
   4125   enum class FunctionEmissionStatus {
   4126     Emitted,
   4127     CUDADiscarded,     // Discarded due to CUDA/HIP hostness
   4128     OMPDiscarded,      // Discarded due to OpenMP hostness
   4129     TemplateDiscarded, // Discarded due to uninstantiated templates
   4130     Unknown,
   4131   };
   4132   FunctionEmissionStatus getEmissionStatus(FunctionDecl *Decl,
   4133                                            bool Final = false);
   4134 
   4135   // Whether the callee should be ignored in CUDA/HIP/OpenMP host/device check.
   4136   bool shouldIgnoreInHostDeviceCheck(FunctionDecl *Callee);
   4137 
   4138   void ArgumentDependentLookup(DeclarationName Name, SourceLocation Loc,
   4139                                ArrayRef<Expr *> Args, ADLResult &Functions);
   4140 
   4141   void LookupVisibleDecls(Scope *S, LookupNameKind Kind,
   4142                           VisibleDeclConsumer &Consumer,
   4143                           bool IncludeGlobalScope = true,
   4144                           bool LoadExternal = true);
   4145   void LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind,
   4146                           VisibleDeclConsumer &Consumer,
   4147                           bool IncludeGlobalScope = true,
   4148                           bool IncludeDependentBases = false,
   4149                           bool LoadExternal = true);
   4150 
   4151   enum CorrectTypoKind {
   4152     CTK_NonError,     // CorrectTypo used in a non error recovery situation.
   4153     CTK_ErrorRecovery // CorrectTypo used in normal error recovery.
   4154   };
   4155 
   4156   TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo,
   4157                              Sema::LookupNameKind LookupKind,
   4158                              Scope *S, CXXScopeSpec *SS,
   4159                              CorrectionCandidateCallback &CCC,
   4160                              CorrectTypoKind Mode,
   4161                              DeclContext *MemberContext = nullptr,
   4162                              bool EnteringContext = false,
   4163                              const ObjCObjectPointerType *OPT = nullptr,
   4164                              bool RecordFailure = true);
   4165 
   4166   TypoExpr *CorrectTypoDelayed(const DeclarationNameInfo &Typo,
   4167                                Sema::LookupNameKind LookupKind, Scope *S,
   4168                                CXXScopeSpec *SS,
   4169                                CorrectionCandidateCallback &CCC,
   4170                                TypoDiagnosticGenerator TDG,
   4171                                TypoRecoveryCallback TRC, CorrectTypoKind Mode,
   4172                                DeclContext *MemberContext = nullptr,
   4173                                bool EnteringContext = false,
   4174                                const ObjCObjectPointerType *OPT = nullptr);
   4175 
   4176   /// Process any TypoExprs in the given Expr and its children,
   4177   /// generating diagnostics as appropriate and returning a new Expr if there
   4178   /// were typos that were all successfully corrected and ExprError if one or
   4179   /// more typos could not be corrected.
   4180   ///
   4181   /// \param E The Expr to check for TypoExprs.
   4182   ///
   4183   /// \param InitDecl A VarDecl to avoid because the Expr being corrected is its
   4184   /// initializer.
   4185   ///
   4186   /// \param RecoverUncorrectedTypos If true, when typo correction fails, it
   4187   /// will rebuild the given Expr with all TypoExprs degraded to RecoveryExprs.
   4188   ///
   4189   /// \param Filter A function applied to a newly rebuilt Expr to determine if
   4190   /// it is an acceptable/usable result from a single combination of typo
   4191   /// corrections. As long as the filter returns ExprError, different
   4192   /// combinations of corrections will be tried until all are exhausted.
   4193   ExprResult CorrectDelayedTyposInExpr(
   4194       Expr *E, VarDecl *InitDecl = nullptr,
   4195       bool RecoverUncorrectedTypos = false,
   4196       llvm::function_ref<ExprResult(Expr *)> Filter =
   4197           [](Expr *E) -> ExprResult { return E; });
   4198 
   4199   ExprResult CorrectDelayedTyposInExpr(
   4200       ExprResult ER, VarDecl *InitDecl = nullptr,
   4201       bool RecoverUncorrectedTypos = false,
   4202       llvm::function_ref<ExprResult(Expr *)> Filter =
   4203           [](Expr *E) -> ExprResult { return E; }) {
   4204     return ER.isInvalid()
   4205                ? ER
   4206                : CorrectDelayedTyposInExpr(ER.get(), InitDecl,
   4207                                            RecoverUncorrectedTypos, Filter);
   4208   }
   4209 
   4210   void diagnoseTypo(const TypoCorrection &Correction,
   4211                     const PartialDiagnostic &TypoDiag,
   4212                     bool ErrorRecovery = true);
   4213 
   4214   void diagnoseTypo(const TypoCorrection &Correction,
   4215                     const PartialDiagnostic &TypoDiag,
   4216                     const PartialDiagnostic &PrevNote,
   4217                     bool ErrorRecovery = true);
   4218 
   4219   void MarkTypoCorrectedFunctionDefinition(const NamedDecl *F);
   4220 
   4221   void FindAssociatedClassesAndNamespaces(SourceLocation InstantiationLoc,
   4222                                           ArrayRef<Expr *> Args,
   4223                                    AssociatedNamespaceSet &AssociatedNamespaces,
   4224                                    AssociatedClassSet &AssociatedClasses);
   4225 
   4226   void FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S,
   4227                             bool ConsiderLinkage, bool AllowInlineNamespace);
   4228 
   4229   bool CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old);
   4230 
   4231   void DiagnoseAmbiguousLookup(LookupResult &Result);
   4232   //@}
   4233 
   4234   /// Attempts to produce a RecoveryExpr after some AST node cannot be created.
   4235   ExprResult CreateRecoveryExpr(SourceLocation Begin, SourceLocation End,
   4236                                 ArrayRef<Expr *> SubExprs,
   4237                                 QualType T = QualType());
   4238 
   4239   ObjCInterfaceDecl *getObjCInterfaceDecl(IdentifierInfo *&Id,
   4240                                           SourceLocation IdLoc,
   4241                                           bool TypoCorrection = false);
   4242   FunctionDecl *CreateBuiltin(IdentifierInfo *II, QualType Type, unsigned ID,
   4243                               SourceLocation Loc);
   4244   NamedDecl *LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID,
   4245                                  Scope *S, bool ForRedeclaration,
   4246                                  SourceLocation Loc);
   4247   NamedDecl *ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II,
   4248                                       Scope *S);
   4249   void AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction(
   4250       FunctionDecl *FD);
   4251   void AddKnownFunctionAttributes(FunctionDecl *FD);
   4252 
   4253   // More parsing and symbol table subroutines.
   4254 
   4255   void ProcessPragmaWeak(Scope *S, Decl *D);
   4256   // Decl attributes - this routine is the top level dispatcher.
   4257   void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD);
   4258   // Helper for delayed processing of attributes.
   4259   void ProcessDeclAttributeDelayed(Decl *D,
   4260                                    const ParsedAttributesView &AttrList);
   4261   void ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AL,
   4262                              bool IncludeCXX11Attributes = true);
   4263   bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl,
   4264                                    const ParsedAttributesView &AttrList);
   4265 
   4266   void checkUnusedDeclAttributes(Declarator &D);
   4267 
   4268   /// Handles semantic checking for features that are common to all attributes,
   4269   /// such as checking whether a parameter was properly specified, or the
   4270   /// correct number of arguments were passed, etc. Returns true if the
   4271   /// attribute has been diagnosed.
   4272   bool checkCommonAttributeFeatures(const Decl *D, const ParsedAttr &A);
   4273   bool checkCommonAttributeFeatures(const Stmt *S, const ParsedAttr &A);
   4274 
   4275   /// Determine if type T is a valid subject for a nonnull and similar
   4276   /// attributes. By default, we look through references (the behavior used by
   4277   /// nonnull), but if the second parameter is true, then we treat a reference
   4278   /// type as valid.
   4279   bool isValidPointerAttrType(QualType T, bool RefOkay = false);
   4280 
   4281   bool CheckRegparmAttr(const ParsedAttr &attr, unsigned &value);
   4282   bool CheckCallingConvAttr(const ParsedAttr &attr, CallingConv &CC,
   4283                             const FunctionDecl *FD = nullptr);
   4284   bool CheckAttrTarget(const ParsedAttr &CurrAttr);
   4285   bool CheckAttrNoArgs(const ParsedAttr &CurrAttr);
   4286   bool checkStringLiteralArgumentAttr(const ParsedAttr &Attr, unsigned ArgNum,
   4287                                       StringRef &Str,
   4288                                       SourceLocation *ArgLocation = nullptr);
   4289   llvm::Error isValidSectionSpecifier(StringRef Str);
   4290   bool checkSectionName(SourceLocation LiteralLoc, StringRef Str);
   4291   bool checkTargetAttr(SourceLocation LiteralLoc, StringRef Str);
   4292   bool checkMSInheritanceAttrOnDefinition(
   4293       CXXRecordDecl *RD, SourceRange Range, bool BestCase,
   4294       MSInheritanceModel SemanticSpelling);
   4295 
   4296   void CheckAlignasUnderalignment(Decl *D);
   4297 
   4298   /// Adjust the calling convention of a method to be the ABI default if it
   4299   /// wasn't specified explicitly.  This handles method types formed from
   4300   /// function type typedefs and typename template arguments.
   4301   void adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor,
   4302                               SourceLocation Loc);
   4303 
   4304   // Check if there is an explicit attribute, but only look through parens.
   4305   // The intent is to look for an attribute on the current declarator, but not
   4306   // one that came from a typedef.
   4307   bool hasExplicitCallingConv(QualType T);
   4308 
   4309   /// Get the outermost AttributedType node that sets a calling convention.
   4310   /// Valid types should not have multiple attributes with different CCs.
   4311   const AttributedType *getCallingConvAttributedType(QualType T) const;
   4312 
   4313   /// Process the attributes before creating an attributed statement. Returns
   4314   /// the semantic attributes that have been processed.
   4315   void ProcessStmtAttributes(Stmt *Stmt,
   4316                              const ParsedAttributesWithRange &InAttrs,
   4317                              SmallVectorImpl<const Attr *> &OutAttrs);
   4318 
   4319   void WarnConflictingTypedMethods(ObjCMethodDecl *Method,
   4320                                    ObjCMethodDecl *MethodDecl,
   4321                                    bool IsProtocolMethodDecl);
   4322 
   4323   void CheckConflictingOverridingMethod(ObjCMethodDecl *Method,
   4324                                    ObjCMethodDecl *Overridden,
   4325                                    bool IsProtocolMethodDecl);
   4326 
   4327   /// WarnExactTypedMethods - This routine issues a warning if method
   4328   /// implementation declaration matches exactly that of its declaration.
   4329   void WarnExactTypedMethods(ObjCMethodDecl *Method,
   4330                              ObjCMethodDecl *MethodDecl,
   4331                              bool IsProtocolMethodDecl);
   4332 
   4333   typedef llvm::SmallPtrSet<Selector, 8> SelectorSet;
   4334 
   4335   /// CheckImplementationIvars - This routine checks if the instance variables
   4336   /// listed in the implelementation match those listed in the interface.
   4337   void CheckImplementationIvars(ObjCImplementationDecl *ImpDecl,
   4338                                 ObjCIvarDecl **Fields, unsigned nIvars,
   4339                                 SourceLocation Loc);
   4340 
   4341   /// ImplMethodsVsClassMethods - This is main routine to warn if any method
   4342   /// remains unimplemented in the class or category \@implementation.
   4343   void ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl,
   4344                                  ObjCContainerDecl* IDecl,
   4345                                  bool IncompleteImpl = false);
   4346 
   4347   /// DiagnoseUnimplementedProperties - This routine warns on those properties
   4348   /// which must be implemented by this implementation.
   4349   void DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl,
   4350                                        ObjCContainerDecl *CDecl,
   4351                                        bool SynthesizeProperties);
   4352 
   4353   /// Diagnose any null-resettable synthesized setters.
   4354   void diagnoseNullResettableSynthesizedSetters(const ObjCImplDecl *impDecl);
   4355 
   4356   /// DefaultSynthesizeProperties - This routine default synthesizes all
   4357   /// properties which must be synthesized in the class's \@implementation.
   4358   void DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl,
   4359                                    ObjCInterfaceDecl *IDecl,
   4360                                    SourceLocation AtEnd);
   4361   void DefaultSynthesizeProperties(Scope *S, Decl *D, SourceLocation AtEnd);
   4362 
   4363   /// IvarBacksCurrentMethodAccessor - This routine returns 'true' if 'IV' is
   4364   /// an ivar synthesized for 'Method' and 'Method' is a property accessor
   4365   /// declared in class 'IFace'.
   4366   bool IvarBacksCurrentMethodAccessor(ObjCInterfaceDecl *IFace,
   4367                                       ObjCMethodDecl *Method, ObjCIvarDecl *IV);
   4368 
   4369   /// DiagnoseUnusedBackingIvarInAccessor - Issue an 'unused' warning if ivar which
   4370   /// backs the property is not used in the property's accessor.
   4371   void DiagnoseUnusedBackingIvarInAccessor(Scope *S,
   4372                                            const ObjCImplementationDecl *ImplD);
   4373 
   4374   /// GetIvarBackingPropertyAccessor - If method is a property setter/getter and
   4375   /// it property has a backing ivar, returns this ivar; otherwise, returns NULL.
   4376   /// It also returns ivar's property on success.
   4377   ObjCIvarDecl *GetIvarBackingPropertyAccessor(const ObjCMethodDecl *Method,
   4378                                                const ObjCPropertyDecl *&PDecl) const;
   4379 
   4380   /// Called by ActOnProperty to handle \@property declarations in
   4381   /// class extensions.
   4382   ObjCPropertyDecl *HandlePropertyInClassExtension(Scope *S,
   4383                       SourceLocation AtLoc,
   4384                       SourceLocation LParenLoc,
   4385                       FieldDeclarator &FD,
   4386                       Selector GetterSel,
   4387                       SourceLocation GetterNameLoc,
   4388                       Selector SetterSel,
   4389                       SourceLocation SetterNameLoc,
   4390                       const bool isReadWrite,
   4391                       unsigned &Attributes,
   4392                       const unsigned AttributesAsWritten,
   4393                       QualType T,
   4394                       TypeSourceInfo *TSI,
   4395                       tok::ObjCKeywordKind MethodImplKind);
   4396 
   4397   /// Called by ActOnProperty and HandlePropertyInClassExtension to
   4398   /// handle creating the ObjcPropertyDecl for a category or \@interface.
   4399   ObjCPropertyDecl *CreatePropertyDecl(Scope *S,
   4400                                        ObjCContainerDecl *CDecl,
   4401                                        SourceLocation AtLoc,
   4402                                        SourceLocation LParenLoc,
   4403                                        FieldDeclarator &FD,
   4404                                        Selector GetterSel,
   4405                                        SourceLocation GetterNameLoc,
   4406                                        Selector SetterSel,
   4407                                        SourceLocation SetterNameLoc,
   4408                                        const bool isReadWrite,
   4409                                        const unsigned Attributes,
   4410                                        const unsigned AttributesAsWritten,
   4411                                        QualType T,
   4412                                        TypeSourceInfo *TSI,
   4413                                        tok::ObjCKeywordKind MethodImplKind,
   4414                                        DeclContext *lexicalDC = nullptr);
   4415 
   4416   /// AtomicPropertySetterGetterRules - This routine enforces the rule (via
   4417   /// warning) when atomic property has one but not the other user-declared
   4418   /// setter or getter.
   4419   void AtomicPropertySetterGetterRules(ObjCImplDecl* IMPDecl,
   4420                                        ObjCInterfaceDecl* IDecl);
   4421 
   4422   void DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D);
   4423 
   4424   void DiagnoseMissingDesignatedInitOverrides(
   4425                                           const ObjCImplementationDecl *ImplD,
   4426                                           const ObjCInterfaceDecl *IFD);
   4427 
   4428   void DiagnoseDuplicateIvars(ObjCInterfaceDecl *ID, ObjCInterfaceDecl *SID);
   4429 
   4430   enum MethodMatchStrategy {
   4431     MMS_loose,
   4432     MMS_strict
   4433   };
   4434 
   4435   /// MatchTwoMethodDeclarations - Checks if two methods' type match and returns
   4436   /// true, or false, accordingly.
   4437   bool MatchTwoMethodDeclarations(const ObjCMethodDecl *Method,
   4438                                   const ObjCMethodDecl *PrevMethod,
   4439                                   MethodMatchStrategy strategy = MMS_strict);
   4440 
   4441   /// MatchAllMethodDeclarations - Check methods declaraed in interface or
   4442   /// or protocol against those declared in their implementations.
   4443   void MatchAllMethodDeclarations(const SelectorSet &InsMap,
   4444                                   const SelectorSet &ClsMap,
   4445                                   SelectorSet &InsMapSeen,
   4446                                   SelectorSet &ClsMapSeen,
   4447                                   ObjCImplDecl* IMPDecl,
   4448                                   ObjCContainerDecl* IDecl,
   4449                                   bool &IncompleteImpl,
   4450                                   bool ImmediateClass,
   4451                                   bool WarnCategoryMethodImpl=false);
   4452 
   4453   /// CheckCategoryVsClassMethodMatches - Checks that methods implemented in
   4454   /// category matches with those implemented in its primary class and
   4455   /// warns each time an exact match is found.
   4456   void CheckCategoryVsClassMethodMatches(ObjCCategoryImplDecl *CatIMP);
   4457 
   4458   /// Add the given method to the list of globally-known methods.
   4459   void addMethodToGlobalList(ObjCMethodList *List, ObjCMethodDecl *Method);
   4460 
   4461   /// Returns default addr space for method qualifiers.
   4462   LangAS getDefaultCXXMethodAddrSpace() const;
   4463 
   4464 private:
   4465   /// AddMethodToGlobalPool - Add an instance or factory method to the global
   4466   /// pool. See descriptoin of AddInstanceMethodToGlobalPool.
   4467   void AddMethodToGlobalPool(ObjCMethodDecl *Method, bool impl, bool instance);
   4468 
   4469   /// LookupMethodInGlobalPool - Returns the instance or factory method and
   4470   /// optionally warns if there are multiple signatures.
   4471   ObjCMethodDecl *LookupMethodInGlobalPool(Selector Sel, SourceRange R,
   4472                                            bool receiverIdOrClass,
   4473                                            bool instance);
   4474 
   4475 public:
   4476   /// - Returns instance or factory methods in global method pool for
   4477   /// given selector. It checks the desired kind first, if none is found, and
   4478   /// parameter checkTheOther is set, it then checks the other kind. If no such
   4479   /// method or only one method is found, function returns false; otherwise, it
   4480   /// returns true.
   4481   bool
   4482   CollectMultipleMethodsInGlobalPool(Selector Sel,
   4483                                      SmallVectorImpl<ObjCMethodDecl*>& Methods,
   4484                                      bool InstanceFirst, bool CheckTheOther,
   4485                                      const ObjCObjectType *TypeBound = nullptr);
   4486 
   4487   bool
   4488   AreMultipleMethodsInGlobalPool(Selector Sel, ObjCMethodDecl *BestMethod,
   4489                                  SourceRange R, bool receiverIdOrClass,
   4490                                  SmallVectorImpl<ObjCMethodDecl*>& Methods);
   4491 
   4492   void
   4493   DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl*> &Methods,
   4494                                      Selector Sel, SourceRange R,
   4495                                      bool receiverIdOrClass);
   4496 
   4497 private:
   4498   /// - Returns a selector which best matches given argument list or
   4499   /// nullptr if none could be found
   4500   ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args,
   4501                                    bool IsInstance,
   4502                                    SmallVectorImpl<ObjCMethodDecl*>& Methods);
   4503 
   4504 
   4505   /// Record the typo correction failure and return an empty correction.
   4506   TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc,
   4507                                   bool RecordFailure = true) {
   4508     if (RecordFailure)
   4509       TypoCorrectionFailures[Typo].insert(TypoLoc);
   4510     return TypoCorrection();
   4511   }
   4512 
   4513 public:
   4514   /// AddInstanceMethodToGlobalPool - All instance methods in a translation
   4515   /// unit are added to a global pool. This allows us to efficiently associate
   4516   /// a selector with a method declaraation for purposes of typechecking
   4517   /// messages sent to "id" (where the class of the object is unknown).
   4518   void AddInstanceMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) {
   4519     AddMethodToGlobalPool(Method, impl, /*instance*/true);
   4520   }
   4521 
   4522   /// AddFactoryMethodToGlobalPool - Same as above, but for factory methods.
   4523   void AddFactoryMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) {
   4524     AddMethodToGlobalPool(Method, impl, /*instance*/false);
   4525   }
   4526 
   4527   /// AddAnyMethodToGlobalPool - Add any method, instance or factory to global
   4528   /// pool.
   4529   void AddAnyMethodToGlobalPool(Decl *D);
   4530 
   4531   /// LookupInstanceMethodInGlobalPool - Returns the method and warns if
   4532   /// there are multiple signatures.
   4533   ObjCMethodDecl *LookupInstanceMethodInGlobalPool(Selector Sel, SourceRange R,
   4534                                                    bool receiverIdOrClass=false) {
   4535     return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass,
   4536                                     /*instance*/true);
   4537   }
   4538 
   4539   /// LookupFactoryMethodInGlobalPool - Returns the method and warns if
   4540   /// there are multiple signatures.
   4541   ObjCMethodDecl *LookupFactoryMethodInGlobalPool(Selector Sel, SourceRange R,
   4542                                                   bool receiverIdOrClass=false) {
   4543     return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass,
   4544                                     /*instance*/false);
   4545   }
   4546 
   4547   const ObjCMethodDecl *SelectorsForTypoCorrection(Selector Sel,
   4548                               QualType ObjectType=QualType());
   4549   /// LookupImplementedMethodInGlobalPool - Returns the method which has an
   4550   /// implementation.
   4551   ObjCMethodDecl *LookupImplementedMethodInGlobalPool(Selector Sel);
   4552 
   4553   /// CollectIvarsToConstructOrDestruct - Collect those ivars which require
   4554   /// initialization.
   4555   void CollectIvarsToConstructOrDestruct(ObjCInterfaceDecl *OI,
   4556                                   SmallVectorImpl<ObjCIvarDecl*> &Ivars);
   4557 
   4558   //===--------------------------------------------------------------------===//
   4559   // Statement Parsing Callbacks: SemaStmt.cpp.
   4560 public:
   4561   class FullExprArg {
   4562   public:
   4563     FullExprArg() : E(nullptr) { }
   4564     FullExprArg(Sema &actions) : E(nullptr) { }
   4565 
   4566     ExprResult release() {
   4567       return E;
   4568     }
   4569 
   4570     Expr *get() const { return E; }
   4571 
   4572     Expr *operator->() {
   4573       return E;
   4574     }
   4575 
   4576   private:
   4577     // FIXME: No need to make the entire Sema class a friend when it's just
   4578     // Sema::MakeFullExpr that needs access to the constructor below.
   4579     friend class Sema;
   4580 
   4581     explicit FullExprArg(Expr *expr) : E(expr) {}
   4582 
   4583     Expr *E;
   4584   };
   4585 
   4586   FullExprArg MakeFullExpr(Expr *Arg) {
   4587     return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation());
   4588   }
   4589   FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) {
   4590     return FullExprArg(
   4591         ActOnFinishFullExpr(Arg, CC, /*DiscardedValue*/ false).get());
   4592   }
   4593   FullExprArg MakeFullDiscardedValueExpr(Expr *Arg) {
   4594     ExprResult FE =
   4595         ActOnFinishFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation(),
   4596                             /*DiscardedValue*/ true);
   4597     return FullExprArg(FE.get());
   4598   }
   4599 
   4600   StmtResult ActOnExprStmt(ExprResult Arg, bool DiscardedValue = true);
   4601   StmtResult ActOnExprStmtError();
   4602 
   4603   StmtResult ActOnNullStmt(SourceLocation SemiLoc,
   4604                            bool HasLeadingEmptyMacro = false);
   4605 
   4606   void ActOnStartOfCompoundStmt(bool IsStmtExpr);
   4607   void ActOnAfterCompoundStatementLeadingPragmas();
   4608   void ActOnFinishOfCompoundStmt();
   4609   StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,
   4610                                ArrayRef<Stmt *> Elts, bool isStmtExpr);
   4611 
   4612   /// A RAII object to enter scope of a compound statement.
   4613   class CompoundScopeRAII {
   4614   public:
   4615     CompoundScopeRAII(Sema &S, bool IsStmtExpr = false) : S(S) {
   4616       S.ActOnStartOfCompoundStmt(IsStmtExpr);
   4617     }
   4618 
   4619     ~CompoundScopeRAII() {
   4620       S.ActOnFinishOfCompoundStmt();
   4621     }
   4622 
   4623   private:
   4624     Sema &S;
   4625   };
   4626 
   4627   /// An RAII helper that pops function a function scope on exit.
   4628   struct FunctionScopeRAII {
   4629     Sema &S;
   4630     bool Active;
   4631     FunctionScopeRAII(Sema &S) : S(S), Active(true) {}
   4632     ~FunctionScopeRAII() {
   4633       if (Active)
   4634         S.PopFunctionScopeInfo();
   4635     }
   4636     void disable() { Active = false; }
   4637   };
   4638 
   4639   StmtResult ActOnDeclStmt(DeclGroupPtrTy Decl,
   4640                                    SourceLocation StartLoc,
   4641                                    SourceLocation EndLoc);
   4642   void ActOnForEachDeclStmt(DeclGroupPtrTy Decl);
   4643   StmtResult ActOnForEachLValueExpr(Expr *E);
   4644   ExprResult ActOnCaseExpr(SourceLocation CaseLoc, ExprResult Val);
   4645   StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHS,
   4646                            SourceLocation DotDotDotLoc, ExprResult RHS,
   4647                            SourceLocation ColonLoc);
   4648   void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt);
   4649 
   4650   StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
   4651                                       SourceLocation ColonLoc,
   4652                                       Stmt *SubStmt, Scope *CurScope);
   4653   StmtResult ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl,
   4654                             SourceLocation ColonLoc, Stmt *SubStmt);
   4655 
   4656   StmtResult BuildAttributedStmt(SourceLocation AttrsLoc,
   4657                                  ArrayRef<const Attr *> Attrs, Stmt *SubStmt);
   4658   StmtResult ActOnAttributedStmt(const ParsedAttributesWithRange &AttrList,
   4659                                  Stmt *SubStmt);
   4660 
   4661   class ConditionResult;
   4662   StmtResult ActOnIfStmt(SourceLocation IfLoc, bool IsConstexpr,
   4663                          SourceLocation LParenLoc, Stmt *InitStmt,
   4664                          ConditionResult Cond, SourceLocation RParenLoc,
   4665                          Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal);
   4666   StmtResult BuildIfStmt(SourceLocation IfLoc, bool IsConstexpr,
   4667                          SourceLocation LParenLoc, Stmt *InitStmt,
   4668                          ConditionResult Cond, SourceLocation RParenLoc,
   4669                          Stmt *ThenVal, SourceLocation ElseLoc, Stmt *ElseVal);
   4670   StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc,
   4671                                     SourceLocation LParenLoc, Stmt *InitStmt,
   4672                                     ConditionResult Cond,
   4673                                     SourceLocation RParenLoc);
   4674   StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc,
   4675                                            Stmt *Switch, Stmt *Body);
   4676   StmtResult ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc,
   4677                             ConditionResult Cond, SourceLocation RParenLoc,
   4678                             Stmt *Body);
   4679   StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body,
   4680                          SourceLocation WhileLoc, SourceLocation CondLParen,
   4681                          Expr *Cond, SourceLocation CondRParen);
   4682 
   4683   StmtResult ActOnForStmt(SourceLocation ForLoc,
   4684                           SourceLocation LParenLoc,
   4685                           Stmt *First,
   4686                           ConditionResult Second,
   4687                           FullExprArg Third,
   4688                           SourceLocation RParenLoc,
   4689                           Stmt *Body);
   4690   ExprResult CheckObjCForCollectionOperand(SourceLocation forLoc,
   4691                                            Expr *collection);
   4692   StmtResult ActOnObjCForCollectionStmt(SourceLocation ForColLoc,
   4693                                         Stmt *First, Expr *collection,
   4694                                         SourceLocation RParenLoc);
   4695   StmtResult FinishObjCForCollectionStmt(Stmt *ForCollection, Stmt *Body);
   4696 
   4697   enum BuildForRangeKind {
   4698     /// Initial building of a for-range statement.
   4699     BFRK_Build,
   4700     /// Instantiation or recovery rebuild of a for-range statement. Don't
   4701     /// attempt any typo-correction.
   4702     BFRK_Rebuild,
   4703     /// Determining whether a for-range statement could be built. Avoid any
   4704     /// unnecessary or irreversible actions.
   4705     BFRK_Check
   4706   };
   4707 
   4708   StmtResult ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc,
   4709                                   SourceLocation CoawaitLoc,
   4710                                   Stmt *InitStmt,
   4711                                   Stmt *LoopVar,
   4712                                   SourceLocation ColonLoc, Expr *Collection,
   4713                                   SourceLocation RParenLoc,
   4714                                   BuildForRangeKind Kind);
   4715   StmtResult BuildCXXForRangeStmt(SourceLocation ForLoc,
   4716                                   SourceLocation CoawaitLoc,
   4717                                   Stmt *InitStmt,
   4718                                   SourceLocation ColonLoc,
   4719                                   Stmt *RangeDecl, Stmt *Begin, Stmt *End,
   4720                                   Expr *Cond, Expr *Inc,
   4721                                   Stmt *LoopVarDecl,
   4722                                   SourceLocation RParenLoc,
   4723                                   BuildForRangeKind Kind);
   4724   StmtResult FinishCXXForRangeStmt(Stmt *ForRange, Stmt *Body);
   4725 
   4726   StmtResult ActOnGotoStmt(SourceLocation GotoLoc,
   4727                            SourceLocation LabelLoc,
   4728                            LabelDecl *TheDecl);
   4729   StmtResult ActOnIndirectGotoStmt(SourceLocation GotoLoc,
   4730                                    SourceLocation StarLoc,
   4731                                    Expr *DestExp);
   4732   StmtResult ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope);
   4733   StmtResult ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope);
   4734 
   4735   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
   4736                                 CapturedRegionKind Kind, unsigned NumParams);
   4737   typedef std::pair<StringRef, QualType> CapturedParamNameType;
   4738   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
   4739                                 CapturedRegionKind Kind,
   4740                                 ArrayRef<CapturedParamNameType> Params,
   4741                                 unsigned OpenMPCaptureLevel = 0);
   4742   StmtResult ActOnCapturedRegionEnd(Stmt *S);
   4743   void ActOnCapturedRegionError();
   4744   RecordDecl *CreateCapturedStmtRecordDecl(CapturedDecl *&CD,
   4745                                            SourceLocation Loc,
   4746                                            unsigned NumParams);
   4747 
   4748   enum CopyElisionSemanticsKind {
   4749     CES_Strict = 0,
   4750     CES_AllowParameters = 1,
   4751     CES_AllowDifferentTypes = 2,
   4752     CES_AllowExceptionVariables = 4,
   4753     CES_AllowRValueReferenceType = 8,
   4754     CES_ImplicitlyMovableCXX11CXX14CXX17 =
   4755         (CES_AllowParameters | CES_AllowDifferentTypes),
   4756     CES_ImplicitlyMovableCXX20 =
   4757         (CES_AllowParameters | CES_AllowDifferentTypes |
   4758          CES_AllowExceptionVariables | CES_AllowRValueReferenceType),
   4759   };
   4760 
   4761   VarDecl *getCopyElisionCandidate(QualType ReturnType, Expr *E,
   4762                                    CopyElisionSemanticsKind CESK);
   4763   bool isCopyElisionCandidate(QualType ReturnType, const VarDecl *VD,
   4764                               CopyElisionSemanticsKind CESK);
   4765 
   4766   StmtResult ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
   4767                              Scope *CurScope);
   4768   StmtResult BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp);
   4769   StmtResult ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp);
   4770 
   4771   StmtResult ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple,
   4772                              bool IsVolatile, unsigned NumOutputs,
   4773                              unsigned NumInputs, IdentifierInfo **Names,
   4774                              MultiExprArg Constraints, MultiExprArg Exprs,
   4775                              Expr *AsmString, MultiExprArg Clobbers,
   4776                              unsigned NumLabels,
   4777                              SourceLocation RParenLoc);
   4778 
   4779   void FillInlineAsmIdentifierInfo(Expr *Res,
   4780                                    llvm::InlineAsmIdentifierInfo &Info);
   4781   ExprResult LookupInlineAsmIdentifier(CXXScopeSpec &SS,
   4782                                        SourceLocation TemplateKWLoc,
   4783                                        UnqualifiedId &Id,
   4784                                        bool IsUnevaluatedContext);
   4785   bool LookupInlineAsmField(StringRef Base, StringRef Member,
   4786                             unsigned &Offset, SourceLocation AsmLoc);
   4787   ExprResult LookupInlineAsmVarDeclField(Expr *RefExpr, StringRef Member,
   4788                                          SourceLocation AsmLoc);
   4789   StmtResult ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
   4790                             ArrayRef<Token> AsmToks,
   4791                             StringRef AsmString,
   4792                             unsigned NumOutputs, unsigned NumInputs,
   4793                             ArrayRef<StringRef> Constraints,
   4794                             ArrayRef<StringRef> Clobbers,
   4795                             ArrayRef<Expr*> Exprs,
   4796                             SourceLocation EndLoc);
   4797   LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName,
   4798                                    SourceLocation Location,
   4799                                    bool AlwaysCreate);
   4800 
   4801   VarDecl *BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType ExceptionType,
   4802                                   SourceLocation StartLoc,
   4803                                   SourceLocation IdLoc, IdentifierInfo *Id,
   4804                                   bool Invalid = false);
   4805 
   4806   Decl *ActOnObjCExceptionDecl(Scope *S, Declarator &D);
   4807 
   4808   StmtResult ActOnObjCAtCatchStmt(SourceLocation AtLoc, SourceLocation RParen,
   4809                                   Decl *Parm, Stmt *Body);
   4810 
   4811   StmtResult ActOnObjCAtFinallyStmt(SourceLocation AtLoc, Stmt *Body);
   4812 
   4813   StmtResult ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try,
   4814                                 MultiStmtArg Catch, Stmt *Finally);
   4815 
   4816   StmtResult BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw);
   4817   StmtResult ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw,
   4818                                   Scope *CurScope);
   4819   ExprResult ActOnObjCAtSynchronizedOperand(SourceLocation atLoc,
   4820                                             Expr *operand);
   4821   StmtResult ActOnObjCAtSynchronizedStmt(SourceLocation AtLoc,
   4822                                          Expr *SynchExpr,
   4823                                          Stmt *SynchBody);
   4824 
   4825   StmtResult ActOnObjCAutoreleasePoolStmt(SourceLocation AtLoc, Stmt *Body);
   4826 
   4827   VarDecl *BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo,
   4828                                      SourceLocation StartLoc,
   4829                                      SourceLocation IdLoc,
   4830                                      IdentifierInfo *Id);
   4831 
   4832   Decl *ActOnExceptionDeclarator(Scope *S, Declarator &D);
   4833 
   4834   StmtResult ActOnCXXCatchBlock(SourceLocation CatchLoc,
   4835                                 Decl *ExDecl, Stmt *HandlerBlock);
   4836   StmtResult ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock,
   4837                               ArrayRef<Stmt *> Handlers);
   4838 
   4839   StmtResult ActOnSEHTryBlock(bool IsCXXTry, // try (true) or __try (false) ?
   4840                               SourceLocation TryLoc, Stmt *TryBlock,
   4841                               Stmt *Handler);
   4842   StmtResult ActOnSEHExceptBlock(SourceLocation Loc,
   4843                                  Expr *FilterExpr,
   4844                                  Stmt *Block);
   4845   void ActOnStartSEHFinallyBlock();
   4846   void ActOnAbortSEHFinallyBlock();
   4847   StmtResult ActOnFinishSEHFinallyBlock(SourceLocation Loc, Stmt *Block);
   4848   StmtResult ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope);
   4849 
   4850   void DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock);
   4851 
   4852   bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const;
   4853 
   4854   /// If it's a file scoped decl that must warn if not used, keep track
   4855   /// of it.
   4856   void MarkUnusedFileScopedDecl(const DeclaratorDecl *D);
   4857 
   4858   /// DiagnoseUnusedExprResult - If the statement passed in is an expression
   4859   /// whose result is unused, warn.
   4860   void DiagnoseUnusedExprResult(const Stmt *S);
   4861   void DiagnoseUnusedNestedTypedefs(const RecordDecl *D);
   4862   void DiagnoseUnusedDecl(const NamedDecl *ND);
   4863 
   4864   /// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null
   4865   /// statement as a \p Body, and it is located on the same line.
   4866   ///
   4867   /// This helps prevent bugs due to typos, such as:
   4868   ///     if (condition);
   4869   ///       do_stuff();
   4870   void DiagnoseEmptyStmtBody(SourceLocation StmtLoc,
   4871                              const Stmt *Body,
   4872                              unsigned DiagID);
   4873 
   4874   /// Warn if a for/while loop statement \p S, which is followed by
   4875   /// \p PossibleBody, has a suspicious null statement as a body.
   4876   void DiagnoseEmptyLoopBody(const Stmt *S,
   4877                              const Stmt *PossibleBody);
   4878 
   4879   /// Warn if a value is moved to itself.
   4880   void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr,
   4881                         SourceLocation OpLoc);
   4882 
   4883   /// Warn if we're implicitly casting from a _Nullable pointer type to a
   4884   /// _Nonnull one.
   4885   void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType,
   4886                                            SourceLocation Loc);
   4887 
   4888   /// Warn when implicitly casting 0 to nullptr.
   4889   void diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E);
   4890 
   4891   ParsingDeclState PushParsingDeclaration(sema::DelayedDiagnosticPool &pool) {
   4892     return DelayedDiagnostics.push(pool);
   4893   }
   4894   void PopParsingDeclaration(ParsingDeclState state, Decl *decl);
   4895 
   4896   typedef ProcessingContextState ParsingClassState;
   4897   ParsingClassState PushParsingClass() {
   4898     ParsingClassDepth++;
   4899     return DelayedDiagnostics.pushUndelayed();
   4900   }
   4901   void PopParsingClass(ParsingClassState state) {
   4902     ParsingClassDepth--;
   4903     DelayedDiagnostics.popUndelayed(state);
   4904   }
   4905 
   4906   void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);
   4907 
   4908   void DiagnoseAvailabilityOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs,
   4909                                   const ObjCInterfaceDecl *UnknownObjCClass,
   4910                                   bool ObjCPropertyAccess,
   4911                                   bool AvoidPartialAvailabilityChecks = false,
   4912                                   ObjCInterfaceDecl *ClassReceiver = nullptr);
   4913 
   4914   bool makeUnavailableInSystemHeader(SourceLocation loc,
   4915                                      UnavailableAttr::ImplicitReason reason);
   4916 
   4917   /// Issue any -Wunguarded-availability warnings in \c FD
   4918   void DiagnoseUnguardedAvailabilityViolations(Decl *FD);
   4919 
   4920   void handleDelayedAvailabilityCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
   4921 
   4922   //===--------------------------------------------------------------------===//
   4923   // Expression Parsing Callbacks: SemaExpr.cpp.
   4924 
   4925   bool CanUseDecl(NamedDecl *D, bool TreatUnavailableAsInvalid);
   4926   bool DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs,
   4927                          const ObjCInterfaceDecl *UnknownObjCClass = nullptr,
   4928                          bool ObjCPropertyAccess = false,
   4929                          bool AvoidPartialAvailabilityChecks = false,
   4930                          ObjCInterfaceDecl *ClassReciever = nullptr);
   4931   void NoteDeletedFunction(FunctionDecl *FD);
   4932   void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD);
   4933   bool DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *PD,
   4934                                         ObjCMethodDecl *Getter,
   4935                                         SourceLocation Loc);
   4936   void DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc,
   4937                              ArrayRef<Expr *> Args);
   4938 
   4939   void PushExpressionEvaluationContext(
   4940       ExpressionEvaluationContext NewContext, Decl *LambdaContextDecl = nullptr,
   4941       ExpressionEvaluationContextRecord::ExpressionKind Type =
   4942           ExpressionEvaluationContextRecord::EK_Other);
   4943   enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl };
   4944   void PushExpressionEvaluationContext(
   4945       ExpressionEvaluationContext NewContext, ReuseLambdaContextDecl_t,
   4946       ExpressionEvaluationContextRecord::ExpressionKind Type =
   4947           ExpressionEvaluationContextRecord::EK_Other);
   4948   void PopExpressionEvaluationContext();
   4949 
   4950   void DiscardCleanupsInEvaluationContext();
   4951 
   4952   ExprResult TransformToPotentiallyEvaluated(Expr *E);
   4953   ExprResult HandleExprEvaluationContextForTypeof(Expr *E);
   4954 
   4955   ExprResult CheckUnevaluatedOperand(Expr *E);
   4956   void CheckUnusedVolatileAssignment(Expr *E);
   4957 
   4958   ExprResult ActOnConstantExpression(ExprResult Res);
   4959 
   4960   // Functions for marking a declaration referenced.  These functions also
   4961   // contain the relevant logic for marking if a reference to a function or
   4962   // variable is an odr-use (in the C++11 sense).  There are separate variants
   4963   // for expressions referring to a decl; these exist because odr-use marking
   4964   // needs to be delayed for some constant variables when we build one of the
   4965   // named expressions.
   4966   //
   4967   // MightBeOdrUse indicates whether the use could possibly be an odr-use, and
   4968   // should usually be true. This only needs to be set to false if the lack of
   4969   // odr-use cannot be determined from the current context (for instance,
   4970   // because the name denotes a virtual function and was written without an
   4971   // explicit nested-name-specifier).
   4972   void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse);
   4973   void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func,
   4974                               bool MightBeOdrUse = true);
   4975   void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var);
   4976   void MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base = nullptr);
   4977   void MarkMemberReferenced(MemberExpr *E);
   4978   void MarkFunctionParmPackReferenced(FunctionParmPackExpr *E);
   4979   void MarkCaptureUsedInEnclosingContext(VarDecl *Capture, SourceLocation Loc,
   4980                                          unsigned CapturingScopeIndex);
   4981 
   4982   ExprResult CheckLValueToRValueConversionOperand(Expr *E);
   4983   void CleanupVarDeclMarking();
   4984 
   4985   enum TryCaptureKind {
   4986     TryCapture_Implicit, TryCapture_ExplicitByVal, TryCapture_ExplicitByRef
   4987   };
   4988 
   4989   /// Try to capture the given variable.
   4990   ///
   4991   /// \param Var The variable to capture.
   4992   ///
   4993   /// \param Loc The location at which the capture occurs.
   4994   ///
   4995   /// \param Kind The kind of capture, which may be implicit (for either a
   4996   /// block or a lambda), or explicit by-value or by-reference (for a lambda).
   4997   ///
   4998   /// \param EllipsisLoc The location of the ellipsis, if one is provided in
   4999   /// an explicit lambda capture.
   5000   ///
   5001   /// \param BuildAndDiagnose Whether we are actually supposed to add the
   5002   /// captures or diagnose errors. If false, this routine merely check whether
   5003   /// the capture can occur without performing the capture itself or complaining
   5004   /// if the variable cannot be captured.
   5005   ///
   5006   /// \param CaptureType Will be set to the type of the field used to capture
   5007   /// this variable in the innermost block or lambda. Only valid when the
   5008   /// variable can be captured.
   5009   ///
   5010   /// \param DeclRefType Will be set to the type of a reference to the capture
   5011   /// from within the current scope. Only valid when the variable can be
   5012   /// captured.
   5013   ///
   5014   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
   5015   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
   5016   /// This is useful when enclosing lambdas must speculatively capture
   5017   /// variables that may or may not be used in certain specializations of
   5018   /// a nested generic lambda.
   5019   ///
   5020   /// \returns true if an error occurred (i.e., the variable cannot be
   5021   /// captured) and false if the capture succeeded.
   5022   bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc, TryCaptureKind Kind,
   5023                           SourceLocation EllipsisLoc, bool BuildAndDiagnose,
   5024                           QualType &CaptureType,
   5025                           QualType &DeclRefType,
   5026                           const unsigned *const FunctionScopeIndexToStopAt);
   5027 
   5028   /// Try to capture the given variable.
   5029   bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc,
   5030                           TryCaptureKind Kind = TryCapture_Implicit,
   5031                           SourceLocation EllipsisLoc = SourceLocation());
   5032 
   5033   /// Checks if the variable must be captured.
   5034   bool NeedToCaptureVariable(VarDecl *Var, SourceLocation Loc);
   5035 
   5036   /// Given a variable, determine the type that a reference to that
   5037   /// variable will have in the given scope.
   5038   QualType getCapturedDeclRefType(VarDecl *Var, SourceLocation Loc);
   5039 
   5040   /// Mark all of the declarations referenced within a particular AST node as
   5041   /// referenced. Used when template instantiation instantiates a non-dependent
   5042   /// type -- entities referenced by the type are now referenced.
   5043   void MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T);
   5044   void MarkDeclarationsReferencedInExpr(Expr *E,
   5045                                         bool SkipLocalVariables = false);
   5046 
   5047   /// Try to recover by turning the given expression into a
   5048   /// call.  Returns true if recovery was attempted or an error was
   5049   /// emitted; this may also leave the ExprResult invalid.
   5050   bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
   5051                             bool ForceComplain = false,
   5052                             bool (*IsPlausibleResult)(QualType) = nullptr);
   5053 
   5054   /// Figure out if an expression could be turned into a call.
   5055   bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
   5056                      UnresolvedSetImpl &NonTemplateOverloads);
   5057 
   5058   /// Try to convert an expression \p E to type \p Ty. Returns the result of the
   5059   /// conversion.
   5060   ExprResult tryConvertExprToType(Expr *E, QualType Ty);
   5061 
   5062   /// Conditionally issue a diagnostic based on the current
   5063   /// evaluation context.
   5064   ///
   5065   /// \param Statement If Statement is non-null, delay reporting the
   5066   /// diagnostic until the function body is parsed, and then do a basic
   5067   /// reachability analysis to determine if the statement is reachable.
   5068   /// If it is unreachable, the diagnostic will not be emitted.
   5069   bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement,
   5070                            const PartialDiagnostic &PD);
   5071   /// Similar, but diagnostic is only produced if all the specified statements
   5072   /// are reachable.
   5073   bool DiagRuntimeBehavior(SourceLocation Loc, ArrayRef<const Stmt*> Stmts,
   5074                            const PartialDiagnostic &PD);
   5075 
   5076   // Primary Expressions.
   5077   SourceRange getExprRange(Expr *E) const;
   5078 
   5079   ExprResult ActOnIdExpression(
   5080       Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
   5081       UnqualifiedId &Id, bool HasTrailingLParen, bool IsAddressOfOperand,
   5082       CorrectionCandidateCallback *CCC = nullptr,
   5083       bool IsInlineAsmIdentifier = false, Token *KeywordReplacement = nullptr);
   5084 
   5085   void DecomposeUnqualifiedId(const UnqualifiedId &Id,
   5086                               TemplateArgumentListInfo &Buffer,
   5087                               DeclarationNameInfo &NameInfo,
   5088                               const TemplateArgumentListInfo *&TemplateArgs);
   5089 
   5090   bool DiagnoseDependentMemberLookup(LookupResult &R);
   5091 
   5092   bool
   5093   DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R,
   5094                       CorrectionCandidateCallback &CCC,
   5095                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
   5096                       ArrayRef<Expr *> Args = None, TypoExpr **Out = nullptr);
   5097 
   5098   DeclResult LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S,
   5099                                     IdentifierInfo *II);
   5100   ExprResult BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV);
   5101 
   5102   ExprResult LookupInObjCMethod(LookupResult &LookUp, Scope *S,
   5103                                 IdentifierInfo *II,
   5104                                 bool AllowBuiltinCreation=false);
   5105 
   5106   ExprResult ActOnDependentIdExpression(const CXXScopeSpec &SS,
   5107                                         SourceLocation TemplateKWLoc,
   5108                                         const DeclarationNameInfo &NameInfo,
   5109                                         bool isAddressOfOperand,
   5110                                 const TemplateArgumentListInfo *TemplateArgs);
   5111 
   5112   /// If \p D cannot be odr-used in the current expression evaluation context,
   5113   /// return a reason explaining why. Otherwise, return NOUR_None.
   5114   NonOdrUseReason getNonOdrUseReasonInCurrentContext(ValueDecl *D);
   5115 
   5116   DeclRefExpr *BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
   5117                                 SourceLocation Loc,
   5118                                 const CXXScopeSpec *SS = nullptr);
   5119   DeclRefExpr *
   5120   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
   5121                    const DeclarationNameInfo &NameInfo,
   5122                    const CXXScopeSpec *SS = nullptr,
   5123                    NamedDecl *FoundD = nullptr,
   5124                    SourceLocation TemplateKWLoc = SourceLocation(),
   5125                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
   5126   DeclRefExpr *
   5127   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
   5128                    const DeclarationNameInfo &NameInfo,
   5129                    NestedNameSpecifierLoc NNS,
   5130                    NamedDecl *FoundD = nullptr,
   5131                    SourceLocation TemplateKWLoc = SourceLocation(),
   5132                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
   5133 
   5134   ExprResult
   5135   BuildAnonymousStructUnionMemberReference(
   5136       const CXXScopeSpec &SS,
   5137       SourceLocation nameLoc,
   5138       IndirectFieldDecl *indirectField,
   5139       DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_none),
   5140       Expr *baseObjectExpr = nullptr,
   5141       SourceLocation opLoc = SourceLocation());
   5142 
   5143   ExprResult BuildPossibleImplicitMemberExpr(
   5144       const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R,
   5145       const TemplateArgumentListInfo *TemplateArgs, const Scope *S,
   5146       UnresolvedLookupExpr *AsULE = nullptr);
   5147   ExprResult BuildImplicitMemberExpr(const CXXScopeSpec &SS,
   5148                                      SourceLocation TemplateKWLoc,
   5149                                      LookupResult &R,
   5150                                 const TemplateArgumentListInfo *TemplateArgs,
   5151                                      bool IsDefiniteInstance,
   5152                                      const Scope *S);
   5153   bool UseArgumentDependentLookup(const CXXScopeSpec &SS,
   5154                                   const LookupResult &R,
   5155                                   bool HasTrailingLParen);
   5156 
   5157   ExprResult
   5158   BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS,
   5159                                     const DeclarationNameInfo &NameInfo,
   5160                                     bool IsAddressOfOperand, const Scope *S,
   5161                                     TypeSourceInfo **RecoveryTSI = nullptr);
   5162 
   5163   ExprResult BuildDependentDeclRefExpr(const CXXScopeSpec &SS,
   5164                                        SourceLocation TemplateKWLoc,
   5165                                 const DeclarationNameInfo &NameInfo,
   5166                                 const TemplateArgumentListInfo *TemplateArgs);
   5167 
   5168   ExprResult BuildDeclarationNameExpr(const CXXScopeSpec &SS,
   5169                                       LookupResult &R,
   5170                                       bool NeedsADL,
   5171                                       bool AcceptInvalidDecl = false);
   5172   ExprResult BuildDeclarationNameExpr(
   5173       const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D,
   5174       NamedDecl *FoundD = nullptr,
   5175       const TemplateArgumentListInfo *TemplateArgs = nullptr,
   5176       bool AcceptInvalidDecl = false);
   5177 
   5178   ExprResult BuildLiteralOperatorCall(LookupResult &R,
   5179                       DeclarationNameInfo &SuffixInfo,
   5180                       ArrayRef<Expr *> Args,
   5181                       SourceLocation LitEndLoc,
   5182                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
   5183 
   5184   ExprResult BuildPredefinedExpr(SourceLocation Loc,
   5185                                  PredefinedExpr::IdentKind IK);
   5186   ExprResult ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind);
   5187   ExprResult ActOnIntegerConstant(SourceLocation Loc, uint64_t Val);
   5188 
   5189   bool CheckLoopHintExpr(Expr *E, SourceLocation Loc);
   5190 
   5191   ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr);
   5192   ExprResult ActOnCharacterConstant(const Token &Tok,
   5193                                     Scope *UDLScope = nullptr);
   5194   ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E);
   5195   ExprResult ActOnParenListExpr(SourceLocation L,
   5196                                 SourceLocation R,
   5197                                 MultiExprArg Val);
   5198 
   5199   /// ActOnStringLiteral - The specified tokens were lexed as pasted string
   5200   /// fragments (e.g. "foo" "bar" L"baz").
   5201   ExprResult ActOnStringLiteral(ArrayRef<Token> StringToks,
   5202                                 Scope *UDLScope = nullptr);
   5203 
   5204   ExprResult ActOnGenericSelectionExpr(SourceLocation KeyLoc,
   5205                                        SourceLocation DefaultLoc,
   5206                                        SourceLocation RParenLoc,
   5207                                        Expr *ControllingExpr,
   5208                                        ArrayRef<ParsedType> ArgTypes,
   5209                                        ArrayRef<Expr *> ArgExprs);
   5210   ExprResult CreateGenericSelectionExpr(SourceLocation KeyLoc,
   5211                                         SourceLocation DefaultLoc,
   5212                                         SourceLocation RParenLoc,
   5213                                         Expr *ControllingExpr,
   5214                                         ArrayRef<TypeSourceInfo *> Types,
   5215                                         ArrayRef<Expr *> Exprs);
   5216 
   5217   // Binary/Unary Operators.  'Tok' is the token for the operator.
   5218   ExprResult CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
   5219                                   Expr *InputExpr);
   5220   ExprResult BuildUnaryOp(Scope *S, SourceLocation OpLoc,
   5221                           UnaryOperatorKind Opc, Expr *Input);
   5222   ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
   5223                           tok::TokenKind Op, Expr *Input);
   5224 
   5225   bool isQualifiedMemberAccess(Expr *E);
   5226   QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc);
   5227 
   5228   ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo,
   5229                                             SourceLocation OpLoc,
   5230                                             UnaryExprOrTypeTrait ExprKind,
   5231                                             SourceRange R);
   5232   ExprResult CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc,
   5233                                             UnaryExprOrTypeTrait ExprKind);
   5234   ExprResult
   5235     ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc,
   5236                                   UnaryExprOrTypeTrait ExprKind,
   5237                                   bool IsType, void *TyOrEx,
   5238                                   SourceRange ArgRange);
   5239 
   5240   ExprResult CheckPlaceholderExpr(Expr *E);
   5241   bool CheckVecStepExpr(Expr *E);
   5242 
   5243   bool CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind);
   5244   bool CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc,
   5245                                         SourceRange ExprRange,
   5246                                         UnaryExprOrTypeTrait ExprKind);
   5247   ExprResult ActOnSizeofParameterPackExpr(Scope *S,
   5248                                           SourceLocation OpLoc,
   5249                                           IdentifierInfo &Name,
   5250                                           SourceLocation NameLoc,
   5251                                           SourceLocation RParenLoc);
   5252   ExprResult ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc,
   5253                                  tok::TokenKind Kind, Expr *Input);
   5254 
   5255   ExprResult ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc,
   5256                                      Expr *Idx, SourceLocation RLoc);
   5257   ExprResult CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc,
   5258                                              Expr *Idx, SourceLocation RLoc);
   5259 
   5260   ExprResult CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx,
   5261                                               Expr *ColumnIdx,
   5262                                               SourceLocation RBLoc);
   5263 
   5264   ExprResult ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc,
   5265                                       Expr *LowerBound,
   5266                                       SourceLocation ColonLocFirst,
   5267                                       SourceLocation ColonLocSecond,
   5268                                       Expr *Length, Expr *Stride,
   5269                                       SourceLocation RBLoc);
   5270   ExprResult ActOnOMPArrayShapingExpr(Expr *Base, SourceLocation LParenLoc,
   5271                                       SourceLocation RParenLoc,
   5272                                       ArrayRef<Expr *> Dims,
   5273                                       ArrayRef<SourceRange> Brackets);
   5274 
   5275   /// Data structure for iterator expression.
   5276   struct OMPIteratorData {
   5277     IdentifierInfo *DeclIdent = nullptr;
   5278     SourceLocation DeclIdentLoc;
   5279     ParsedType Type;
   5280     OMPIteratorExpr::IteratorRange Range;
   5281     SourceLocation AssignLoc;
   5282     SourceLocation ColonLoc;
   5283     SourceLocation SecColonLoc;
   5284   };
   5285 
   5286   ExprResult ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc,
   5287                                   SourceLocation LLoc, SourceLocation RLoc,
   5288                                   ArrayRef<OMPIteratorData> Data);
   5289 
   5290   // This struct is for use by ActOnMemberAccess to allow
   5291   // BuildMemberReferenceExpr to be able to reinvoke ActOnMemberAccess after
   5292   // changing the access operator from a '.' to a '->' (to see if that is the
   5293   // change needed to fix an error about an unknown member, e.g. when the class
   5294   // defines a custom operator->).
   5295   struct ActOnMemberAccessExtraArgs {
   5296     Scope *S;
   5297     UnqualifiedId &Id;
   5298     Decl *ObjCImpDecl;
   5299   };
   5300 
   5301   ExprResult BuildMemberReferenceExpr(
   5302       Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow,
   5303       CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
   5304       NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo,
   5305       const TemplateArgumentListInfo *TemplateArgs,
   5306       const Scope *S,
   5307       ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
   5308 
   5309   ExprResult
   5310   BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc,
   5311                            bool IsArrow, const CXXScopeSpec &SS,
   5312                            SourceLocation TemplateKWLoc,
   5313                            NamedDecl *FirstQualifierInScope, LookupResult &R,
   5314                            const TemplateArgumentListInfo *TemplateArgs,
   5315                            const Scope *S,
   5316                            bool SuppressQualifierCheck = false,
   5317                            ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
   5318 
   5319   ExprResult BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow,
   5320                                      SourceLocation OpLoc,
   5321                                      const CXXScopeSpec &SS, FieldDecl *Field,
   5322                                      DeclAccessPair FoundDecl,
   5323                                      const DeclarationNameInfo &MemberNameInfo);
   5324 
   5325   ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow);
   5326 
   5327   bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType,
   5328                                      const CXXScopeSpec &SS,
   5329                                      const LookupResult &R);
   5330 
   5331   ExprResult ActOnDependentMemberExpr(Expr *Base, QualType BaseType,
   5332                                       bool IsArrow, SourceLocation OpLoc,
   5333                                       const CXXScopeSpec &SS,
   5334                                       SourceLocation TemplateKWLoc,
   5335                                       NamedDecl *FirstQualifierInScope,
   5336                                const DeclarationNameInfo &NameInfo,
   5337                                const TemplateArgumentListInfo *TemplateArgs);
   5338 
   5339   ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base,
   5340                                    SourceLocation OpLoc,
   5341                                    tok::TokenKind OpKind,
   5342                                    CXXScopeSpec &SS,
   5343                                    SourceLocation TemplateKWLoc,
   5344                                    UnqualifiedId &Member,
   5345                                    Decl *ObjCImpDecl);
   5346 
   5347   MemberExpr *
   5348   BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
   5349                   const CXXScopeSpec *SS, SourceLocation TemplateKWLoc,
   5350                   ValueDecl *Member, DeclAccessPair FoundDecl,
   5351                   bool HadMultipleCandidates,
   5352                   const DeclarationNameInfo &MemberNameInfo, QualType Ty,
   5353                   ExprValueKind VK, ExprObjectKind OK,
   5354                   const TemplateArgumentListInfo *TemplateArgs = nullptr);
   5355   MemberExpr *
   5356   BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
   5357                   NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
   5358                   ValueDecl *Member, DeclAccessPair FoundDecl,
   5359                   bool HadMultipleCandidates,
   5360                   const DeclarationNameInfo &MemberNameInfo, QualType Ty,
   5361                   ExprValueKind VK, ExprObjectKind OK,
   5362                   const TemplateArgumentListInfo *TemplateArgs = nullptr);
   5363 
   5364   void ActOnDefaultCtorInitializers(Decl *CDtorDecl);
   5365   bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
   5366                                FunctionDecl *FDecl,
   5367                                const FunctionProtoType *Proto,
   5368                                ArrayRef<Expr *> Args,
   5369                                SourceLocation RParenLoc,
   5370                                bool ExecConfig = false);
   5371   void CheckStaticArrayArgument(SourceLocation CallLoc,
   5372                                 ParmVarDecl *Param,
   5373                                 const Expr *ArgExpr);
   5374 
   5375   /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
   5376   /// This provides the location of the left/right parens and a list of comma
   5377   /// locations.
   5378   ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
   5379                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
   5380                            Expr *ExecConfig = nullptr);
   5381   ExprResult BuildCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
   5382                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
   5383                            Expr *ExecConfig = nullptr,
   5384                            bool IsExecConfig = false,
   5385                            bool AllowRecovery = false);
   5386   enum class AtomicArgumentOrder { API, AST };
   5387   ExprResult
   5388   BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange,
   5389                   SourceLocation RParenLoc, MultiExprArg Args,
   5390                   AtomicExpr::AtomicOp Op,
   5391                   AtomicArgumentOrder ArgOrder = AtomicArgumentOrder::API);
   5392   ExprResult
   5393   BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc,
   5394                         ArrayRef<Expr *> Arg, SourceLocation RParenLoc,
   5395                         Expr *Config = nullptr, bool IsExecConfig = false,
   5396                         ADLCallKind UsesADL = ADLCallKind::NotADL);
   5397 
   5398   ExprResult ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc,
   5399                                      MultiExprArg ExecConfig,
   5400                                      SourceLocation GGGLoc);
   5401 
   5402   ExprResult ActOnCastExpr(Scope *S, SourceLocation LParenLoc,
   5403                            Declarator &D, ParsedType &Ty,
   5404                            SourceLocation RParenLoc, Expr *CastExpr);
   5405   ExprResult BuildCStyleCastExpr(SourceLocation LParenLoc,
   5406                                  TypeSourceInfo *Ty,
   5407                                  SourceLocation RParenLoc,
   5408                                  Expr *Op);
   5409   CastKind PrepareScalarCast(ExprResult &src, QualType destType);
   5410 
   5411   /// Build an altivec or OpenCL literal.
   5412   ExprResult BuildVectorLiteral(SourceLocation LParenLoc,
   5413                                 SourceLocation RParenLoc, Expr *E,
   5414                                 TypeSourceInfo *TInfo);
   5415 
   5416   ExprResult MaybeConvertParenListExprToParenExpr(Scope *S, Expr *ME);
   5417 
   5418   ExprResult ActOnCompoundLiteral(SourceLocation LParenLoc,
   5419                                   ParsedType Ty,
   5420                                   SourceLocation RParenLoc,
   5421                                   Expr *InitExpr);
   5422 
   5423   ExprResult BuildCompoundLiteralExpr(SourceLocation LParenLoc,
   5424                                       TypeSourceInfo *TInfo,
   5425                                       SourceLocation RParenLoc,
   5426                                       Expr *LiteralExpr);
   5427 
   5428   ExprResult ActOnInitList(SourceLocation LBraceLoc,
   5429                            MultiExprArg InitArgList,
   5430                            SourceLocation RBraceLoc);
   5431 
   5432   ExprResult BuildInitList(SourceLocation LBraceLoc,
   5433                            MultiExprArg InitArgList,
   5434                            SourceLocation RBraceLoc);
   5435 
   5436   ExprResult ActOnDesignatedInitializer(Designation &Desig,
   5437                                         SourceLocation EqualOrColonLoc,
   5438                                         bool GNUSyntax,
   5439                                         ExprResult Init);
   5440 
   5441 private:
   5442   static BinaryOperatorKind ConvertTokenKindToBinaryOpcode(tok::TokenKind Kind);
   5443 
   5444 public:
   5445   ExprResult ActOnBinOp(Scope *S, SourceLocation TokLoc,
   5446                         tok::TokenKind Kind, Expr *LHSExpr, Expr *RHSExpr);
   5447   ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc,
   5448                         BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr);
   5449   ExprResult CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc,
   5450                                 Expr *LHSExpr, Expr *RHSExpr);
   5451   void LookupBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc,
   5452                    UnresolvedSetImpl &Functions);
   5453 
   5454   void DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc);
   5455 
   5456   /// ActOnConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
   5457   /// in the case of a the GNU conditional expr extension.
   5458   ExprResult ActOnConditionalOp(SourceLocation QuestionLoc,
   5459                                 SourceLocation ColonLoc,
   5460                                 Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr);
   5461 
   5462   /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
   5463   ExprResult ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc,
   5464                             LabelDecl *TheDecl);
   5465 
   5466   void ActOnStartStmtExpr();
   5467   ExprResult ActOnStmtExpr(Scope *S, SourceLocation LPLoc, Stmt *SubStmt,
   5468                            SourceLocation RPLoc);
   5469   ExprResult BuildStmtExpr(SourceLocation LPLoc, Stmt *SubStmt,
   5470                            SourceLocation RPLoc, unsigned TemplateDepth);
   5471   // Handle the final expression in a statement expression.
   5472   ExprResult ActOnStmtExprResult(ExprResult E);
   5473   void ActOnStmtExprError();
   5474 
   5475   // __builtin_offsetof(type, identifier(.identifier|[expr])*)
   5476   struct OffsetOfComponent {
   5477     SourceLocation LocStart, LocEnd;
   5478     bool isBrackets;  // true if [expr], false if .ident
   5479     union {
   5480       IdentifierInfo *IdentInfo;
   5481       Expr *E;
   5482     } U;
   5483   };
   5484 
   5485   /// __builtin_offsetof(type, a.b[123][456].c)
   5486   ExprResult BuildBuiltinOffsetOf(SourceLocation BuiltinLoc,
   5487                                   TypeSourceInfo *TInfo,
   5488                                   ArrayRef<OffsetOfComponent> Components,
   5489                                   SourceLocation RParenLoc);
   5490   ExprResult ActOnBuiltinOffsetOf(Scope *S,
   5491                                   SourceLocation BuiltinLoc,
   5492                                   SourceLocation TypeLoc,
   5493                                   ParsedType ParsedArgTy,
   5494                                   ArrayRef<OffsetOfComponent> Components,
   5495                                   SourceLocation RParenLoc);
   5496 
   5497   // __builtin_choose_expr(constExpr, expr1, expr2)
   5498   ExprResult ActOnChooseExpr(SourceLocation BuiltinLoc,
   5499                              Expr *CondExpr, Expr *LHSExpr,
   5500                              Expr *RHSExpr, SourceLocation RPLoc);
   5501 
   5502   // __builtin_va_arg(expr, type)
   5503   ExprResult ActOnVAArg(SourceLocation BuiltinLoc, Expr *E, ParsedType Ty,
   5504                         SourceLocation RPLoc);
   5505   ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E,
   5506                             TypeSourceInfo *TInfo, SourceLocation RPLoc);
   5507 
   5508   // __builtin_LINE(), __builtin_FUNCTION(), __builtin_FILE(),
   5509   // __builtin_COLUMN()
   5510   ExprResult ActOnSourceLocExpr(SourceLocExpr::IdentKind Kind,
   5511                                 SourceLocation BuiltinLoc,
   5512                                 SourceLocation RPLoc);
   5513 
   5514   // Build a potentially resolved SourceLocExpr.
   5515   ExprResult BuildSourceLocExpr(SourceLocExpr::IdentKind Kind,
   5516                                 SourceLocation BuiltinLoc, SourceLocation RPLoc,
   5517                                 DeclContext *ParentContext);
   5518 
   5519   // __null
   5520   ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc);
   5521 
   5522   bool CheckCaseExpression(Expr *E);
   5523 
   5524   /// Describes the result of an "if-exists" condition check.
   5525   enum IfExistsResult {
   5526     /// The symbol exists.
   5527     IER_Exists,
   5528 
   5529     /// The symbol does not exist.
   5530     IER_DoesNotExist,
   5531 
   5532     /// The name is a dependent name, so the results will differ
   5533     /// from one instantiation to the next.
   5534     IER_Dependent,
   5535 
   5536     /// An error occurred.
   5537     IER_Error
   5538   };
   5539 
   5540   IfExistsResult
   5541   CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS,
   5542                                const DeclarationNameInfo &TargetNameInfo);
   5543 
   5544   IfExistsResult
   5545   CheckMicrosoftIfExistsSymbol(Scope *S, SourceLocation KeywordLoc,
   5546                                bool IsIfExists, CXXScopeSpec &SS,
   5547                                UnqualifiedId &Name);
   5548 
   5549   StmtResult BuildMSDependentExistsStmt(SourceLocation KeywordLoc,
   5550                                         bool IsIfExists,
   5551                                         NestedNameSpecifierLoc QualifierLoc,
   5552                                         DeclarationNameInfo NameInfo,
   5553                                         Stmt *Nested);
   5554   StmtResult ActOnMSDependentExistsStmt(SourceLocation KeywordLoc,
   5555                                         bool IsIfExists,
   5556                                         CXXScopeSpec &SS, UnqualifiedId &Name,
   5557                                         Stmt *Nested);
   5558 
   5559   //===------------------------- "Block" Extension ------------------------===//
   5560 
   5561   /// ActOnBlockStart - This callback is invoked when a block literal is
   5562   /// started.
   5563   void ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope);
   5564 
   5565   /// ActOnBlockArguments - This callback allows processing of block arguments.
   5566   /// If there are no arguments, this is still invoked.
   5567   void ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo,
   5568                            Scope *CurScope);
   5569 
   5570   /// ActOnBlockError - If there is an error parsing a block, this callback
   5571   /// is invoked to pop the information about the block from the action impl.
   5572   void ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope);
   5573 
   5574   /// ActOnBlockStmtExpr - This is called when the body of a block statement
   5575   /// literal was successfully completed.  ^(int x){...}
   5576   ExprResult ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body,
   5577                                 Scope *CurScope);
   5578 
   5579   //===---------------------------- Clang Extensions ----------------------===//
   5580 
   5581   /// __builtin_convertvector(...)
   5582   ExprResult ActOnConvertVectorExpr(Expr *E, ParsedType ParsedDestTy,
   5583                                     SourceLocation BuiltinLoc,
   5584                                     SourceLocation RParenLoc);
   5585 
   5586   //===---------------------------- OpenCL Features -----------------------===//
   5587 
   5588   /// __builtin_astype(...)
   5589   ExprResult ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy,
   5590                              SourceLocation BuiltinLoc,
   5591                              SourceLocation RParenLoc);
   5592   ExprResult BuildAsTypeExpr(Expr *E, QualType DestTy,
   5593                              SourceLocation BuiltinLoc,
   5594                              SourceLocation RParenLoc);
   5595 
   5596   //===---------------------------- C++ Features --------------------------===//
   5597 
   5598   // Act on C++ namespaces
   5599   Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc,
   5600                                SourceLocation NamespaceLoc,
   5601                                SourceLocation IdentLoc, IdentifierInfo *Ident,
   5602                                SourceLocation LBrace,
   5603                                const ParsedAttributesView &AttrList,
   5604                                UsingDirectiveDecl *&UsingDecl);
   5605   void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace);
   5606 
   5607   NamespaceDecl *getStdNamespace() const;
   5608   NamespaceDecl *getOrCreateStdNamespace();
   5609 
   5610   NamespaceDecl *lookupStdExperimentalNamespace();
   5611 
   5612   CXXRecordDecl *getStdBadAlloc() const;
   5613   EnumDecl *getStdAlignValT() const;
   5614 
   5615 private:
   5616   // A cache representing if we've fully checked the various comparison category
   5617   // types stored in ASTContext. The bit-index corresponds to the integer value
   5618   // of a ComparisonCategoryType enumerator.
   5619   llvm::SmallBitVector FullyCheckedComparisonCategories;
   5620 
   5621   ValueDecl *tryLookupCtorInitMemberDecl(CXXRecordDecl *ClassDecl,
   5622                                          CXXScopeSpec &SS,
   5623                                          ParsedType TemplateTypeTy,
   5624                                          IdentifierInfo *MemberOrBase);
   5625 
   5626 public:
   5627   enum class ComparisonCategoryUsage {
   5628     /// The '<=>' operator was used in an expression and a builtin operator
   5629     /// was selected.
   5630     OperatorInExpression,
   5631     /// A defaulted 'operator<=>' needed the comparison category. This
   5632     /// typically only applies to 'std::strong_ordering', due to the implicit
   5633     /// fallback return value.
   5634     DefaultedOperator,
   5635   };
   5636 
   5637   /// Lookup the specified comparison category types in the standard
   5638   ///   library, an check the VarDecls possibly returned by the operator<=>
   5639   ///   builtins for that type.
   5640   ///
   5641   /// \return The type of the comparison category type corresponding to the
   5642   ///   specified Kind, or a null type if an error occurs
   5643   QualType CheckComparisonCategoryType(ComparisonCategoryType Kind,
   5644                                        SourceLocation Loc,
   5645                                        ComparisonCategoryUsage Usage);
   5646 
   5647   /// Tests whether Ty is an instance of std::initializer_list and, if
   5648   /// it is and Element is not NULL, assigns the element type to Element.
   5649   bool isStdInitializerList(QualType Ty, QualType *Element);
   5650 
   5651   /// Looks for the std::initializer_list template and instantiates it
   5652   /// with Element, or emits an error if it's not found.
   5653   ///
   5654   /// \returns The instantiated template, or null on error.
   5655   QualType BuildStdInitializerList(QualType Element, SourceLocation Loc);
   5656 
   5657   /// Determine whether Ctor is an initializer-list constructor, as
   5658   /// defined in [dcl.init.list]p2.
   5659   bool isInitListConstructor(const FunctionDecl *Ctor);
   5660 
   5661   Decl *ActOnUsingDirective(Scope *CurScope, SourceLocation UsingLoc,
   5662                             SourceLocation NamespcLoc, CXXScopeSpec &SS,
   5663                             SourceLocation IdentLoc,
   5664                             IdentifierInfo *NamespcName,
   5665                             const ParsedAttributesView &AttrList);
   5666 
   5667   void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir);
   5668 
   5669   Decl *ActOnNamespaceAliasDef(Scope *CurScope,
   5670                                SourceLocation NamespaceLoc,
   5671                                SourceLocation AliasLoc,
   5672                                IdentifierInfo *Alias,
   5673                                CXXScopeSpec &SS,
   5674                                SourceLocation IdentLoc,
   5675                                IdentifierInfo *Ident);
   5676 
   5677   void HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow);
   5678   bool CheckUsingShadowDecl(UsingDecl *UD, NamedDecl *Target,
   5679                             const LookupResult &PreviousDecls,
   5680                             UsingShadowDecl *&PrevShadow);
   5681   UsingShadowDecl *BuildUsingShadowDecl(Scope *S, UsingDecl *UD,
   5682                                         NamedDecl *Target,
   5683                                         UsingShadowDecl *PrevDecl);
   5684 
   5685   bool CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
   5686                                    bool HasTypenameKeyword,
   5687                                    const CXXScopeSpec &SS,
   5688                                    SourceLocation NameLoc,
   5689                                    const LookupResult &Previous);
   5690   bool CheckUsingDeclQualifier(SourceLocation UsingLoc,
   5691                                bool HasTypename,
   5692                                const CXXScopeSpec &SS,
   5693                                const DeclarationNameInfo &NameInfo,
   5694                                SourceLocation NameLoc);
   5695 
   5696   NamedDecl *BuildUsingDeclaration(
   5697       Scope *S, AccessSpecifier AS, SourceLocation UsingLoc,
   5698       bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS,
   5699       DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc,
   5700       const ParsedAttributesView &AttrList, bool IsInstantiation);
   5701   NamedDecl *BuildUsingPackDecl(NamedDecl *InstantiatedFrom,
   5702                                 ArrayRef<NamedDecl *> Expansions);
   5703 
   5704   bool CheckInheritingConstructorUsingDecl(UsingDecl *UD);
   5705 
   5706   /// Given a derived-class using shadow declaration for a constructor and the
   5707   /// correspnding base class constructor, find or create the implicit
   5708   /// synthesized derived class constructor to use for this initialization.
   5709   CXXConstructorDecl *
   5710   findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor,
   5711                             ConstructorUsingShadowDecl *DerivedShadow);
   5712 
   5713   Decl *ActOnUsingDeclaration(Scope *CurScope, AccessSpecifier AS,
   5714                               SourceLocation UsingLoc,
   5715                               SourceLocation TypenameLoc, CXXScopeSpec &SS,
   5716                               UnqualifiedId &Name, SourceLocation EllipsisLoc,
   5717                               const ParsedAttributesView &AttrList);
   5718   Decl *ActOnAliasDeclaration(Scope *CurScope, AccessSpecifier AS,
   5719                               MultiTemplateParamsArg TemplateParams,
   5720                               SourceLocation UsingLoc, UnqualifiedId &Name,
   5721                               const ParsedAttributesView &AttrList,
   5722                               TypeResult Type, Decl *DeclFromDeclSpec);
   5723 
   5724   /// BuildCXXConstructExpr - Creates a complete call to a constructor,
   5725   /// including handling of its default argument expressions.
   5726   ///
   5727   /// \param ConstructKind - a CXXConstructExpr::ConstructionKind
   5728   ExprResult
   5729   BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   5730                         NamedDecl *FoundDecl,
   5731                         CXXConstructorDecl *Constructor, MultiExprArg Exprs,
   5732                         bool HadMultipleCandidates, bool IsListInitialization,
   5733                         bool IsStdInitListInitialization,
   5734                         bool RequiresZeroInit, unsigned ConstructKind,
   5735                         SourceRange ParenRange);
   5736 
   5737   /// Build a CXXConstructExpr whose constructor has already been resolved if
   5738   /// it denotes an inherited constructor.
   5739   ExprResult
   5740   BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   5741                         CXXConstructorDecl *Constructor, bool Elidable,
   5742                         MultiExprArg Exprs,
   5743                         bool HadMultipleCandidates, bool IsListInitialization,
   5744                         bool IsStdInitListInitialization,
   5745                         bool RequiresZeroInit, unsigned ConstructKind,
   5746                         SourceRange ParenRange);
   5747 
   5748   // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if
   5749   // the constructor can be elidable?
   5750   ExprResult
   5751   BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   5752                         NamedDecl *FoundDecl,
   5753                         CXXConstructorDecl *Constructor, bool Elidable,
   5754                         MultiExprArg Exprs, bool HadMultipleCandidates,
   5755                         bool IsListInitialization,
   5756                         bool IsStdInitListInitialization, bool RequiresZeroInit,
   5757                         unsigned ConstructKind, SourceRange ParenRange);
   5758 
   5759   ExprResult BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field);
   5760 
   5761 
   5762   /// Instantiate or parse a C++ default argument expression as necessary.
   5763   /// Return true on error.
   5764   bool CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD,
   5765                               ParmVarDecl *Param);
   5766 
   5767   /// BuildCXXDefaultArgExpr - Creates a CXXDefaultArgExpr, instantiating
   5768   /// the default expr if needed.
   5769   ExprResult BuildCXXDefaultArgExpr(SourceLocation CallLoc,
   5770                                     FunctionDecl *FD,
   5771                                     ParmVarDecl *Param);
   5772 
   5773   /// FinalizeVarWithDestructor - Prepare for calling destructor on the
   5774   /// constructed variable.
   5775   void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType);
   5776 
   5777   /// Helper class that collects exception specifications for
   5778   /// implicitly-declared special member functions.
   5779   class ImplicitExceptionSpecification {
   5780     // Pointer to allow copying
   5781     Sema *Self;
   5782     // We order exception specifications thus:
   5783     // noexcept is the most restrictive, but is only used in C++11.
   5784     // throw() comes next.
   5785     // Then a throw(collected exceptions)
   5786     // Finally no specification, which is expressed as noexcept(false).
   5787     // throw(...) is used instead if any called function uses it.
   5788     ExceptionSpecificationType ComputedEST;
   5789     llvm::SmallPtrSet<CanQualType, 4> ExceptionsSeen;
   5790     SmallVector<QualType, 4> Exceptions;
   5791 
   5792     void ClearExceptions() {
   5793       ExceptionsSeen.clear();
   5794       Exceptions.clear();
   5795     }
   5796 
   5797   public:
   5798     explicit ImplicitExceptionSpecification(Sema &Self)
   5799       : Self(&Self), ComputedEST(EST_BasicNoexcept) {
   5800       if (!Self.getLangOpts().CPlusPlus11)
   5801         ComputedEST = EST_DynamicNone;
   5802     }
   5803 
   5804     /// Get the computed exception specification type.
   5805     ExceptionSpecificationType getExceptionSpecType() const {
   5806       assert(!isComputedNoexcept(ComputedEST) &&
   5807              "noexcept(expr) should not be a possible result");
   5808       return ComputedEST;
   5809     }
   5810 
   5811     /// The number of exceptions in the exception specification.
   5812     unsigned size() const { return Exceptions.size(); }
   5813 
   5814     /// The set of exceptions in the exception specification.
   5815     const QualType *data() const { return Exceptions.data(); }
   5816 
   5817     /// Integrate another called method into the collected data.
   5818     void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method);
   5819 
   5820     /// Integrate an invoked expression into the collected data.
   5821     void CalledExpr(Expr *E) { CalledStmt(E); }
   5822 
   5823     /// Integrate an invoked statement into the collected data.
   5824     void CalledStmt(Stmt *S);
   5825 
   5826     /// Overwrite an EPI's exception specification with this
   5827     /// computed exception specification.
   5828     FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const {
   5829       FunctionProtoType::ExceptionSpecInfo ESI;
   5830       ESI.Type = getExceptionSpecType();
   5831       if (ESI.Type == EST_Dynamic) {
   5832         ESI.Exceptions = Exceptions;
   5833       } else if (ESI.Type == EST_None) {
   5834         /// C++11 [except.spec]p14:
   5835         ///   The exception-specification is noexcept(false) if the set of
   5836         ///   potential exceptions of the special member function contains "any"
   5837         ESI.Type = EST_NoexceptFalse;
   5838         ESI.NoexceptExpr = Self->ActOnCXXBoolLiteral(SourceLocation(),
   5839                                                      tok::kw_false).get();
   5840       }
   5841       return ESI;
   5842     }
   5843   };
   5844 
   5845   /// Evaluate the implicit exception specification for a defaulted
   5846   /// special member function.
   5847   void EvaluateImplicitExceptionSpec(SourceLocation Loc, FunctionDecl *FD);
   5848 
   5849   /// Check the given noexcept-specifier, convert its expression, and compute
   5850   /// the appropriate ExceptionSpecificationType.
   5851   ExprResult ActOnNoexceptSpec(SourceLocation NoexceptLoc, Expr *NoexceptExpr,
   5852                                ExceptionSpecificationType &EST);
   5853 
   5854   /// Check the given exception-specification and update the
   5855   /// exception specification information with the results.
   5856   void checkExceptionSpecification(bool IsTopLevel,
   5857                                    ExceptionSpecificationType EST,
   5858                                    ArrayRef<ParsedType> DynamicExceptions,
   5859                                    ArrayRef<SourceRange> DynamicExceptionRanges,
   5860                                    Expr *NoexceptExpr,
   5861                                    SmallVectorImpl<QualType> &Exceptions,
   5862                                    FunctionProtoType::ExceptionSpecInfo &ESI);
   5863 
   5864   /// Determine if we're in a case where we need to (incorrectly) eagerly
   5865   /// parse an exception specification to work around a libstdc++ bug.
   5866   bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D);
   5867 
   5868   /// Add an exception-specification to the given member function
   5869   /// (or member function template). The exception-specification was parsed
   5870   /// after the method itself was declared.
   5871   void actOnDelayedExceptionSpecification(Decl *Method,
   5872          ExceptionSpecificationType EST,
   5873          SourceRange SpecificationRange,
   5874          ArrayRef<ParsedType> DynamicExceptions,
   5875          ArrayRef<SourceRange> DynamicExceptionRanges,
   5876          Expr *NoexceptExpr);
   5877 
   5878   class InheritedConstructorInfo;
   5879 
   5880   /// Determine if a special member function should have a deleted
   5881   /// definition when it is defaulted.
   5882   bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
   5883                                  InheritedConstructorInfo *ICI = nullptr,
   5884                                  bool Diagnose = false);
   5885 
   5886   /// Produce notes explaining why a defaulted function was defined as deleted.
   5887   void DiagnoseDeletedDefaultedFunction(FunctionDecl *FD);
   5888 
   5889   /// Declare the implicit default constructor for the given class.
   5890   ///
   5891   /// \param ClassDecl The class declaration into which the implicit
   5892   /// default constructor will be added.
   5893   ///
   5894   /// \returns The implicitly-declared default constructor.
   5895   CXXConstructorDecl *DeclareImplicitDefaultConstructor(
   5896                                                      CXXRecordDecl *ClassDecl);
   5897 
   5898   /// DefineImplicitDefaultConstructor - Checks for feasibility of
   5899   /// defining this constructor as the default constructor.
   5900   void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
   5901                                         CXXConstructorDecl *Constructor);
   5902 
   5903   /// Declare the implicit destructor for the given class.
   5904   ///
   5905   /// \param ClassDecl The class declaration into which the implicit
   5906   /// destructor will be added.
   5907   ///
   5908   /// \returns The implicitly-declared destructor.
   5909   CXXDestructorDecl *DeclareImplicitDestructor(CXXRecordDecl *ClassDecl);
   5910 
   5911   /// DefineImplicitDestructor - Checks for feasibility of
   5912   /// defining this destructor as the default destructor.
   5913   void DefineImplicitDestructor(SourceLocation CurrentLocation,
   5914                                 CXXDestructorDecl *Destructor);
   5915 
   5916   /// Build an exception spec for destructors that don't have one.
   5917   ///
   5918   /// C++11 says that user-defined destructors with no exception spec get one
   5919   /// that looks as if the destructor was implicitly declared.
   5920   void AdjustDestructorExceptionSpec(CXXDestructorDecl *Destructor);
   5921 
   5922   /// Define the specified inheriting constructor.
   5923   void DefineInheritingConstructor(SourceLocation UseLoc,
   5924                                    CXXConstructorDecl *Constructor);
   5925 
   5926   /// Declare the implicit copy constructor for the given class.
   5927   ///
   5928   /// \param ClassDecl The class declaration into which the implicit
   5929   /// copy constructor will be added.
   5930   ///
   5931   /// \returns The implicitly-declared copy constructor.
   5932   CXXConstructorDecl *DeclareImplicitCopyConstructor(CXXRecordDecl *ClassDecl);
   5933 
   5934   /// DefineImplicitCopyConstructor - Checks for feasibility of
   5935   /// defining this constructor as the copy constructor.
   5936   void DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
   5937                                      CXXConstructorDecl *Constructor);
   5938 
   5939   /// Declare the implicit move constructor for the given class.
   5940   ///
   5941   /// \param ClassDecl The Class declaration into which the implicit
   5942   /// move constructor will be added.
   5943   ///
   5944   /// \returns The implicitly-declared move constructor, or NULL if it wasn't
   5945   /// declared.
   5946   CXXConstructorDecl *DeclareImplicitMoveConstructor(CXXRecordDecl *ClassDecl);
   5947 
   5948   /// DefineImplicitMoveConstructor - Checks for feasibility of
   5949   /// defining this constructor as the move constructor.
   5950   void DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
   5951                                      CXXConstructorDecl *Constructor);
   5952 
   5953   /// Declare the implicit copy assignment operator for the given class.
   5954   ///
   5955   /// \param ClassDecl The class declaration into which the implicit
   5956   /// copy assignment operator will be added.
   5957   ///
   5958   /// \returns The implicitly-declared copy assignment operator.
   5959   CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl);
   5960 
   5961   /// Defines an implicitly-declared copy assignment operator.
   5962   void DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
   5963                                     CXXMethodDecl *MethodDecl);
   5964 
   5965   /// Declare the implicit move assignment operator for the given class.
   5966   ///
   5967   /// \param ClassDecl The Class declaration into which the implicit
   5968   /// move assignment operator will be added.
   5969   ///
   5970   /// \returns The implicitly-declared move assignment operator, or NULL if it
   5971   /// wasn't declared.
   5972   CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl);
   5973 
   5974   /// Defines an implicitly-declared move assignment operator.
   5975   void DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
   5976                                     CXXMethodDecl *MethodDecl);
   5977 
   5978   /// Force the declaration of any implicitly-declared members of this
   5979   /// class.
   5980   void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class);
   5981 
   5982   /// Check a completed declaration of an implicit special member.
   5983   void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD);
   5984 
   5985   /// Determine whether the given function is an implicitly-deleted
   5986   /// special member function.
   5987   bool isImplicitlyDeleted(FunctionDecl *FD);
   5988 
   5989   /// Check whether 'this' shows up in the type of a static member
   5990   /// function after the (naturally empty) cv-qualifier-seq would be.
   5991   ///
   5992   /// \returns true if an error occurred.
   5993   bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method);
   5994 
   5995   /// Whether this' shows up in the exception specification of a static
   5996   /// member function.
   5997   bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method);
   5998 
   5999   /// Check whether 'this' shows up in the attributes of the given
   6000   /// static member function.
   6001   ///
   6002   /// \returns true if an error occurred.
   6003   bool checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method);
   6004 
   6005   /// MaybeBindToTemporary - If the passed in expression has a record type with
   6006   /// a non-trivial destructor, this will return CXXBindTemporaryExpr. Otherwise
   6007   /// it simply returns the passed in expression.
   6008   ExprResult MaybeBindToTemporary(Expr *E);
   6009 
   6010   /// Wrap the expression in a ConstantExpr if it is a potential immediate
   6011   /// invocation.
   6012   ExprResult CheckForImmediateInvocation(ExprResult E, FunctionDecl *Decl);
   6013 
   6014   bool CompleteConstructorCall(CXXConstructorDecl *Constructor,
   6015                                QualType DeclInitType, MultiExprArg ArgsPtr,
   6016                                SourceLocation Loc,
   6017                                SmallVectorImpl<Expr *> &ConvertedArgs,
   6018                                bool AllowExplicit = false,
   6019                                bool IsListInitialization = false);
   6020 
   6021   ParsedType getInheritingConstructorName(CXXScopeSpec &SS,
   6022                                           SourceLocation NameLoc,
   6023                                           IdentifierInfo &Name);
   6024 
   6025   ParsedType getConstructorName(IdentifierInfo &II, SourceLocation NameLoc,
   6026                                 Scope *S, CXXScopeSpec &SS,
   6027                                 bool EnteringContext);
   6028   ParsedType getDestructorName(SourceLocation TildeLoc,
   6029                                IdentifierInfo &II, SourceLocation NameLoc,
   6030                                Scope *S, CXXScopeSpec &SS,
   6031                                ParsedType ObjectType,
   6032                                bool EnteringContext);
   6033 
   6034   ParsedType getDestructorTypeForDecltype(const DeclSpec &DS,
   6035                                           ParsedType ObjectType);
   6036 
   6037   // Checks that reinterpret casts don't have undefined behavior.
   6038   void CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType,
   6039                                       bool IsDereference, SourceRange Range);
   6040 
   6041   /// ActOnCXXNamedCast - Parse
   6042   /// {dynamic,static,reinterpret,const,addrspace}_cast's.
   6043   ExprResult ActOnCXXNamedCast(SourceLocation OpLoc,
   6044                                tok::TokenKind Kind,
   6045                                SourceLocation LAngleBracketLoc,
   6046                                Declarator &D,
   6047                                SourceLocation RAngleBracketLoc,
   6048                                SourceLocation LParenLoc,
   6049                                Expr *E,
   6050                                SourceLocation RParenLoc);
   6051 
   6052   ExprResult BuildCXXNamedCast(SourceLocation OpLoc,
   6053                                tok::TokenKind Kind,
   6054                                TypeSourceInfo *Ty,
   6055                                Expr *E,
   6056                                SourceRange AngleBrackets,
   6057                                SourceRange Parens);
   6058 
   6059   ExprResult ActOnBuiltinBitCastExpr(SourceLocation KWLoc, Declarator &Dcl,
   6060                                      ExprResult Operand,
   6061                                      SourceLocation RParenLoc);
   6062 
   6063   ExprResult BuildBuiltinBitCastExpr(SourceLocation KWLoc, TypeSourceInfo *TSI,
   6064                                      Expr *Operand, SourceLocation RParenLoc);
   6065 
   6066   ExprResult BuildCXXTypeId(QualType TypeInfoType,
   6067                             SourceLocation TypeidLoc,
   6068                             TypeSourceInfo *Operand,
   6069                             SourceLocation RParenLoc);
   6070   ExprResult BuildCXXTypeId(QualType TypeInfoType,
   6071                             SourceLocation TypeidLoc,
   6072                             Expr *Operand,
   6073                             SourceLocation RParenLoc);
   6074 
   6075   /// ActOnCXXTypeid - Parse typeid( something ).
   6076   ExprResult ActOnCXXTypeid(SourceLocation OpLoc,
   6077                             SourceLocation LParenLoc, bool isType,
   6078                             void *TyOrExpr,
   6079                             SourceLocation RParenLoc);
   6080 
   6081   ExprResult BuildCXXUuidof(QualType TypeInfoType,
   6082                             SourceLocation TypeidLoc,
   6083                             TypeSourceInfo *Operand,
   6084                             SourceLocation RParenLoc);
   6085   ExprResult BuildCXXUuidof(QualType TypeInfoType,
   6086                             SourceLocation TypeidLoc,
   6087                             Expr *Operand,
   6088                             SourceLocation RParenLoc);
   6089 
   6090   /// ActOnCXXUuidof - Parse __uuidof( something ).
   6091   ExprResult ActOnCXXUuidof(SourceLocation OpLoc,
   6092                             SourceLocation LParenLoc, bool isType,
   6093                             void *TyOrExpr,
   6094                             SourceLocation RParenLoc);
   6095 
   6096   /// Handle a C++1z fold-expression: ( expr op ... op expr ).
   6097   ExprResult ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS,
   6098                               tok::TokenKind Operator,
   6099                               SourceLocation EllipsisLoc, Expr *RHS,
   6100                               SourceLocation RParenLoc);
   6101   ExprResult BuildCXXFoldExpr(UnresolvedLookupExpr *Callee,
   6102                               SourceLocation LParenLoc, Expr *LHS,
   6103                               BinaryOperatorKind Operator,
   6104                               SourceLocation EllipsisLoc, Expr *RHS,
   6105                               SourceLocation RParenLoc,
   6106                               Optional<unsigned> NumExpansions);
   6107   ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc,
   6108                                    BinaryOperatorKind Operator);
   6109 
   6110   //// ActOnCXXThis -  Parse 'this' pointer.
   6111   ExprResult ActOnCXXThis(SourceLocation loc);
   6112 
   6113   /// Build a CXXThisExpr and mark it referenced in the current context.
   6114   Expr *BuildCXXThisExpr(SourceLocation Loc, QualType Type, bool IsImplicit);
   6115   void MarkThisReferenced(CXXThisExpr *This);
   6116 
   6117   /// Try to retrieve the type of the 'this' pointer.
   6118   ///
   6119   /// \returns The type of 'this', if possible. Otherwise, returns a NULL type.
   6120   QualType getCurrentThisType();
   6121 
   6122   /// When non-NULL, the C++ 'this' expression is allowed despite the
   6123   /// current context not being a non-static member function. In such cases,
   6124   /// this provides the type used for 'this'.
   6125   QualType CXXThisTypeOverride;
   6126 
   6127   /// RAII object used to temporarily allow the C++ 'this' expression
   6128   /// to be used, with the given qualifiers on the current class type.
   6129   class CXXThisScopeRAII {
   6130     Sema &S;
   6131     QualType OldCXXThisTypeOverride;
   6132     bool Enabled;
   6133 
   6134   public:
   6135     /// Introduce a new scope where 'this' may be allowed (when enabled),
   6136     /// using the given declaration (which is either a class template or a
   6137     /// class) along with the given qualifiers.
   6138     /// along with the qualifiers placed on '*this'.
   6139     CXXThisScopeRAII(Sema &S, Decl *ContextDecl, Qualifiers CXXThisTypeQuals,
   6140                      bool Enabled = true);
   6141 
   6142     ~CXXThisScopeRAII();
   6143   };
   6144 
   6145   /// Make sure the value of 'this' is actually available in the current
   6146   /// context, if it is a potentially evaluated context.
   6147   ///
   6148   /// \param Loc The location at which the capture of 'this' occurs.
   6149   ///
   6150   /// \param Explicit Whether 'this' is explicitly captured in a lambda
   6151   /// capture list.
   6152   ///
   6153   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
   6154   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
   6155   /// This is useful when enclosing lambdas must speculatively capture
   6156   /// 'this' that may or may not be used in certain specializations of
   6157   /// a nested generic lambda (depending on whether the name resolves to
   6158   /// a non-static member function or a static function).
   6159   /// \return returns 'true' if failed, 'false' if success.
   6160   bool CheckCXXThisCapture(SourceLocation Loc, bool Explicit = false,
   6161       bool BuildAndDiagnose = true,
   6162       const unsigned *const FunctionScopeIndexToStopAt = nullptr,
   6163       bool ByCopy = false);
   6164 
   6165   /// Determine whether the given type is the type of *this that is used
   6166   /// outside of the body of a member function for a type that is currently
   6167   /// being defined.
   6168   bool isThisOutsideMemberFunctionBody(QualType BaseType);
   6169 
   6170   /// ActOnCXXBoolLiteral - Parse {true,false} literals.
   6171   ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
   6172 
   6173 
   6174   /// ActOnObjCBoolLiteral - Parse {__objc_yes,__objc_no} literals.
   6175   ExprResult ActOnObjCBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
   6176 
   6177   ExprResult
   6178   ActOnObjCAvailabilityCheckExpr(llvm::ArrayRef<AvailabilitySpec> AvailSpecs,
   6179                                  SourceLocation AtLoc, SourceLocation RParen);
   6180 
   6181   /// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
   6182   ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc);
   6183 
   6184   //// ActOnCXXThrow -  Parse throw expressions.
   6185   ExprResult ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *expr);
   6186   ExprResult BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
   6187                            bool IsThrownVarInScope);
   6188   bool CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ThrowTy, Expr *E);
   6189 
   6190   /// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
   6191   /// Can be interpreted either as function-style casting ("int(x)")
   6192   /// or class type construction ("ClassType(x,y,z)")
   6193   /// or creation of a value-initialized type ("int()").
   6194   ExprResult ActOnCXXTypeConstructExpr(ParsedType TypeRep,
   6195                                        SourceLocation LParenOrBraceLoc,
   6196                                        MultiExprArg Exprs,
   6197                                        SourceLocation RParenOrBraceLoc,
   6198                                        bool ListInitialization);
   6199 
   6200   ExprResult BuildCXXTypeConstructExpr(TypeSourceInfo *Type,
   6201                                        SourceLocation LParenLoc,
   6202                                        MultiExprArg Exprs,
   6203                                        SourceLocation RParenLoc,
   6204                                        bool ListInitialization);
   6205 
   6206   /// ActOnCXXNew - Parsed a C++ 'new' expression.
   6207   ExprResult ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
   6208                          SourceLocation PlacementLParen,
   6209                          MultiExprArg PlacementArgs,
   6210                          SourceLocation PlacementRParen,
   6211                          SourceRange TypeIdParens, Declarator &D,
   6212                          Expr *Initializer);
   6213   ExprResult BuildCXXNew(SourceRange Range, bool UseGlobal,
   6214                          SourceLocation PlacementLParen,
   6215                          MultiExprArg PlacementArgs,
   6216                          SourceLocation PlacementRParen,
   6217                          SourceRange TypeIdParens,
   6218                          QualType AllocType,
   6219                          TypeSourceInfo *AllocTypeInfo,
   6220                          Optional<Expr *> ArraySize,
   6221                          SourceRange DirectInitRange,
   6222                          Expr *Initializer);
   6223 
   6224   /// Determine whether \p FD is an aligned allocation or deallocation
   6225   /// function that is unavailable.
   6226   bool isUnavailableAlignedAllocationFunction(const FunctionDecl &FD) const;
   6227 
   6228   /// Produce diagnostics if \p FD is an aligned allocation or deallocation
   6229   /// function that is unavailable.
   6230   void diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD,
   6231                                             SourceLocation Loc);
   6232 
   6233   bool CheckAllocatedType(QualType AllocType, SourceLocation Loc,
   6234                           SourceRange R);
   6235 
   6236   /// The scope in which to find allocation functions.
   6237   enum AllocationFunctionScope {
   6238     /// Only look for allocation functions in the global scope.
   6239     AFS_Global,
   6240     /// Only look for allocation functions in the scope of the
   6241     /// allocated class.
   6242     AFS_Class,
   6243     /// Look for allocation functions in both the global scope
   6244     /// and in the scope of the allocated class.
   6245     AFS_Both
   6246   };
   6247 
   6248   /// Finds the overloads of operator new and delete that are appropriate
   6249   /// for the allocation.
   6250   bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
   6251                                AllocationFunctionScope NewScope,
   6252                                AllocationFunctionScope DeleteScope,
   6253                                QualType AllocType, bool IsArray,
   6254                                bool &PassAlignment, MultiExprArg PlaceArgs,
   6255                                FunctionDecl *&OperatorNew,
   6256                                FunctionDecl *&OperatorDelete,
   6257                                bool Diagnose = true);
   6258   void DeclareGlobalNewDelete();
   6259   void DeclareGlobalAllocationFunction(DeclarationName Name, QualType Return,
   6260                                        ArrayRef<QualType> Params);
   6261 
   6262   bool FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
   6263                                 DeclarationName Name, FunctionDecl* &Operator,
   6264                                 bool Diagnose = true);
   6265   FunctionDecl *FindUsualDeallocationFunction(SourceLocation StartLoc,
   6266                                               bool CanProvideSize,
   6267                                               bool Overaligned,
   6268                                               DeclarationName Name);
   6269   FunctionDecl *FindDeallocationFunctionForDestructor(SourceLocation StartLoc,
   6270                                                       CXXRecordDecl *RD);
   6271 
   6272   /// ActOnCXXDelete - Parsed a C++ 'delete' expression
   6273   ExprResult ActOnCXXDelete(SourceLocation StartLoc,
   6274                             bool UseGlobal, bool ArrayForm,
   6275                             Expr *Operand);
   6276   void CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc,
   6277                             bool IsDelete, bool CallCanBeVirtual,
   6278                             bool WarnOnNonAbstractTypes,
   6279                             SourceLocation DtorLoc);
   6280 
   6281   ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen,
   6282                                Expr *Operand, SourceLocation RParen);
   6283   ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
   6284                                   SourceLocation RParen);
   6285 
   6286   /// Parsed one of the type trait support pseudo-functions.
   6287   ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
   6288                             ArrayRef<ParsedType> Args,
   6289                             SourceLocation RParenLoc);
   6290   ExprResult BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
   6291                             ArrayRef<TypeSourceInfo *> Args,
   6292                             SourceLocation RParenLoc);
   6293 
   6294   /// ActOnArrayTypeTrait - Parsed one of the binary type trait support
   6295   /// pseudo-functions.
   6296   ExprResult ActOnArrayTypeTrait(ArrayTypeTrait ATT,
   6297                                  SourceLocation KWLoc,
   6298                                  ParsedType LhsTy,
   6299                                  Expr *DimExpr,
   6300                                  SourceLocation RParen);
   6301 
   6302   ExprResult BuildArrayTypeTrait(ArrayTypeTrait ATT,
   6303                                  SourceLocation KWLoc,
   6304                                  TypeSourceInfo *TSInfo,
   6305                                  Expr *DimExpr,
   6306                                  SourceLocation RParen);
   6307 
   6308   /// ActOnExpressionTrait - Parsed one of the unary type trait support
   6309   /// pseudo-functions.
   6310   ExprResult ActOnExpressionTrait(ExpressionTrait OET,
   6311                                   SourceLocation KWLoc,
   6312                                   Expr *Queried,
   6313                                   SourceLocation RParen);
   6314 
   6315   ExprResult BuildExpressionTrait(ExpressionTrait OET,
   6316                                   SourceLocation KWLoc,
   6317                                   Expr *Queried,
   6318                                   SourceLocation RParen);
   6319 
   6320   ExprResult ActOnStartCXXMemberReference(Scope *S,
   6321                                           Expr *Base,
   6322                                           SourceLocation OpLoc,
   6323                                           tok::TokenKind OpKind,
   6324                                           ParsedType &ObjectType,
   6325                                           bool &MayBePseudoDestructor);
   6326 
   6327   ExprResult BuildPseudoDestructorExpr(Expr *Base,
   6328                                        SourceLocation OpLoc,
   6329                                        tok::TokenKind OpKind,
   6330                                        const CXXScopeSpec &SS,
   6331                                        TypeSourceInfo *ScopeType,
   6332                                        SourceLocation CCLoc,
   6333                                        SourceLocation TildeLoc,
   6334                                      PseudoDestructorTypeStorage DestroyedType);
   6335 
   6336   ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
   6337                                        SourceLocation OpLoc,
   6338                                        tok::TokenKind OpKind,
   6339                                        CXXScopeSpec &SS,
   6340                                        UnqualifiedId &FirstTypeName,
   6341                                        SourceLocation CCLoc,
   6342                                        SourceLocation TildeLoc,
   6343                                        UnqualifiedId &SecondTypeName);
   6344 
   6345   ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
   6346                                        SourceLocation OpLoc,
   6347                                        tok::TokenKind OpKind,
   6348                                        SourceLocation TildeLoc,
   6349                                        const DeclSpec& DS);
   6350 
   6351   /// MaybeCreateExprWithCleanups - If the current full-expression
   6352   /// requires any cleanups, surround it with a ExprWithCleanups node.
   6353   /// Otherwise, just returns the passed-in expression.
   6354   Expr *MaybeCreateExprWithCleanups(Expr *SubExpr);
   6355   Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt);
   6356   ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr);
   6357 
   6358   MaterializeTemporaryExpr *
   6359   CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary,
   6360                                  bool BoundToLvalueReference);
   6361 
   6362   ExprResult ActOnFinishFullExpr(Expr *Expr, bool DiscardedValue) {
   6363     return ActOnFinishFullExpr(
   6364         Expr, Expr ? Expr->getExprLoc() : SourceLocation(), DiscardedValue);
   6365   }
   6366   ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC,
   6367                                  bool DiscardedValue, bool IsConstexpr = false);
   6368   StmtResult ActOnFinishFullStmt(Stmt *Stmt);
   6369 
   6370   // Marks SS invalid if it represents an incomplete type.
   6371   bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC);
   6372 
   6373   DeclContext *computeDeclContext(QualType T);
   6374   DeclContext *computeDeclContext(const CXXScopeSpec &SS,
   6375                                   bool EnteringContext = false);
   6376   bool isDependentScopeSpecifier(const CXXScopeSpec &SS);
   6377   CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS);
   6378 
   6379   /// The parser has parsed a global nested-name-specifier '::'.
   6380   ///
   6381   /// \param CCLoc The location of the '::'.
   6382   ///
   6383   /// \param SS The nested-name-specifier, which will be updated in-place
   6384   /// to reflect the parsed nested-name-specifier.
   6385   ///
   6386   /// \returns true if an error occurred, false otherwise.
   6387   bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS);
   6388 
   6389   /// The parser has parsed a '__super' nested-name-specifier.
   6390   ///
   6391   /// \param SuperLoc The location of the '__super' keyword.
   6392   ///
   6393   /// \param ColonColonLoc The location of the '::'.
   6394   ///
   6395   /// \param SS The nested-name-specifier, which will be updated in-place
   6396   /// to reflect the parsed nested-name-specifier.
   6397   ///
   6398   /// \returns true if an error occurred, false otherwise.
   6399   bool ActOnSuperScopeSpecifier(SourceLocation SuperLoc,
   6400                                 SourceLocation ColonColonLoc, CXXScopeSpec &SS);
   6401 
   6402   bool isAcceptableNestedNameSpecifier(const NamedDecl *SD,
   6403                                        bool *CanCorrect = nullptr);
   6404   NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS);
   6405 
   6406   /// Keeps information about an identifier in a nested-name-spec.
   6407   ///
   6408   struct NestedNameSpecInfo {
   6409     /// The type of the object, if we're parsing nested-name-specifier in
   6410     /// a member access expression.
   6411     ParsedType ObjectType;
   6412 
   6413     /// The identifier preceding the '::'.
   6414     IdentifierInfo *Identifier;
   6415 
   6416     /// The location of the identifier.
   6417     SourceLocation IdentifierLoc;
   6418 
   6419     /// The location of the '::'.
   6420     SourceLocation CCLoc;
   6421 
   6422     /// Creates info object for the most typical case.
   6423     NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
   6424              SourceLocation ColonColonLoc, ParsedType ObjectType = ParsedType())
   6425       : ObjectType(ObjectType), Identifier(II), IdentifierLoc(IdLoc),
   6426         CCLoc(ColonColonLoc) {
   6427     }
   6428 
   6429     NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
   6430                        SourceLocation ColonColonLoc, QualType ObjectType)
   6431       : ObjectType(ParsedType::make(ObjectType)), Identifier(II),
   6432         IdentifierLoc(IdLoc), CCLoc(ColonColonLoc) {
   6433     }
   6434   };
   6435 
   6436   bool isNonTypeNestedNameSpecifier(Scope *S, CXXScopeSpec &SS,
   6437                                     NestedNameSpecInfo &IdInfo);
   6438 
   6439   bool BuildCXXNestedNameSpecifier(Scope *S,
   6440                                    NestedNameSpecInfo &IdInfo,
   6441                                    bool EnteringContext,
   6442                                    CXXScopeSpec &SS,
   6443                                    NamedDecl *ScopeLookupResult,
   6444                                    bool ErrorRecoveryLookup,
   6445                                    bool *IsCorrectedToColon = nullptr,
   6446                                    bool OnlyNamespace = false);
   6447 
   6448   /// The parser has parsed a nested-name-specifier 'identifier::'.
   6449   ///
   6450   /// \param S The scope in which this nested-name-specifier occurs.
   6451   ///
   6452   /// \param IdInfo Parser information about an identifier in the
   6453   /// nested-name-spec.
   6454   ///
   6455   /// \param EnteringContext Whether we're entering the context nominated by
   6456   /// this nested-name-specifier.
   6457   ///
   6458   /// \param SS The nested-name-specifier, which is both an input
   6459   /// parameter (the nested-name-specifier before this type) and an
   6460   /// output parameter (containing the full nested-name-specifier,
   6461   /// including this new type).
   6462   ///
   6463   /// \param ErrorRecoveryLookup If true, then this method is called to improve
   6464   /// error recovery. In this case do not emit error message.
   6465   ///
   6466   /// \param IsCorrectedToColon If not null, suggestions to replace '::' -> ':'
   6467   /// are allowed.  The bool value pointed by this parameter is set to 'true'
   6468   /// if the identifier is treated as if it was followed by ':', not '::'.
   6469   ///
   6470   /// \param OnlyNamespace If true, only considers namespaces in lookup.
   6471   ///
   6472   /// \returns true if an error occurred, false otherwise.
   6473   bool ActOnCXXNestedNameSpecifier(Scope *S,
   6474                                    NestedNameSpecInfo &IdInfo,
   6475                                    bool EnteringContext,
   6476                                    CXXScopeSpec &SS,
   6477                                    bool ErrorRecoveryLookup = false,
   6478                                    bool *IsCorrectedToColon = nullptr,
   6479                                    bool OnlyNamespace = false);
   6480 
   6481   ExprResult ActOnDecltypeExpression(Expr *E);
   6482 
   6483   bool ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS,
   6484                                            const DeclSpec &DS,
   6485                                            SourceLocation ColonColonLoc);
   6486 
   6487   bool IsInvalidUnlessNestedName(Scope *S, CXXScopeSpec &SS,
   6488                                  NestedNameSpecInfo &IdInfo,
   6489                                  bool EnteringContext);
   6490 
   6491   /// The parser has parsed a nested-name-specifier
   6492   /// 'template[opt] template-name < template-args >::'.
   6493   ///
   6494   /// \param S The scope in which this nested-name-specifier occurs.
   6495   ///
   6496   /// \param SS The nested-name-specifier, which is both an input
   6497   /// parameter (the nested-name-specifier before this type) and an
   6498   /// output parameter (containing the full nested-name-specifier,
   6499   /// including this new type).
   6500   ///
   6501   /// \param TemplateKWLoc the location of the 'template' keyword, if any.
   6502   /// \param TemplateName the template name.
   6503   /// \param TemplateNameLoc The location of the template name.
   6504   /// \param LAngleLoc The location of the opening angle bracket  ('<').
   6505   /// \param TemplateArgs The template arguments.
   6506   /// \param RAngleLoc The location of the closing angle bracket  ('>').
   6507   /// \param CCLoc The location of the '::'.
   6508   ///
   6509   /// \param EnteringContext Whether we're entering the context of the
   6510   /// nested-name-specifier.
   6511   ///
   6512   ///
   6513   /// \returns true if an error occurred, false otherwise.
   6514   bool ActOnCXXNestedNameSpecifier(Scope *S,
   6515                                    CXXScopeSpec &SS,
   6516                                    SourceLocation TemplateKWLoc,
   6517                                    TemplateTy TemplateName,
   6518                                    SourceLocation TemplateNameLoc,
   6519                                    SourceLocation LAngleLoc,
   6520                                    ASTTemplateArgsPtr TemplateArgs,
   6521                                    SourceLocation RAngleLoc,
   6522                                    SourceLocation CCLoc,
   6523                                    bool EnteringContext);
   6524 
   6525   /// Given a C++ nested-name-specifier, produce an annotation value
   6526   /// that the parser can use later to reconstruct the given
   6527   /// nested-name-specifier.
   6528   ///
   6529   /// \param SS A nested-name-specifier.
   6530   ///
   6531   /// \returns A pointer containing all of the information in the
   6532   /// nested-name-specifier \p SS.
   6533   void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS);
   6534 
   6535   /// Given an annotation pointer for a nested-name-specifier, restore
   6536   /// the nested-name-specifier structure.
   6537   ///
   6538   /// \param Annotation The annotation pointer, produced by
   6539   /// \c SaveNestedNameSpecifierAnnotation().
   6540   ///
   6541   /// \param AnnotationRange The source range corresponding to the annotation.
   6542   ///
   6543   /// \param SS The nested-name-specifier that will be updated with the contents
   6544   /// of the annotation pointer.
   6545   void RestoreNestedNameSpecifierAnnotation(void *Annotation,
   6546                                             SourceRange AnnotationRange,
   6547                                             CXXScopeSpec &SS);
   6548 
   6549   bool ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
   6550 
   6551   /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global
   6552   /// scope or nested-name-specifier) is parsed, part of a declarator-id.
   6553   /// After this method is called, according to [C++ 3.4.3p3], names should be
   6554   /// looked up in the declarator-id's scope, until the declarator is parsed and
   6555   /// ActOnCXXExitDeclaratorScope is called.
   6556   /// The 'SS' should be a non-empty valid CXXScopeSpec.
   6557   bool ActOnCXXEnterDeclaratorScope(Scope *S, CXXScopeSpec &SS);
   6558 
   6559   /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously
   6560   /// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same
   6561   /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.
   6562   /// Used to indicate that names should revert to being looked up in the
   6563   /// defining scope.
   6564   void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
   6565 
   6566   /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an
   6567   /// initializer for the declaration 'Dcl'.
   6568   /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
   6569   /// static data member of class X, names should be looked up in the scope of
   6570   /// class X.
   6571   void ActOnCXXEnterDeclInitializer(Scope *S, Decl *Dcl);
   6572 
   6573   /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
   6574   /// initializer for the declaration 'Dcl'.
   6575   void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl);
   6576 
   6577   /// Create a new lambda closure type.
   6578   CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange,
   6579                                          TypeSourceInfo *Info,
   6580                                          bool KnownDependent,
   6581                                          LambdaCaptureDefault CaptureDefault);
   6582 
   6583   /// Start the definition of a lambda expression.
   6584   CXXMethodDecl *startLambdaDefinition(CXXRecordDecl *Class,
   6585                                        SourceRange IntroducerRange,
   6586                                        TypeSourceInfo *MethodType,
   6587                                        SourceLocation EndLoc,
   6588                                        ArrayRef<ParmVarDecl *> Params,
   6589                                        ConstexprSpecKind ConstexprKind,
   6590                                        Expr *TrailingRequiresClause);
   6591 
   6592   /// Number lambda for linkage purposes if necessary.
   6593   void handleLambdaNumbering(
   6594       CXXRecordDecl *Class, CXXMethodDecl *Method,
   6595       Optional<std::tuple<bool, unsigned, unsigned, Decl *>> Mangling = None);
   6596 
   6597   /// Endow the lambda scope info with the relevant properties.
   6598   void buildLambdaScope(sema::LambdaScopeInfo *LSI,
   6599                         CXXMethodDecl *CallOperator,
   6600                         SourceRange IntroducerRange,
   6601                         LambdaCaptureDefault CaptureDefault,
   6602                         SourceLocation CaptureDefaultLoc,
   6603                         bool ExplicitParams,
   6604                         bool ExplicitResultType,
   6605                         bool Mutable);
   6606 
   6607   /// Perform initialization analysis of the init-capture and perform
   6608   /// any implicit conversions such as an lvalue-to-rvalue conversion if
   6609   /// not being used to initialize a reference.
   6610   ParsedType actOnLambdaInitCaptureInitialization(
   6611       SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
   6612       IdentifierInfo *Id, LambdaCaptureInitKind InitKind, Expr *&Init) {
   6613     return ParsedType::make(buildLambdaInitCaptureInitialization(
   6614         Loc, ByRef, EllipsisLoc, None, Id,
   6615         InitKind != LambdaCaptureInitKind::CopyInit, Init));
   6616   }
   6617   QualType buildLambdaInitCaptureInitialization(
   6618       SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
   6619       Optional<unsigned> NumExpansions, IdentifierInfo *Id, bool DirectInit,
   6620       Expr *&Init);
   6621 
   6622   /// Create a dummy variable within the declcontext of the lambda's
   6623   ///  call operator, for name lookup purposes for a lambda init capture.
   6624   ///
   6625   ///  CodeGen handles emission of lambda captures, ignoring these dummy
   6626   ///  variables appropriately.
   6627   VarDecl *createLambdaInitCaptureVarDecl(SourceLocation Loc,
   6628                                           QualType InitCaptureType,
   6629                                           SourceLocation EllipsisLoc,
   6630                                           IdentifierInfo *Id,
   6631                                           unsigned InitStyle, Expr *Init);
   6632 
   6633   /// Add an init-capture to a lambda scope.
   6634   void addInitCapture(sema::LambdaScopeInfo *LSI, VarDecl *Var);
   6635 
   6636   /// Note that we have finished the explicit captures for the
   6637   /// given lambda.
   6638   void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI);
   6639 
   6640   /// \brief This is called after parsing the explicit template parameter list
   6641   /// on a lambda (if it exists) in C++2a.
   6642   void ActOnLambdaExplicitTemplateParameterList(SourceLocation LAngleLoc,
   6643                                                 ArrayRef<NamedDecl *> TParams,
   6644                                                 SourceLocation RAngleLoc,
   6645                                                 ExprResult RequiresClause);
   6646 
   6647   /// Introduce the lambda parameters into scope.
   6648   void addLambdaParameters(
   6649       ArrayRef<LambdaIntroducer::LambdaCapture> Captures,
   6650       CXXMethodDecl *CallOperator, Scope *CurScope);
   6651 
   6652   /// Deduce a block or lambda's return type based on the return
   6653   /// statements present in the body.
   6654   void deduceClosureReturnType(sema::CapturingScopeInfo &CSI);
   6655 
   6656   /// ActOnStartOfLambdaDefinition - This is called just before we start
   6657   /// parsing the body of a lambda; it analyzes the explicit captures and
   6658   /// arguments, and sets up various data-structures for the body of the
   6659   /// lambda.
   6660   void ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
   6661                                     Declarator &ParamInfo, Scope *CurScope);
   6662 
   6663   /// ActOnLambdaError - If there is an error parsing a lambda, this callback
   6664   /// is invoked to pop the information about the lambda.
   6665   void ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope,
   6666                         bool IsInstantiation = false);
   6667 
   6668   /// ActOnLambdaExpr - This is called when the body of a lambda expression
   6669   /// was successfully completed.
   6670   ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body,
   6671                              Scope *CurScope);
   6672 
   6673   /// Does copying/destroying the captured variable have side effects?
   6674   bool CaptureHasSideEffects(const sema::Capture &From);
   6675 
   6676   /// Diagnose if an explicit lambda capture is unused. Returns true if a
   6677   /// diagnostic is emitted.
   6678   bool DiagnoseUnusedLambdaCapture(SourceRange CaptureRange,
   6679                                    const sema::Capture &From);
   6680 
   6681   /// Build a FieldDecl suitable to hold the given capture.
   6682   FieldDecl *BuildCaptureField(RecordDecl *RD, const sema::Capture &Capture);
   6683 
   6684   /// Initialize the given capture with a suitable expression.
   6685   ExprResult BuildCaptureInit(const sema::Capture &Capture,
   6686                               SourceLocation ImplicitCaptureLoc,
   6687                               bool IsOpenMPMapping = false);
   6688 
   6689   /// Complete a lambda-expression having processed and attached the
   6690   /// lambda body.
   6691   ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
   6692                              sema::LambdaScopeInfo *LSI);
   6693 
   6694   /// Get the return type to use for a lambda's conversion function(s) to
   6695   /// function pointer type, given the type of the call operator.
   6696   QualType
   6697   getLambdaConversionFunctionResultType(const FunctionProtoType *CallOpType,
   6698                                         CallingConv CC);
   6699 
   6700   /// Define the "body" of the conversion from a lambda object to a
   6701   /// function pointer.
   6702   ///
   6703   /// This routine doesn't actually define a sensible body; rather, it fills
   6704   /// in the initialization expression needed to copy the lambda object into
   6705   /// the block, and IR generation actually generates the real body of the
   6706   /// block pointer conversion.
   6707   void DefineImplicitLambdaToFunctionPointerConversion(
   6708          SourceLocation CurrentLoc, CXXConversionDecl *Conv);
   6709 
   6710   /// Define the "body" of the conversion from a lambda object to a
   6711   /// block pointer.
   6712   ///
   6713   /// This routine doesn't actually define a sensible body; rather, it fills
   6714   /// in the initialization expression needed to copy the lambda object into
   6715   /// the block, and IR generation actually generates the real body of the
   6716   /// block pointer conversion.
   6717   void DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLoc,
   6718                                                     CXXConversionDecl *Conv);
   6719 
   6720   ExprResult BuildBlockForLambdaConversion(SourceLocation CurrentLocation,
   6721                                            SourceLocation ConvLocation,
   6722                                            CXXConversionDecl *Conv,
   6723                                            Expr *Src);
   6724 
   6725   /// Check whether the given expression is a valid constraint expression.
   6726   /// A diagnostic is emitted if it is not, false is returned, and
   6727   /// PossibleNonPrimary will be set to true if the failure might be due to a
   6728   /// non-primary expression being used as an atomic constraint.
   6729   bool CheckConstraintExpression(const Expr *CE, Token NextToken = Token(),
   6730                                  bool *PossibleNonPrimary = nullptr,
   6731                                  bool IsTrailingRequiresClause = false);
   6732 
   6733 private:
   6734   /// Caches pairs of template-like decls whose associated constraints were
   6735   /// checked for subsumption and whether or not the first's constraints did in
   6736   /// fact subsume the second's.
   6737   llvm::DenseMap<std::pair<NamedDecl *, NamedDecl *>, bool> SubsumptionCache;
   6738   /// Caches the normalized associated constraints of declarations (concepts or
   6739   /// constrained declarations). If an error occurred while normalizing the
   6740   /// associated constraints of the template or concept, nullptr will be cached
   6741   /// here.
   6742   llvm::DenseMap<NamedDecl *, NormalizedConstraint *>
   6743       NormalizationCache;
   6744 
   6745   llvm::ContextualFoldingSet<ConstraintSatisfaction, const ASTContext &>
   6746       SatisfactionCache;
   6747 
   6748 public:
   6749   const NormalizedConstraint *
   6750   getNormalizedAssociatedConstraints(
   6751       NamedDecl *ConstrainedDecl, ArrayRef<const Expr *> AssociatedConstraints);
   6752 
   6753   /// \brief Check whether the given declaration's associated constraints are
   6754   /// at least as constrained than another declaration's according to the
   6755   /// partial ordering of constraints.
   6756   ///
   6757   /// \param Result If no error occurred, receives the result of true if D1 is
   6758   /// at least constrained than D2, and false otherwise.
   6759   ///
   6760   /// \returns true if an error occurred, false otherwise.
   6761   bool IsAtLeastAsConstrained(NamedDecl *D1, ArrayRef<const Expr *> AC1,
   6762                               NamedDecl *D2, ArrayRef<const Expr *> AC2,
   6763                               bool &Result);
   6764 
   6765   /// If D1 was not at least as constrained as D2, but would've been if a pair
   6766   /// of atomic constraints involved had been declared in a concept and not
   6767   /// repeated in two separate places in code.
   6768   /// \returns true if such a diagnostic was emitted, false otherwise.
   6769   bool MaybeEmitAmbiguousAtomicConstraintsDiagnostic(NamedDecl *D1,
   6770       ArrayRef<const Expr *> AC1, NamedDecl *D2, ArrayRef<const Expr *> AC2);
   6771 
   6772   /// \brief Check whether the given list of constraint expressions are
   6773   /// satisfied (as if in a 'conjunction') given template arguments.
   6774   /// \param Template the template-like entity that triggered the constraints
   6775   /// check (either a concept or a constrained entity).
   6776   /// \param ConstraintExprs a list of constraint expressions, treated as if
   6777   /// they were 'AND'ed together.
   6778   /// \param TemplateArgs the list of template arguments to substitute into the
   6779   /// constraint expression.
   6780   /// \param TemplateIDRange The source range of the template id that
   6781   /// caused the constraints check.
   6782   /// \param Satisfaction if true is returned, will contain details of the
   6783   /// satisfaction, with enough information to diagnose an unsatisfied
   6784   /// expression.
   6785   /// \returns true if an error occurred and satisfaction could not be checked,
   6786   /// false otherwise.
   6787   bool CheckConstraintSatisfaction(
   6788       const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs,
   6789       ArrayRef<TemplateArgument> TemplateArgs,
   6790       SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction);
   6791 
   6792   /// \brief Check whether the given non-dependent constraint expression is
   6793   /// satisfied. Returns false and updates Satisfaction with the satisfaction
   6794   /// verdict if successful, emits a diagnostic and returns true if an error
   6795   /// occured and satisfaction could not be determined.
   6796   ///
   6797   /// \returns true if an error occurred, false otherwise.
   6798   bool CheckConstraintSatisfaction(const Expr *ConstraintExpr,
   6799                                    ConstraintSatisfaction &Satisfaction);
   6800 
   6801   /// Check whether the given function decl's trailing requires clause is
   6802   /// satisfied, if any. Returns false and updates Satisfaction with the
   6803   /// satisfaction verdict if successful, emits a diagnostic and returns true if
   6804   /// an error occured and satisfaction could not be determined.
   6805   ///
   6806   /// \returns true if an error occurred, false otherwise.
   6807   bool CheckFunctionConstraints(const FunctionDecl *FD,
   6808                                 ConstraintSatisfaction &Satisfaction,
   6809                                 SourceLocation UsageLoc = SourceLocation());
   6810 
   6811 
   6812   /// \brief Ensure that the given template arguments satisfy the constraints
   6813   /// associated with the given template, emitting a diagnostic if they do not.
   6814   ///
   6815   /// \param Template The template to which the template arguments are being
   6816   /// provided.
   6817   ///
   6818   /// \param TemplateArgs The converted, canonicalized template arguments.
   6819   ///
   6820   /// \param TemplateIDRange The source range of the template id that
   6821   /// caused the constraints check.
   6822   ///
   6823   /// \returns true if the constrains are not satisfied or could not be checked
   6824   /// for satisfaction, false if the constraints are satisfied.
   6825   bool EnsureTemplateArgumentListConstraints(TemplateDecl *Template,
   6826                                        ArrayRef<TemplateArgument> TemplateArgs,
   6827                                              SourceRange TemplateIDRange);
   6828 
   6829   /// \brief Emit diagnostics explaining why a constraint expression was deemed
   6830   /// unsatisfied.
   6831   /// \param First whether this is the first time an unsatisfied constraint is
   6832   /// diagnosed for this error.
   6833   void
   6834   DiagnoseUnsatisfiedConstraint(const ConstraintSatisfaction &Satisfaction,
   6835                                 bool First = true);
   6836 
   6837   /// \brief Emit diagnostics explaining why a constraint expression was deemed
   6838   /// unsatisfied.
   6839   void
   6840   DiagnoseUnsatisfiedConstraint(const ASTConstraintSatisfaction &Satisfaction,
   6841                                 bool First = true);
   6842 
   6843   // ParseObjCStringLiteral - Parse Objective-C string literals.
   6844   ExprResult ParseObjCStringLiteral(SourceLocation *AtLocs,
   6845                                     ArrayRef<Expr *> Strings);
   6846 
   6847   ExprResult BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S);
   6848 
   6849   /// BuildObjCNumericLiteral - builds an ObjCBoxedExpr AST node for the
   6850   /// numeric literal expression. Type of the expression will be "NSNumber *"
   6851   /// or "id" if NSNumber is unavailable.
   6852   ExprResult BuildObjCNumericLiteral(SourceLocation AtLoc, Expr *Number);
   6853   ExprResult ActOnObjCBoolLiteral(SourceLocation AtLoc, SourceLocation ValueLoc,
   6854                                   bool Value);
   6855   ExprResult BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements);
   6856 
   6857   /// BuildObjCBoxedExpr - builds an ObjCBoxedExpr AST node for the
   6858   /// '@' prefixed parenthesized expression. The type of the expression will
   6859   /// either be "NSNumber *", "NSString *" or "NSValue *" depending on the type
   6860   /// of ValueType, which is allowed to be a built-in numeric type, "char *",
   6861   /// "const char *" or C structure with attribute 'objc_boxable'.
   6862   ExprResult BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr);
   6863 
   6864   ExprResult BuildObjCSubscriptExpression(SourceLocation RB, Expr *BaseExpr,
   6865                                           Expr *IndexExpr,
   6866                                           ObjCMethodDecl *getterMethod,
   6867                                           ObjCMethodDecl *setterMethod);
   6868 
   6869   ExprResult BuildObjCDictionaryLiteral(SourceRange SR,
   6870                                MutableArrayRef<ObjCDictionaryElement> Elements);
   6871 
   6872   ExprResult BuildObjCEncodeExpression(SourceLocation AtLoc,
   6873                                   TypeSourceInfo *EncodedTypeInfo,
   6874                                   SourceLocation RParenLoc);
   6875   ExprResult BuildCXXMemberCallExpr(Expr *Exp, NamedDecl *FoundDecl,
   6876                                     CXXConversionDecl *Method,
   6877                                     bool HadMultipleCandidates);
   6878 
   6879   ExprResult ParseObjCEncodeExpression(SourceLocation AtLoc,
   6880                                        SourceLocation EncodeLoc,
   6881                                        SourceLocation LParenLoc,
   6882                                        ParsedType Ty,
   6883                                        SourceLocation RParenLoc);
   6884 
   6885   /// ParseObjCSelectorExpression - Build selector expression for \@selector
   6886   ExprResult ParseObjCSelectorExpression(Selector Sel,
   6887                                          SourceLocation AtLoc,
   6888                                          SourceLocation SelLoc,
   6889                                          SourceLocation LParenLoc,
   6890                                          SourceLocation RParenLoc,
   6891                                          bool WarnMultipleSelectors);
   6892 
   6893   /// ParseObjCProtocolExpression - Build protocol expression for \@protocol
   6894   ExprResult ParseObjCProtocolExpression(IdentifierInfo * ProtocolName,
   6895                                          SourceLocation AtLoc,
   6896                                          SourceLocation ProtoLoc,
   6897                                          SourceLocation LParenLoc,
   6898                                          SourceLocation ProtoIdLoc,
   6899                                          SourceLocation RParenLoc);
   6900 
   6901   //===--------------------------------------------------------------------===//
   6902   // C++ Declarations
   6903   //
   6904   Decl *ActOnStartLinkageSpecification(Scope *S,
   6905                                        SourceLocation ExternLoc,
   6906                                        Expr *LangStr,
   6907                                        SourceLocation LBraceLoc);
   6908   Decl *ActOnFinishLinkageSpecification(Scope *S,
   6909                                         Decl *LinkageSpec,
   6910                                         SourceLocation RBraceLoc);
   6911 
   6912 
   6913   //===--------------------------------------------------------------------===//
   6914   // C++ Classes
   6915   //
   6916   CXXRecordDecl *getCurrentClass(Scope *S, const CXXScopeSpec *SS);
   6917   bool isCurrentClassName(const IdentifierInfo &II, Scope *S,
   6918                           const CXXScopeSpec *SS = nullptr);
   6919   bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS);
   6920 
   6921   bool ActOnAccessSpecifier(AccessSpecifier Access, SourceLocation ASLoc,
   6922                             SourceLocation ColonLoc,
   6923                             const ParsedAttributesView &Attrs);
   6924 
   6925   NamedDecl *ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS,
   6926                                  Declarator &D,
   6927                                  MultiTemplateParamsArg TemplateParameterLists,
   6928                                  Expr *BitfieldWidth, const VirtSpecifiers &VS,
   6929                                  InClassInitStyle InitStyle);
   6930 
   6931   void ActOnStartCXXInClassMemberInitializer();
   6932   void ActOnFinishCXXInClassMemberInitializer(Decl *VarDecl,
   6933                                               SourceLocation EqualLoc,
   6934                                               Expr *Init);
   6935 
   6936   MemInitResult ActOnMemInitializer(Decl *ConstructorD,
   6937                                     Scope *S,
   6938                                     CXXScopeSpec &SS,
   6939                                     IdentifierInfo *MemberOrBase,
   6940                                     ParsedType TemplateTypeTy,
   6941                                     const DeclSpec &DS,
   6942                                     SourceLocation IdLoc,
   6943                                     SourceLocation LParenLoc,
   6944                                     ArrayRef<Expr *> Args,
   6945                                     SourceLocation RParenLoc,
   6946                                     SourceLocation EllipsisLoc);
   6947 
   6948   MemInitResult ActOnMemInitializer(Decl *ConstructorD,
   6949                                     Scope *S,
   6950                                     CXXScopeSpec &SS,
   6951                                     IdentifierInfo *MemberOrBase,
   6952                                     ParsedType TemplateTypeTy,
   6953                                     const DeclSpec &DS,
   6954                                     SourceLocation IdLoc,
   6955                                     Expr *InitList,
   6956                                     SourceLocation EllipsisLoc);
   6957 
   6958   MemInitResult BuildMemInitializer(Decl *ConstructorD,
   6959                                     Scope *S,
   6960                                     CXXScopeSpec &SS,
   6961                                     IdentifierInfo *MemberOrBase,
   6962                                     ParsedType TemplateTypeTy,
   6963                                     const DeclSpec &DS,
   6964                                     SourceLocation IdLoc,
   6965                                     Expr *Init,
   6966                                     SourceLocation EllipsisLoc);
   6967 
   6968   MemInitResult BuildMemberInitializer(ValueDecl *Member,
   6969                                        Expr *Init,
   6970                                        SourceLocation IdLoc);
   6971 
   6972   MemInitResult BuildBaseInitializer(QualType BaseType,
   6973                                      TypeSourceInfo *BaseTInfo,
   6974                                      Expr *Init,
   6975                                      CXXRecordDecl *ClassDecl,
   6976                                      SourceLocation EllipsisLoc);
   6977 
   6978   MemInitResult BuildDelegatingInitializer(TypeSourceInfo *TInfo,
   6979                                            Expr *Init,
   6980                                            CXXRecordDecl *ClassDecl);
   6981 
   6982   bool SetDelegatingInitializer(CXXConstructorDecl *Constructor,
   6983                                 CXXCtorInitializer *Initializer);
   6984 
   6985   bool SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
   6986                            ArrayRef<CXXCtorInitializer *> Initializers = None);
   6987 
   6988   void SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation);
   6989 
   6990 
   6991   /// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
   6992   /// mark all the non-trivial destructors of its members and bases as
   6993   /// referenced.
   6994   void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc,
   6995                                               CXXRecordDecl *Record);
   6996 
   6997   /// Mark destructors of virtual bases of this class referenced. In the Itanium
   6998   /// C++ ABI, this is done when emitting a destructor for any non-abstract
   6999   /// class. In the Microsoft C++ ABI, this is done any time a class's
   7000   /// destructor is referenced.
   7001   void MarkVirtualBaseDestructorsReferenced(
   7002       SourceLocation Location, CXXRecordDecl *ClassDecl,
   7003       llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases = nullptr);
   7004 
   7005   /// Do semantic checks to allow the complete destructor variant to be emitted
   7006   /// when the destructor is defined in another translation unit. In the Itanium
   7007   /// C++ ABI, destructor variants are emitted together. In the MS C++ ABI, they
   7008   /// can be emitted in separate TUs. To emit the complete variant, run a subset
   7009   /// of the checks performed when emitting a regular destructor.
   7010   void CheckCompleteDestructorVariant(SourceLocation CurrentLocation,
   7011                                       CXXDestructorDecl *Dtor);
   7012 
   7013   /// The list of classes whose vtables have been used within
   7014   /// this translation unit, and the source locations at which the
   7015   /// first use occurred.
   7016   typedef std::pair<CXXRecordDecl*, SourceLocation> VTableUse;
   7017 
   7018   /// The list of vtables that are required but have not yet been
   7019   /// materialized.
   7020   SmallVector<VTableUse, 16> VTableUses;
   7021 
   7022   /// The set of classes whose vtables have been used within
   7023   /// this translation unit, and a bit that will be true if the vtable is
   7024   /// required to be emitted (otherwise, it should be emitted only if needed
   7025   /// by code generation).
   7026   llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed;
   7027 
   7028   /// Load any externally-stored vtable uses.
   7029   void LoadExternalVTableUses();
   7030 
   7031   /// Note that the vtable for the given class was used at the
   7032   /// given location.
   7033   void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
   7034                       bool DefinitionRequired = false);
   7035 
   7036   /// Mark the exception specifications of all virtual member functions
   7037   /// in the given class as needed.
   7038   void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
   7039                                              const CXXRecordDecl *RD);
   7040 
   7041   /// MarkVirtualMembersReferenced - Will mark all members of the given
   7042   /// CXXRecordDecl referenced.
   7043   void MarkVirtualMembersReferenced(SourceLocation Loc, const CXXRecordDecl *RD,
   7044                                     bool ConstexprOnly = false);
   7045 
   7046   /// Define all of the vtables that have been used in this
   7047   /// translation unit and reference any virtual members used by those
   7048   /// vtables.
   7049   ///
   7050   /// \returns true if any work was done, false otherwise.
   7051   bool DefineUsedVTables();
   7052 
   7053   void AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl);
   7054 
   7055   void ActOnMemInitializers(Decl *ConstructorDecl,
   7056                             SourceLocation ColonLoc,
   7057                             ArrayRef<CXXCtorInitializer*> MemInits,
   7058                             bool AnyErrors);
   7059 
   7060   /// Check class-level dllimport/dllexport attribute. The caller must
   7061   /// ensure that referenceDLLExportedClassMethods is called some point later
   7062   /// when all outer classes of Class are complete.
   7063   void checkClassLevelDLLAttribute(CXXRecordDecl *Class);
   7064   void checkClassLevelCodeSegAttribute(CXXRecordDecl *Class);
   7065 
   7066   void referenceDLLExportedClassMethods();
   7067 
   7068   void propagateDLLAttrToBaseClassTemplate(
   7069       CXXRecordDecl *Class, Attr *ClassAttr,
   7070       ClassTemplateSpecializationDecl *BaseTemplateSpec,
   7071       SourceLocation BaseLoc);
   7072 
   7073   /// Add gsl::Pointer attribute to std::container::iterator
   7074   /// \param ND The declaration that introduces the name
   7075   /// std::container::iterator. \param UnderlyingRecord The record named by ND.
   7076   void inferGslPointerAttribute(NamedDecl *ND, CXXRecordDecl *UnderlyingRecord);
   7077 
   7078   /// Add [[gsl::Owner]] and [[gsl::Pointer]] attributes for std:: types.
   7079   void inferGslOwnerPointerAttribute(CXXRecordDecl *Record);
   7080 
   7081   /// Add [[gsl::Pointer]] attributes for std:: types.
   7082   void inferGslPointerAttribute(TypedefNameDecl *TD);
   7083 
   7084   void CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record);
   7085 
   7086   /// Check that the C++ class annoated with "trivial_abi" satisfies all the
   7087   /// conditions that are needed for the attribute to have an effect.
   7088   void checkIllFormedTrivialABIStruct(CXXRecordDecl &RD);
   7089 
   7090   void ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc,
   7091                                          Decl *TagDecl, SourceLocation LBrac,
   7092                                          SourceLocation RBrac,
   7093                                          const ParsedAttributesView &AttrList);
   7094   void ActOnFinishCXXMemberDecls();
   7095   void ActOnFinishCXXNonNestedClass();
   7096 
   7097   void ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param);
   7098   unsigned ActOnReenterTemplateScope(Decl *Template,
   7099                                      llvm::function_ref<Scope *()> EnterScope);
   7100   void ActOnStartDelayedMemberDeclarations(Scope *S, Decl *Record);
   7101   void ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
   7102   void ActOnDelayedCXXMethodParameter(Scope *S, Decl *Param);
   7103   void ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *Record);
   7104   void ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
   7105   void ActOnFinishDelayedMemberInitializers(Decl *Record);
   7106   void MarkAsLateParsedTemplate(FunctionDecl *FD, Decl *FnD,
   7107                                 CachedTokens &Toks);
   7108   void UnmarkAsLateParsedTemplate(FunctionDecl *FD);
   7109   bool IsInsideALocalClassWithinATemplateFunction();
   7110 
   7111   Decl *ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
   7112                                      Expr *AssertExpr,
   7113                                      Expr *AssertMessageExpr,
   7114                                      SourceLocation RParenLoc);
   7115   Decl *BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
   7116                                      Expr *AssertExpr,
   7117                                      StringLiteral *AssertMessageExpr,
   7118                                      SourceLocation RParenLoc,
   7119                                      bool Failed);
   7120 
   7121   FriendDecl *CheckFriendTypeDecl(SourceLocation LocStart,
   7122                                   SourceLocation FriendLoc,
   7123                                   TypeSourceInfo *TSInfo);
   7124   Decl *ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
   7125                             MultiTemplateParamsArg TemplateParams);
   7126   NamedDecl *ActOnFriendFunctionDecl(Scope *S, Declarator &D,
   7127                                      MultiTemplateParamsArg TemplateParams);
   7128 
   7129   QualType CheckConstructorDeclarator(Declarator &D, QualType R,
   7130                                       StorageClass& SC);
   7131   void CheckConstructor(CXXConstructorDecl *Constructor);
   7132   QualType CheckDestructorDeclarator(Declarator &D, QualType R,
   7133                                      StorageClass& SC);
   7134   bool CheckDestructor(CXXDestructorDecl *Destructor);
   7135   void CheckConversionDeclarator(Declarator &D, QualType &R,
   7136                                  StorageClass& SC);
   7137   Decl *ActOnConversionDeclarator(CXXConversionDecl *Conversion);
   7138   void CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
   7139                                      StorageClass &SC);
   7140   void CheckDeductionGuideTemplate(FunctionTemplateDecl *TD);
   7141 
   7142   void CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *MD);
   7143 
   7144   bool CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD,
   7145                                              CXXSpecialMember CSM);
   7146   void CheckDelayedMemberExceptionSpecs();
   7147 
   7148   bool CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *MD,
   7149                                           DefaultedComparisonKind DCK);
   7150   void DeclareImplicitEqualityComparison(CXXRecordDecl *RD,
   7151                                          FunctionDecl *Spaceship);
   7152   void DefineDefaultedComparison(SourceLocation Loc, FunctionDecl *FD,
   7153                                  DefaultedComparisonKind DCK);
   7154 
   7155   //===--------------------------------------------------------------------===//
   7156   // C++ Derived Classes
   7157   //
   7158 
   7159   /// ActOnBaseSpecifier - Parsed a base specifier
   7160   CXXBaseSpecifier *CheckBaseSpecifier(CXXRecordDecl *Class,
   7161                                        SourceRange SpecifierRange,
   7162                                        bool Virtual, AccessSpecifier Access,
   7163                                        TypeSourceInfo *TInfo,
   7164                                        SourceLocation EllipsisLoc);
   7165 
   7166   BaseResult ActOnBaseSpecifier(Decl *classdecl,
   7167                                 SourceRange SpecifierRange,
   7168                                 ParsedAttributes &Attrs,
   7169                                 bool Virtual, AccessSpecifier Access,
   7170                                 ParsedType basetype,
   7171                                 SourceLocation BaseLoc,
   7172                                 SourceLocation EllipsisLoc);
   7173 
   7174   bool AttachBaseSpecifiers(CXXRecordDecl *Class,
   7175                             MutableArrayRef<CXXBaseSpecifier *> Bases);
   7176   void ActOnBaseSpecifiers(Decl *ClassDecl,
   7177                            MutableArrayRef<CXXBaseSpecifier *> Bases);
   7178 
   7179   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base);
   7180   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base,
   7181                      CXXBasePaths &Paths);
   7182 
   7183   // FIXME: I don't like this name.
   7184   void BuildBasePathArray(const CXXBasePaths &Paths, CXXCastPath &BasePath);
   7185 
   7186   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   7187                                     SourceLocation Loc, SourceRange Range,
   7188                                     CXXCastPath *BasePath = nullptr,
   7189                                     bool IgnoreAccess = false);
   7190   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   7191                                     unsigned InaccessibleBaseID,
   7192                                     unsigned AmbiguousBaseConvID,
   7193                                     SourceLocation Loc, SourceRange Range,
   7194                                     DeclarationName Name,
   7195                                     CXXCastPath *BasePath,
   7196                                     bool IgnoreAccess = false);
   7197 
   7198   std::string getAmbiguousPathsDisplayString(CXXBasePaths &Paths);
   7199 
   7200   bool CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
   7201                                          const CXXMethodDecl *Old);
   7202 
   7203   /// CheckOverridingFunctionReturnType - Checks whether the return types are
   7204   /// covariant, according to C++ [class.virtual]p5.
   7205   bool CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
   7206                                          const CXXMethodDecl *Old);
   7207 
   7208   /// CheckOverridingFunctionExceptionSpec - Checks whether the exception
   7209   /// spec is a subset of base spec.
   7210   bool CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
   7211                                             const CXXMethodDecl *Old);
   7212 
   7213   bool CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange);
   7214 
   7215   /// CheckOverrideControl - Check C++11 override control semantics.
   7216   void CheckOverrideControl(NamedDecl *D);
   7217 
   7218   /// DiagnoseAbsenceOfOverrideControl - Diagnose if 'override' keyword was
   7219   /// not used in the declaration of an overriding method.
   7220   void DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent);
   7221 
   7222   /// CheckForFunctionMarkedFinal - Checks whether a virtual member function
   7223   /// overrides a virtual member function marked 'final', according to
   7224   /// C++11 [class.virtual]p4.
   7225   bool CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
   7226                                               const CXXMethodDecl *Old);
   7227 
   7228 
   7229   //===--------------------------------------------------------------------===//
   7230   // C++ Access Control
   7231   //
   7232 
   7233   enum AccessResult {
   7234     AR_accessible,
   7235     AR_inaccessible,
   7236     AR_dependent,
   7237     AR_delayed
   7238   };
   7239 
   7240   bool SetMemberAccessSpecifier(NamedDecl *MemberDecl,
   7241                                 NamedDecl *PrevMemberDecl,
   7242                                 AccessSpecifier LexicalAS);
   7243 
   7244   AccessResult CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E,
   7245                                            DeclAccessPair FoundDecl);
   7246   AccessResult CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E,
   7247                                            DeclAccessPair FoundDecl);
   7248   AccessResult CheckAllocationAccess(SourceLocation OperatorLoc,
   7249                                      SourceRange PlacementRange,
   7250                                      CXXRecordDecl *NamingClass,
   7251                                      DeclAccessPair FoundDecl,
   7252                                      bool Diagnose = true);
   7253   AccessResult CheckConstructorAccess(SourceLocation Loc,
   7254                                       CXXConstructorDecl *D,
   7255                                       DeclAccessPair FoundDecl,
   7256                                       const InitializedEntity &Entity,
   7257                                       bool IsCopyBindingRefToTemp = false);
   7258   AccessResult CheckConstructorAccess(SourceLocation Loc,
   7259                                       CXXConstructorDecl *D,
   7260                                       DeclAccessPair FoundDecl,
   7261                                       const InitializedEntity &Entity,
   7262                                       const PartialDiagnostic &PDiag);
   7263   AccessResult CheckDestructorAccess(SourceLocation Loc,
   7264                                      CXXDestructorDecl *Dtor,
   7265                                      const PartialDiagnostic &PDiag,
   7266                                      QualType objectType = QualType());
   7267   AccessResult CheckFriendAccess(NamedDecl *D);
   7268   AccessResult CheckMemberAccess(SourceLocation UseLoc,
   7269                                  CXXRecordDecl *NamingClass,
   7270                                  DeclAccessPair Found);
   7271   AccessResult
   7272   CheckStructuredBindingMemberAccess(SourceLocation UseLoc,
   7273                                      CXXRecordDecl *DecomposedClass,
   7274                                      DeclAccessPair Field);
   7275   AccessResult CheckMemberOperatorAccess(SourceLocation Loc,
   7276                                          Expr *ObjectExpr,
   7277                                          Expr *ArgExpr,
   7278                                          DeclAccessPair FoundDecl);
   7279   AccessResult CheckAddressOfMemberAccess(Expr *OvlExpr,
   7280                                           DeclAccessPair FoundDecl);
   7281   AccessResult CheckBaseClassAccess(SourceLocation AccessLoc,
   7282                                     QualType Base, QualType Derived,
   7283                                     const CXXBasePath &Path,
   7284                                     unsigned DiagID,
   7285                                     bool ForceCheck = false,
   7286                                     bool ForceUnprivileged = false);
   7287   void CheckLookupAccess(const LookupResult &R);
   7288   bool IsSimplyAccessible(NamedDecl *Decl, CXXRecordDecl *NamingClass,
   7289                           QualType BaseType);
   7290   bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass,
   7291                                      DeclAccessPair Found, QualType ObjectType,
   7292                                      SourceLocation Loc,
   7293                                      const PartialDiagnostic &Diag);
   7294   bool isMemberAccessibleForDeletion(CXXRecordDecl *NamingClass,
   7295                                      DeclAccessPair Found,
   7296                                      QualType ObjectType) {
   7297     return isMemberAccessibleForDeletion(NamingClass, Found, ObjectType,
   7298                                          SourceLocation(), PDiag());
   7299   }
   7300 
   7301   void HandleDependentAccessCheck(const DependentDiagnostic &DD,
   7302                          const MultiLevelTemplateArgumentList &TemplateArgs);
   7303   void PerformDependentDiagnostics(const DeclContext *Pattern,
   7304                         const MultiLevelTemplateArgumentList &TemplateArgs);
   7305 
   7306   void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
   7307 
   7308   /// When true, access checking violations are treated as SFINAE
   7309   /// failures rather than hard errors.
   7310   bool AccessCheckingSFINAE;
   7311 
   7312   enum AbstractDiagSelID {
   7313     AbstractNone = -1,
   7314     AbstractReturnType,
   7315     AbstractParamType,
   7316     AbstractVariableType,
   7317     AbstractFieldType,
   7318     AbstractIvarType,
   7319     AbstractSynthesizedIvarType,
   7320     AbstractArrayType
   7321   };
   7322 
   7323   bool isAbstractType(SourceLocation Loc, QualType T);
   7324   bool RequireNonAbstractType(SourceLocation Loc, QualType T,
   7325                               TypeDiagnoser &Diagnoser);
   7326   template <typename... Ts>
   7327   bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned DiagID,
   7328                               const Ts &...Args) {
   7329     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
   7330     return RequireNonAbstractType(Loc, T, Diagnoser);
   7331   }
   7332 
   7333   void DiagnoseAbstractType(const CXXRecordDecl *RD);
   7334 
   7335   //===--------------------------------------------------------------------===//
   7336   // C++ Overloaded Operators [C++ 13.5]
   7337   //
   7338 
   7339   bool CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl);
   7340 
   7341   bool CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl);
   7342 
   7343   //===--------------------------------------------------------------------===//
   7344   // C++ Templates [C++ 14]
   7345   //
   7346   void FilterAcceptableTemplateNames(LookupResult &R,
   7347                                      bool AllowFunctionTemplates = true,
   7348                                      bool AllowDependent = true);
   7349   bool hasAnyAcceptableTemplateNames(LookupResult &R,
   7350                                      bool AllowFunctionTemplates = true,
   7351                                      bool AllowDependent = true,
   7352                                      bool AllowNonTemplateFunctions = false);
   7353   /// Try to interpret the lookup result D as a template-name.
   7354   ///
   7355   /// \param D A declaration found by name lookup.
   7356   /// \param AllowFunctionTemplates Whether function templates should be
   7357   ///        considered valid results.
   7358   /// \param AllowDependent Whether unresolved using declarations (that might
   7359   ///        name templates) should be considered valid results.
   7360   static NamedDecl *getAsTemplateNameDecl(NamedDecl *D,
   7361                                           bool AllowFunctionTemplates = true,
   7362                                           bool AllowDependent = true);
   7363 
   7364   enum TemplateNameIsRequiredTag { TemplateNameIsRequired };
   7365   /// Whether and why a template name is required in this lookup.
   7366   class RequiredTemplateKind {
   7367   public:
   7368     /// Template name is required if TemplateKWLoc is valid.
   7369     RequiredTemplateKind(SourceLocation TemplateKWLoc = SourceLocation())
   7370         : TemplateKW(TemplateKWLoc) {}
   7371     /// Template name is unconditionally required.
   7372     RequiredTemplateKind(TemplateNameIsRequiredTag) : TemplateKW() {}
   7373 
   7374     SourceLocation getTemplateKeywordLoc() const {
   7375       return TemplateKW.getValueOr(SourceLocation());
   7376     }
   7377     bool hasTemplateKeyword() const { return getTemplateKeywordLoc().isValid(); }
   7378     bool isRequired() const { return TemplateKW != SourceLocation(); }
   7379     explicit operator bool() const { return isRequired(); }
   7380 
   7381   private:
   7382     llvm::Optional<SourceLocation> TemplateKW;
   7383   };
   7384 
   7385   enum class AssumedTemplateKind {
   7386     /// This is not assumed to be a template name.
   7387     None,
   7388     /// This is assumed to be a template name because lookup found nothing.
   7389     FoundNothing,
   7390     /// This is assumed to be a template name because lookup found one or more
   7391     /// functions (but no function templates).
   7392     FoundFunctions,
   7393   };
   7394   bool LookupTemplateName(
   7395       LookupResult &R, Scope *S, CXXScopeSpec &SS, QualType ObjectType,
   7396       bool EnteringContext, bool &MemberOfUnknownSpecialization,
   7397       RequiredTemplateKind RequiredTemplate = SourceLocation(),
   7398       AssumedTemplateKind *ATK = nullptr, bool AllowTypoCorrection = true);
   7399 
   7400   TemplateNameKind isTemplateName(Scope *S,
   7401                                   CXXScopeSpec &SS,
   7402                                   bool hasTemplateKeyword,
   7403                                   const UnqualifiedId &Name,
   7404                                   ParsedType ObjectType,
   7405                                   bool EnteringContext,
   7406                                   TemplateTy &Template,
   7407                                   bool &MemberOfUnknownSpecialization,
   7408                                   bool Disambiguation = false);
   7409 
   7410   /// Try to resolve an undeclared template name as a type template.
   7411   ///
   7412   /// Sets II to the identifier corresponding to the template name, and updates
   7413   /// Name to a corresponding (typo-corrected) type template name and TNK to
   7414   /// the corresponding kind, if possible.
   7415   void ActOnUndeclaredTypeTemplateName(Scope *S, TemplateTy &Name,
   7416                                        TemplateNameKind &TNK,
   7417                                        SourceLocation NameLoc,
   7418                                        IdentifierInfo *&II);
   7419 
   7420   bool resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name,
   7421                                         SourceLocation NameLoc,
   7422                                         bool Diagnose = true);
   7423 
   7424   /// Determine whether a particular identifier might be the name in a C++1z
   7425   /// deduction-guide declaration.
   7426   bool isDeductionGuideName(Scope *S, const IdentifierInfo &Name,
   7427                             SourceLocation NameLoc,
   7428                             ParsedTemplateTy *Template = nullptr);
   7429 
   7430   bool DiagnoseUnknownTemplateName(const IdentifierInfo &II,
   7431                                    SourceLocation IILoc,
   7432                                    Scope *S,
   7433                                    const CXXScopeSpec *SS,
   7434                                    TemplateTy &SuggestedTemplate,
   7435                                    TemplateNameKind &SuggestedKind);
   7436 
   7437   bool DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation,
   7438                                       NamedDecl *Instantiation,
   7439                                       bool InstantiatedFromMember,
   7440                                       const NamedDecl *Pattern,
   7441                                       const NamedDecl *PatternDef,
   7442                                       TemplateSpecializationKind TSK,
   7443                                       bool Complain = true);
   7444 
   7445   void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl);
   7446   TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl);
   7447 
   7448   NamedDecl *ActOnTypeParameter(Scope *S, bool Typename,
   7449                                 SourceLocation EllipsisLoc,
   7450                                 SourceLocation KeyLoc,
   7451                                 IdentifierInfo *ParamName,
   7452                                 SourceLocation ParamNameLoc,
   7453                                 unsigned Depth, unsigned Position,
   7454                                 SourceLocation EqualLoc,
   7455                                 ParsedType DefaultArg, bool HasTypeConstraint);
   7456 
   7457   bool ActOnTypeConstraint(const CXXScopeSpec &SS,
   7458                            TemplateIdAnnotation *TypeConstraint,
   7459                            TemplateTypeParmDecl *ConstrainedParameter,
   7460                            SourceLocation EllipsisLoc);
   7461   bool BuildTypeConstraint(const CXXScopeSpec &SS,
   7462                            TemplateIdAnnotation *TypeConstraint,
   7463                            TemplateTypeParmDecl *ConstrainedParameter,
   7464                            SourceLocation EllipsisLoc,
   7465                            bool AllowUnexpandedPack);
   7466 
   7467   bool AttachTypeConstraint(NestedNameSpecifierLoc NS,
   7468                             DeclarationNameInfo NameInfo,
   7469                             ConceptDecl *NamedConcept,
   7470                             const TemplateArgumentListInfo *TemplateArgs,
   7471                             TemplateTypeParmDecl *ConstrainedParameter,
   7472                             SourceLocation EllipsisLoc);
   7473 
   7474   bool AttachTypeConstraint(AutoTypeLoc TL,
   7475                             NonTypeTemplateParmDecl *ConstrainedParameter,
   7476                             SourceLocation EllipsisLoc);
   7477 
   7478   bool RequireStructuralType(QualType T, SourceLocation Loc);
   7479 
   7480   QualType CheckNonTypeTemplateParameterType(TypeSourceInfo *&TSI,
   7481                                              SourceLocation Loc);
   7482   QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc);
   7483 
   7484   NamedDecl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
   7485                                       unsigned Depth,
   7486                                       unsigned Position,
   7487                                       SourceLocation EqualLoc,
   7488                                       Expr *DefaultArg);
   7489   NamedDecl *ActOnTemplateTemplateParameter(Scope *S,
   7490                                        SourceLocation TmpLoc,
   7491                                        TemplateParameterList *Params,
   7492                                        SourceLocation EllipsisLoc,
   7493                                        IdentifierInfo *ParamName,
   7494                                        SourceLocation ParamNameLoc,
   7495                                        unsigned Depth,
   7496                                        unsigned Position,
   7497                                        SourceLocation EqualLoc,
   7498                                        ParsedTemplateArgument DefaultArg);
   7499 
   7500   TemplateParameterList *
   7501   ActOnTemplateParameterList(unsigned Depth,
   7502                              SourceLocation ExportLoc,
   7503                              SourceLocation TemplateLoc,
   7504                              SourceLocation LAngleLoc,
   7505                              ArrayRef<NamedDecl *> Params,
   7506                              SourceLocation RAngleLoc,
   7507                              Expr *RequiresClause);
   7508 
   7509   /// The context in which we are checking a template parameter list.
   7510   enum TemplateParamListContext {
   7511     TPC_ClassTemplate,
   7512     TPC_VarTemplate,
   7513     TPC_FunctionTemplate,
   7514     TPC_ClassTemplateMember,
   7515     TPC_FriendClassTemplate,
   7516     TPC_FriendFunctionTemplate,
   7517     TPC_FriendFunctionTemplateDefinition,
   7518     TPC_TypeAliasTemplate
   7519   };
   7520 
   7521   bool CheckTemplateParameterList(TemplateParameterList *NewParams,
   7522                                   TemplateParameterList *OldParams,
   7523                                   TemplateParamListContext TPC,
   7524                                   SkipBodyInfo *SkipBody = nullptr);
   7525   TemplateParameterList *MatchTemplateParametersToScopeSpecifier(
   7526       SourceLocation DeclStartLoc, SourceLocation DeclLoc,
   7527       const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId,
   7528       ArrayRef<TemplateParameterList *> ParamLists,
   7529       bool IsFriend, bool &IsMemberSpecialization, bool &Invalid,
   7530       bool SuppressDiagnostic = false);
   7531 
   7532   DeclResult CheckClassTemplate(
   7533       Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
   7534       CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc,
   7535       const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams,
   7536       AccessSpecifier AS, SourceLocation ModulePrivateLoc,
   7537       SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists,
   7538       TemplateParameterList **OuterTemplateParamLists,
   7539       SkipBodyInfo *SkipBody = nullptr);
   7540 
   7541   TemplateArgumentLoc getTrivialTemplateArgumentLoc(const TemplateArgument &Arg,
   7542                                                     QualType NTTPType,
   7543                                                     SourceLocation Loc);
   7544 
   7545   /// Get a template argument mapping the given template parameter to itself,
   7546   /// e.g. for X in \c template<int X>, this would return an expression template
   7547   /// argument referencing X.
   7548   TemplateArgumentLoc getIdentityTemplateArgumentLoc(NamedDecl *Param,
   7549                                                      SourceLocation Location);
   7550 
   7551   void translateTemplateArguments(const ASTTemplateArgsPtr &In,
   7552                                   TemplateArgumentListInfo &Out);
   7553 
   7554   ParsedTemplateArgument ActOnTemplateTypeArgument(TypeResult ParsedType);
   7555 
   7556   void NoteAllFoundTemplates(TemplateName Name);
   7557 
   7558   QualType CheckTemplateIdType(TemplateName Template,
   7559                                SourceLocation TemplateLoc,
   7560                               TemplateArgumentListInfo &TemplateArgs);
   7561 
   7562   TypeResult
   7563   ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
   7564                       TemplateTy Template, IdentifierInfo *TemplateII,
   7565                       SourceLocation TemplateIILoc, SourceLocation LAngleLoc,
   7566                       ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc,
   7567                       bool IsCtorOrDtorName = false, bool IsClassName = false);
   7568 
   7569   /// Parsed an elaborated-type-specifier that refers to a template-id,
   7570   /// such as \c class T::template apply<U>.
   7571   TypeResult ActOnTagTemplateIdType(TagUseKind TUK,
   7572                                     TypeSpecifierType TagSpec,
   7573                                     SourceLocation TagLoc,
   7574                                     CXXScopeSpec &SS,
   7575                                     SourceLocation TemplateKWLoc,
   7576                                     TemplateTy TemplateD,
   7577                                     SourceLocation TemplateLoc,
   7578                                     SourceLocation LAngleLoc,
   7579                                     ASTTemplateArgsPtr TemplateArgsIn,
   7580                                     SourceLocation RAngleLoc);
   7581 
   7582   DeclResult ActOnVarTemplateSpecialization(
   7583       Scope *S, Declarator &D, TypeSourceInfo *DI,
   7584       SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams,
   7585       StorageClass SC, bool IsPartialSpecialization);
   7586 
   7587   /// Get the specialization of the given variable template corresponding to
   7588   /// the specified argument list, or a null-but-valid result if the arguments
   7589   /// are dependent.
   7590   DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
   7591                                 SourceLocation TemplateLoc,
   7592                                 SourceLocation TemplateNameLoc,
   7593                                 const TemplateArgumentListInfo &TemplateArgs);
   7594 
   7595   /// Form a reference to the specialization of the given variable template
   7596   /// corresponding to the specified argument list, or a null-but-valid result
   7597   /// if the arguments are dependent.
   7598   ExprResult CheckVarTemplateId(const CXXScopeSpec &SS,
   7599                                 const DeclarationNameInfo &NameInfo,
   7600                                 VarTemplateDecl *Template,
   7601                                 SourceLocation TemplateLoc,
   7602                                 const TemplateArgumentListInfo *TemplateArgs);
   7603 
   7604   ExprResult
   7605   CheckConceptTemplateId(const CXXScopeSpec &SS,
   7606                          SourceLocation TemplateKWLoc,
   7607                          const DeclarationNameInfo &ConceptNameInfo,
   7608                          NamedDecl *FoundDecl, ConceptDecl *NamedConcept,
   7609                          const TemplateArgumentListInfo *TemplateArgs);
   7610 
   7611   void diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc);
   7612 
   7613   ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS,
   7614                                  SourceLocation TemplateKWLoc,
   7615                                  LookupResult &R,
   7616                                  bool RequiresADL,
   7617                                const TemplateArgumentListInfo *TemplateArgs);
   7618 
   7619   ExprResult BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS,
   7620                                           SourceLocation TemplateKWLoc,
   7621                                const DeclarationNameInfo &NameInfo,
   7622                                const TemplateArgumentListInfo *TemplateArgs);
   7623 
   7624   TemplateNameKind ActOnTemplateName(
   7625       Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
   7626       const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext,
   7627       TemplateTy &Template, bool AllowInjectedClassName = false);
   7628 
   7629   DeclResult ActOnClassTemplateSpecialization(
   7630       Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
   7631       SourceLocation ModulePrivateLoc, CXXScopeSpec &SS,
   7632       TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr,
   7633       MultiTemplateParamsArg TemplateParameterLists,
   7634       SkipBodyInfo *SkipBody = nullptr);
   7635 
   7636   bool CheckTemplatePartialSpecializationArgs(SourceLocation Loc,
   7637                                               TemplateDecl *PrimaryTemplate,
   7638                                               unsigned NumExplicitArgs,
   7639                                               ArrayRef<TemplateArgument> Args);
   7640   void CheckTemplatePartialSpecialization(
   7641       ClassTemplatePartialSpecializationDecl *Partial);
   7642   void CheckTemplatePartialSpecialization(
   7643       VarTemplatePartialSpecializationDecl *Partial);
   7644 
   7645   Decl *ActOnTemplateDeclarator(Scope *S,
   7646                                 MultiTemplateParamsArg TemplateParameterLists,
   7647                                 Declarator &D);
   7648 
   7649   bool
   7650   CheckSpecializationInstantiationRedecl(SourceLocation NewLoc,
   7651                                          TemplateSpecializationKind NewTSK,
   7652                                          NamedDecl *PrevDecl,
   7653                                          TemplateSpecializationKind PrevTSK,
   7654                                          SourceLocation PrevPtOfInstantiation,
   7655                                          bool &SuppressNew);
   7656 
   7657   bool CheckDependentFunctionTemplateSpecialization(FunctionDecl *FD,
   7658                     const TemplateArgumentListInfo &ExplicitTemplateArgs,
   7659                                                     LookupResult &Previous);
   7660 
   7661   bool CheckFunctionTemplateSpecialization(
   7662       FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs,
   7663       LookupResult &Previous, bool QualifiedFriend = false);
   7664   bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
   7665   void CompleteMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
   7666 
   7667   DeclResult ActOnExplicitInstantiation(
   7668       Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc,
   7669       unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS,
   7670       TemplateTy Template, SourceLocation TemplateNameLoc,
   7671       SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs,
   7672       SourceLocation RAngleLoc, const ParsedAttributesView &Attr);
   7673 
   7674   DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc,
   7675                                         SourceLocation TemplateLoc,
   7676                                         unsigned TagSpec, SourceLocation KWLoc,
   7677                                         CXXScopeSpec &SS, IdentifierInfo *Name,
   7678                                         SourceLocation NameLoc,
   7679                                         const ParsedAttributesView &Attr);
   7680 
   7681   DeclResult ActOnExplicitInstantiation(Scope *S,
   7682                                         SourceLocation ExternLoc,
   7683                                         SourceLocation TemplateLoc,
   7684                                         Declarator &D);
   7685 
   7686   TemplateArgumentLoc
   7687   SubstDefaultTemplateArgumentIfAvailable(TemplateDecl *Template,
   7688                                           SourceLocation TemplateLoc,
   7689                                           SourceLocation RAngleLoc,
   7690                                           Decl *Param,
   7691                                           SmallVectorImpl<TemplateArgument>
   7692                                             &Converted,
   7693                                           bool &HasDefaultArg);
   7694 
   7695   /// Specifies the context in which a particular template
   7696   /// argument is being checked.
   7697   enum CheckTemplateArgumentKind {
   7698     /// The template argument was specified in the code or was
   7699     /// instantiated with some deduced template arguments.
   7700     CTAK_Specified,
   7701 
   7702     /// The template argument was deduced via template argument
   7703     /// deduction.
   7704     CTAK_Deduced,
   7705 
   7706     /// The template argument was deduced from an array bound
   7707     /// via template argument deduction.
   7708     CTAK_DeducedFromArrayBound
   7709   };
   7710 
   7711   bool CheckTemplateArgument(NamedDecl *Param,
   7712                              TemplateArgumentLoc &Arg,
   7713                              NamedDecl *Template,
   7714                              SourceLocation TemplateLoc,
   7715                              SourceLocation RAngleLoc,
   7716                              unsigned ArgumentPackIndex,
   7717                            SmallVectorImpl<TemplateArgument> &Converted,
   7718                              CheckTemplateArgumentKind CTAK = CTAK_Specified);
   7719 
   7720   /// Check that the given template arguments can be be provided to
   7721   /// the given template, converting the arguments along the way.
   7722   ///
   7723   /// \param Template The template to which the template arguments are being
   7724   /// provided.
   7725   ///
   7726   /// \param TemplateLoc The location of the template name in the source.
   7727   ///
   7728   /// \param TemplateArgs The list of template arguments. If the template is
   7729   /// a template template parameter, this function may extend the set of
   7730   /// template arguments to also include substituted, defaulted template
   7731   /// arguments.
   7732   ///
   7733   /// \param PartialTemplateArgs True if the list of template arguments is
   7734   /// intentionally partial, e.g., because we're checking just the initial
   7735   /// set of template arguments.
   7736   ///
   7737   /// \param Converted Will receive the converted, canonicalized template
   7738   /// arguments.
   7739   ///
   7740   /// \param UpdateArgsWithConversions If \c true, update \p TemplateArgs to
   7741   /// contain the converted forms of the template arguments as written.
   7742   /// Otherwise, \p TemplateArgs will not be modified.
   7743   ///
   7744   /// \param ConstraintsNotSatisfied If provided, and an error occured, will
   7745   /// receive true if the cause for the error is the associated constraints of
   7746   /// the template not being satisfied by the template arguments.
   7747   ///
   7748   /// \returns true if an error occurred, false otherwise.
   7749   bool CheckTemplateArgumentList(TemplateDecl *Template,
   7750                                  SourceLocation TemplateLoc,
   7751                                  TemplateArgumentListInfo &TemplateArgs,
   7752                                  bool PartialTemplateArgs,
   7753                                  SmallVectorImpl<TemplateArgument> &Converted,
   7754                                  bool UpdateArgsWithConversions = true,
   7755                                  bool *ConstraintsNotSatisfied = nullptr);
   7756 
   7757   bool CheckTemplateTypeArgument(TemplateTypeParmDecl *Param,
   7758                                  TemplateArgumentLoc &Arg,
   7759                            SmallVectorImpl<TemplateArgument> &Converted);
   7760 
   7761   bool CheckTemplateArgument(TemplateTypeParmDecl *Param,
   7762                              TypeSourceInfo *Arg);
   7763   ExprResult CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
   7764                                    QualType InstantiatedParamType, Expr *Arg,
   7765                                    TemplateArgument &Converted,
   7766                                CheckTemplateArgumentKind CTAK = CTAK_Specified);
   7767   bool CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param,
   7768                                      TemplateParameterList *Params,
   7769                                      TemplateArgumentLoc &Arg);
   7770 
   7771   ExprResult
   7772   BuildExpressionFromDeclTemplateArgument(const TemplateArgument &Arg,
   7773                                           QualType ParamType,
   7774                                           SourceLocation Loc);
   7775   ExprResult
   7776   BuildExpressionFromIntegralTemplateArgument(const TemplateArgument &Arg,
   7777                                               SourceLocation Loc);
   7778 
   7779   /// Enumeration describing how template parameter lists are compared
   7780   /// for equality.
   7781   enum TemplateParameterListEqualKind {
   7782     /// We are matching the template parameter lists of two templates
   7783     /// that might be redeclarations.
   7784     ///
   7785     /// \code
   7786     /// template<typename T> struct X;
   7787     /// template<typename T> struct X;
   7788     /// \endcode
   7789     TPL_TemplateMatch,
   7790 
   7791     /// We are matching the template parameter lists of two template
   7792     /// template parameters as part of matching the template parameter lists
   7793     /// of two templates that might be redeclarations.
   7794     ///
   7795     /// \code
   7796     /// template<template<int I> class TT> struct X;
   7797     /// template<template<int Value> class Other> struct X;
   7798     /// \endcode
   7799     TPL_TemplateTemplateParmMatch,
   7800 
   7801     /// We are matching the template parameter lists of a template
   7802     /// template argument against the template parameter lists of a template
   7803     /// template parameter.
   7804     ///
   7805     /// \code
   7806     /// template<template<int Value> class Metafun> struct X;
   7807     /// template<int Value> struct integer_c;
   7808     /// X<integer_c> xic;
   7809     /// \endcode
   7810     TPL_TemplateTemplateArgumentMatch
   7811   };
   7812 
   7813   bool TemplateParameterListsAreEqual(TemplateParameterList *New,
   7814                                       TemplateParameterList *Old,
   7815                                       bool Complain,
   7816                                       TemplateParameterListEqualKind Kind,
   7817                                       SourceLocation TemplateArgLoc
   7818                                         = SourceLocation());
   7819 
   7820   bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams);
   7821 
   7822   /// Called when the parser has parsed a C++ typename
   7823   /// specifier, e.g., "typename T::type".
   7824   ///
   7825   /// \param S The scope in which this typename type occurs.
   7826   /// \param TypenameLoc the location of the 'typename' keyword
   7827   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
   7828   /// \param II the identifier we're retrieving (e.g., 'type' in the example).
   7829   /// \param IdLoc the location of the identifier.
   7830   TypeResult
   7831   ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
   7832                     const CXXScopeSpec &SS, const IdentifierInfo &II,
   7833                     SourceLocation IdLoc);
   7834 
   7835   /// Called when the parser has parsed a C++ typename
   7836   /// specifier that ends in a template-id, e.g.,
   7837   /// "typename MetaFun::template apply<T1, T2>".
   7838   ///
   7839   /// \param S The scope in which this typename type occurs.
   7840   /// \param TypenameLoc the location of the 'typename' keyword
   7841   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
   7842   /// \param TemplateLoc the location of the 'template' keyword, if any.
   7843   /// \param TemplateName The template name.
   7844   /// \param TemplateII The identifier used to name the template.
   7845   /// \param TemplateIILoc The location of the template name.
   7846   /// \param LAngleLoc The location of the opening angle bracket  ('<').
   7847   /// \param TemplateArgs The template arguments.
   7848   /// \param RAngleLoc The location of the closing angle bracket  ('>').
   7849   TypeResult
   7850   ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
   7851                     const CXXScopeSpec &SS,
   7852                     SourceLocation TemplateLoc,
   7853                     TemplateTy TemplateName,
   7854                     IdentifierInfo *TemplateII,
   7855                     SourceLocation TemplateIILoc,
   7856                     SourceLocation LAngleLoc,
   7857                     ASTTemplateArgsPtr TemplateArgs,
   7858                     SourceLocation RAngleLoc);
   7859 
   7860   QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
   7861                              SourceLocation KeywordLoc,
   7862                              NestedNameSpecifierLoc QualifierLoc,
   7863                              const IdentifierInfo &II,
   7864                              SourceLocation IILoc,
   7865                              TypeSourceInfo **TSI,
   7866                              bool DeducedTSTContext);
   7867 
   7868   QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
   7869                              SourceLocation KeywordLoc,
   7870                              NestedNameSpecifierLoc QualifierLoc,
   7871                              const IdentifierInfo &II,
   7872                              SourceLocation IILoc,
   7873                              bool DeducedTSTContext = true);
   7874 
   7875 
   7876   TypeSourceInfo *RebuildTypeInCurrentInstantiation(TypeSourceInfo *T,
   7877                                                     SourceLocation Loc,
   7878                                                     DeclarationName Name);
   7879   bool RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS);
   7880 
   7881   ExprResult RebuildExprInCurrentInstantiation(Expr *E);
   7882   bool RebuildTemplateParamsInCurrentInstantiation(
   7883                                                 TemplateParameterList *Params);
   7884 
   7885   std::string
   7886   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
   7887                                   const TemplateArgumentList &Args);
   7888 
   7889   std::string
   7890   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
   7891                                   const TemplateArgument *Args,
   7892                                   unsigned NumArgs);
   7893 
   7894   //===--------------------------------------------------------------------===//
   7895   // C++ Concepts
   7896   //===--------------------------------------------------------------------===//
   7897   Decl *ActOnConceptDefinition(
   7898       Scope *S, MultiTemplateParamsArg TemplateParameterLists,
   7899       IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr);
   7900 
   7901   RequiresExprBodyDecl *
   7902   ActOnStartRequiresExpr(SourceLocation RequiresKWLoc,
   7903                          ArrayRef<ParmVarDecl *> LocalParameters,
   7904                          Scope *BodyScope);
   7905   void ActOnFinishRequiresExpr();
   7906   concepts::Requirement *ActOnSimpleRequirement(Expr *E);
   7907   concepts::Requirement *ActOnTypeRequirement(
   7908       SourceLocation TypenameKWLoc, CXXScopeSpec &SS, SourceLocation NameLoc,
   7909       IdentifierInfo *TypeName, TemplateIdAnnotation *TemplateId);
   7910   concepts::Requirement *ActOnCompoundRequirement(Expr *E,
   7911                                                   SourceLocation NoexceptLoc);
   7912   concepts::Requirement *
   7913   ActOnCompoundRequirement(
   7914       Expr *E, SourceLocation NoexceptLoc, CXXScopeSpec &SS,
   7915       TemplateIdAnnotation *TypeConstraint, unsigned Depth);
   7916   concepts::Requirement *ActOnNestedRequirement(Expr *Constraint);
   7917   concepts::ExprRequirement *
   7918   BuildExprRequirement(
   7919       Expr *E, bool IsSatisfied, SourceLocation NoexceptLoc,
   7920       concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement);
   7921   concepts::ExprRequirement *
   7922   BuildExprRequirement(
   7923       concepts::Requirement::SubstitutionDiagnostic *ExprSubstDiag,
   7924       bool IsSatisfied, SourceLocation NoexceptLoc,
   7925       concepts::ExprRequirement::ReturnTypeRequirement ReturnTypeRequirement);
   7926   concepts::TypeRequirement *BuildTypeRequirement(TypeSourceInfo *Type);
   7927   concepts::TypeRequirement *
   7928   BuildTypeRequirement(
   7929       concepts::Requirement::SubstitutionDiagnostic *SubstDiag);
   7930   concepts::NestedRequirement *BuildNestedRequirement(Expr *E);
   7931   concepts::NestedRequirement *
   7932   BuildNestedRequirement(
   7933       concepts::Requirement::SubstitutionDiagnostic *SubstDiag);
   7934   ExprResult ActOnRequiresExpr(SourceLocation RequiresKWLoc,
   7935                                RequiresExprBodyDecl *Body,
   7936                                ArrayRef<ParmVarDecl *> LocalParameters,
   7937                                ArrayRef<concepts::Requirement *> Requirements,
   7938                                SourceLocation ClosingBraceLoc);
   7939 
   7940   //===--------------------------------------------------------------------===//
   7941   // C++ Variadic Templates (C++0x [temp.variadic])
   7942   //===--------------------------------------------------------------------===//
   7943 
   7944   /// Determine whether an unexpanded parameter pack might be permitted in this
   7945   /// location. Useful for error recovery.
   7946   bool isUnexpandedParameterPackPermitted();
   7947 
   7948   /// The context in which an unexpanded parameter pack is
   7949   /// being diagnosed.
   7950   ///
   7951   /// Note that the values of this enumeration line up with the first
   7952   /// argument to the \c err_unexpanded_parameter_pack diagnostic.
   7953   enum UnexpandedParameterPackContext {
   7954     /// An arbitrary expression.
   7955     UPPC_Expression = 0,
   7956 
   7957     /// The base type of a class type.
   7958     UPPC_BaseType,
   7959 
   7960     /// The type of an arbitrary declaration.
   7961     UPPC_DeclarationType,
   7962 
   7963     /// The type of a data member.
   7964     UPPC_DataMemberType,
   7965 
   7966     /// The size of a bit-field.
   7967     UPPC_BitFieldWidth,
   7968 
   7969     /// The expression in a static assertion.
   7970     UPPC_StaticAssertExpression,
   7971 
   7972     /// The fixed underlying type of an enumeration.
   7973     UPPC_FixedUnderlyingType,
   7974 
   7975     /// The enumerator value.
   7976     UPPC_EnumeratorValue,
   7977 
   7978     /// A using declaration.
   7979     UPPC_UsingDeclaration,
   7980 
   7981     /// A friend declaration.
   7982     UPPC_FriendDeclaration,
   7983 
   7984     /// A declaration qualifier.
   7985     UPPC_DeclarationQualifier,
   7986 
   7987     /// An initializer.
   7988     UPPC_Initializer,
   7989 
   7990     /// A default argument.
   7991     UPPC_DefaultArgument,
   7992 
   7993     /// The type of a non-type template parameter.
   7994     UPPC_NonTypeTemplateParameterType,
   7995 
   7996     /// The type of an exception.
   7997     UPPC_ExceptionType,
   7998 
   7999     /// Partial specialization.
   8000     UPPC_PartialSpecialization,
   8001 
   8002     /// Microsoft __if_exists.
   8003     UPPC_IfExists,
   8004 
   8005     /// Microsoft __if_not_exists.
   8006     UPPC_IfNotExists,
   8007 
   8008     /// Lambda expression.
   8009     UPPC_Lambda,
   8010 
   8011     /// Block expression.
   8012     UPPC_Block,
   8013 
   8014     /// A type constraint.
   8015     UPPC_TypeConstraint,
   8016 
   8017     // A requirement in a requires-expression.
   8018     UPPC_Requirement,
   8019 
   8020     // A requires-clause.
   8021     UPPC_RequiresClause,
   8022   };
   8023 
   8024   /// Diagnose unexpanded parameter packs.
   8025   ///
   8026   /// \param Loc The location at which we should emit the diagnostic.
   8027   ///
   8028   /// \param UPPC The context in which we are diagnosing unexpanded
   8029   /// parameter packs.
   8030   ///
   8031   /// \param Unexpanded the set of unexpanded parameter packs.
   8032   ///
   8033   /// \returns true if an error occurred, false otherwise.
   8034   bool DiagnoseUnexpandedParameterPacks(SourceLocation Loc,
   8035                                         UnexpandedParameterPackContext UPPC,
   8036                                   ArrayRef<UnexpandedParameterPack> Unexpanded);
   8037 
   8038   /// If the given type contains an unexpanded parameter pack,
   8039   /// diagnose the error.
   8040   ///
   8041   /// \param Loc The source location where a diagnostc should be emitted.
   8042   ///
   8043   /// \param T The type that is being checked for unexpanded parameter
   8044   /// packs.
   8045   ///
   8046   /// \returns true if an error occurred, false otherwise.
   8047   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T,
   8048                                        UnexpandedParameterPackContext UPPC);
   8049 
   8050   /// If the given expression contains an unexpanded parameter
   8051   /// pack, diagnose the error.
   8052   ///
   8053   /// \param E The expression that is being checked for unexpanded
   8054   /// parameter packs.
   8055   ///
   8056   /// \returns true if an error occurred, false otherwise.
   8057   bool DiagnoseUnexpandedParameterPack(Expr *E,
   8058                        UnexpandedParameterPackContext UPPC = UPPC_Expression);
   8059 
   8060   /// If the given requirees-expression contains an unexpanded reference to one
   8061   /// of its own parameter packs, diagnose the error.
   8062   ///
   8063   /// \param RE The requiress-expression that is being checked for unexpanded
   8064   /// parameter packs.
   8065   ///
   8066   /// \returns true if an error occurred, false otherwise.
   8067   bool DiagnoseUnexpandedParameterPackInRequiresExpr(RequiresExpr *RE);
   8068 
   8069   /// If the given nested-name-specifier contains an unexpanded
   8070   /// parameter pack, diagnose the error.
   8071   ///
   8072   /// \param SS The nested-name-specifier that is being checked for
   8073   /// unexpanded parameter packs.
   8074   ///
   8075   /// \returns true if an error occurred, false otherwise.
   8076   bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS,
   8077                                        UnexpandedParameterPackContext UPPC);
   8078 
   8079   /// If the given name contains an unexpanded parameter pack,
   8080   /// diagnose the error.
   8081   ///
   8082   /// \param NameInfo The name (with source location information) that
   8083   /// is being checked for unexpanded parameter packs.
   8084   ///
   8085   /// \returns true if an error occurred, false otherwise.
   8086   bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo,
   8087                                        UnexpandedParameterPackContext UPPC);
   8088 
   8089   /// If the given template name contains an unexpanded parameter pack,
   8090   /// diagnose the error.
   8091   ///
   8092   /// \param Loc The location of the template name.
   8093   ///
   8094   /// \param Template The template name that is being checked for unexpanded
   8095   /// parameter packs.
   8096   ///
   8097   /// \returns true if an error occurred, false otherwise.
   8098   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc,
   8099                                        TemplateName Template,
   8100                                        UnexpandedParameterPackContext UPPC);
   8101 
   8102   /// If the given template argument contains an unexpanded parameter
   8103   /// pack, diagnose the error.
   8104   ///
   8105   /// \param Arg The template argument that is being checked for unexpanded
   8106   /// parameter packs.
   8107   ///
   8108   /// \returns true if an error occurred, false otherwise.
   8109   bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg,
   8110                                        UnexpandedParameterPackContext UPPC);
   8111 
   8112   /// Collect the set of unexpanded parameter packs within the given
   8113   /// template argument.
   8114   ///
   8115   /// \param Arg The template argument that will be traversed to find
   8116   /// unexpanded parameter packs.
   8117   void collectUnexpandedParameterPacks(TemplateArgument Arg,
   8118                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
   8119 
   8120   /// Collect the set of unexpanded parameter packs within the given
   8121   /// template argument.
   8122   ///
   8123   /// \param Arg The template argument that will be traversed to find
   8124   /// unexpanded parameter packs.
   8125   void collectUnexpandedParameterPacks(TemplateArgumentLoc Arg,
   8126                     SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
   8127 
   8128   /// Collect the set of unexpanded parameter packs within the given
   8129   /// type.
   8130   ///
   8131   /// \param T The type that will be traversed to find
   8132   /// unexpanded parameter packs.
   8133   void collectUnexpandedParameterPacks(QualType T,
   8134                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
   8135 
   8136   /// Collect the set of unexpanded parameter packs within the given
   8137   /// type.
   8138   ///
   8139   /// \param TL The type that will be traversed to find
   8140   /// unexpanded parameter packs.
   8141   void collectUnexpandedParameterPacks(TypeLoc TL,
   8142                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
   8143 
   8144   /// Collect the set of unexpanded parameter packs within the given
   8145   /// nested-name-specifier.
   8146   ///
   8147   /// \param NNS The nested-name-specifier that will be traversed to find
   8148   /// unexpanded parameter packs.
   8149   void collectUnexpandedParameterPacks(NestedNameSpecifierLoc NNS,
   8150                          SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
   8151 
   8152   /// Collect the set of unexpanded parameter packs within the given
   8153   /// name.
   8154   ///
   8155   /// \param NameInfo The name that will be traversed to find
   8156   /// unexpanded parameter packs.
   8157   void collectUnexpandedParameterPacks(const DeclarationNameInfo &NameInfo,
   8158                          SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
   8159 
   8160   /// Invoked when parsing a template argument followed by an
   8161   /// ellipsis, which creates a pack expansion.
   8162   ///
   8163   /// \param Arg The template argument preceding the ellipsis, which
   8164   /// may already be invalid.
   8165   ///
   8166   /// \param EllipsisLoc The location of the ellipsis.
   8167   ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg,
   8168                                             SourceLocation EllipsisLoc);
   8169 
   8170   /// Invoked when parsing a type followed by an ellipsis, which
   8171   /// creates a pack expansion.
   8172   ///
   8173   /// \param Type The type preceding the ellipsis, which will become
   8174   /// the pattern of the pack expansion.
   8175   ///
   8176   /// \param EllipsisLoc The location of the ellipsis.
   8177   TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc);
   8178 
   8179   /// Construct a pack expansion type from the pattern of the pack
   8180   /// expansion.
   8181   TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern,
   8182                                      SourceLocation EllipsisLoc,
   8183                                      Optional<unsigned> NumExpansions);
   8184 
   8185   /// Construct a pack expansion type from the pattern of the pack
   8186   /// expansion.
   8187   QualType CheckPackExpansion(QualType Pattern,
   8188                               SourceRange PatternRange,
   8189                               SourceLocation EllipsisLoc,
   8190                               Optional<unsigned> NumExpansions);
   8191 
   8192   /// Invoked when parsing an expression followed by an ellipsis, which
   8193   /// creates a pack expansion.
   8194   ///
   8195   /// \param Pattern The expression preceding the ellipsis, which will become
   8196   /// the pattern of the pack expansion.
   8197   ///
   8198   /// \param EllipsisLoc The location of the ellipsis.
   8199   ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc);
   8200 
   8201   /// Invoked when parsing an expression followed by an ellipsis, which
   8202   /// creates a pack expansion.
   8203   ///
   8204   /// \param Pattern The expression preceding the ellipsis, which will become
   8205   /// the pattern of the pack expansion.
   8206   ///
   8207   /// \param EllipsisLoc The location of the ellipsis.
   8208   ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc,
   8209                                 Optional<unsigned> NumExpansions);
   8210 
   8211   /// Determine whether we could expand a pack expansion with the
   8212   /// given set of parameter packs into separate arguments by repeatedly
   8213   /// transforming the pattern.
   8214   ///
   8215   /// \param EllipsisLoc The location of the ellipsis that identifies the
   8216   /// pack expansion.
   8217   ///
   8218   /// \param PatternRange The source range that covers the entire pattern of
   8219   /// the pack expansion.
   8220   ///
   8221   /// \param Unexpanded The set of unexpanded parameter packs within the
   8222   /// pattern.
   8223   ///
   8224   /// \param ShouldExpand Will be set to \c true if the transformer should
   8225   /// expand the corresponding pack expansions into separate arguments. When
   8226   /// set, \c NumExpansions must also be set.
   8227   ///
   8228   /// \param RetainExpansion Whether the caller should add an unexpanded
   8229   /// pack expansion after all of the expanded arguments. This is used
   8230   /// when extending explicitly-specified template argument packs per
   8231   /// C++0x [temp.arg.explicit]p9.
   8232   ///
   8233   /// \param NumExpansions The number of separate arguments that will be in
   8234   /// the expanded form of the corresponding pack expansion. This is both an
   8235   /// input and an output parameter, which can be set by the caller if the
   8236   /// number of expansions is known a priori (e.g., due to a prior substitution)
   8237   /// and will be set by the callee when the number of expansions is known.
   8238   /// The callee must set this value when \c ShouldExpand is \c true; it may
   8239   /// set this value in other cases.
   8240   ///
   8241   /// \returns true if an error occurred (e.g., because the parameter packs
   8242   /// are to be instantiated with arguments of different lengths), false
   8243   /// otherwise. If false, \c ShouldExpand (and possibly \c NumExpansions)
   8244   /// must be set.
   8245   bool CheckParameterPacksForExpansion(SourceLocation EllipsisLoc,
   8246                                        SourceRange PatternRange,
   8247                              ArrayRef<UnexpandedParameterPack> Unexpanded,
   8248                              const MultiLevelTemplateArgumentList &TemplateArgs,
   8249                                        bool &ShouldExpand,
   8250                                        bool &RetainExpansion,
   8251                                        Optional<unsigned> &NumExpansions);
   8252 
   8253   /// Determine the number of arguments in the given pack expansion
   8254   /// type.
   8255   ///
   8256   /// This routine assumes that the number of arguments in the expansion is
   8257   /// consistent across all of the unexpanded parameter packs in its pattern.
   8258   ///
   8259   /// Returns an empty Optional if the type can't be expanded.
   8260   Optional<unsigned> getNumArgumentsInExpansion(QualType T,
   8261       const MultiLevelTemplateArgumentList &TemplateArgs);
   8262 
   8263   /// Determine whether the given declarator contains any unexpanded
   8264   /// parameter packs.
   8265   ///
   8266   /// This routine is used by the parser to disambiguate function declarators
   8267   /// with an ellipsis prior to the ')', e.g.,
   8268   ///
   8269   /// \code
   8270   ///   void f(T...);
   8271   /// \endcode
   8272   ///
   8273   /// To determine whether we have an (unnamed) function parameter pack or
   8274   /// a variadic function.
   8275   ///
   8276   /// \returns true if the declarator contains any unexpanded parameter packs,
   8277   /// false otherwise.
   8278   bool containsUnexpandedParameterPacks(Declarator &D);
   8279 
   8280   /// Returns the pattern of the pack expansion for a template argument.
   8281   ///
   8282   /// \param OrigLoc The template argument to expand.
   8283   ///
   8284   /// \param Ellipsis Will be set to the location of the ellipsis.
   8285   ///
   8286   /// \param NumExpansions Will be set to the number of expansions that will
   8287   /// be generated from this pack expansion, if known a priori.
   8288   TemplateArgumentLoc getTemplateArgumentPackExpansionPattern(
   8289       TemplateArgumentLoc OrigLoc,
   8290       SourceLocation &Ellipsis,
   8291       Optional<unsigned> &NumExpansions) const;
   8292 
   8293   /// Given a template argument that contains an unexpanded parameter pack, but
   8294   /// which has already been substituted, attempt to determine the number of
   8295   /// elements that will be produced once this argument is fully-expanded.
   8296   ///
   8297   /// This is intended for use when transforming 'sizeof...(Arg)' in order to
   8298   /// avoid actually expanding the pack where possible.
   8299   Optional<unsigned> getFullyPackExpandedSize(TemplateArgument Arg);
   8300 
   8301   //===--------------------------------------------------------------------===//
   8302   // C++ Template Argument Deduction (C++ [temp.deduct])
   8303   //===--------------------------------------------------------------------===//
   8304 
   8305   /// Adjust the type \p ArgFunctionType to match the calling convention,
   8306   /// noreturn, and optionally the exception specification of \p FunctionType.
   8307   /// Deduction often wants to ignore these properties when matching function
   8308   /// types.
   8309   QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType,
   8310                                bool AdjustExceptionSpec = false);
   8311 
   8312   /// Describes the result of template argument deduction.
   8313   ///
   8314   /// The TemplateDeductionResult enumeration describes the result of
   8315   /// template argument deduction, as returned from
   8316   /// DeduceTemplateArguments(). The separate TemplateDeductionInfo
   8317   /// structure provides additional information about the results of
   8318   /// template argument deduction, e.g., the deduced template argument
   8319   /// list (if successful) or the specific template parameters or
   8320   /// deduced arguments that were involved in the failure.
   8321   enum TemplateDeductionResult {
   8322     /// Template argument deduction was successful.
   8323     TDK_Success = 0,
   8324     /// The declaration was invalid; do nothing.
   8325     TDK_Invalid,
   8326     /// Template argument deduction exceeded the maximum template
   8327     /// instantiation depth (which has already been diagnosed).
   8328     TDK_InstantiationDepth,
   8329     /// Template argument deduction did not deduce a value
   8330     /// for every template parameter.
   8331     TDK_Incomplete,
   8332     /// Template argument deduction did not deduce a value for every
   8333     /// expansion of an expanded template parameter pack.
   8334     TDK_IncompletePack,
   8335     /// Template argument deduction produced inconsistent
   8336     /// deduced values for the given template parameter.
   8337     TDK_Inconsistent,
   8338     /// Template argument deduction failed due to inconsistent
   8339     /// cv-qualifiers on a template parameter type that would
   8340     /// otherwise be deduced, e.g., we tried to deduce T in "const T"
   8341     /// but were given a non-const "X".
   8342     TDK_Underqualified,
   8343     /// Substitution of the deduced template argument values
   8344     /// resulted in an error.
   8345     TDK_SubstitutionFailure,
   8346     /// After substituting deduced template arguments, a dependent
   8347     /// parameter type did not match the corresponding argument.
   8348     TDK_DeducedMismatch,
   8349     /// After substituting deduced template arguments, an element of
   8350     /// a dependent parameter type did not match the corresponding element
   8351     /// of the corresponding argument (when deducing from an initializer list).
   8352     TDK_DeducedMismatchNested,
   8353     /// A non-depnedent component of the parameter did not match the
   8354     /// corresponding component of the argument.
   8355     TDK_NonDeducedMismatch,
   8356     /// When performing template argument deduction for a function
   8357     /// template, there were too many call arguments.
   8358     TDK_TooManyArguments,
   8359     /// When performing template argument deduction for a function
   8360     /// template, there were too few call arguments.
   8361     TDK_TooFewArguments,
   8362     /// The explicitly-specified template arguments were not valid
   8363     /// template arguments for the given template.
   8364     TDK_InvalidExplicitArguments,
   8365     /// Checking non-dependent argument conversions failed.
   8366     TDK_NonDependentConversionFailure,
   8367     /// The deduced arguments did not satisfy the constraints associated
   8368     /// with the template.
   8369     TDK_ConstraintsNotSatisfied,
   8370     /// Deduction failed; that's all we know.
   8371     TDK_MiscellaneousDeductionFailure,
   8372     /// CUDA Target attributes do not match.
   8373     TDK_CUDATargetMismatch
   8374   };
   8375 
   8376   TemplateDeductionResult
   8377   DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
   8378                           const TemplateArgumentList &TemplateArgs,
   8379                           sema::TemplateDeductionInfo &Info);
   8380 
   8381   TemplateDeductionResult
   8382   DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial,
   8383                           const TemplateArgumentList &TemplateArgs,
   8384                           sema::TemplateDeductionInfo &Info);
   8385 
   8386   TemplateDeductionResult SubstituteExplicitTemplateArguments(
   8387       FunctionTemplateDecl *FunctionTemplate,
   8388       TemplateArgumentListInfo &ExplicitTemplateArgs,
   8389       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
   8390       SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType,
   8391       sema::TemplateDeductionInfo &Info);
   8392 
   8393   /// brief A function argument from which we performed template argument
   8394   // deduction for a call.
   8395   struct OriginalCallArg {
   8396     OriginalCallArg(QualType OriginalParamType, bool DecomposedParam,
   8397                     unsigned ArgIdx, QualType OriginalArgType)
   8398         : OriginalParamType(OriginalParamType),
   8399           DecomposedParam(DecomposedParam), ArgIdx(ArgIdx),
   8400           OriginalArgType(OriginalArgType) {}
   8401 
   8402     QualType OriginalParamType;
   8403     bool DecomposedParam;
   8404     unsigned ArgIdx;
   8405     QualType OriginalArgType;
   8406   };
   8407 
   8408   TemplateDeductionResult FinishTemplateArgumentDeduction(
   8409       FunctionTemplateDecl *FunctionTemplate,
   8410       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
   8411       unsigned NumExplicitlySpecified, FunctionDecl *&Specialization,
   8412       sema::TemplateDeductionInfo &Info,
   8413       SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs = nullptr,
   8414       bool PartialOverloading = false,
   8415       llvm::function_ref<bool()> CheckNonDependent = []{ return false; });
   8416 
   8417   TemplateDeductionResult DeduceTemplateArguments(
   8418       FunctionTemplateDecl *FunctionTemplate,
   8419       TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
   8420       FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info,
   8421       bool PartialOverloading,
   8422       llvm::function_ref<bool(ArrayRef<QualType>)> CheckNonDependent);
   8423 
   8424   TemplateDeductionResult
   8425   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
   8426                           TemplateArgumentListInfo *ExplicitTemplateArgs,
   8427                           QualType ArgFunctionType,
   8428                           FunctionDecl *&Specialization,
   8429                           sema::TemplateDeductionInfo &Info,
   8430                           bool IsAddressOfFunction = false);
   8431 
   8432   TemplateDeductionResult
   8433   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
   8434                           QualType ToType,
   8435                           CXXConversionDecl *&Specialization,
   8436                           sema::TemplateDeductionInfo &Info);
   8437 
   8438   TemplateDeductionResult
   8439   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
   8440                           TemplateArgumentListInfo *ExplicitTemplateArgs,
   8441                           FunctionDecl *&Specialization,
   8442                           sema::TemplateDeductionInfo &Info,
   8443                           bool IsAddressOfFunction = false);
   8444 
   8445   /// Substitute Replacement for \p auto in \p TypeWithAuto
   8446   QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement);
   8447   /// Substitute Replacement for auto in TypeWithAuto
   8448   TypeSourceInfo* SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
   8449                                           QualType Replacement);
   8450   /// Completely replace the \c auto in \p TypeWithAuto by
   8451   /// \p Replacement. This does not retain any \c auto type sugar.
   8452   QualType ReplaceAutoType(QualType TypeWithAuto, QualType Replacement);
   8453   TypeSourceInfo *ReplaceAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
   8454                                             QualType Replacement);
   8455 
   8456   /// Result type of DeduceAutoType.
   8457   enum DeduceAutoResult {
   8458     DAR_Succeeded,
   8459     DAR_Failed,
   8460     DAR_FailedAlreadyDiagnosed
   8461   };
   8462 
   8463   DeduceAutoResult
   8464   DeduceAutoType(TypeSourceInfo *AutoType, Expr *&Initializer, QualType &Result,
   8465                  Optional<unsigned> DependentDeductionDepth = None,
   8466                  bool IgnoreConstraints = false);
   8467   DeduceAutoResult
   8468   DeduceAutoType(TypeLoc AutoTypeLoc, Expr *&Initializer, QualType &Result,
   8469                  Optional<unsigned> DependentDeductionDepth = None,
   8470                  bool IgnoreConstraints = false);
   8471   void DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init);
   8472   bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc,
   8473                         bool Diagnose = true);
   8474 
   8475   /// Declare implicit deduction guides for a class template if we've
   8476   /// not already done so.
   8477   void DeclareImplicitDeductionGuides(TemplateDecl *Template,
   8478                                       SourceLocation Loc);
   8479 
   8480   QualType DeduceTemplateSpecializationFromInitializer(
   8481       TypeSourceInfo *TInfo, const InitializedEntity &Entity,
   8482       const InitializationKind &Kind, MultiExprArg Init);
   8483 
   8484   QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name,
   8485                                         QualType Type, TypeSourceInfo *TSI,
   8486                                         SourceRange Range, bool DirectInit,
   8487                                         Expr *Init);
   8488 
   8489   TypeLoc getReturnTypeLoc(FunctionDecl *FD) const;
   8490 
   8491   bool DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD,
   8492                                         SourceLocation ReturnLoc,
   8493                                         Expr *&RetExpr, AutoType *AT);
   8494 
   8495   FunctionTemplateDecl *getMoreSpecializedTemplate(
   8496       FunctionTemplateDecl *FT1, FunctionTemplateDecl *FT2, SourceLocation Loc,
   8497       TemplatePartialOrderingContext TPOC, unsigned NumCallArguments1,
   8498       unsigned NumCallArguments2, bool Reversed = false);
   8499   UnresolvedSetIterator
   8500   getMostSpecialized(UnresolvedSetIterator SBegin, UnresolvedSetIterator SEnd,
   8501                      TemplateSpecCandidateSet &FailedCandidates,
   8502                      SourceLocation Loc,
   8503                      const PartialDiagnostic &NoneDiag,
   8504                      const PartialDiagnostic &AmbigDiag,
   8505                      const PartialDiagnostic &CandidateDiag,
   8506                      bool Complain = true, QualType TargetType = QualType());
   8507 
   8508   ClassTemplatePartialSpecializationDecl *
   8509   getMoreSpecializedPartialSpecialization(
   8510                                   ClassTemplatePartialSpecializationDecl *PS1,
   8511                                   ClassTemplatePartialSpecializationDecl *PS2,
   8512                                   SourceLocation Loc);
   8513 
   8514   bool isMoreSpecializedThanPrimary(ClassTemplatePartialSpecializationDecl *T,
   8515                                     sema::TemplateDeductionInfo &Info);
   8516 
   8517   VarTemplatePartialSpecializationDecl *getMoreSpecializedPartialSpecialization(
   8518       VarTemplatePartialSpecializationDecl *PS1,
   8519       VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc);
   8520 
   8521   bool isMoreSpecializedThanPrimary(VarTemplatePartialSpecializationDecl *T,
   8522                                     sema::TemplateDeductionInfo &Info);
   8523 
   8524   bool isTemplateTemplateParameterAtLeastAsSpecializedAs(
   8525       TemplateParameterList *PParam, TemplateDecl *AArg, SourceLocation Loc);
   8526 
   8527   void MarkUsedTemplateParameters(const Expr *E, bool OnlyDeduced,
   8528                                   unsigned Depth, llvm::SmallBitVector &Used);
   8529 
   8530   void MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs,
   8531                                   bool OnlyDeduced,
   8532                                   unsigned Depth,
   8533                                   llvm::SmallBitVector &Used);
   8534   void MarkDeducedTemplateParameters(
   8535                                   const FunctionTemplateDecl *FunctionTemplate,
   8536                                   llvm::SmallBitVector &Deduced) {
   8537     return MarkDeducedTemplateParameters(Context, FunctionTemplate, Deduced);
   8538   }
   8539   static void MarkDeducedTemplateParameters(ASTContext &Ctx,
   8540                                   const FunctionTemplateDecl *FunctionTemplate,
   8541                                   llvm::SmallBitVector &Deduced);
   8542 
   8543   //===--------------------------------------------------------------------===//
   8544   // C++ Template Instantiation
   8545   //
   8546 
   8547   MultiLevelTemplateArgumentList
   8548   getTemplateInstantiationArgs(NamedDecl *D,
   8549                                const TemplateArgumentList *Innermost = nullptr,
   8550                                bool RelativeToPrimary = false,
   8551                                const FunctionDecl *Pattern = nullptr);
   8552 
   8553   /// A context in which code is being synthesized (where a source location
   8554   /// alone is not sufficient to identify the context). This covers template
   8555   /// instantiation and various forms of implicitly-generated functions.
   8556   struct CodeSynthesisContext {
   8557     /// The kind of template instantiation we are performing
   8558     enum SynthesisKind {
   8559       /// We are instantiating a template declaration. The entity is
   8560       /// the declaration we're instantiating (e.g., a CXXRecordDecl).
   8561       TemplateInstantiation,
   8562 
   8563       /// We are instantiating a default argument for a template
   8564       /// parameter. The Entity is the template parameter whose argument is
   8565       /// being instantiated, the Template is the template, and the
   8566       /// TemplateArgs/NumTemplateArguments provide the template arguments as
   8567       /// specified.
   8568       DefaultTemplateArgumentInstantiation,
   8569 
   8570       /// We are instantiating a default argument for a function.
   8571       /// The Entity is the ParmVarDecl, and TemplateArgs/NumTemplateArgs
   8572       /// provides the template arguments as specified.
   8573       DefaultFunctionArgumentInstantiation,
   8574 
   8575       /// We are substituting explicit template arguments provided for
   8576       /// a function template. The entity is a FunctionTemplateDecl.
   8577       ExplicitTemplateArgumentSubstitution,
   8578 
   8579       /// We are substituting template argument determined as part of
   8580       /// template argument deduction for either a class template
   8581       /// partial specialization or a function template. The
   8582       /// Entity is either a {Class|Var}TemplatePartialSpecializationDecl or
   8583       /// a TemplateDecl.
   8584       DeducedTemplateArgumentSubstitution,
   8585 
   8586       /// We are substituting prior template arguments into a new
   8587       /// template parameter. The template parameter itself is either a
   8588       /// NonTypeTemplateParmDecl or a TemplateTemplateParmDecl.
   8589       PriorTemplateArgumentSubstitution,
   8590 
   8591       /// We are checking the validity of a default template argument that
   8592       /// has been used when naming a template-id.
   8593       DefaultTemplateArgumentChecking,
   8594 
   8595       /// We are computing the exception specification for a defaulted special
   8596       /// member function.
   8597       ExceptionSpecEvaluation,
   8598 
   8599       /// We are instantiating the exception specification for a function
   8600       /// template which was deferred until it was needed.
   8601       ExceptionSpecInstantiation,
   8602 
   8603       /// We are instantiating a requirement of a requires expression.
   8604       RequirementInstantiation,
   8605 
   8606       /// We are checking the satisfaction of a nested requirement of a requires
   8607       /// expression.
   8608       NestedRequirementConstraintsCheck,
   8609 
   8610       /// We are declaring an implicit special member function.
   8611       DeclaringSpecialMember,
   8612 
   8613       /// We are declaring an implicit 'operator==' for a defaulted
   8614       /// 'operator<=>'.
   8615       DeclaringImplicitEqualityComparison,
   8616 
   8617       /// We are defining a synthesized function (such as a defaulted special
   8618       /// member).
   8619       DefiningSynthesizedFunction,
   8620 
   8621       // We are checking the constraints associated with a constrained entity or
   8622       // the constraint expression of a concept. This includes the checks that
   8623       // atomic constraints have the type 'bool' and that they can be constant
   8624       // evaluated.
   8625       ConstraintsCheck,
   8626 
   8627       // We are substituting template arguments into a constraint expression.
   8628       ConstraintSubstitution,
   8629 
   8630       // We are normalizing a constraint expression.
   8631       ConstraintNormalization,
   8632 
   8633       // We are substituting into the parameter mapping of an atomic constraint
   8634       // during normalization.
   8635       ParameterMappingSubstitution,
   8636 
   8637       /// We are rewriting a comparison operator in terms of an operator<=>.
   8638       RewritingOperatorAsSpaceship,
   8639 
   8640       /// We are initializing a structured binding.
   8641       InitializingStructuredBinding,
   8642 
   8643       /// We are marking a class as __dllexport.
   8644       MarkingClassDllexported,
   8645 
   8646       /// Added for Template instantiation observation.
   8647       /// Memoization means we are _not_ instantiating a template because
   8648       /// it is already instantiated (but we entered a context where we
   8649       /// would have had to if it was not already instantiated).
   8650       Memoization
   8651     } Kind;
   8652 
   8653     /// Was the enclosing context a non-instantiation SFINAE context?
   8654     bool SavedInNonInstantiationSFINAEContext;
   8655 
   8656     /// The point of instantiation or synthesis within the source code.
   8657     SourceLocation PointOfInstantiation;
   8658 
   8659     /// The entity that is being synthesized.
   8660     Decl *Entity;
   8661 
   8662     /// The template (or partial specialization) in which we are
   8663     /// performing the instantiation, for substitutions of prior template
   8664     /// arguments.
   8665     NamedDecl *Template;
   8666 
   8667     /// The list of template arguments we are substituting, if they
   8668     /// are not part of the entity.
   8669     const TemplateArgument *TemplateArgs;
   8670 
   8671     // FIXME: Wrap this union around more members, or perhaps store the
   8672     // kind-specific members in the RAII object owning the context.
   8673     union {
   8674       /// The number of template arguments in TemplateArgs.
   8675       unsigned NumTemplateArgs;
   8676 
   8677       /// The special member being declared or defined.
   8678       CXXSpecialMember SpecialMember;
   8679     };
   8680 
   8681     ArrayRef<TemplateArgument> template_arguments() const {
   8682       assert(Kind != DeclaringSpecialMember);
   8683       return {TemplateArgs, NumTemplateArgs};
   8684     }
   8685 
   8686     /// The template deduction info object associated with the
   8687     /// substitution or checking of explicit or deduced template arguments.
   8688     sema::TemplateDeductionInfo *DeductionInfo;
   8689 
   8690     /// The source range that covers the construct that cause
   8691     /// the instantiation, e.g., the template-id that causes a class
   8692     /// template instantiation.
   8693     SourceRange InstantiationRange;
   8694 
   8695     CodeSynthesisContext()
   8696         : Kind(TemplateInstantiation),
   8697           SavedInNonInstantiationSFINAEContext(false), Entity(nullptr),
   8698           Template(nullptr), TemplateArgs(nullptr), NumTemplateArgs(0),
   8699           DeductionInfo(nullptr) {}
   8700 
   8701     /// Determines whether this template is an actual instantiation
   8702     /// that should be counted toward the maximum instantiation depth.
   8703     bool isInstantiationRecord() const;
   8704   };
   8705 
   8706   /// List of active code synthesis contexts.
   8707   ///
   8708   /// This vector is treated as a stack. As synthesis of one entity requires
   8709   /// synthesis of another, additional contexts are pushed onto the stack.
   8710   SmallVector<CodeSynthesisContext, 16> CodeSynthesisContexts;
   8711 
   8712   /// Specializations whose definitions are currently being instantiated.
   8713   llvm::DenseSet<std::pair<Decl *, unsigned>> InstantiatingSpecializations;
   8714 
   8715   /// Non-dependent types used in templates that have already been instantiated
   8716   /// by some template instantiation.
   8717   llvm::DenseSet<QualType> InstantiatedNonDependentTypes;
   8718 
   8719   /// Extra modules inspected when performing a lookup during a template
   8720   /// instantiation. Computed lazily.
   8721   SmallVector<Module*, 16> CodeSynthesisContextLookupModules;
   8722 
   8723   /// Cache of additional modules that should be used for name lookup
   8724   /// within the current template instantiation. Computed lazily; use
   8725   /// getLookupModules() to get a complete set.
   8726   llvm::DenseSet<Module*> LookupModulesCache;
   8727 
   8728   /// Get the set of additional modules that should be checked during
   8729   /// name lookup. A module and its imports become visible when instanting a
   8730   /// template defined within it.
   8731   llvm::DenseSet<Module*> &getLookupModules();
   8732 
   8733   /// Map from the most recent declaration of a namespace to the most
   8734   /// recent visible declaration of that namespace.
   8735   llvm::DenseMap<NamedDecl*, NamedDecl*> VisibleNamespaceCache;
   8736 
   8737   /// Whether we are in a SFINAE context that is not associated with
   8738   /// template instantiation.
   8739   ///
   8740   /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside
   8741   /// of a template instantiation or template argument deduction.
   8742   bool InNonInstantiationSFINAEContext;
   8743 
   8744   /// The number of \p CodeSynthesisContexts that are not template
   8745   /// instantiations and, therefore, should not be counted as part of the
   8746   /// instantiation depth.
   8747   ///
   8748   /// When the instantiation depth reaches the user-configurable limit
   8749   /// \p LangOptions::InstantiationDepth we will abort instantiation.
   8750   // FIXME: Should we have a similar limit for other forms of synthesis?
   8751   unsigned NonInstantiationEntries;
   8752 
   8753   /// The depth of the context stack at the point when the most recent
   8754   /// error or warning was produced.
   8755   ///
   8756   /// This value is used to suppress printing of redundant context stacks
   8757   /// when there are multiple errors or warnings in the same instantiation.
   8758   // FIXME: Does this belong in Sema? It's tough to implement it anywhere else.
   8759   unsigned LastEmittedCodeSynthesisContextDepth = 0;
   8760 
   8761   /// The template instantiation callbacks to trace or track
   8762   /// instantiations (objects can be chained).
   8763   ///
   8764   /// This callbacks is used to print, trace or track template
   8765   /// instantiations as they are being constructed.
   8766   std::vector<std::unique_ptr<TemplateInstantiationCallback>>
   8767       TemplateInstCallbacks;
   8768 
   8769   /// The current index into pack expansion arguments that will be
   8770   /// used for substitution of parameter packs.
   8771   ///
   8772   /// The pack expansion index will be -1 to indicate that parameter packs
   8773   /// should be instantiated as themselves. Otherwise, the index specifies
   8774   /// which argument within the parameter pack will be used for substitution.
   8775   int ArgumentPackSubstitutionIndex;
   8776 
   8777   /// RAII object used to change the argument pack substitution index
   8778   /// within a \c Sema object.
   8779   ///
   8780   /// See \c ArgumentPackSubstitutionIndex for more information.
   8781   class ArgumentPackSubstitutionIndexRAII {
   8782     Sema &Self;
   8783     int OldSubstitutionIndex;
   8784 
   8785   public:
   8786     ArgumentPackSubstitutionIndexRAII(Sema &Self, int NewSubstitutionIndex)
   8787       : Self(Self), OldSubstitutionIndex(Self.ArgumentPackSubstitutionIndex) {
   8788       Self.ArgumentPackSubstitutionIndex = NewSubstitutionIndex;
   8789     }
   8790 
   8791     ~ArgumentPackSubstitutionIndexRAII() {
   8792       Self.ArgumentPackSubstitutionIndex = OldSubstitutionIndex;
   8793     }
   8794   };
   8795 
   8796   friend class ArgumentPackSubstitutionRAII;
   8797 
   8798   /// For each declaration that involved template argument deduction, the
   8799   /// set of diagnostics that were suppressed during that template argument
   8800   /// deduction.
   8801   ///
   8802   /// FIXME: Serialize this structure to the AST file.
   8803   typedef llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1> >
   8804     SuppressedDiagnosticsMap;
   8805   SuppressedDiagnosticsMap SuppressedDiagnostics;
   8806 
   8807   /// A stack object to be created when performing template
   8808   /// instantiation.
   8809   ///
   8810   /// Construction of an object of type \c InstantiatingTemplate
   8811   /// pushes the current instantiation onto the stack of active
   8812   /// instantiations. If the size of this stack exceeds the maximum
   8813   /// number of recursive template instantiations, construction
   8814   /// produces an error and evaluates true.
   8815   ///
   8816   /// Destruction of this object will pop the named instantiation off
   8817   /// the stack.
   8818   struct InstantiatingTemplate {
   8819     /// Note that we are instantiating a class template,
   8820     /// function template, variable template, alias template,
   8821     /// or a member thereof.
   8822     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8823                           Decl *Entity,
   8824                           SourceRange InstantiationRange = SourceRange());
   8825 
   8826     struct ExceptionSpecification {};
   8827     /// Note that we are instantiating an exception specification
   8828     /// of a function template.
   8829     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8830                           FunctionDecl *Entity, ExceptionSpecification,
   8831                           SourceRange InstantiationRange = SourceRange());
   8832 
   8833     /// Note that we are instantiating a default argument in a
   8834     /// template-id.
   8835     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8836                           TemplateParameter Param, TemplateDecl *Template,
   8837                           ArrayRef<TemplateArgument> TemplateArgs,
   8838                           SourceRange InstantiationRange = SourceRange());
   8839 
   8840     /// Note that we are substituting either explicitly-specified or
   8841     /// deduced template arguments during function template argument deduction.
   8842     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8843                           FunctionTemplateDecl *FunctionTemplate,
   8844                           ArrayRef<TemplateArgument> TemplateArgs,
   8845                           CodeSynthesisContext::SynthesisKind Kind,
   8846                           sema::TemplateDeductionInfo &DeductionInfo,
   8847                           SourceRange InstantiationRange = SourceRange());
   8848 
   8849     /// Note that we are instantiating as part of template
   8850     /// argument deduction for a class template declaration.
   8851     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8852                           TemplateDecl *Template,
   8853                           ArrayRef<TemplateArgument> TemplateArgs,
   8854                           sema::TemplateDeductionInfo &DeductionInfo,
   8855                           SourceRange InstantiationRange = SourceRange());
   8856 
   8857     /// Note that we are instantiating as part of template
   8858     /// argument deduction for a class template partial
   8859     /// specialization.
   8860     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8861                           ClassTemplatePartialSpecializationDecl *PartialSpec,
   8862                           ArrayRef<TemplateArgument> TemplateArgs,
   8863                           sema::TemplateDeductionInfo &DeductionInfo,
   8864                           SourceRange InstantiationRange = SourceRange());
   8865 
   8866     /// Note that we are instantiating as part of template
   8867     /// argument deduction for a variable template partial
   8868     /// specialization.
   8869     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8870                           VarTemplatePartialSpecializationDecl *PartialSpec,
   8871                           ArrayRef<TemplateArgument> TemplateArgs,
   8872                           sema::TemplateDeductionInfo &DeductionInfo,
   8873                           SourceRange InstantiationRange = SourceRange());
   8874 
   8875     /// Note that we are instantiating a default argument for a function
   8876     /// parameter.
   8877     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8878                           ParmVarDecl *Param,
   8879                           ArrayRef<TemplateArgument> TemplateArgs,
   8880                           SourceRange InstantiationRange = SourceRange());
   8881 
   8882     /// Note that we are substituting prior template arguments into a
   8883     /// non-type parameter.
   8884     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8885                           NamedDecl *Template,
   8886                           NonTypeTemplateParmDecl *Param,
   8887                           ArrayRef<TemplateArgument> TemplateArgs,
   8888                           SourceRange InstantiationRange);
   8889 
   8890     /// Note that we are substituting prior template arguments into a
   8891     /// template template parameter.
   8892     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8893                           NamedDecl *Template,
   8894                           TemplateTemplateParmDecl *Param,
   8895                           ArrayRef<TemplateArgument> TemplateArgs,
   8896                           SourceRange InstantiationRange);
   8897 
   8898     /// Note that we are checking the default template argument
   8899     /// against the template parameter for a given template-id.
   8900     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8901                           TemplateDecl *Template,
   8902                           NamedDecl *Param,
   8903                           ArrayRef<TemplateArgument> TemplateArgs,
   8904                           SourceRange InstantiationRange);
   8905 
   8906     struct ConstraintsCheck {};
   8907     /// \brief Note that we are checking the constraints associated with some
   8908     /// constrained entity (a concept declaration or a template with associated
   8909     /// constraints).
   8910     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8911                           ConstraintsCheck, NamedDecl *Template,
   8912                           ArrayRef<TemplateArgument> TemplateArgs,
   8913                           SourceRange InstantiationRange);
   8914 
   8915     struct ConstraintSubstitution {};
   8916     /// \brief Note that we are checking a constraint expression associated
   8917     /// with a template declaration or as part of the satisfaction check of a
   8918     /// concept.
   8919     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8920                           ConstraintSubstitution, NamedDecl *Template,
   8921                           sema::TemplateDeductionInfo &DeductionInfo,
   8922                           SourceRange InstantiationRange);
   8923 
   8924     struct ConstraintNormalization {};
   8925     /// \brief Note that we are normalizing a constraint expression.
   8926     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8927                           ConstraintNormalization, NamedDecl *Template,
   8928                           SourceRange InstantiationRange);
   8929 
   8930     struct ParameterMappingSubstitution {};
   8931     /// \brief Note that we are subtituting into the parameter mapping of an
   8932     /// atomic constraint during constraint normalization.
   8933     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8934                           ParameterMappingSubstitution, NamedDecl *Template,
   8935                           SourceRange InstantiationRange);
   8936 
   8937     /// \brief Note that we are substituting template arguments into a part of
   8938     /// a requirement of a requires expression.
   8939     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8940                           concepts::Requirement *Req,
   8941                           sema::TemplateDeductionInfo &DeductionInfo,
   8942                           SourceRange InstantiationRange = SourceRange());
   8943 
   8944     /// \brief Note that we are checking the satisfaction of the constraint
   8945     /// expression inside of a nested requirement.
   8946     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
   8947                           concepts::NestedRequirement *Req, ConstraintsCheck,
   8948                           SourceRange InstantiationRange = SourceRange());
   8949 
   8950     /// Note that we have finished instantiating this template.
   8951     void Clear();
   8952 
   8953     ~InstantiatingTemplate() { Clear(); }
   8954 
   8955     /// Determines whether we have exceeded the maximum
   8956     /// recursive template instantiations.
   8957     bool isInvalid() const { return Invalid; }
   8958 
   8959     /// Determine whether we are already instantiating this
   8960     /// specialization in some surrounding active instantiation.
   8961     bool isAlreadyInstantiating() const { return AlreadyInstantiating; }
   8962 
   8963   private:
   8964     Sema &SemaRef;
   8965     bool Invalid;
   8966     bool AlreadyInstantiating;
   8967     bool CheckInstantiationDepth(SourceLocation PointOfInstantiation,
   8968                                  SourceRange InstantiationRange);
   8969 
   8970     InstantiatingTemplate(
   8971         Sema &SemaRef, CodeSynthesisContext::SynthesisKind Kind,
   8972         SourceLocation PointOfInstantiation, SourceRange InstantiationRange,
   8973         Decl *Entity, NamedDecl *Template = nullptr,
   8974         ArrayRef<TemplateArgument> TemplateArgs = None,
   8975         sema::TemplateDeductionInfo *DeductionInfo = nullptr);
   8976 
   8977     InstantiatingTemplate(const InstantiatingTemplate&) = delete;
   8978 
   8979     InstantiatingTemplate&
   8980     operator=(const InstantiatingTemplate&) = delete;
   8981   };
   8982 
   8983   void pushCodeSynthesisContext(CodeSynthesisContext Ctx);
   8984   void popCodeSynthesisContext();
   8985 
   8986   /// Determine whether we are currently performing template instantiation.
   8987   bool inTemplateInstantiation() const {
   8988     return CodeSynthesisContexts.size() > NonInstantiationEntries;
   8989   }
   8990 
   8991   void PrintContextStack() {
   8992     if (!CodeSynthesisContexts.empty() &&
   8993         CodeSynthesisContexts.size() != LastEmittedCodeSynthesisContextDepth) {
   8994       PrintInstantiationStack();
   8995       LastEmittedCodeSynthesisContextDepth = CodeSynthesisContexts.size();
   8996     }
   8997     if (PragmaAttributeCurrentTargetDecl)
   8998       PrintPragmaAttributeInstantiationPoint();
   8999   }
   9000   void PrintInstantiationStack();
   9001 
   9002   void PrintPragmaAttributeInstantiationPoint();
   9003 
   9004   /// Determines whether we are currently in a context where
   9005   /// template argument substitution failures are not considered
   9006   /// errors.
   9007   ///
   9008   /// \returns An empty \c Optional if we're not in a SFINAE context.
   9009   /// Otherwise, contains a pointer that, if non-NULL, contains the nearest
   9010   /// template-deduction context object, which can be used to capture
   9011   /// diagnostics that will be suppressed.
   9012   Optional<sema::TemplateDeductionInfo *> isSFINAEContext() const;
   9013 
   9014   /// Determines whether we are currently in a context that
   9015   /// is not evaluated as per C++ [expr] p5.
   9016   bool isUnevaluatedContext() const {
   9017     assert(!ExprEvalContexts.empty() &&
   9018            "Must be in an expression evaluation context");
   9019     return ExprEvalContexts.back().isUnevaluated();
   9020   }
   9021 
   9022   /// RAII class used to determine whether SFINAE has
   9023   /// trapped any errors that occur during template argument
   9024   /// deduction.
   9025   class SFINAETrap {
   9026     Sema &SemaRef;
   9027     unsigned PrevSFINAEErrors;
   9028     bool PrevInNonInstantiationSFINAEContext;
   9029     bool PrevAccessCheckingSFINAE;
   9030     bool PrevLastDiagnosticIgnored;
   9031 
   9032   public:
   9033     explicit SFINAETrap(Sema &SemaRef, bool AccessCheckingSFINAE = false)
   9034       : SemaRef(SemaRef), PrevSFINAEErrors(SemaRef.NumSFINAEErrors),
   9035         PrevInNonInstantiationSFINAEContext(
   9036                                       SemaRef.InNonInstantiationSFINAEContext),
   9037         PrevAccessCheckingSFINAE(SemaRef.AccessCheckingSFINAE),
   9038         PrevLastDiagnosticIgnored(
   9039             SemaRef.getDiagnostics().isLastDiagnosticIgnored())
   9040     {
   9041       if (!SemaRef.isSFINAEContext())
   9042         SemaRef.InNonInstantiationSFINAEContext = true;
   9043       SemaRef.AccessCheckingSFINAE = AccessCheckingSFINAE;
   9044     }
   9045 
   9046     ~SFINAETrap() {
   9047       SemaRef.NumSFINAEErrors = PrevSFINAEErrors;
   9048       SemaRef.InNonInstantiationSFINAEContext
   9049         = PrevInNonInstantiationSFINAEContext;
   9050       SemaRef.AccessCheckingSFINAE = PrevAccessCheckingSFINAE;
   9051       SemaRef.getDiagnostics().setLastDiagnosticIgnored(
   9052           PrevLastDiagnosticIgnored);
   9053     }
   9054 
   9055     /// Determine whether any SFINAE errors have been trapped.
   9056     bool hasErrorOccurred() const {
   9057       return SemaRef.NumSFINAEErrors > PrevSFINAEErrors;
   9058     }
   9059   };
   9060 
   9061   /// RAII class used to indicate that we are performing provisional
   9062   /// semantic analysis to determine the validity of a construct, so
   9063   /// typo-correction and diagnostics in the immediate context (not within
   9064   /// implicitly-instantiated templates) should be suppressed.
   9065   class TentativeAnalysisScope {
   9066     Sema &SemaRef;
   9067     // FIXME: Using a SFINAETrap for this is a hack.
   9068     SFINAETrap Trap;
   9069     bool PrevDisableTypoCorrection;
   9070   public:
   9071     explicit TentativeAnalysisScope(Sema &SemaRef)
   9072         : SemaRef(SemaRef), Trap(SemaRef, true),
   9073           PrevDisableTypoCorrection(SemaRef.DisableTypoCorrection) {
   9074       SemaRef.DisableTypoCorrection = true;
   9075     }
   9076     ~TentativeAnalysisScope() {
   9077       SemaRef.DisableTypoCorrection = PrevDisableTypoCorrection;
   9078     }
   9079   };
   9080 
   9081   /// The current instantiation scope used to store local
   9082   /// variables.
   9083   LocalInstantiationScope *CurrentInstantiationScope;
   9084 
   9085   /// Tracks whether we are in a context where typo correction is
   9086   /// disabled.
   9087   bool DisableTypoCorrection;
   9088 
   9089   /// The number of typos corrected by CorrectTypo.
   9090   unsigned TyposCorrected;
   9091 
   9092   typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet;
   9093   typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations;
   9094 
   9095   /// A cache containing identifiers for which typo correction failed and
   9096   /// their locations, so that repeated attempts to correct an identifier in a
   9097   /// given location are ignored if typo correction already failed for it.
   9098   IdentifierSourceLocations TypoCorrectionFailures;
   9099 
   9100   /// Worker object for performing CFG-based warnings.
   9101   sema::AnalysisBasedWarnings AnalysisWarnings;
   9102   threadSafety::BeforeSet *ThreadSafetyDeclCache;
   9103 
   9104   /// An entity for which implicit template instantiation is required.
   9105   ///
   9106   /// The source location associated with the declaration is the first place in
   9107   /// the source code where the declaration was "used". It is not necessarily
   9108   /// the point of instantiation (which will be either before or after the
   9109   /// namespace-scope declaration that triggered this implicit instantiation),
   9110   /// However, it is the location that diagnostics should generally refer to,
   9111   /// because users will need to know what code triggered the instantiation.
   9112   typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation;
   9113 
   9114   /// The queue of implicit template instantiations that are required
   9115   /// but have not yet been performed.
   9116   std::deque<PendingImplicitInstantiation> PendingInstantiations;
   9117 
   9118   /// Queue of implicit template instantiations that cannot be performed
   9119   /// eagerly.
   9120   SmallVector<PendingImplicitInstantiation, 1> LateParsedInstantiations;
   9121 
   9122   class GlobalEagerInstantiationScope {
   9123   public:
   9124     GlobalEagerInstantiationScope(Sema &S, bool Enabled)
   9125         : S(S), Enabled(Enabled) {
   9126       if (!Enabled) return;
   9127 
   9128       SavedPendingInstantiations.swap(S.PendingInstantiations);
   9129       SavedVTableUses.swap(S.VTableUses);
   9130     }
   9131 
   9132     void perform() {
   9133       if (Enabled) {
   9134         S.DefineUsedVTables();
   9135         S.PerformPendingInstantiations();
   9136       }
   9137     }
   9138 
   9139     ~GlobalEagerInstantiationScope() {
   9140       if (!Enabled) return;
   9141 
   9142       // Restore the set of pending vtables.
   9143       assert(S.VTableUses.empty() &&
   9144              "VTableUses should be empty before it is discarded.");
   9145       S.VTableUses.swap(SavedVTableUses);
   9146 
   9147       // Restore the set of pending implicit instantiations.
   9148       if (S.TUKind != TU_Prefix || !S.LangOpts.PCHInstantiateTemplates) {
   9149         assert(S.PendingInstantiations.empty() &&
   9150                "PendingInstantiations should be empty before it is discarded.");
   9151         S.PendingInstantiations.swap(SavedPendingInstantiations);
   9152       } else {
   9153         // Template instantiations in the PCH may be delayed until the TU.
   9154         S.PendingInstantiations.swap(SavedPendingInstantiations);
   9155         S.PendingInstantiations.insert(S.PendingInstantiations.end(),
   9156                                        SavedPendingInstantiations.begin(),
   9157                                        SavedPendingInstantiations.end());
   9158       }
   9159     }
   9160 
   9161   private:
   9162     Sema &S;
   9163     SmallVector<VTableUse, 16> SavedVTableUses;
   9164     std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
   9165     bool Enabled;
   9166   };
   9167 
   9168   /// The queue of implicit template instantiations that are required
   9169   /// and must be performed within the current local scope.
   9170   ///
   9171   /// This queue is only used for member functions of local classes in
   9172   /// templates, which must be instantiated in the same scope as their
   9173   /// enclosing function, so that they can reference function-local
   9174   /// types, static variables, enumerators, etc.
   9175   std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations;
   9176 
   9177   class LocalEagerInstantiationScope {
   9178   public:
   9179     LocalEagerInstantiationScope(Sema &S) : S(S) {
   9180       SavedPendingLocalImplicitInstantiations.swap(
   9181           S.PendingLocalImplicitInstantiations);
   9182     }
   9183 
   9184     void perform() { S.PerformPendingInstantiations(/*LocalOnly=*/true); }
   9185 
   9186     ~LocalEagerInstantiationScope() {
   9187       assert(S.PendingLocalImplicitInstantiations.empty() &&
   9188              "there shouldn't be any pending local implicit instantiations");
   9189       SavedPendingLocalImplicitInstantiations.swap(
   9190           S.PendingLocalImplicitInstantiations);
   9191     }
   9192 
   9193   private:
   9194     Sema &S;
   9195     std::deque<PendingImplicitInstantiation>
   9196         SavedPendingLocalImplicitInstantiations;
   9197   };
   9198 
   9199   /// A helper class for building up ExtParameterInfos.
   9200   class ExtParameterInfoBuilder {
   9201     SmallVector<FunctionProtoType::ExtParameterInfo, 16> Infos;
   9202     bool HasInteresting = false;
   9203 
   9204   public:
   9205     /// Set the ExtParameterInfo for the parameter at the given index,
   9206     ///
   9207     void set(unsigned index, FunctionProtoType::ExtParameterInfo info) {
   9208       assert(Infos.size() <= index);
   9209       Infos.resize(index);
   9210       Infos.push_back(info);
   9211 
   9212       if (!HasInteresting)
   9213         HasInteresting = (info != FunctionProtoType::ExtParameterInfo());
   9214     }
   9215 
   9216     /// Return a pointer (suitable for setting in an ExtProtoInfo) to the
   9217     /// ExtParameterInfo array we've built up.
   9218     const FunctionProtoType::ExtParameterInfo *
   9219     getPointerOrNull(unsigned numParams) {
   9220       if (!HasInteresting) return nullptr;
   9221       Infos.resize(numParams);
   9222       return Infos.data();
   9223     }
   9224   };
   9225 
   9226   void PerformPendingInstantiations(bool LocalOnly = false);
   9227 
   9228   TypeSourceInfo *SubstType(TypeSourceInfo *T,
   9229                             const MultiLevelTemplateArgumentList &TemplateArgs,
   9230                             SourceLocation Loc, DeclarationName Entity,
   9231                             bool AllowDeducedTST = false);
   9232 
   9233   QualType SubstType(QualType T,
   9234                      const MultiLevelTemplateArgumentList &TemplateArgs,
   9235                      SourceLocation Loc, DeclarationName Entity);
   9236 
   9237   TypeSourceInfo *SubstType(TypeLoc TL,
   9238                             const MultiLevelTemplateArgumentList &TemplateArgs,
   9239                             SourceLocation Loc, DeclarationName Entity);
   9240 
   9241   TypeSourceInfo *SubstFunctionDeclType(TypeSourceInfo *T,
   9242                             const MultiLevelTemplateArgumentList &TemplateArgs,
   9243                                         SourceLocation Loc,
   9244                                         DeclarationName Entity,
   9245                                         CXXRecordDecl *ThisContext,
   9246                                         Qualifiers ThisTypeQuals);
   9247   void SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto,
   9248                           const MultiLevelTemplateArgumentList &Args);
   9249   bool SubstExceptionSpec(SourceLocation Loc,
   9250                           FunctionProtoType::ExceptionSpecInfo &ESI,
   9251                           SmallVectorImpl<QualType> &ExceptionStorage,
   9252                           const MultiLevelTemplateArgumentList &Args);
   9253   ParmVarDecl *SubstParmVarDecl(ParmVarDecl *D,
   9254                             const MultiLevelTemplateArgumentList &TemplateArgs,
   9255                                 int indexAdjustment,
   9256                                 Optional<unsigned> NumExpansions,
   9257                                 bool ExpectParameterPack);
   9258   bool SubstParmTypes(SourceLocation Loc, ArrayRef<ParmVarDecl *> Params,
   9259                       const FunctionProtoType::ExtParameterInfo *ExtParamInfos,
   9260                       const MultiLevelTemplateArgumentList &TemplateArgs,
   9261                       SmallVectorImpl<QualType> &ParamTypes,
   9262                       SmallVectorImpl<ParmVarDecl *> *OutParams,
   9263                       ExtParameterInfoBuilder &ParamInfos);
   9264   ExprResult SubstExpr(Expr *E,
   9265                        const MultiLevelTemplateArgumentList &TemplateArgs);
   9266 
   9267   /// Substitute the given template arguments into a list of
   9268   /// expressions, expanding pack expansions if required.
   9269   ///
   9270   /// \param Exprs The list of expressions to substitute into.
   9271   ///
   9272   /// \param IsCall Whether this is some form of call, in which case
   9273   /// default arguments will be dropped.
   9274   ///
   9275   /// \param TemplateArgs The set of template arguments to substitute.
   9276   ///
   9277   /// \param Outputs Will receive all of the substituted arguments.
   9278   ///
   9279   /// \returns true if an error occurred, false otherwise.
   9280   bool SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall,
   9281                   const MultiLevelTemplateArgumentList &TemplateArgs,
   9282                   SmallVectorImpl<Expr *> &Outputs);
   9283 
   9284   StmtResult SubstStmt(Stmt *S,
   9285                        const MultiLevelTemplateArgumentList &TemplateArgs);
   9286 
   9287   TemplateParameterList *
   9288   SubstTemplateParams(TemplateParameterList *Params, DeclContext *Owner,
   9289                       const MultiLevelTemplateArgumentList &TemplateArgs);
   9290 
   9291   bool
   9292   SubstTemplateArguments(ArrayRef<TemplateArgumentLoc> Args,
   9293                          const MultiLevelTemplateArgumentList &TemplateArgs,
   9294                          TemplateArgumentListInfo &Outputs);
   9295 
   9296 
   9297   Decl *SubstDecl(Decl *D, DeclContext *Owner,
   9298                   const MultiLevelTemplateArgumentList &TemplateArgs);
   9299 
   9300   /// Substitute the name and return type of a defaulted 'operator<=>' to form
   9301   /// an implicit 'operator=='.
   9302   FunctionDecl *SubstSpaceshipAsEqualEqual(CXXRecordDecl *RD,
   9303                                            FunctionDecl *Spaceship);
   9304 
   9305   ExprResult SubstInitializer(Expr *E,
   9306                        const MultiLevelTemplateArgumentList &TemplateArgs,
   9307                        bool CXXDirectInit);
   9308 
   9309   bool
   9310   SubstBaseSpecifiers(CXXRecordDecl *Instantiation,
   9311                       CXXRecordDecl *Pattern,
   9312                       const MultiLevelTemplateArgumentList &TemplateArgs);
   9313 
   9314   bool
   9315   InstantiateClass(SourceLocation PointOfInstantiation,
   9316                    CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
   9317                    const MultiLevelTemplateArgumentList &TemplateArgs,
   9318                    TemplateSpecializationKind TSK,
   9319                    bool Complain = true);
   9320 
   9321   bool InstantiateEnum(SourceLocation PointOfInstantiation,
   9322                        EnumDecl *Instantiation, EnumDecl *Pattern,
   9323                        const MultiLevelTemplateArgumentList &TemplateArgs,
   9324                        TemplateSpecializationKind TSK);
   9325 
   9326   bool InstantiateInClassInitializer(
   9327       SourceLocation PointOfInstantiation, FieldDecl *Instantiation,
   9328       FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs);
   9329 
   9330   struct LateInstantiatedAttribute {
   9331     const Attr *TmplAttr;
   9332     LocalInstantiationScope *Scope;
   9333     Decl *NewDecl;
   9334 
   9335     LateInstantiatedAttribute(const Attr *A, LocalInstantiationScope *S,
   9336                               Decl *D)
   9337       : TmplAttr(A), Scope(S), NewDecl(D)
   9338     { }
   9339   };
   9340   typedef SmallVector<LateInstantiatedAttribute, 16> LateInstantiatedAttrVec;
   9341 
   9342   void InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
   9343                         const Decl *Pattern, Decl *Inst,
   9344                         LateInstantiatedAttrVec *LateAttrs = nullptr,
   9345                         LocalInstantiationScope *OuterMostScope = nullptr);
   9346 
   9347   void
   9348   InstantiateAttrsForDecl(const MultiLevelTemplateArgumentList &TemplateArgs,
   9349                           const Decl *Pattern, Decl *Inst,
   9350                           LateInstantiatedAttrVec *LateAttrs = nullptr,
   9351                           LocalInstantiationScope *OuterMostScope = nullptr);
   9352 
   9353   void InstantiateDefaultCtorDefaultArgs(CXXConstructorDecl *Ctor);
   9354 
   9355   bool usesPartialOrExplicitSpecialization(
   9356       SourceLocation Loc, ClassTemplateSpecializationDecl *ClassTemplateSpec);
   9357 
   9358   bool
   9359   InstantiateClassTemplateSpecialization(SourceLocation PointOfInstantiation,
   9360                            ClassTemplateSpecializationDecl *ClassTemplateSpec,
   9361                            TemplateSpecializationKind TSK,
   9362                            bool Complain = true);
   9363 
   9364   void InstantiateClassMembers(SourceLocation PointOfInstantiation,
   9365                                CXXRecordDecl *Instantiation,
   9366                             const MultiLevelTemplateArgumentList &TemplateArgs,
   9367                                TemplateSpecializationKind TSK);
   9368 
   9369   void InstantiateClassTemplateSpecializationMembers(
   9370                                           SourceLocation PointOfInstantiation,
   9371                            ClassTemplateSpecializationDecl *ClassTemplateSpec,
   9372                                                 TemplateSpecializationKind TSK);
   9373 
   9374   NestedNameSpecifierLoc
   9375   SubstNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
   9376                            const MultiLevelTemplateArgumentList &TemplateArgs);
   9377 
   9378   DeclarationNameInfo
   9379   SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
   9380                            const MultiLevelTemplateArgumentList &TemplateArgs);
   9381   TemplateName
   9382   SubstTemplateName(NestedNameSpecifierLoc QualifierLoc, TemplateName Name,
   9383                     SourceLocation Loc,
   9384                     const MultiLevelTemplateArgumentList &TemplateArgs);
   9385   bool Subst(const TemplateArgumentLoc *Args, unsigned NumArgs,
   9386              TemplateArgumentListInfo &Result,
   9387              const MultiLevelTemplateArgumentList &TemplateArgs);
   9388 
   9389   bool InstantiateDefaultArgument(SourceLocation CallLoc, FunctionDecl *FD,
   9390                                   ParmVarDecl *Param);
   9391   void InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
   9392                                 FunctionDecl *Function);
   9393   bool CheckInstantiatedFunctionTemplateConstraints(
   9394       SourceLocation PointOfInstantiation, FunctionDecl *Decl,
   9395       ArrayRef<TemplateArgument> TemplateArgs,
   9396       ConstraintSatisfaction &Satisfaction);
   9397   FunctionDecl *InstantiateFunctionDeclaration(FunctionTemplateDecl *FTD,
   9398                                                const TemplateArgumentList *Args,
   9399                                                SourceLocation Loc);
   9400   void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
   9401                                      FunctionDecl *Function,
   9402                                      bool Recursive = false,
   9403                                      bool DefinitionRequired = false,
   9404                                      bool AtEndOfTU = false);
   9405   VarTemplateSpecializationDecl *BuildVarTemplateInstantiation(
   9406       VarTemplateDecl *VarTemplate, VarDecl *FromVar,
   9407       const TemplateArgumentList &TemplateArgList,
   9408       const TemplateArgumentListInfo &TemplateArgsInfo,
   9409       SmallVectorImpl<TemplateArgument> &Converted,
   9410       SourceLocation PointOfInstantiation,
   9411       LateInstantiatedAttrVec *LateAttrs = nullptr,
   9412       LocalInstantiationScope *StartingScope = nullptr);
   9413   VarTemplateSpecializationDecl *CompleteVarTemplateSpecializationDecl(
   9414       VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
   9415       const MultiLevelTemplateArgumentList &TemplateArgs);
   9416   void
   9417   BuildVariableInstantiation(VarDecl *NewVar, VarDecl *OldVar,
   9418                              const MultiLevelTemplateArgumentList &TemplateArgs,
   9419                              LateInstantiatedAttrVec *LateAttrs,
   9420                              DeclContext *Owner,
   9421                              LocalInstantiationScope *StartingScope,
   9422                              bool InstantiatingVarTemplate = false,
   9423                              VarTemplateSpecializationDecl *PrevVTSD = nullptr);
   9424 
   9425   void InstantiateVariableInitializer(
   9426       VarDecl *Var, VarDecl *OldVar,
   9427       const MultiLevelTemplateArgumentList &TemplateArgs);
   9428   void InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
   9429                                      VarDecl *Var, bool Recursive = false,
   9430                                      bool DefinitionRequired = false,
   9431                                      bool AtEndOfTU = false);
   9432 
   9433   void InstantiateMemInitializers(CXXConstructorDecl *New,
   9434                                   const CXXConstructorDecl *Tmpl,
   9435                             const MultiLevelTemplateArgumentList &TemplateArgs);
   9436 
   9437   NamedDecl *FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
   9438                           const MultiLevelTemplateArgumentList &TemplateArgs,
   9439                           bool FindingInstantiatedContext = false);
   9440   DeclContext *FindInstantiatedContext(SourceLocation Loc, DeclContext *DC,
   9441                           const MultiLevelTemplateArgumentList &TemplateArgs);
   9442 
   9443   // Objective-C declarations.
   9444   enum ObjCContainerKind {
   9445     OCK_None = -1,
   9446     OCK_Interface = 0,
   9447     OCK_Protocol,
   9448     OCK_Category,
   9449     OCK_ClassExtension,
   9450     OCK_Implementation,
   9451     OCK_CategoryImplementation
   9452   };
   9453   ObjCContainerKind getObjCContainerKind() const;
   9454 
   9455   DeclResult actOnObjCTypeParam(Scope *S,
   9456                                 ObjCTypeParamVariance variance,
   9457                                 SourceLocation varianceLoc,
   9458                                 unsigned index,
   9459                                 IdentifierInfo *paramName,
   9460                                 SourceLocation paramLoc,
   9461                                 SourceLocation colonLoc,
   9462                                 ParsedType typeBound);
   9463 
   9464   ObjCTypeParamList *actOnObjCTypeParamList(Scope *S, SourceLocation lAngleLoc,
   9465                                             ArrayRef<Decl *> typeParams,
   9466                                             SourceLocation rAngleLoc);
   9467   void popObjCTypeParamList(Scope *S, ObjCTypeParamList *typeParamList);
   9468 
   9469   Decl *ActOnStartClassInterface(
   9470       Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName,
   9471       SourceLocation ClassLoc, ObjCTypeParamList *typeParamList,
   9472       IdentifierInfo *SuperName, SourceLocation SuperLoc,
   9473       ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange,
   9474       Decl *const *ProtoRefs, unsigned NumProtoRefs,
   9475       const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc,
   9476       const ParsedAttributesView &AttrList);
   9477 
   9478   void ActOnSuperClassOfClassInterface(Scope *S,
   9479                                        SourceLocation AtInterfaceLoc,
   9480                                        ObjCInterfaceDecl *IDecl,
   9481                                        IdentifierInfo *ClassName,
   9482                                        SourceLocation ClassLoc,
   9483                                        IdentifierInfo *SuperName,
   9484                                        SourceLocation SuperLoc,
   9485                                        ArrayRef<ParsedType> SuperTypeArgs,
   9486                                        SourceRange SuperTypeArgsRange);
   9487 
   9488   void ActOnTypedefedProtocols(SmallVectorImpl<Decl *> &ProtocolRefs,
   9489                                SmallVectorImpl<SourceLocation> &ProtocolLocs,
   9490                                IdentifierInfo *SuperName,
   9491                                SourceLocation SuperLoc);
   9492 
   9493   Decl *ActOnCompatibilityAlias(
   9494                     SourceLocation AtCompatibilityAliasLoc,
   9495                     IdentifierInfo *AliasName,  SourceLocation AliasLocation,
   9496                     IdentifierInfo *ClassName, SourceLocation ClassLocation);
   9497 
   9498   bool CheckForwardProtocolDeclarationForCircularDependency(
   9499     IdentifierInfo *PName,
   9500     SourceLocation &PLoc, SourceLocation PrevLoc,
   9501     const ObjCList<ObjCProtocolDecl> &PList);
   9502 
   9503   Decl *ActOnStartProtocolInterface(
   9504       SourceLocation AtProtoInterfaceLoc, IdentifierInfo *ProtocolName,
   9505       SourceLocation ProtocolLoc, Decl *const *ProtoRefNames,
   9506       unsigned NumProtoRefs, const SourceLocation *ProtoLocs,
   9507       SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList);
   9508 
   9509   Decl *ActOnStartCategoryInterface(
   9510       SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName,
   9511       SourceLocation ClassLoc, ObjCTypeParamList *typeParamList,
   9512       IdentifierInfo *CategoryName, SourceLocation CategoryLoc,
   9513       Decl *const *ProtoRefs, unsigned NumProtoRefs,
   9514       const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc,
   9515       const ParsedAttributesView &AttrList);
   9516 
   9517   Decl *ActOnStartClassImplementation(SourceLocation AtClassImplLoc,
   9518                                       IdentifierInfo *ClassName,
   9519                                       SourceLocation ClassLoc,
   9520                                       IdentifierInfo *SuperClassname,
   9521                                       SourceLocation SuperClassLoc,
   9522                                       const ParsedAttributesView &AttrList);
   9523 
   9524   Decl *ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc,
   9525                                          IdentifierInfo *ClassName,
   9526                                          SourceLocation ClassLoc,
   9527                                          IdentifierInfo *CatName,
   9528                                          SourceLocation CatLoc,
   9529                                          const ParsedAttributesView &AttrList);
   9530 
   9531   DeclGroupPtrTy ActOnFinishObjCImplementation(Decl *ObjCImpDecl,
   9532                                                ArrayRef<Decl *> Decls);
   9533 
   9534   DeclGroupPtrTy ActOnForwardClassDeclaration(SourceLocation Loc,
   9535                    IdentifierInfo **IdentList,
   9536                    SourceLocation *IdentLocs,
   9537                    ArrayRef<ObjCTypeParamList *> TypeParamLists,
   9538                    unsigned NumElts);
   9539 
   9540   DeclGroupPtrTy
   9541   ActOnForwardProtocolDeclaration(SourceLocation AtProtoclLoc,
   9542                                   ArrayRef<IdentifierLocPair> IdentList,
   9543                                   const ParsedAttributesView &attrList);
   9544 
   9545   void FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer,
   9546                                ArrayRef<IdentifierLocPair> ProtocolId,
   9547                                SmallVectorImpl<Decl *> &Protocols);
   9548 
   9549   void DiagnoseTypeArgsAndProtocols(IdentifierInfo *ProtocolId,
   9550                                     SourceLocation ProtocolLoc,
   9551                                     IdentifierInfo *TypeArgId,
   9552                                     SourceLocation TypeArgLoc,
   9553                                     bool SelectProtocolFirst = false);
   9554 
   9555   /// Given a list of identifiers (and their locations), resolve the
   9556   /// names to either Objective-C protocol qualifiers or type
   9557   /// arguments, as appropriate.
   9558   void actOnObjCTypeArgsOrProtocolQualifiers(
   9559          Scope *S,
   9560          ParsedType baseType,
   9561          SourceLocation lAngleLoc,
   9562          ArrayRef<IdentifierInfo *> identifiers,
   9563          ArrayRef<SourceLocation> identifierLocs,
   9564          SourceLocation rAngleLoc,
   9565          SourceLocation &typeArgsLAngleLoc,
   9566          SmallVectorImpl<ParsedType> &typeArgs,
   9567          SourceLocation &typeArgsRAngleLoc,
   9568          SourceLocation &protocolLAngleLoc,
   9569          SmallVectorImpl<Decl *> &protocols,
   9570          SourceLocation &protocolRAngleLoc,
   9571          bool warnOnIncompleteProtocols);
   9572 
   9573   /// Build a an Objective-C protocol-qualified 'id' type where no
   9574   /// base type was specified.
   9575   TypeResult actOnObjCProtocolQualifierType(
   9576                SourceLocation lAngleLoc,
   9577                ArrayRef<Decl *> protocols,
   9578                ArrayRef<SourceLocation> protocolLocs,
   9579                SourceLocation rAngleLoc);
   9580 
   9581   /// Build a specialized and/or protocol-qualified Objective-C type.
   9582   TypeResult actOnObjCTypeArgsAndProtocolQualifiers(
   9583                Scope *S,
   9584                SourceLocation Loc,
   9585                ParsedType BaseType,
   9586                SourceLocation TypeArgsLAngleLoc,
   9587                ArrayRef<ParsedType> TypeArgs,
   9588                SourceLocation TypeArgsRAngleLoc,
   9589                SourceLocation ProtocolLAngleLoc,
   9590                ArrayRef<Decl *> Protocols,
   9591                ArrayRef<SourceLocation> ProtocolLocs,
   9592                SourceLocation ProtocolRAngleLoc);
   9593 
   9594   /// Build an Objective-C type parameter type.
   9595   QualType BuildObjCTypeParamType(const ObjCTypeParamDecl *Decl,
   9596                                   SourceLocation ProtocolLAngleLoc,
   9597                                   ArrayRef<ObjCProtocolDecl *> Protocols,
   9598                                   ArrayRef<SourceLocation> ProtocolLocs,
   9599                                   SourceLocation ProtocolRAngleLoc,
   9600                                   bool FailOnError = false);
   9601 
   9602   /// Build an Objective-C object pointer type.
   9603   QualType BuildObjCObjectType(QualType BaseType,
   9604                                SourceLocation Loc,
   9605                                SourceLocation TypeArgsLAngleLoc,
   9606                                ArrayRef<TypeSourceInfo *> TypeArgs,
   9607                                SourceLocation TypeArgsRAngleLoc,
   9608                                SourceLocation ProtocolLAngleLoc,
   9609                                ArrayRef<ObjCProtocolDecl *> Protocols,
   9610                                ArrayRef<SourceLocation> ProtocolLocs,
   9611                                SourceLocation ProtocolRAngleLoc,
   9612                                bool FailOnError = false);
   9613 
   9614   /// Ensure attributes are consistent with type.
   9615   /// \param [in, out] Attributes The attributes to check; they will
   9616   /// be modified to be consistent with \p PropertyTy.
   9617   void CheckObjCPropertyAttributes(Decl *PropertyPtrTy,
   9618                                    SourceLocation Loc,
   9619                                    unsigned &Attributes,
   9620                                    bool propertyInPrimaryClass);
   9621 
   9622   /// Process the specified property declaration and create decls for the
   9623   /// setters and getters as needed.
   9624   /// \param property The property declaration being processed
   9625   void ProcessPropertyDecl(ObjCPropertyDecl *property);
   9626 
   9627 
   9628   void DiagnosePropertyMismatch(ObjCPropertyDecl *Property,
   9629                                 ObjCPropertyDecl *SuperProperty,
   9630                                 const IdentifierInfo *Name,
   9631                                 bool OverridingProtocolProperty);
   9632 
   9633   void DiagnoseClassExtensionDupMethods(ObjCCategoryDecl *CAT,
   9634                                         ObjCInterfaceDecl *ID);
   9635 
   9636   Decl *ActOnAtEnd(Scope *S, SourceRange AtEnd,
   9637                    ArrayRef<Decl *> allMethods = None,
   9638                    ArrayRef<DeclGroupPtrTy> allTUVars = None);
   9639 
   9640   Decl *ActOnProperty(Scope *S, SourceLocation AtLoc,
   9641                       SourceLocation LParenLoc,
   9642                       FieldDeclarator &FD, ObjCDeclSpec &ODS,
   9643                       Selector GetterSel, Selector SetterSel,
   9644                       tok::ObjCKeywordKind MethodImplKind,
   9645                       DeclContext *lexicalDC = nullptr);
   9646 
   9647   Decl *ActOnPropertyImplDecl(Scope *S,
   9648                               SourceLocation AtLoc,
   9649                               SourceLocation PropertyLoc,
   9650                               bool ImplKind,
   9651                               IdentifierInfo *PropertyId,
   9652                               IdentifierInfo *PropertyIvar,
   9653                               SourceLocation PropertyIvarLoc,
   9654                               ObjCPropertyQueryKind QueryKind);
   9655 
   9656   enum ObjCSpecialMethodKind {
   9657     OSMK_None,
   9658     OSMK_Alloc,
   9659     OSMK_New,
   9660     OSMK_Copy,
   9661     OSMK_RetainingInit,
   9662     OSMK_NonRetainingInit
   9663   };
   9664 
   9665   struct ObjCArgInfo {
   9666     IdentifierInfo *Name;
   9667     SourceLocation NameLoc;
   9668     // The Type is null if no type was specified, and the DeclSpec is invalid
   9669     // in this case.
   9670     ParsedType Type;
   9671     ObjCDeclSpec DeclSpec;
   9672 
   9673     /// ArgAttrs - Attribute list for this argument.
   9674     ParsedAttributesView ArgAttrs;
   9675   };
   9676 
   9677   Decl *ActOnMethodDeclaration(
   9678       Scope *S,
   9679       SourceLocation BeginLoc, // location of the + or -.
   9680       SourceLocation EndLoc,   // location of the ; or {.
   9681       tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType,
   9682       ArrayRef<SourceLocation> SelectorLocs, Selector Sel,
   9683       // optional arguments. The number of types/arguments is obtained
   9684       // from the Sel.getNumArgs().
   9685       ObjCArgInfo *ArgInfo, DeclaratorChunk::ParamInfo *CParamInfo,
   9686       unsigned CNumArgs, // c-style args
   9687       const ParsedAttributesView &AttrList, tok::ObjCKeywordKind MethodImplKind,
   9688       bool isVariadic, bool MethodDefinition);
   9689 
   9690   ObjCMethodDecl *LookupMethodInQualifiedType(Selector Sel,
   9691                                               const ObjCObjectPointerType *OPT,
   9692                                               bool IsInstance);
   9693   ObjCMethodDecl *LookupMethodInObjectType(Selector Sel, QualType Ty,
   9694                                            bool IsInstance);
   9695 
   9696   bool CheckARCMethodDecl(ObjCMethodDecl *method);
   9697   bool inferObjCARCLifetime(ValueDecl *decl);
   9698 
   9699   void deduceOpenCLAddressSpace(ValueDecl *decl);
   9700 
   9701   ExprResult
   9702   HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT,
   9703                             Expr *BaseExpr,
   9704                             SourceLocation OpLoc,
   9705                             DeclarationName MemberName,
   9706                             SourceLocation MemberLoc,
   9707                             SourceLocation SuperLoc, QualType SuperType,
   9708                             bool Super);
   9709 
   9710   ExprResult
   9711   ActOnClassPropertyRefExpr(IdentifierInfo &receiverName,
   9712                             IdentifierInfo &propertyName,
   9713                             SourceLocation receiverNameLoc,
   9714                             SourceLocation propertyNameLoc);
   9715 
   9716   ObjCMethodDecl *tryCaptureObjCSelf(SourceLocation Loc);
   9717 
   9718   /// Describes the kind of message expression indicated by a message
   9719   /// send that starts with an identifier.
   9720   enum ObjCMessageKind {
   9721     /// The message is sent to 'super'.
   9722     ObjCSuperMessage,
   9723     /// The message is an instance message.
   9724     ObjCInstanceMessage,
   9725     /// The message is a class message, and the identifier is a type
   9726     /// name.
   9727     ObjCClassMessage
   9728   };
   9729 
   9730   ObjCMessageKind getObjCMessageKind(Scope *S,
   9731                                      IdentifierInfo *Name,
   9732                                      SourceLocation NameLoc,
   9733                                      bool IsSuper,
   9734                                      bool HasTrailingDot,
   9735                                      ParsedType &ReceiverType);
   9736 
   9737   ExprResult ActOnSuperMessage(Scope *S, SourceLocation SuperLoc,
   9738                                Selector Sel,
   9739                                SourceLocation LBracLoc,
   9740                                ArrayRef<SourceLocation> SelectorLocs,
   9741                                SourceLocation RBracLoc,
   9742                                MultiExprArg Args);
   9743 
   9744   ExprResult BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,
   9745                                QualType ReceiverType,
   9746                                SourceLocation SuperLoc,
   9747                                Selector Sel,
   9748                                ObjCMethodDecl *Method,
   9749                                SourceLocation LBracLoc,
   9750                                ArrayRef<SourceLocation> SelectorLocs,
   9751                                SourceLocation RBracLoc,
   9752                                MultiExprArg Args,
   9753                                bool isImplicit = false);
   9754 
   9755   ExprResult BuildClassMessageImplicit(QualType ReceiverType,
   9756                                        bool isSuperReceiver,
   9757                                        SourceLocation Loc,
   9758                                        Selector Sel,
   9759                                        ObjCMethodDecl *Method,
   9760                                        MultiExprArg Args);
   9761 
   9762   ExprResult ActOnClassMessage(Scope *S,
   9763                                ParsedType Receiver,
   9764                                Selector Sel,
   9765                                SourceLocation LBracLoc,
   9766                                ArrayRef<SourceLocation> SelectorLocs,
   9767                                SourceLocation RBracLoc,
   9768                                MultiExprArg Args);
   9769 
   9770   ExprResult BuildInstanceMessage(Expr *Receiver,
   9771                                   QualType ReceiverType,
   9772                                   SourceLocation SuperLoc,
   9773                                   Selector Sel,
   9774                                   ObjCMethodDecl *Method,
   9775                                   SourceLocation LBracLoc,
   9776                                   ArrayRef<SourceLocation> SelectorLocs,
   9777                                   SourceLocation RBracLoc,
   9778                                   MultiExprArg Args,
   9779                                   bool isImplicit = false);
   9780 
   9781   ExprResult BuildInstanceMessageImplicit(Expr *Receiver,
   9782                                           QualType ReceiverType,
   9783                                           SourceLocation Loc,
   9784                                           Selector Sel,
   9785                                           ObjCMethodDecl *Method,
   9786                                           MultiExprArg Args);
   9787 
   9788   ExprResult ActOnInstanceMessage(Scope *S,
   9789                                   Expr *Receiver,
   9790                                   Selector Sel,
   9791                                   SourceLocation LBracLoc,
   9792                                   ArrayRef<SourceLocation> SelectorLocs,
   9793                                   SourceLocation RBracLoc,
   9794                                   MultiExprArg Args);
   9795 
   9796   ExprResult BuildObjCBridgedCast(SourceLocation LParenLoc,
   9797                                   ObjCBridgeCastKind Kind,
   9798                                   SourceLocation BridgeKeywordLoc,
   9799                                   TypeSourceInfo *TSInfo,
   9800                                   Expr *SubExpr);
   9801 
   9802   ExprResult ActOnObjCBridgedCast(Scope *S,
   9803                                   SourceLocation LParenLoc,
   9804                                   ObjCBridgeCastKind Kind,
   9805                                   SourceLocation BridgeKeywordLoc,
   9806                                   ParsedType Type,
   9807                                   SourceLocation RParenLoc,
   9808                                   Expr *SubExpr);
   9809 
   9810   void CheckTollFreeBridgeCast(QualType castType, Expr *castExpr);
   9811 
   9812   void CheckObjCBridgeRelatedCast(QualType castType, Expr *castExpr);
   9813 
   9814   bool CheckTollFreeBridgeStaticCast(QualType castType, Expr *castExpr,
   9815                                      CastKind &Kind);
   9816 
   9817   bool checkObjCBridgeRelatedComponents(SourceLocation Loc,
   9818                                         QualType DestType, QualType SrcType,
   9819                                         ObjCInterfaceDecl *&RelatedClass,
   9820                                         ObjCMethodDecl *&ClassMethod,
   9821                                         ObjCMethodDecl *&InstanceMethod,
   9822                                         TypedefNameDecl *&TDNDecl,
   9823                                         bool CfToNs, bool Diagnose = true);
   9824 
   9825   bool CheckObjCBridgeRelatedConversions(SourceLocation Loc,
   9826                                          QualType DestType, QualType SrcType,
   9827                                          Expr *&SrcExpr, bool Diagnose = true);
   9828 
   9829   bool CheckConversionToObjCLiteral(QualType DstType, Expr *&SrcExpr,
   9830                                     bool Diagnose = true);
   9831 
   9832   bool checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall);
   9833 
   9834   /// Check whether the given new method is a valid override of the
   9835   /// given overridden method, and set any properties that should be inherited.
   9836   void CheckObjCMethodOverride(ObjCMethodDecl *NewMethod,
   9837                                const ObjCMethodDecl *Overridden);
   9838 
   9839   /// Describes the compatibility of a result type with its method.
   9840   enum ResultTypeCompatibilityKind {
   9841     RTC_Compatible,
   9842     RTC_Incompatible,
   9843     RTC_Unknown
   9844   };
   9845 
   9846   void CheckObjCMethodDirectOverrides(ObjCMethodDecl *method,
   9847                                       ObjCMethodDecl *overridden);
   9848 
   9849   void CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod,
   9850                                 ObjCInterfaceDecl *CurrentClass,
   9851                                 ResultTypeCompatibilityKind RTC);
   9852 
   9853   enum PragmaOptionsAlignKind {
   9854     POAK_Native,  // #pragma options align=native
   9855     POAK_Natural, // #pragma options align=natural
   9856     POAK_Packed,  // #pragma options align=packed
   9857     POAK_Power,   // #pragma options align=power
   9858     POAK_Mac68k,  // #pragma options align=mac68k
   9859     POAK_Reset    // #pragma options align=reset
   9860   };
   9861 
   9862   /// ActOnPragmaClangSection - Called on well formed \#pragma clang section
   9863   void ActOnPragmaClangSection(SourceLocation PragmaLoc,
   9864                                PragmaClangSectionAction Action,
   9865                                PragmaClangSectionKind SecKind, StringRef SecName);
   9866 
   9867   /// ActOnPragmaOptionsAlign - Called on well formed \#pragma options align.
   9868   void ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind,
   9869                                SourceLocation PragmaLoc);
   9870 
   9871   /// ActOnPragmaPack - Called on well formed \#pragma pack(...).
   9872   void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action,
   9873                        StringRef SlotLabel, Expr *Alignment);
   9874 
   9875   enum class PragmaAlignPackDiagnoseKind {
   9876     NonDefaultStateAtInclude,
   9877     ChangedStateAtExit
   9878   };
   9879 
   9880   void DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind,
   9881                                          SourceLocation IncludeLoc);
   9882   void DiagnoseUnterminatedPragmaAlignPack();
   9883 
   9884   /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off].
   9885   void ActOnPragmaMSStruct(PragmaMSStructKind Kind);
   9886 
   9887   /// ActOnPragmaMSComment - Called on well formed
   9888   /// \#pragma comment(kind, "arg").
   9889   void ActOnPragmaMSComment(SourceLocation CommentLoc, PragmaMSCommentKind Kind,
   9890                             StringRef Arg);
   9891 
   9892   /// ActOnPragmaMSPointersToMembers - called on well formed \#pragma
   9893   /// pointers_to_members(representation method[, general purpose
   9894   /// representation]).
   9895   void ActOnPragmaMSPointersToMembers(
   9896       LangOptions::PragmaMSPointersToMembersKind Kind,
   9897       SourceLocation PragmaLoc);
   9898 
   9899   /// Called on well formed \#pragma vtordisp().
   9900   void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action,
   9901                              SourceLocation PragmaLoc,
   9902                              MSVtorDispMode Value);
   9903 
   9904   enum PragmaSectionKind {
   9905     PSK_DataSeg,
   9906     PSK_BSSSeg,
   9907     PSK_ConstSeg,
   9908     PSK_CodeSeg,
   9909   };
   9910 
   9911   bool UnifySection(StringRef SectionName, int SectionFlags,
   9912                     NamedDecl *TheDecl);
   9913   bool UnifySection(StringRef SectionName,
   9914                     int SectionFlags,
   9915                     SourceLocation PragmaSectionLocation);
   9916 
   9917   /// Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg.
   9918   void ActOnPragmaMSSeg(SourceLocation PragmaLocation,
   9919                         PragmaMsStackAction Action,
   9920                         llvm::StringRef StackSlotLabel,
   9921                         StringLiteral *SegmentName,
   9922                         llvm::StringRef PragmaName);
   9923 
   9924   /// Called on well formed \#pragma section().
   9925   void ActOnPragmaMSSection(SourceLocation PragmaLocation,
   9926                             int SectionFlags, StringLiteral *SegmentName);
   9927 
   9928   /// Called on well-formed \#pragma init_seg().
   9929   void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation,
   9930                             StringLiteral *SegmentName);
   9931 
   9932   /// Called on #pragma clang __debug dump II
   9933   void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II);
   9934 
   9935   /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch
   9936   void ActOnPragmaDetectMismatch(SourceLocation Loc, StringRef Name,
   9937                                  StringRef Value);
   9938 
   9939   /// Are precise floating point semantics currently enabled?
   9940   bool isPreciseFPEnabled() {
   9941     return !CurFPFeatures.getAllowFPReassociate() &&
   9942            !CurFPFeatures.getNoSignedZero() &&
   9943            !CurFPFeatures.getAllowReciprocal() &&
   9944            !CurFPFeatures.getAllowApproxFunc();
   9945   }
   9946 
   9947   /// ActOnPragmaFloatControl - Call on well-formed \#pragma float_control
   9948   void ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action,
   9949                                PragmaFloatControlKind Value);
   9950 
   9951   /// ActOnPragmaUnused - Called on well-formed '\#pragma unused'.
   9952   void ActOnPragmaUnused(const Token &Identifier,
   9953                          Scope *curScope,
   9954                          SourceLocation PragmaLoc);
   9955 
   9956   /// ActOnPragmaVisibility - Called on well formed \#pragma GCC visibility... .
   9957   void ActOnPragmaVisibility(const IdentifierInfo* VisType,
   9958                              SourceLocation PragmaLoc);
   9959 
   9960   NamedDecl *DeclClonePragmaWeak(NamedDecl *ND, IdentifierInfo *II,
   9961                                  SourceLocation Loc);
   9962   void DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, WeakInfo &W);
   9963 
   9964   /// ActOnPragmaWeakID - Called on well formed \#pragma weak ident.
   9965   void ActOnPragmaWeakID(IdentifierInfo* WeakName,
   9966                          SourceLocation PragmaLoc,
   9967                          SourceLocation WeakNameLoc);
   9968 
   9969   /// ActOnPragmaRedefineExtname - Called on well formed
   9970   /// \#pragma redefine_extname oldname newname.
   9971   void ActOnPragmaRedefineExtname(IdentifierInfo* WeakName,
   9972                                   IdentifierInfo* AliasName,
   9973                                   SourceLocation PragmaLoc,
   9974                                   SourceLocation WeakNameLoc,
   9975                                   SourceLocation AliasNameLoc);
   9976 
   9977   /// ActOnPragmaWeakAlias - Called on well formed \#pragma weak ident = ident.
   9978   void ActOnPragmaWeakAlias(IdentifierInfo* WeakName,
   9979                             IdentifierInfo* AliasName,
   9980                             SourceLocation PragmaLoc,
   9981                             SourceLocation WeakNameLoc,
   9982                             SourceLocation AliasNameLoc);
   9983 
   9984   /// ActOnPragmaFPContract - Called on well formed
   9985   /// \#pragma {STDC,OPENCL} FP_CONTRACT and
   9986   /// \#pragma clang fp contract
   9987   void ActOnPragmaFPContract(SourceLocation Loc, LangOptions::FPModeKind FPC);
   9988 
   9989   /// Called on well formed
   9990   /// \#pragma clang fp reassociate
   9991   void ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled);
   9992 
   9993   /// ActOnPragmaFenvAccess - Called on well formed
   9994   /// \#pragma STDC FENV_ACCESS
   9995   void ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled);
   9996 
   9997   /// Called on well formed '\#pragma clang fp' that has option 'exceptions'.
   9998   void ActOnPragmaFPExceptions(SourceLocation Loc,
   9999                                LangOptions::FPExceptionModeKind);
   10000 
   10001   /// Called to set constant rounding mode for floating point operations.
   10002   void setRoundingMode(SourceLocation Loc, llvm::RoundingMode);
   10003 
   10004   /// Called to set exception behavior for floating point operations.
   10005   void setExceptionMode(SourceLocation Loc, LangOptions::FPExceptionModeKind);
   10006 
   10007   /// AddAlignmentAttributesForRecord - Adds any needed alignment attributes to
   10008   /// a the record decl, to handle '\#pragma pack' and '\#pragma options align'.
   10009   void AddAlignmentAttributesForRecord(RecordDecl *RD);
   10010 
   10011   /// AddMsStructLayoutForRecord - Adds ms_struct layout attribute to record.
   10012   void AddMsStructLayoutForRecord(RecordDecl *RD);
   10013 
   10014   /// PushNamespaceVisibilityAttr - Note that we've entered a
   10015   /// namespace with a visibility attribute.
   10016   void PushNamespaceVisibilityAttr(const VisibilityAttr *Attr,
   10017                                    SourceLocation Loc);
   10018 
   10019   /// AddPushedVisibilityAttribute - If '\#pragma GCC visibility' was used,
   10020   /// add an appropriate visibility attribute.
   10021   void AddPushedVisibilityAttribute(Decl *RD);
   10022 
   10023   /// PopPragmaVisibility - Pop the top element of the visibility stack; used
   10024   /// for '\#pragma GCC visibility' and visibility attributes on namespaces.
   10025   void PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc);
   10026 
   10027   /// FreeVisContext - Deallocate and null out VisContext.
   10028   void FreeVisContext();
   10029 
   10030   /// AddCFAuditedAttribute - Check whether we're currently within
   10031   /// '\#pragma clang arc_cf_code_audited' and, if so, consider adding
   10032   /// the appropriate attribute.
   10033   void AddCFAuditedAttribute(Decl *D);
   10034 
   10035   void ActOnPragmaAttributeAttribute(ParsedAttr &Attribute,
   10036                                      SourceLocation PragmaLoc,
   10037                                      attr::ParsedSubjectMatchRuleSet Rules);
   10038   void ActOnPragmaAttributeEmptyPush(SourceLocation PragmaLoc,
   10039                                      const IdentifierInfo *Namespace);
   10040 
   10041   /// Called on well-formed '\#pragma clang attribute pop'.
   10042   void ActOnPragmaAttributePop(SourceLocation PragmaLoc,
   10043                                const IdentifierInfo *Namespace);
   10044 
   10045   /// Adds the attributes that have been specified using the
   10046   /// '\#pragma clang attribute push' directives to the given declaration.
   10047   void AddPragmaAttributes(Scope *S, Decl *D);
   10048 
   10049   void DiagnoseUnterminatedPragmaAttribute();
   10050 
   10051   /// Called on well formed \#pragma clang optimize.
   10052   void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc);
   10053 
   10054   /// Get the location for the currently active "\#pragma clang optimize
   10055   /// off". If this location is invalid, then the state of the pragma is "on".
   10056   SourceLocation getOptimizeOffPragmaLocation() const {
   10057     return OptimizeOffPragmaLocation;
   10058   }
   10059 
   10060   /// Only called on function definitions; if there is a pragma in scope
   10061   /// with the effect of a range-based optnone, consider marking the function
   10062   /// with attribute optnone.
   10063   void AddRangeBasedOptnone(FunctionDecl *FD);
   10064 
   10065   /// Adds the 'optnone' attribute to the function declaration if there
   10066   /// are no conflicts; Loc represents the location causing the 'optnone'
   10067   /// attribute to be added (usually because of a pragma).
   10068   void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc);
   10069 
   10070   /// AddAlignedAttr - Adds an aligned attribute to a particular declaration.
   10071   void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
   10072                       bool IsPackExpansion);
   10073   void AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *T,
   10074                       bool IsPackExpansion);
   10075 
   10076   /// AddAssumeAlignedAttr - Adds an assume_aligned attribute to a particular
   10077   /// declaration.
   10078   void AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
   10079                             Expr *OE);
   10080 
   10081   /// AddAllocAlignAttr - Adds an alloc_align attribute to a particular
   10082   /// declaration.
   10083   void AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI,
   10084                          Expr *ParamExpr);
   10085 
   10086   /// AddAlignValueAttr - Adds an align_value attribute to a particular
   10087   /// declaration.
   10088   void AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E);
   10089 
   10090   /// AddAnnotationAttr - Adds an annotation Annot with Args arguments to D.
   10091   void AddAnnotationAttr(Decl *D, const AttributeCommonInfo &CI,
   10092                          StringRef Annot, MutableArrayRef<Expr *> Args);
   10093 
   10094   /// AddLaunchBoundsAttr - Adds a launch_bounds attribute to a particular
   10095   /// declaration.
   10096   void AddLaunchBoundsAttr(Decl *D, const AttributeCommonInfo &CI,
   10097                            Expr *MaxThreads, Expr *MinBlocks);
   10098 
   10099   /// AddModeAttr - Adds a mode attribute to a particular declaration.
   10100   void AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name,
   10101                    bool InInstantiation = false);
   10102 
   10103   void AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI,
   10104                            ParameterABI ABI);
   10105 
   10106   enum class RetainOwnershipKind {NS, CF, OS};
   10107   void AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI,
   10108                         RetainOwnershipKind K, bool IsTemplateInstantiation);
   10109 
   10110   /// addAMDGPUFlatWorkGroupSizeAttr - Adds an amdgpu_flat_work_group_size
   10111   /// attribute to a particular declaration.
   10112   void addAMDGPUFlatWorkGroupSizeAttr(Decl *D, const AttributeCommonInfo &CI,
   10113                                       Expr *Min, Expr *Max);
   10114 
   10115   /// addAMDGPUWavePersEUAttr - Adds an amdgpu_waves_per_eu attribute to a
   10116   /// particular declaration.
   10117   void addAMDGPUWavesPerEUAttr(Decl *D, const AttributeCommonInfo &CI,
   10118                                Expr *Min, Expr *Max);
   10119 
   10120   bool checkNSReturnsRetainedReturnType(SourceLocation loc, QualType type);
   10121 
   10122   //===--------------------------------------------------------------------===//
   10123   // C++ Coroutines TS
   10124   //
   10125   bool ActOnCoroutineBodyStart(Scope *S, SourceLocation KwLoc,
   10126                                StringRef Keyword);
   10127   ExprResult ActOnCoawaitExpr(Scope *S, SourceLocation KwLoc, Expr *E);
   10128   ExprResult ActOnCoyieldExpr(Scope *S, SourceLocation KwLoc, Expr *E);
   10129   StmtResult ActOnCoreturnStmt(Scope *S, SourceLocation KwLoc, Expr *E);
   10130 
   10131   ExprResult BuildResolvedCoawaitExpr(SourceLocation KwLoc, Expr *E,
   10132                                       bool IsImplicit = false);
   10133   ExprResult BuildUnresolvedCoawaitExpr(SourceLocation KwLoc, Expr *E,
   10134                                         UnresolvedLookupExpr* Lookup);
   10135   ExprResult BuildCoyieldExpr(SourceLocation KwLoc, Expr *E);
   10136   StmtResult BuildCoreturnStmt(SourceLocation KwLoc, Expr *E,
   10137                                bool IsImplicit = false);
   10138   StmtResult BuildCoroutineBodyStmt(CoroutineBodyStmt::CtorArgs);
   10139   bool buildCoroutineParameterMoves(SourceLocation Loc);
   10140   VarDecl *buildCoroutinePromise(SourceLocation Loc);
   10141   void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body);
   10142   ClassTemplateDecl *lookupCoroutineTraits(SourceLocation KwLoc,
   10143                                            SourceLocation FuncLoc);
   10144   /// Check that the expression co_await promise.final_suspend() shall not be
   10145   /// potentially-throwing.
   10146   bool checkFinalSuspendNoThrow(const Stmt *FinalSuspend);
   10147 
   10148   //===--------------------------------------------------------------------===//
   10149   // OpenMP directives and clauses.
   10150   //
   10151 private:
   10152   void *VarDataSharingAttributesStack;
   10153 
   10154   struct DeclareTargetContextInfo {
   10155     struct MapInfo {
   10156       OMPDeclareTargetDeclAttr::MapTypeTy MT;
   10157       SourceLocation Loc;
   10158     };
   10159     /// Explicitly listed variables and functions in a 'to' or 'link' clause.
   10160     llvm::DenseMap<NamedDecl *, MapInfo> ExplicitlyMapped;
   10161 
   10162     /// The 'device_type' as parsed from the clause.
   10163     OMPDeclareTargetDeclAttr::DevTypeTy DT = OMPDeclareTargetDeclAttr::DT_Any;
   10164 
   10165     /// The directive kind, `begin declare target` or `declare target`.
   10166     OpenMPDirectiveKind Kind;
   10167 
   10168     /// The directive location.
   10169     SourceLocation Loc;
   10170 
   10171     DeclareTargetContextInfo(OpenMPDirectiveKind Kind, SourceLocation Loc)
   10172         : Kind(Kind), Loc(Loc) {}
   10173   };
   10174 
   10175   /// Number of nested '#pragma omp declare target' directives.
   10176   SmallVector<DeclareTargetContextInfo, 4> DeclareTargetNesting;
   10177 
   10178   /// Initialization of data-sharing attributes stack.
   10179   void InitDataSharingAttributesStack();
   10180   void DestroyDataSharingAttributesStack();
   10181   ExprResult
   10182   VerifyPositiveIntegerConstantInClause(Expr *Op, OpenMPClauseKind CKind,
   10183                                         bool StrictlyPositive = true);
   10184   /// Returns OpenMP nesting level for current directive.
   10185   unsigned getOpenMPNestingLevel() const;
   10186 
   10187   /// Adjusts the function scopes index for the target-based regions.
   10188   void adjustOpenMPTargetScopeIndex(unsigned &FunctionScopesIndex,
   10189                                     unsigned Level) const;
   10190 
   10191   /// Returns the number of scopes associated with the construct on the given
   10192   /// OpenMP level.
   10193   int getNumberOfConstructScopes(unsigned Level) const;
   10194 
   10195   /// Push new OpenMP function region for non-capturing function.
   10196   void pushOpenMPFunctionRegion();
   10197 
   10198   /// Pop OpenMP function region for non-capturing function.
   10199   void popOpenMPFunctionRegion(const sema::FunctionScopeInfo *OldFSI);
   10200 
   10201   /// Helper to keep information about the current `omp begin/end declare
   10202   /// variant` nesting.
   10203   struct OMPDeclareVariantScope {
   10204     /// The associated OpenMP context selector.
   10205     OMPTraitInfo *TI;
   10206 
   10207     /// The associated OpenMP context selector mangling.
   10208     std::string NameSuffix;
   10209 
   10210     OMPDeclareVariantScope(OMPTraitInfo &TI);
   10211   };
   10212 
   10213   /// Return the OMPTraitInfo for the surrounding scope, if any.
   10214   OMPTraitInfo *getOMPTraitInfoForSurroundingScope() {
   10215     return OMPDeclareVariantScopes.empty() ? nullptr
   10216                                            : OMPDeclareVariantScopes.back().TI;
   10217   }
   10218 
   10219   /// The current `omp begin/end declare variant` scopes.
   10220   SmallVector<OMPDeclareVariantScope, 4> OMPDeclareVariantScopes;
   10221 
   10222   /// The current `omp begin/end assumes` scopes.
   10223   SmallVector<AssumptionAttr *, 4> OMPAssumeScoped;
   10224 
   10225   /// All `omp assumes` we encountered so far.
   10226   SmallVector<AssumptionAttr *, 4> OMPAssumeGlobal;
   10227 
   10228 public:
   10229   /// The declarator \p D defines a function in the scope \p S which is nested
   10230   /// in an `omp begin/end declare variant` scope. In this method we create a
   10231   /// declaration for \p D and rename \p D according to the OpenMP context
   10232   /// selector of the surrounding scope. Return all base functions in \p Bases.
   10233   void ActOnStartOfFunctionDefinitionInOpenMPDeclareVariantScope(
   10234       Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParameterLists,
   10235       SmallVectorImpl<FunctionDecl *> &Bases);
   10236 
   10237   /// Register \p D as specialization of all base functions in \p Bases in the
   10238   /// current `omp begin/end declare variant` scope.
   10239   void ActOnFinishedFunctionDefinitionInOpenMPDeclareVariantScope(
   10240       Decl *D, SmallVectorImpl<FunctionDecl *> &Bases);
   10241 
   10242   /// Act on \p D, a function definition inside of an `omp [begin/end] assumes`.
   10243   void ActOnFinishedFunctionDefinitionInOpenMPAssumeScope(Decl *D);
   10244 
   10245   /// Can we exit an OpenMP declare variant scope at the moment.
   10246   bool isInOpenMPDeclareVariantScope() const {
   10247     return !OMPDeclareVariantScopes.empty();
   10248   }
   10249 
   10250   /// Given the potential call expression \p Call, determine if there is a
   10251   /// specialization via the OpenMP declare variant mechanism available. If
   10252   /// there is, return the specialized call expression, otherwise return the
   10253   /// original \p Call.
   10254   ExprResult ActOnOpenMPCall(ExprResult Call, Scope *Scope,
   10255                              SourceLocation LParenLoc, MultiExprArg ArgExprs,
   10256                              SourceLocation RParenLoc, Expr *ExecConfig);
   10257 
   10258   /// Handle a `omp begin declare variant`.
   10259   void ActOnOpenMPBeginDeclareVariant(SourceLocation Loc, OMPTraitInfo &TI);
   10260 
   10261   /// Handle a `omp end declare variant`.
   10262   void ActOnOpenMPEndDeclareVariant();
   10263 
   10264   /// Checks if the variant/multiversion functions are compatible.
   10265   bool areMultiversionVariantFunctionsCompatible(
   10266       const FunctionDecl *OldFD, const FunctionDecl *NewFD,
   10267       const PartialDiagnostic &NoProtoDiagID,
   10268       const PartialDiagnosticAt &NoteCausedDiagIDAt,
   10269       const PartialDiagnosticAt &NoSupportDiagIDAt,
   10270       const PartialDiagnosticAt &DiffDiagIDAt, bool TemplatesSupported,
   10271       bool ConstexprSupported, bool CLinkageMayDiffer);
   10272 
   10273   /// Function tries to capture lambda's captured variables in the OpenMP region
   10274   /// before the original lambda is captured.
   10275   void tryCaptureOpenMPLambdas(ValueDecl *V);
   10276 
   10277   /// Return true if the provided declaration \a VD should be captured by
   10278   /// reference.
   10279   /// \param Level Relative level of nested OpenMP construct for that the check
   10280   /// is performed.
   10281   /// \param OpenMPCaptureLevel Capture level within an OpenMP construct.
   10282   bool isOpenMPCapturedByRef(const ValueDecl *D, unsigned Level,
   10283                              unsigned OpenMPCaptureLevel) const;
   10284 
   10285   /// Check if the specified variable is used in one of the private
   10286   /// clauses (private, firstprivate, lastprivate, reduction etc.) in OpenMP
   10287   /// constructs.
   10288   VarDecl *isOpenMPCapturedDecl(ValueDecl *D, bool CheckScopeInfo = false,
   10289                                 unsigned StopAt = 0);
   10290   ExprResult getOpenMPCapturedExpr(VarDecl *Capture, ExprValueKind VK,
   10291                                    ExprObjectKind OK, SourceLocation Loc);
   10292 
   10293   /// If the current region is a loop-based region, mark the start of the loop
   10294   /// construct.
   10295   void startOpenMPLoop();
   10296 
   10297   /// If the current region is a range loop-based region, mark the start of the
   10298   /// loop construct.
   10299   void startOpenMPCXXRangeFor();
   10300 
   10301   /// Check if the specified variable is used in 'private' clause.
   10302   /// \param Level Relative level of nested OpenMP construct for that the check
   10303   /// is performed.
   10304   OpenMPClauseKind isOpenMPPrivateDecl(ValueDecl *D, unsigned Level,
   10305                                        unsigned CapLevel) const;
   10306 
   10307   /// Sets OpenMP capture kind (OMPC_private, OMPC_firstprivate, OMPC_map etc.)
   10308   /// for \p FD based on DSA for the provided corresponding captured declaration
   10309   /// \p D.
   10310   void setOpenMPCaptureKind(FieldDecl *FD, const ValueDecl *D, unsigned Level);
   10311 
   10312   /// Check if the specified variable is captured  by 'target' directive.
   10313   /// \param Level Relative level of nested OpenMP construct for that the check
   10314   /// is performed.
   10315   bool isOpenMPTargetCapturedDecl(const ValueDecl *D, unsigned Level,
   10316                                   unsigned CaptureLevel) const;
   10317 
   10318   /// Check if the specified global variable must be captured  by outer capture
   10319   /// regions.
   10320   /// \param Level Relative level of nested OpenMP construct for that
   10321   /// the check is performed.
   10322   bool isOpenMPGlobalCapturedDecl(ValueDecl *D, unsigned Level,
   10323                                   unsigned CaptureLevel) const;
   10324 
   10325   ExprResult PerformOpenMPImplicitIntegerConversion(SourceLocation OpLoc,
   10326                                                     Expr *Op);
   10327   /// Called on start of new data sharing attribute block.
   10328   void StartOpenMPDSABlock(OpenMPDirectiveKind K,
   10329                            const DeclarationNameInfo &DirName, Scope *CurScope,
   10330                            SourceLocation Loc);
   10331   /// Start analysis of clauses.
   10332   void StartOpenMPClause(OpenMPClauseKind K);
   10333   /// End analysis of clauses.
   10334   void EndOpenMPClause();
   10335   /// Called on end of data sharing attribute block.
   10336   void EndOpenMPDSABlock(Stmt *CurDirective);
   10337 
   10338   /// Check if the current region is an OpenMP loop region and if it is,
   10339   /// mark loop control variable, used in \p Init for loop initialization, as
   10340   /// private by default.
   10341   /// \param Init First part of the for loop.
   10342   void ActOnOpenMPLoopInitialization(SourceLocation ForLoc, Stmt *Init);
   10343 
   10344   // OpenMP directives and clauses.
   10345   /// Called on correct id-expression from the '#pragma omp
   10346   /// threadprivate'.
   10347   ExprResult ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec,
   10348                                      const DeclarationNameInfo &Id,
   10349                                      OpenMPDirectiveKind Kind);
   10350   /// Called on well-formed '#pragma omp threadprivate'.
   10351   DeclGroupPtrTy ActOnOpenMPThreadprivateDirective(
   10352                                      SourceLocation Loc,
   10353                                      ArrayRef<Expr *> VarList);
   10354   /// Builds a new OpenMPThreadPrivateDecl and checks its correctness.
   10355   OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(SourceLocation Loc,
   10356                                                   ArrayRef<Expr *> VarList);
   10357   /// Called on well-formed '#pragma omp allocate'.
   10358   DeclGroupPtrTy ActOnOpenMPAllocateDirective(SourceLocation Loc,
   10359                                               ArrayRef<Expr *> VarList,
   10360                                               ArrayRef<OMPClause *> Clauses,
   10361                                               DeclContext *Owner = nullptr);
   10362 
   10363   /// Called on well-formed '#pragma omp [begin] assume[s]'.
   10364   void ActOnOpenMPAssumesDirective(SourceLocation Loc,
   10365                                    OpenMPDirectiveKind DKind,
   10366                                    ArrayRef<StringRef> Assumptions,
   10367                                    bool SkippedClauses);
   10368 
   10369   /// Check if there is an active global `omp begin assumes` directive.
   10370   bool isInOpenMPAssumeScope() const { return !OMPAssumeScoped.empty(); }
   10371 
   10372   /// Check if there is an active global `omp assumes` directive.
   10373   bool hasGlobalOpenMPAssumes() const { return !OMPAssumeGlobal.empty(); }
   10374 
   10375   /// Called on well-formed '#pragma omp end assumes'.
   10376   void ActOnOpenMPEndAssumesDirective();
   10377 
   10378   /// Called on well-formed '#pragma omp requires'.
   10379   DeclGroupPtrTy ActOnOpenMPRequiresDirective(SourceLocation Loc,
   10380                                               ArrayRef<OMPClause *> ClauseList);
   10381   /// Check restrictions on Requires directive
   10382   OMPRequiresDecl *CheckOMPRequiresDecl(SourceLocation Loc,
   10383                                         ArrayRef<OMPClause *> Clauses);
   10384   /// Check if the specified type is allowed to be used in 'omp declare
   10385   /// reduction' construct.
   10386   QualType ActOnOpenMPDeclareReductionType(SourceLocation TyLoc,
   10387                                            TypeResult ParsedType);
   10388   /// Called on start of '#pragma omp declare reduction'.
   10389   DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveStart(
   10390       Scope *S, DeclContext *DC, DeclarationName Name,
   10391       ArrayRef<std::pair<QualType, SourceLocation>> ReductionTypes,
   10392       AccessSpecifier AS, Decl *PrevDeclInScope = nullptr);
   10393   /// Initialize declare reduction construct initializer.
   10394   void ActOnOpenMPDeclareReductionCombinerStart(Scope *S, Decl *D);
   10395   /// Finish current declare reduction construct initializer.
   10396   void ActOnOpenMPDeclareReductionCombinerEnd(Decl *D, Expr *Combiner);
   10397   /// Initialize declare reduction construct initializer.
   10398   /// \return omp_priv variable.
   10399   VarDecl *ActOnOpenMPDeclareReductionInitializerStart(Scope *S, Decl *D);
   10400   /// Finish current declare reduction construct initializer.
   10401   void ActOnOpenMPDeclareReductionInitializerEnd(Decl *D, Expr *Initializer,
   10402                                                  VarDecl *OmpPrivParm);
   10403   /// Called at the end of '#pragma omp declare reduction'.
   10404   DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveEnd(
   10405       Scope *S, DeclGroupPtrTy DeclReductions, bool IsValid);
   10406 
   10407   /// Check variable declaration in 'omp declare mapper' construct.
   10408   TypeResult ActOnOpenMPDeclareMapperVarDecl(Scope *S, Declarator &D);
   10409   /// Check if the specified type is allowed to be used in 'omp declare
   10410   /// mapper' construct.
   10411   QualType ActOnOpenMPDeclareMapperType(SourceLocation TyLoc,
   10412                                         TypeResult ParsedType);
   10413   /// Called on start of '#pragma omp declare mapper'.
   10414   DeclGroupPtrTy ActOnOpenMPDeclareMapperDirective(
   10415       Scope *S, DeclContext *DC, DeclarationName Name, QualType MapperType,
   10416       SourceLocation StartLoc, DeclarationName VN, AccessSpecifier AS,
   10417       Expr *MapperVarRef, ArrayRef<OMPClause *> Clauses,
   10418       Decl *PrevDeclInScope = nullptr);
   10419   /// Build the mapper variable of '#pragma omp declare mapper'.
   10420   ExprResult ActOnOpenMPDeclareMapperDirectiveVarDecl(Scope *S,
   10421                                                       QualType MapperType,
   10422                                                       SourceLocation StartLoc,
   10423                                                       DeclarationName VN);
   10424   bool isOpenMPDeclareMapperVarDeclAllowed(const VarDecl *VD) const;
   10425   const ValueDecl *getOpenMPDeclareMapperVarName() const;
   10426 
   10427   /// Called on the start of target region i.e. '#pragma omp declare target'.
   10428   bool ActOnStartOpenMPDeclareTargetContext(DeclareTargetContextInfo &DTCI);
   10429 
   10430   /// Called at the end of target region i.e. '#pragma omp end declare target'.
   10431   const DeclareTargetContextInfo ActOnOpenMPEndDeclareTargetDirective();
   10432 
   10433   /// Called once a target context is completed, that can be when a
   10434   /// '#pragma omp end declare target' was encountered or when a
   10435   /// '#pragma omp declare target' without declaration-definition-seq was
   10436   /// encountered.
   10437   void ActOnFinishedOpenMPDeclareTargetContext(DeclareTargetContextInfo &DTCI);
   10438 
   10439   /// Searches for the provided declaration name for OpenMP declare target
   10440   /// directive.
   10441   NamedDecl *lookupOpenMPDeclareTargetName(Scope *CurScope,
   10442                                            CXXScopeSpec &ScopeSpec,
   10443                                            const DeclarationNameInfo &Id);
   10444 
   10445   /// Called on correct id-expression from the '#pragma omp declare target'.
   10446   void ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc,
   10447                                     OMPDeclareTargetDeclAttr::MapTypeTy MT,
   10448                                     OMPDeclareTargetDeclAttr::DevTypeTy DT);
   10449 
   10450   /// Check declaration inside target region.
   10451   void
   10452   checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D,
   10453                                    SourceLocation IdLoc = SourceLocation());
   10454   /// Finishes analysis of the deferred functions calls that may be declared as
   10455   /// host/nohost during device/host compilation.
   10456   void finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller,
   10457                                      const FunctionDecl *Callee,
   10458                                      SourceLocation Loc);
   10459   /// Return true inside OpenMP declare target region.
   10460   bool isInOpenMPDeclareTargetContext() const {
   10461     return !DeclareTargetNesting.empty();
   10462   }
   10463   /// Return true inside OpenMP target region.
   10464   bool isInOpenMPTargetExecutionDirective() const;
   10465 
   10466   /// Return the number of captured regions created for an OpenMP directive.
   10467   static int getOpenMPCaptureLevels(OpenMPDirectiveKind Kind);
   10468 
   10469   /// Initialization of captured region for OpenMP region.
   10470   void ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, Scope *CurScope);
   10471 
   10472   /// Called for syntactical loops (ForStmt or CXXForRangeStmt) associated to
   10473   /// an OpenMP loop directive.
   10474   StmtResult ActOnOpenMPCanonicalLoop(Stmt *AStmt);
   10475 
   10476   /// End of OpenMP region.
   10477   ///
   10478   /// \param S Statement associated with the current OpenMP region.
   10479   /// \param Clauses List of clauses for the current OpenMP region.
   10480   ///
   10481   /// \returns Statement for finished OpenMP region.
   10482   StmtResult ActOnOpenMPRegionEnd(StmtResult S, ArrayRef<OMPClause *> Clauses);
   10483   StmtResult ActOnOpenMPExecutableDirective(
   10484       OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName,
   10485       OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses,
   10486       Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc);
   10487   /// Called on well-formed '\#pragma omp parallel' after parsing
   10488   /// of the  associated statement.
   10489   StmtResult ActOnOpenMPParallelDirective(ArrayRef<OMPClause *> Clauses,
   10490                                           Stmt *AStmt,
   10491                                           SourceLocation StartLoc,
   10492                                           SourceLocation EndLoc);
   10493   using VarsWithInheritedDSAType =
   10494       llvm::SmallDenseMap<const ValueDecl *, const Expr *, 4>;
   10495   /// Called on well-formed '\#pragma omp simd' after parsing
   10496   /// of the associated statement.
   10497   StmtResult
   10498   ActOnOpenMPSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
   10499                            SourceLocation StartLoc, SourceLocation EndLoc,
   10500                            VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10501   /// Called on well-formed '#pragma omp tile' after parsing of its clauses and
   10502   /// the associated statement.
   10503   StmtResult ActOnOpenMPTileDirective(ArrayRef<OMPClause *> Clauses,
   10504                                       Stmt *AStmt, SourceLocation StartLoc,
   10505                                       SourceLocation EndLoc);
   10506   /// Called on well-formed '\#pragma omp for' after parsing
   10507   /// of the associated statement.
   10508   StmtResult
   10509   ActOnOpenMPForDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
   10510                           SourceLocation StartLoc, SourceLocation EndLoc,
   10511                           VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10512   /// Called on well-formed '\#pragma omp for simd' after parsing
   10513   /// of the associated statement.
   10514   StmtResult
   10515   ActOnOpenMPForSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
   10516                               SourceLocation StartLoc, SourceLocation EndLoc,
   10517                               VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10518   /// Called on well-formed '\#pragma omp sections' after parsing
   10519   /// of the associated statement.
   10520   StmtResult ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses,
   10521                                           Stmt *AStmt, SourceLocation StartLoc,
   10522                                           SourceLocation EndLoc);
   10523   /// Called on well-formed '\#pragma omp section' after parsing of the
   10524   /// associated statement.
   10525   StmtResult ActOnOpenMPSectionDirective(Stmt *AStmt, SourceLocation StartLoc,
   10526                                          SourceLocation EndLoc);
   10527   /// Called on well-formed '\#pragma omp single' after parsing of the
   10528   /// associated statement.
   10529   StmtResult ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses,
   10530                                         Stmt *AStmt, SourceLocation StartLoc,
   10531                                         SourceLocation EndLoc);
   10532   /// Called on well-formed '\#pragma omp master' after parsing of the
   10533   /// associated statement.
   10534   StmtResult ActOnOpenMPMasterDirective(Stmt *AStmt, SourceLocation StartLoc,
   10535                                         SourceLocation EndLoc);
   10536   /// Called on well-formed '\#pragma omp critical' after parsing of the
   10537   /// associated statement.
   10538   StmtResult ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName,
   10539                                           ArrayRef<OMPClause *> Clauses,
   10540                                           Stmt *AStmt, SourceLocation StartLoc,
   10541                                           SourceLocation EndLoc);
   10542   /// Called on well-formed '\#pragma omp parallel for' after parsing
   10543   /// of the  associated statement.
   10544   StmtResult ActOnOpenMPParallelForDirective(
   10545       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10546       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10547   /// Called on well-formed '\#pragma omp parallel for simd' after
   10548   /// parsing of the  associated statement.
   10549   StmtResult ActOnOpenMPParallelForSimdDirective(
   10550       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10551       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10552   /// Called on well-formed '\#pragma omp parallel master' after
   10553   /// parsing of the  associated statement.
   10554   StmtResult ActOnOpenMPParallelMasterDirective(ArrayRef<OMPClause *> Clauses,
   10555                                                 Stmt *AStmt,
   10556                                                 SourceLocation StartLoc,
   10557                                                 SourceLocation EndLoc);
   10558   /// Called on well-formed '\#pragma omp parallel sections' after
   10559   /// parsing of the  associated statement.
   10560   StmtResult ActOnOpenMPParallelSectionsDirective(ArrayRef<OMPClause *> Clauses,
   10561                                                   Stmt *AStmt,
   10562                                                   SourceLocation StartLoc,
   10563                                                   SourceLocation EndLoc);
   10564   /// Called on well-formed '\#pragma omp task' after parsing of the
   10565   /// associated statement.
   10566   StmtResult ActOnOpenMPTaskDirective(ArrayRef<OMPClause *> Clauses,
   10567                                       Stmt *AStmt, SourceLocation StartLoc,
   10568                                       SourceLocation EndLoc);
   10569   /// Called on well-formed '\#pragma omp taskyield'.
   10570   StmtResult ActOnOpenMPTaskyieldDirective(SourceLocation StartLoc,
   10571                                            SourceLocation EndLoc);
   10572   /// Called on well-formed '\#pragma omp barrier'.
   10573   StmtResult ActOnOpenMPBarrierDirective(SourceLocation StartLoc,
   10574                                          SourceLocation EndLoc);
   10575   /// Called on well-formed '\#pragma omp taskwait'.
   10576   StmtResult ActOnOpenMPTaskwaitDirective(SourceLocation StartLoc,
   10577                                           SourceLocation EndLoc);
   10578   /// Called on well-formed '\#pragma omp taskgroup'.
   10579   StmtResult ActOnOpenMPTaskgroupDirective(ArrayRef<OMPClause *> Clauses,
   10580                                            Stmt *AStmt, SourceLocation StartLoc,
   10581                                            SourceLocation EndLoc);
   10582   /// Called on well-formed '\#pragma omp flush'.
   10583   StmtResult ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses,
   10584                                        SourceLocation StartLoc,
   10585                                        SourceLocation EndLoc);
   10586   /// Called on well-formed '\#pragma omp depobj'.
   10587   StmtResult ActOnOpenMPDepobjDirective(ArrayRef<OMPClause *> Clauses,
   10588                                         SourceLocation StartLoc,
   10589                                         SourceLocation EndLoc);
   10590   /// Called on well-formed '\#pragma omp scan'.
   10591   StmtResult ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses,
   10592                                       SourceLocation StartLoc,
   10593                                       SourceLocation EndLoc);
   10594   /// Called on well-formed '\#pragma omp ordered' after parsing of the
   10595   /// associated statement.
   10596   StmtResult ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses,
   10597                                          Stmt *AStmt, SourceLocation StartLoc,
   10598                                          SourceLocation EndLoc);
   10599   /// Called on well-formed '\#pragma omp atomic' after parsing of the
   10600   /// associated statement.
   10601   StmtResult ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
   10602                                         Stmt *AStmt, SourceLocation StartLoc,
   10603                                         SourceLocation EndLoc);
   10604   /// Called on well-formed '\#pragma omp target' after parsing of the
   10605   /// associated statement.
   10606   StmtResult ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses,
   10607                                         Stmt *AStmt, SourceLocation StartLoc,
   10608                                         SourceLocation EndLoc);
   10609   /// Called on well-formed '\#pragma omp target data' after parsing of
   10610   /// the associated statement.
   10611   StmtResult ActOnOpenMPTargetDataDirective(ArrayRef<OMPClause *> Clauses,
   10612                                             Stmt *AStmt, SourceLocation StartLoc,
   10613                                             SourceLocation EndLoc);
   10614   /// Called on well-formed '\#pragma omp target enter data' after
   10615   /// parsing of the associated statement.
   10616   StmtResult ActOnOpenMPTargetEnterDataDirective(ArrayRef<OMPClause *> Clauses,
   10617                                                  SourceLocation StartLoc,
   10618                                                  SourceLocation EndLoc,
   10619                                                  Stmt *AStmt);
   10620   /// Called on well-formed '\#pragma omp target exit data' after
   10621   /// parsing of the associated statement.
   10622   StmtResult ActOnOpenMPTargetExitDataDirective(ArrayRef<OMPClause *> Clauses,
   10623                                                 SourceLocation StartLoc,
   10624                                                 SourceLocation EndLoc,
   10625                                                 Stmt *AStmt);
   10626   /// Called on well-formed '\#pragma omp target parallel' after
   10627   /// parsing of the associated statement.
   10628   StmtResult ActOnOpenMPTargetParallelDirective(ArrayRef<OMPClause *> Clauses,
   10629                                                 Stmt *AStmt,
   10630                                                 SourceLocation StartLoc,
   10631                                                 SourceLocation EndLoc);
   10632   /// Called on well-formed '\#pragma omp target parallel for' after
   10633   /// parsing of the  associated statement.
   10634   StmtResult ActOnOpenMPTargetParallelForDirective(
   10635       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10636       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10637   /// Called on well-formed '\#pragma omp teams' after parsing of the
   10638   /// associated statement.
   10639   StmtResult ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses,
   10640                                        Stmt *AStmt, SourceLocation StartLoc,
   10641                                        SourceLocation EndLoc);
   10642   /// Called on well-formed '\#pragma omp cancellation point'.
   10643   StmtResult
   10644   ActOnOpenMPCancellationPointDirective(SourceLocation StartLoc,
   10645                                         SourceLocation EndLoc,
   10646                                         OpenMPDirectiveKind CancelRegion);
   10647   /// Called on well-formed '\#pragma omp cancel'.
   10648   StmtResult ActOnOpenMPCancelDirective(ArrayRef<OMPClause *> Clauses,
   10649                                         SourceLocation StartLoc,
   10650                                         SourceLocation EndLoc,
   10651                                         OpenMPDirectiveKind CancelRegion);
   10652   /// Called on well-formed '\#pragma omp taskloop' after parsing of the
   10653   /// associated statement.
   10654   StmtResult
   10655   ActOnOpenMPTaskLoopDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
   10656                                SourceLocation StartLoc, SourceLocation EndLoc,
   10657                                VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10658   /// Called on well-formed '\#pragma omp taskloop simd' after parsing of
   10659   /// the associated statement.
   10660   StmtResult ActOnOpenMPTaskLoopSimdDirective(
   10661       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10662       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10663   /// Called on well-formed '\#pragma omp master taskloop' after parsing of the
   10664   /// associated statement.
   10665   StmtResult ActOnOpenMPMasterTaskLoopDirective(
   10666       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10667       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10668   /// Called on well-formed '\#pragma omp master taskloop simd' after parsing of
   10669   /// the associated statement.
   10670   StmtResult ActOnOpenMPMasterTaskLoopSimdDirective(
   10671       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10672       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10673   /// Called on well-formed '\#pragma omp parallel master taskloop' after
   10674   /// parsing of the associated statement.
   10675   StmtResult ActOnOpenMPParallelMasterTaskLoopDirective(
   10676       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10677       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10678   /// Called on well-formed '\#pragma omp parallel master taskloop simd' after
   10679   /// parsing of the associated statement.
   10680   StmtResult ActOnOpenMPParallelMasterTaskLoopSimdDirective(
   10681       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10682       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10683   /// Called on well-formed '\#pragma omp distribute' after parsing
   10684   /// of the associated statement.
   10685   StmtResult
   10686   ActOnOpenMPDistributeDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
   10687                                  SourceLocation StartLoc, SourceLocation EndLoc,
   10688                                  VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10689   /// Called on well-formed '\#pragma omp target update'.
   10690   StmtResult ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses,
   10691                                               SourceLocation StartLoc,
   10692                                               SourceLocation EndLoc,
   10693                                               Stmt *AStmt);
   10694   /// Called on well-formed '\#pragma omp distribute parallel for' after
   10695   /// parsing of the associated statement.
   10696   StmtResult ActOnOpenMPDistributeParallelForDirective(
   10697       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10698       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10699   /// Called on well-formed '\#pragma omp distribute parallel for simd'
   10700   /// after parsing of the associated statement.
   10701   StmtResult ActOnOpenMPDistributeParallelForSimdDirective(
   10702       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10703       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10704   /// Called on well-formed '\#pragma omp distribute simd' after
   10705   /// parsing of the associated statement.
   10706   StmtResult ActOnOpenMPDistributeSimdDirective(
   10707       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10708       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10709   /// Called on well-formed '\#pragma omp target parallel for simd' after
   10710   /// parsing of the associated statement.
   10711   StmtResult ActOnOpenMPTargetParallelForSimdDirective(
   10712       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10713       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10714   /// Called on well-formed '\#pragma omp target simd' after parsing of
   10715   /// the associated statement.
   10716   StmtResult
   10717   ActOnOpenMPTargetSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
   10718                                  SourceLocation StartLoc, SourceLocation EndLoc,
   10719                                  VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10720   /// Called on well-formed '\#pragma omp teams distribute' after parsing of
   10721   /// the associated statement.
   10722   StmtResult ActOnOpenMPTeamsDistributeDirective(
   10723       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10724       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10725   /// Called on well-formed '\#pragma omp teams distribute simd' after parsing
   10726   /// of the associated statement.
   10727   StmtResult ActOnOpenMPTeamsDistributeSimdDirective(
   10728       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10729       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10730   /// Called on well-formed '\#pragma omp teams distribute parallel for simd'
   10731   /// after parsing of the associated statement.
   10732   StmtResult ActOnOpenMPTeamsDistributeParallelForSimdDirective(
   10733       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10734       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10735   /// Called on well-formed '\#pragma omp teams distribute parallel for'
   10736   /// after parsing of the associated statement.
   10737   StmtResult ActOnOpenMPTeamsDistributeParallelForDirective(
   10738       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10739       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10740   /// Called on well-formed '\#pragma omp target teams' after parsing of the
   10741   /// associated statement.
   10742   StmtResult ActOnOpenMPTargetTeamsDirective(ArrayRef<OMPClause *> Clauses,
   10743                                              Stmt *AStmt,
   10744                                              SourceLocation StartLoc,
   10745                                              SourceLocation EndLoc);
   10746   /// Called on well-formed '\#pragma omp target teams distribute' after parsing
   10747   /// of the associated statement.
   10748   StmtResult ActOnOpenMPTargetTeamsDistributeDirective(
   10749       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10750       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10751   /// Called on well-formed '\#pragma omp target teams distribute parallel for'
   10752   /// after parsing of the associated statement.
   10753   StmtResult ActOnOpenMPTargetTeamsDistributeParallelForDirective(
   10754       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10755       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10756   /// Called on well-formed '\#pragma omp target teams distribute parallel for
   10757   /// simd' after parsing of the associated statement.
   10758   StmtResult ActOnOpenMPTargetTeamsDistributeParallelForSimdDirective(
   10759       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10760       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10761   /// Called on well-formed '\#pragma omp target teams distribute simd' after
   10762   /// parsing of the associated statement.
   10763   StmtResult ActOnOpenMPTargetTeamsDistributeSimdDirective(
   10764       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
   10765       SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   10766   /// Called on well-formed '\#pragma omp interop'.
   10767   StmtResult ActOnOpenMPInteropDirective(ArrayRef<OMPClause *> Clauses,
   10768                                          SourceLocation StartLoc,
   10769                                          SourceLocation EndLoc);
   10770   /// Called on well-formed '\#pragma omp dispatch' after parsing of the
   10771   // /associated statement.
   10772   StmtResult ActOnOpenMPDispatchDirective(ArrayRef<OMPClause *> Clauses,
   10773                                           Stmt *AStmt, SourceLocation StartLoc,
   10774                                           SourceLocation EndLoc);
   10775   /// Called on well-formed '\#pragma omp masked' after parsing of the
   10776   // /associated statement.
   10777   StmtResult ActOnOpenMPMaskedDirective(ArrayRef<OMPClause *> Clauses,
   10778                                         Stmt *AStmt, SourceLocation StartLoc,
   10779                                         SourceLocation EndLoc);
   10780 
   10781   /// Checks correctness of linear modifiers.
   10782   bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind,
   10783                                  SourceLocation LinLoc);
   10784   /// Checks that the specified declaration matches requirements for the linear
   10785   /// decls.
   10786   bool CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc,
   10787                              OpenMPLinearClauseKind LinKind, QualType Type,
   10788                              bool IsDeclareSimd = false);
   10789 
   10790   /// Called on well-formed '\#pragma omp declare simd' after parsing of
   10791   /// the associated method/function.
   10792   DeclGroupPtrTy ActOnOpenMPDeclareSimdDirective(
   10793       DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS,
   10794       Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds,
   10795       ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears,
   10796       ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR);
   10797 
   10798   /// Checks '\#pragma omp declare variant' variant function and original
   10799   /// functions after parsing of the associated method/function.
   10800   /// \param DG Function declaration to which declare variant directive is
   10801   /// applied to.
   10802   /// \param VariantRef Expression that references the variant function, which
   10803   /// must be used instead of the original one, specified in \p DG.
   10804   /// \param TI The trait info object representing the match clause.
   10805   /// \returns None, if the function/variant function are not compatible with
   10806   /// the pragma, pair of original function/variant ref expression otherwise.
   10807   Optional<std::pair<FunctionDecl *, Expr *>>
   10808   checkOpenMPDeclareVariantFunction(DeclGroupPtrTy DG, Expr *VariantRef,
   10809                                     OMPTraitInfo &TI, SourceRange SR);
   10810 
   10811   /// Called on well-formed '\#pragma omp declare variant' after parsing of
   10812   /// the associated method/function.
   10813   /// \param FD Function declaration to which declare variant directive is
   10814   /// applied to.
   10815   /// \param VariantRef Expression that references the variant function, which
   10816   /// must be used instead of the original one, specified in \p DG.
   10817   /// \param TI The context traits associated with the function variant.
   10818   void ActOnOpenMPDeclareVariantDirective(FunctionDecl *FD, Expr *VariantRef,
   10819                                           OMPTraitInfo &TI, SourceRange SR);
   10820 
   10821   OMPClause *ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind,
   10822                                          Expr *Expr,
   10823                                          SourceLocation StartLoc,
   10824                                          SourceLocation LParenLoc,
   10825                                          SourceLocation EndLoc);
   10826   /// Called on well-formed 'allocator' clause.
   10827   OMPClause *ActOnOpenMPAllocatorClause(Expr *Allocator,
   10828                                         SourceLocation StartLoc,
   10829                                         SourceLocation LParenLoc,
   10830                                         SourceLocation EndLoc);
   10831   /// Called on well-formed 'if' clause.
   10832   OMPClause *ActOnOpenMPIfClause(OpenMPDirectiveKind NameModifier,
   10833                                  Expr *Condition, SourceLocation StartLoc,
   10834                                  SourceLocation LParenLoc,
   10835                                  SourceLocation NameModifierLoc,
   10836                                  SourceLocation ColonLoc,
   10837                                  SourceLocation EndLoc);
   10838   /// Called on well-formed 'final' clause.
   10839   OMPClause *ActOnOpenMPFinalClause(Expr *Condition, SourceLocation StartLoc,
   10840                                     SourceLocation LParenLoc,
   10841                                     SourceLocation EndLoc);
   10842   /// Called on well-formed 'num_threads' clause.
   10843   OMPClause *ActOnOpenMPNumThreadsClause(Expr *NumThreads,
   10844                                          SourceLocation StartLoc,
   10845                                          SourceLocation LParenLoc,
   10846                                          SourceLocation EndLoc);
   10847   /// Called on well-formed 'safelen' clause.
   10848   OMPClause *ActOnOpenMPSafelenClause(Expr *Length,
   10849                                       SourceLocation StartLoc,
   10850                                       SourceLocation LParenLoc,
   10851                                       SourceLocation EndLoc);
   10852   /// Called on well-formed 'simdlen' clause.
   10853   OMPClause *ActOnOpenMPSimdlenClause(Expr *Length, SourceLocation StartLoc,
   10854                                       SourceLocation LParenLoc,
   10855                                       SourceLocation EndLoc);
   10856   /// Called on well-form 'sizes' clause.
   10857   OMPClause *ActOnOpenMPSizesClause(ArrayRef<Expr *> SizeExprs,
   10858                                     SourceLocation StartLoc,
   10859                                     SourceLocation LParenLoc,
   10860                                     SourceLocation EndLoc);
   10861   /// Called on well-formed 'collapse' clause.
   10862   OMPClause *ActOnOpenMPCollapseClause(Expr *NumForLoops,
   10863                                        SourceLocation StartLoc,
   10864                                        SourceLocation LParenLoc,
   10865                                        SourceLocation EndLoc);
   10866   /// Called on well-formed 'ordered' clause.
   10867   OMPClause *
   10868   ActOnOpenMPOrderedClause(SourceLocation StartLoc, SourceLocation EndLoc,
   10869                            SourceLocation LParenLoc = SourceLocation(),
   10870                            Expr *NumForLoops = nullptr);
   10871   /// Called on well-formed 'grainsize' clause.
   10872   OMPClause *ActOnOpenMPGrainsizeClause(Expr *Size, SourceLocation StartLoc,
   10873                                         SourceLocation LParenLoc,
   10874                                         SourceLocation EndLoc);
   10875   /// Called on well-formed 'num_tasks' clause.
   10876   OMPClause *ActOnOpenMPNumTasksClause(Expr *NumTasks, SourceLocation StartLoc,
   10877                                        SourceLocation LParenLoc,
   10878                                        SourceLocation EndLoc);
   10879   /// Called on well-formed 'hint' clause.
   10880   OMPClause *ActOnOpenMPHintClause(Expr *Hint, SourceLocation StartLoc,
   10881                                    SourceLocation LParenLoc,
   10882                                    SourceLocation EndLoc);
   10883   /// Called on well-formed 'detach' clause.
   10884   OMPClause *ActOnOpenMPDetachClause(Expr *Evt, SourceLocation StartLoc,
   10885                                      SourceLocation LParenLoc,
   10886                                      SourceLocation EndLoc);
   10887 
   10888   OMPClause *ActOnOpenMPSimpleClause(OpenMPClauseKind Kind,
   10889                                      unsigned Argument,
   10890                                      SourceLocation ArgumentLoc,
   10891                                      SourceLocation StartLoc,
   10892                                      SourceLocation LParenLoc,
   10893                                      SourceLocation EndLoc);
   10894   /// Called on well-formed 'default' clause.
   10895   OMPClause *ActOnOpenMPDefaultClause(llvm::omp::DefaultKind Kind,
   10896                                       SourceLocation KindLoc,
   10897                                       SourceLocation StartLoc,
   10898                                       SourceLocation LParenLoc,
   10899                                       SourceLocation EndLoc);
   10900   /// Called on well-formed 'proc_bind' clause.
   10901   OMPClause *ActOnOpenMPProcBindClause(llvm::omp::ProcBindKind Kind,
   10902                                        SourceLocation KindLoc,
   10903                                        SourceLocation StartLoc,
   10904                                        SourceLocation LParenLoc,
   10905                                        SourceLocation EndLoc);
   10906   /// Called on well-formed 'order' clause.
   10907   OMPClause *ActOnOpenMPOrderClause(OpenMPOrderClauseKind Kind,
   10908                                     SourceLocation KindLoc,
   10909                                     SourceLocation StartLoc,
   10910                                     SourceLocation LParenLoc,
   10911                                     SourceLocation EndLoc);
   10912   /// Called on well-formed 'update' clause.
   10913   OMPClause *ActOnOpenMPUpdateClause(OpenMPDependClauseKind Kind,
   10914                                      SourceLocation KindLoc,
   10915                                      SourceLocation StartLoc,
   10916                                      SourceLocation LParenLoc,
   10917                                      SourceLocation EndLoc);
   10918 
   10919   OMPClause *ActOnOpenMPSingleExprWithArgClause(
   10920       OpenMPClauseKind Kind, ArrayRef<unsigned> Arguments, Expr *Expr,
   10921       SourceLocation StartLoc, SourceLocation LParenLoc,
   10922       ArrayRef<SourceLocation> ArgumentsLoc, SourceLocation DelimLoc,
   10923       SourceLocation EndLoc);
   10924   /// Called on well-formed 'schedule' clause.
   10925   OMPClause *ActOnOpenMPScheduleClause(
   10926       OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2,
   10927       OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc,
   10928       SourceLocation LParenLoc, SourceLocation M1Loc, SourceLocation M2Loc,
   10929       SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc);
   10930 
   10931   OMPClause *ActOnOpenMPClause(OpenMPClauseKind Kind, SourceLocation StartLoc,
   10932                                SourceLocation EndLoc);
   10933   /// Called on well-formed 'nowait' clause.
   10934   OMPClause *ActOnOpenMPNowaitClause(SourceLocation StartLoc,
   10935                                      SourceLocation EndLoc);
   10936   /// Called on well-formed 'untied' clause.
   10937   OMPClause *ActOnOpenMPUntiedClause(SourceLocation StartLoc,
   10938                                      SourceLocation EndLoc);
   10939   /// Called on well-formed 'mergeable' clause.
   10940   OMPClause *ActOnOpenMPMergeableClause(SourceLocation StartLoc,
   10941                                         SourceLocation EndLoc);
   10942   /// Called on well-formed 'read' clause.
   10943   OMPClause *ActOnOpenMPReadClause(SourceLocation StartLoc,
   10944                                    SourceLocation EndLoc);
   10945   /// Called on well-formed 'write' clause.
   10946   OMPClause *ActOnOpenMPWriteClause(SourceLocation StartLoc,
   10947                                     SourceLocation EndLoc);
   10948   /// Called on well-formed 'update' clause.
   10949   OMPClause *ActOnOpenMPUpdateClause(SourceLocation StartLoc,
   10950                                      SourceLocation EndLoc);
   10951   /// Called on well-formed 'capture' clause.
   10952   OMPClause *ActOnOpenMPCaptureClause(SourceLocation StartLoc,
   10953                                       SourceLocation EndLoc);
   10954   /// Called on well-formed 'seq_cst' clause.
   10955   OMPClause *ActOnOpenMPSeqCstClause(SourceLocation StartLoc,
   10956                                      SourceLocation EndLoc);
   10957   /// Called on well-formed 'acq_rel' clause.
   10958   OMPClause *ActOnOpenMPAcqRelClause(SourceLocation StartLoc,
   10959                                      SourceLocation EndLoc);
   10960   /// Called on well-formed 'acquire' clause.
   10961   OMPClause *ActOnOpenMPAcquireClause(SourceLocation StartLoc,
   10962                                       SourceLocation EndLoc);
   10963   /// Called on well-formed 'release' clause.
   10964   OMPClause *ActOnOpenMPReleaseClause(SourceLocation StartLoc,
   10965                                       SourceLocation EndLoc);
   10966   /// Called on well-formed 'relaxed' clause.
   10967   OMPClause *ActOnOpenMPRelaxedClause(SourceLocation StartLoc,
   10968                                       SourceLocation EndLoc);
   10969 
   10970   /// Called on well-formed 'init' clause.
   10971   OMPClause *ActOnOpenMPInitClause(Expr *InteropVar, ArrayRef<Expr *> PrefExprs,
   10972                                    bool IsTarget, bool IsTargetSync,
   10973                                    SourceLocation StartLoc,
   10974                                    SourceLocation LParenLoc,
   10975                                    SourceLocation VarLoc,
   10976                                    SourceLocation EndLoc);
   10977 
   10978   /// Called on well-formed 'use' clause.
   10979   OMPClause *ActOnOpenMPUseClause(Expr *InteropVar, SourceLocation StartLoc,
   10980                                   SourceLocation LParenLoc,
   10981                                   SourceLocation VarLoc, SourceLocation EndLoc);
   10982 
   10983   /// Called on well-formed 'destroy' clause.
   10984   OMPClause *ActOnOpenMPDestroyClause(Expr *InteropVar, SourceLocation StartLoc,
   10985                                       SourceLocation LParenLoc,
   10986                                       SourceLocation VarLoc,
   10987                                       SourceLocation EndLoc);
   10988   /// Called on well-formed 'novariants' clause.
   10989   OMPClause *ActOnOpenMPNovariantsClause(Expr *Condition,
   10990                                          SourceLocation StartLoc,
   10991                                          SourceLocation LParenLoc,
   10992                                          SourceLocation EndLoc);
   10993   /// Called on well-formed 'nocontext' clause.
   10994   OMPClause *ActOnOpenMPNocontextClause(Expr *Condition,
   10995                                         SourceLocation StartLoc,
   10996                                         SourceLocation LParenLoc,
   10997                                         SourceLocation EndLoc);
   10998   /// Called on well-formed 'filter' clause.
   10999   OMPClause *ActOnOpenMPFilterClause(Expr *ThreadID, SourceLocation StartLoc,
   11000                                      SourceLocation LParenLoc,
   11001                                      SourceLocation EndLoc);
   11002   /// Called on well-formed 'threads' clause.
   11003   OMPClause *ActOnOpenMPThreadsClause(SourceLocation StartLoc,
   11004                                       SourceLocation EndLoc);
   11005   /// Called on well-formed 'simd' clause.
   11006   OMPClause *ActOnOpenMPSIMDClause(SourceLocation StartLoc,
   11007                                    SourceLocation EndLoc);
   11008   /// Called on well-formed 'nogroup' clause.
   11009   OMPClause *ActOnOpenMPNogroupClause(SourceLocation StartLoc,
   11010                                       SourceLocation EndLoc);
   11011   /// Called on well-formed 'unified_address' clause.
   11012   OMPClause *ActOnOpenMPUnifiedAddressClause(SourceLocation StartLoc,
   11013                                              SourceLocation EndLoc);
   11014 
   11015   /// Called on well-formed 'unified_address' clause.
   11016   OMPClause *ActOnOpenMPUnifiedSharedMemoryClause(SourceLocation StartLoc,
   11017                                                   SourceLocation EndLoc);
   11018 
   11019   /// Called on well-formed 'reverse_offload' clause.
   11020   OMPClause *ActOnOpenMPReverseOffloadClause(SourceLocation StartLoc,
   11021                                              SourceLocation EndLoc);
   11022 
   11023   /// Called on well-formed 'dynamic_allocators' clause.
   11024   OMPClause *ActOnOpenMPDynamicAllocatorsClause(SourceLocation StartLoc,
   11025                                                 SourceLocation EndLoc);
   11026 
   11027   /// Called on well-formed 'atomic_default_mem_order' clause.
   11028   OMPClause *ActOnOpenMPAtomicDefaultMemOrderClause(
   11029       OpenMPAtomicDefaultMemOrderClauseKind Kind, SourceLocation KindLoc,
   11030       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc);
   11031 
   11032   OMPClause *ActOnOpenMPVarListClause(
   11033       OpenMPClauseKind Kind, ArrayRef<Expr *> Vars, Expr *DepModOrTailExpr,
   11034       const OMPVarListLocTy &Locs, SourceLocation ColonLoc,
   11035       CXXScopeSpec &ReductionOrMapperIdScopeSpec,
   11036       DeclarationNameInfo &ReductionOrMapperId, int ExtraModifier,
   11037       ArrayRef<OpenMPMapModifierKind> MapTypeModifiers,
   11038       ArrayRef<SourceLocation> MapTypeModifiersLoc, bool IsMapTypeImplicit,
   11039       SourceLocation ExtraModifierLoc,
   11040       ArrayRef<OpenMPMotionModifierKind> MotionModifiers,
   11041       ArrayRef<SourceLocation> MotionModifiersLoc);
   11042   /// Called on well-formed 'inclusive' clause.
   11043   OMPClause *ActOnOpenMPInclusiveClause(ArrayRef<Expr *> VarList,
   11044                                         SourceLocation StartLoc,
   11045                                         SourceLocation LParenLoc,
   11046                                         SourceLocation EndLoc);
   11047   /// Called on well-formed 'exclusive' clause.
   11048   OMPClause *ActOnOpenMPExclusiveClause(ArrayRef<Expr *> VarList,
   11049                                         SourceLocation StartLoc,
   11050                                         SourceLocation LParenLoc,
   11051                                         SourceLocation EndLoc);
   11052   /// Called on well-formed 'allocate' clause.
   11053   OMPClause *
   11054   ActOnOpenMPAllocateClause(Expr *Allocator, ArrayRef<Expr *> VarList,
   11055                             SourceLocation StartLoc, SourceLocation ColonLoc,
   11056                             SourceLocation LParenLoc, SourceLocation EndLoc);
   11057   /// Called on well-formed 'private' clause.
   11058   OMPClause *ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList,
   11059                                       SourceLocation StartLoc,
   11060                                       SourceLocation LParenLoc,
   11061                                       SourceLocation EndLoc);
   11062   /// Called on well-formed 'firstprivate' clause.
   11063   OMPClause *ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList,
   11064                                            SourceLocation StartLoc,
   11065                                            SourceLocation LParenLoc,
   11066                                            SourceLocation EndLoc);
   11067   /// Called on well-formed 'lastprivate' clause.
   11068   OMPClause *ActOnOpenMPLastprivateClause(
   11069       ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind,
   11070       SourceLocation LPKindLoc, SourceLocation ColonLoc,
   11071       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc);
   11072   /// Called on well-formed 'shared' clause.
   11073   OMPClause *ActOnOpenMPSharedClause(ArrayRef<Expr *> VarList,
   11074                                      SourceLocation StartLoc,
   11075                                      SourceLocation LParenLoc,
   11076                                      SourceLocation EndLoc);
   11077   /// Called on well-formed 'reduction' clause.
   11078   OMPClause *ActOnOpenMPReductionClause(
   11079       ArrayRef<Expr *> VarList, OpenMPReductionClauseModifier Modifier,
   11080       SourceLocation StartLoc, SourceLocation LParenLoc,
   11081       SourceLocation ModifierLoc, SourceLocation ColonLoc,
   11082       SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec,
   11083       const DeclarationNameInfo &ReductionId,
   11084       ArrayRef<Expr *> UnresolvedReductions = llvm::None);
   11085   /// Called on well-formed 'task_reduction' clause.
   11086   OMPClause *ActOnOpenMPTaskReductionClause(
   11087       ArrayRef<Expr *> VarList, SourceLocation StartLoc,
   11088       SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc,
   11089       CXXScopeSpec &ReductionIdScopeSpec,
   11090       const DeclarationNameInfo &ReductionId,
   11091       ArrayRef<Expr *> UnresolvedReductions = llvm::None);
   11092   /// Called on well-formed 'in_reduction' clause.
   11093   OMPClause *ActOnOpenMPInReductionClause(
   11094       ArrayRef<Expr *> VarList, SourceLocation StartLoc,
   11095       SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc,
   11096       CXXScopeSpec &ReductionIdScopeSpec,
   11097       const DeclarationNameInfo &ReductionId,
   11098       ArrayRef<Expr *> UnresolvedReductions = llvm::None);
   11099   /// Called on well-formed 'linear' clause.
   11100   OMPClause *
   11101   ActOnOpenMPLinearClause(ArrayRef<Expr *> VarList, Expr *Step,
   11102                           SourceLocation StartLoc, SourceLocation LParenLoc,
   11103                           OpenMPLinearClauseKind LinKind, SourceLocation LinLoc,
   11104                           SourceLocation ColonLoc, SourceLocation EndLoc);
   11105   /// Called on well-formed 'aligned' clause.
   11106   OMPClause *ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList,
   11107                                       Expr *Alignment,
   11108                                       SourceLocation StartLoc,
   11109                                       SourceLocation LParenLoc,
   11110                                       SourceLocation ColonLoc,
   11111                                       SourceLocation EndLoc);
   11112   /// Called on well-formed 'copyin' clause.
   11113   OMPClause *ActOnOpenMPCopyinClause(ArrayRef<Expr *> VarList,
   11114                                      SourceLocation StartLoc,
   11115                                      SourceLocation LParenLoc,
   11116                                      SourceLocation EndLoc);
   11117   /// Called on well-formed 'copyprivate' clause.
   11118   OMPClause *ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList,
   11119                                           SourceLocation StartLoc,
   11120                                           SourceLocation LParenLoc,
   11121                                           SourceLocation EndLoc);
   11122   /// Called on well-formed 'flush' pseudo clause.
   11123   OMPClause *ActOnOpenMPFlushClause(ArrayRef<Expr *> VarList,
   11124                                     SourceLocation StartLoc,
   11125                                     SourceLocation LParenLoc,
   11126                                     SourceLocation EndLoc);
   11127   /// Called on well-formed 'depobj' pseudo clause.
   11128   OMPClause *ActOnOpenMPDepobjClause(Expr *Depobj, SourceLocation StartLoc,
   11129                                      SourceLocation LParenLoc,
   11130                                      SourceLocation EndLoc);
   11131   /// Called on well-formed 'depend' clause.
   11132   OMPClause *
   11133   ActOnOpenMPDependClause(Expr *DepModifier, OpenMPDependClauseKind DepKind,
   11134                           SourceLocation DepLoc, SourceLocation ColonLoc,
   11135                           ArrayRef<Expr *> VarList, SourceLocation StartLoc,
   11136                           SourceLocation LParenLoc, SourceLocation EndLoc);
   11137   /// Called on well-formed 'device' clause.
   11138   OMPClause *ActOnOpenMPDeviceClause(OpenMPDeviceClauseModifier Modifier,
   11139                                      Expr *Device, SourceLocation StartLoc,
   11140                                      SourceLocation LParenLoc,
   11141                                      SourceLocation ModifierLoc,
   11142                                      SourceLocation EndLoc);
   11143   /// Called on well-formed 'map' clause.
   11144   OMPClause *
   11145   ActOnOpenMPMapClause(ArrayRef<OpenMPMapModifierKind> MapTypeModifiers,
   11146                        ArrayRef<SourceLocation> MapTypeModifiersLoc,
   11147                        CXXScopeSpec &MapperIdScopeSpec,
   11148                        DeclarationNameInfo &MapperId,
   11149                        OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
   11150                        SourceLocation MapLoc, SourceLocation ColonLoc,
   11151                        ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs,
   11152                        ArrayRef<Expr *> UnresolvedMappers = llvm::None);
   11153   /// Called on well-formed 'num_teams' clause.
   11154   OMPClause *ActOnOpenMPNumTeamsClause(Expr *NumTeams, SourceLocation StartLoc,
   11155                                        SourceLocation LParenLoc,
   11156                                        SourceLocation EndLoc);
   11157   /// Called on well-formed 'thread_limit' clause.
   11158   OMPClause *ActOnOpenMPThreadLimitClause(Expr *ThreadLimit,
   11159                                           SourceLocation StartLoc,
   11160                                           SourceLocation LParenLoc,
   11161                                           SourceLocation EndLoc);
   11162   /// Called on well-formed 'priority' clause.
   11163   OMPClause *ActOnOpenMPPriorityClause(Expr *Priority, SourceLocation StartLoc,
   11164                                        SourceLocation LParenLoc,
   11165                                        SourceLocation EndLoc);
   11166   /// Called on well-formed 'dist_schedule' clause.
   11167   OMPClause *ActOnOpenMPDistScheduleClause(
   11168       OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize,
   11169       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KindLoc,
   11170       SourceLocation CommaLoc, SourceLocation EndLoc);
   11171   /// Called on well-formed 'defaultmap' clause.
   11172   OMPClause *ActOnOpenMPDefaultmapClause(
   11173       OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind,
   11174       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc,
   11175       SourceLocation KindLoc, SourceLocation EndLoc);
   11176   /// Called on well-formed 'to' clause.
   11177   OMPClause *
   11178   ActOnOpenMPToClause(ArrayRef<OpenMPMotionModifierKind> MotionModifiers,
   11179                       ArrayRef<SourceLocation> MotionModifiersLoc,
   11180                       CXXScopeSpec &MapperIdScopeSpec,
   11181                       DeclarationNameInfo &MapperId, SourceLocation ColonLoc,
   11182                       ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs,
   11183                       ArrayRef<Expr *> UnresolvedMappers = llvm::None);
   11184   /// Called on well-formed 'from' clause.
   11185   OMPClause *
   11186   ActOnOpenMPFromClause(ArrayRef<OpenMPMotionModifierKind> MotionModifiers,
   11187                         ArrayRef<SourceLocation> MotionModifiersLoc,
   11188                         CXXScopeSpec &MapperIdScopeSpec,
   11189                         DeclarationNameInfo &MapperId, SourceLocation ColonLoc,
   11190                         ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs,
   11191                         ArrayRef<Expr *> UnresolvedMappers = llvm::None);
   11192   /// Called on well-formed 'use_device_ptr' clause.
   11193   OMPClause *ActOnOpenMPUseDevicePtrClause(ArrayRef<Expr *> VarList,
   11194                                            const OMPVarListLocTy &Locs);
   11195   /// Called on well-formed 'use_device_addr' clause.
   11196   OMPClause *ActOnOpenMPUseDeviceAddrClause(ArrayRef<Expr *> VarList,
   11197                                             const OMPVarListLocTy &Locs);
   11198   /// Called on well-formed 'is_device_ptr' clause.
   11199   OMPClause *ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList,
   11200                                           const OMPVarListLocTy &Locs);
   11201   /// Called on well-formed 'nontemporal' clause.
   11202   OMPClause *ActOnOpenMPNontemporalClause(ArrayRef<Expr *> VarList,
   11203                                           SourceLocation StartLoc,
   11204                                           SourceLocation LParenLoc,
   11205                                           SourceLocation EndLoc);
   11206 
   11207   /// Data for list of allocators.
   11208   struct UsesAllocatorsData {
   11209     /// Allocator.
   11210     Expr *Allocator = nullptr;
   11211     /// Allocator traits.
   11212     Expr *AllocatorTraits = nullptr;
   11213     /// Locations of '(' and ')' symbols.
   11214     SourceLocation LParenLoc, RParenLoc;
   11215   };
   11216   /// Called on well-formed 'uses_allocators' clause.
   11217   OMPClause *ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc,
   11218                                             SourceLocation LParenLoc,
   11219                                             SourceLocation EndLoc,
   11220                                             ArrayRef<UsesAllocatorsData> Data);
   11221   /// Called on well-formed 'affinity' clause.
   11222   OMPClause *ActOnOpenMPAffinityClause(SourceLocation StartLoc,
   11223                                        SourceLocation LParenLoc,
   11224                                        SourceLocation ColonLoc,
   11225                                        SourceLocation EndLoc, Expr *Modifier,
   11226                                        ArrayRef<Expr *> Locators);
   11227 
   11228   /// The kind of conversion being performed.
   11229   enum CheckedConversionKind {
   11230     /// An implicit conversion.
   11231     CCK_ImplicitConversion,
   11232     /// A C-style cast.
   11233     CCK_CStyleCast,
   11234     /// A functional-style cast.
   11235     CCK_FunctionalCast,
   11236     /// A cast other than a C-style cast.
   11237     CCK_OtherCast,
   11238     /// A conversion for an operand of a builtin overloaded operator.
   11239     CCK_ForBuiltinOverloadedOp
   11240   };
   11241 
   11242   static bool isCast(CheckedConversionKind CCK) {
   11243     return CCK == CCK_CStyleCast || CCK == CCK_FunctionalCast ||
   11244            CCK == CCK_OtherCast;
   11245   }
   11246 
   11247   /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit
   11248   /// cast.  If there is already an implicit cast, merge into the existing one.
   11249   /// If isLvalue, the result of the cast is an lvalue.
   11250   ExprResult ImpCastExprToType(Expr *E, QualType Type, CastKind CK,
   11251                                ExprValueKind VK = VK_RValue,
   11252                                const CXXCastPath *BasePath = nullptr,
   11253                                CheckedConversionKind CCK
   11254                                   = CCK_ImplicitConversion);
   11255 
   11256   /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
   11257   /// to the conversion from scalar type ScalarTy to the Boolean type.
   11258   static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy);
   11259 
   11260   /// IgnoredValueConversions - Given that an expression's result is
   11261   /// syntactically ignored, perform any conversions that are
   11262   /// required.
   11263   ExprResult IgnoredValueConversions(Expr *E);
   11264 
   11265   // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts
   11266   // functions and arrays to their respective pointers (C99 6.3.2.1).
   11267   ExprResult UsualUnaryConversions(Expr *E);
   11268 
   11269   /// CallExprUnaryConversions - a special case of an unary conversion
   11270   /// performed on a function designator of a call expression.
   11271   ExprResult CallExprUnaryConversions(Expr *E);
   11272 
   11273   // DefaultFunctionArrayConversion - converts functions and arrays
   11274   // to their respective pointers (C99 6.3.2.1).
   11275   ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose = true);
   11276 
   11277   // DefaultFunctionArrayLvalueConversion - converts functions and
   11278   // arrays to their respective pointers and performs the
   11279   // lvalue-to-rvalue conversion.
   11280   ExprResult DefaultFunctionArrayLvalueConversion(Expr *E,
   11281                                                   bool Diagnose = true);
   11282 
   11283   // DefaultLvalueConversion - performs lvalue-to-rvalue conversion on
   11284   // the operand. This function is a no-op if the operand has a function type
   11285   // or an array type.
   11286   ExprResult DefaultLvalueConversion(Expr *E);
   11287 
   11288   // DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that
   11289   // do not have a prototype. Integer promotions are performed on each
   11290   // argument, and arguments that have type float are promoted to double.
   11291   ExprResult DefaultArgumentPromotion(Expr *E);
   11292 
   11293   /// If \p E is a prvalue denoting an unmaterialized temporary, materialize
   11294   /// it as an xvalue. In C++98, the result will still be a prvalue, because
   11295   /// we don't have xvalues there.
   11296   ExprResult TemporaryMaterializationConversion(Expr *E);
   11297 
   11298   // Used for emitting the right warning by DefaultVariadicArgumentPromotion
   11299   enum VariadicCallType {
   11300     VariadicFunction,
   11301     VariadicBlock,
   11302     VariadicMethod,
   11303     VariadicConstructor,
   11304     VariadicDoesNotApply
   11305   };
   11306 
   11307   VariadicCallType getVariadicCallType(FunctionDecl *FDecl,
   11308                                        const FunctionProtoType *Proto,
   11309                                        Expr *Fn);
   11310 
   11311   // Used for determining in which context a type is allowed to be passed to a
   11312   // vararg function.
   11313   enum VarArgKind {
   11314     VAK_Valid,
   11315     VAK_ValidInCXX11,
   11316     VAK_Undefined,
   11317     VAK_MSVCUndefined,
   11318     VAK_Invalid
   11319   };
   11320 
   11321   // Determines which VarArgKind fits an expression.
   11322   VarArgKind isValidVarArgType(const QualType &Ty);
   11323 
   11324   /// Check to see if the given expression is a valid argument to a variadic
   11325   /// function, issuing a diagnostic if not.
   11326   void checkVariadicArgument(const Expr *E, VariadicCallType CT);
   11327 
   11328   /// Check whether the given statement can have musttail applied to it,
   11329   /// issuing a diagnostic and returning false if not. In the success case,
   11330   /// the statement is rewritten to remove implicit nodes from the return
   11331   /// value.
   11332   bool checkAndRewriteMustTailAttr(Stmt *St, const Attr &MTA);
   11333 
   11334 private:
   11335   /// Check whether the given statement can have musttail applied to it,
   11336   /// issuing a diagnostic and returning false if not.
   11337   bool checkMustTailAttr(const Stmt *St, const Attr &MTA);
   11338 
   11339 public:
   11340   /// Check to see if a given expression could have '.c_str()' called on it.
   11341   bool hasCStrMethod(const Expr *E);
   11342 
   11343   /// GatherArgumentsForCall - Collector argument expressions for various
   11344   /// form of call prototypes.
   11345   bool GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl,
   11346                               const FunctionProtoType *Proto,
   11347                               unsigned FirstParam, ArrayRef<Expr *> Args,
   11348                               SmallVectorImpl<Expr *> &AllArgs,
   11349                               VariadicCallType CallType = VariadicDoesNotApply,
   11350                               bool AllowExplicit = false,
   11351                               bool IsListInitialization = false);
   11352 
   11353   // DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but
   11354   // will create a runtime trap if the resulting type is not a POD type.
   11355   ExprResult DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT,
   11356                                               FunctionDecl *FDecl);
   11357 
   11358   /// Context in which we're performing a usual arithmetic conversion.
   11359   enum ArithConvKind {
   11360     /// An arithmetic operation.
   11361     ACK_Arithmetic,
   11362     /// A bitwise operation.
   11363     ACK_BitwiseOp,
   11364     /// A comparison.
   11365     ACK_Comparison,
   11366     /// A conditional (?:) operator.
   11367     ACK_Conditional,
   11368     /// A compound assignment expression.
   11369     ACK_CompAssign,
   11370   };
   11371 
   11372   // UsualArithmeticConversions - performs the UsualUnaryConversions on it's
   11373   // operands and then handles various conversions that are common to binary
   11374   // operators (C99 6.3.1.8). If both operands aren't arithmetic, this
   11375   // routine returns the first non-arithmetic type found. The client is
   11376   // responsible for emitting appropriate error diagnostics.
   11377   QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS,
   11378                                       SourceLocation Loc, ArithConvKind ACK);
   11379 
   11380   /// AssignConvertType - All of the 'assignment' semantic checks return this
   11381   /// enum to indicate whether the assignment was allowed.  These checks are
   11382   /// done for simple assignments, as well as initialization, return from
   11383   /// function, argument passing, etc.  The query is phrased in terms of a
   11384   /// source and destination type.
   11385   enum AssignConvertType {
   11386     /// Compatible - the types are compatible according to the standard.
   11387     Compatible,
   11388 
   11389     /// PointerToInt - The assignment converts a pointer to an int, which we
   11390     /// accept as an extension.
   11391     PointerToInt,
   11392 
   11393     /// IntToPointer - The assignment converts an int to a pointer, which we
   11394     /// accept as an extension.
   11395     IntToPointer,
   11396 
   11397     /// FunctionVoidPointer - The assignment is between a function pointer and
   11398     /// void*, which the standard doesn't allow, but we accept as an extension.
   11399     FunctionVoidPointer,
   11400 
   11401     /// IncompatiblePointer - The assignment is between two pointers types that
   11402     /// are not compatible, but we accept them as an extension.
   11403     IncompatiblePointer,
   11404 
   11405     /// IncompatibleFunctionPointer - The assignment is between two function
   11406     /// pointers types that are not compatible, but we accept them as an
   11407     /// extension.
   11408     IncompatibleFunctionPointer,
   11409 
   11410     /// IncompatiblePointerSign - The assignment is between two pointers types
   11411     /// which point to integers which have a different sign, but are otherwise
   11412     /// identical. This is a subset of the above, but broken out because it's by
   11413     /// far the most common case of incompatible pointers.
   11414     IncompatiblePointerSign,
   11415 
   11416     /// CompatiblePointerDiscardsQualifiers - The assignment discards
   11417     /// c/v/r qualifiers, which we accept as an extension.
   11418     CompatiblePointerDiscardsQualifiers,
   11419 
   11420     /// IncompatiblePointerDiscardsQualifiers - The assignment
   11421     /// discards qualifiers that we don't permit to be discarded,
   11422     /// like address spaces.
   11423     IncompatiblePointerDiscardsQualifiers,
   11424 
   11425     /// IncompatibleNestedPointerAddressSpaceMismatch - The assignment
   11426     /// changes address spaces in nested pointer types which is not allowed.
   11427     /// For instance, converting __private int ** to __generic int ** is
   11428     /// illegal even though __private could be converted to __generic.
   11429     IncompatibleNestedPointerAddressSpaceMismatch,
   11430 
   11431     /// IncompatibleNestedPointerQualifiers - The assignment is between two
   11432     /// nested pointer types, and the qualifiers other than the first two
   11433     /// levels differ e.g. char ** -> const char **, but we accept them as an
   11434     /// extension.
   11435     IncompatibleNestedPointerQualifiers,
   11436 
   11437     /// IncompatibleVectors - The assignment is between two vector types that
   11438     /// have the same size, which we accept as an extension.
   11439     IncompatibleVectors,
   11440 
   11441     /// IntToBlockPointer - The assignment converts an int to a block
   11442     /// pointer. We disallow this.
   11443     IntToBlockPointer,
   11444 
   11445     /// IncompatibleBlockPointer - The assignment is between two block
   11446     /// pointers types that are not compatible.
   11447     IncompatibleBlockPointer,
   11448 
   11449     /// IncompatibleObjCQualifiedId - The assignment is between a qualified
   11450     /// id type and something else (that is incompatible with it). For example,
   11451     /// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol.
   11452     IncompatibleObjCQualifiedId,
   11453 
   11454     /// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an
   11455     /// object with __weak qualifier.
   11456     IncompatibleObjCWeakRef,
   11457 
   11458     /// Incompatible - We reject this conversion outright, it is invalid to
   11459     /// represent it in the AST.
   11460     Incompatible
   11461   };
   11462 
   11463   /// DiagnoseAssignmentResult - Emit a diagnostic, if required, for the
   11464   /// assignment conversion type specified by ConvTy.  This returns true if the
   11465   /// conversion was invalid or false if the conversion was accepted.
   11466   bool DiagnoseAssignmentResult(AssignConvertType ConvTy,
   11467                                 SourceLocation Loc,
   11468                                 QualType DstType, QualType SrcType,
   11469                                 Expr *SrcExpr, AssignmentAction Action,
   11470                                 bool *Complained = nullptr);
   11471 
   11472   /// IsValueInFlagEnum - Determine if a value is allowed as part of a flag
   11473   /// enum. If AllowMask is true, then we also allow the complement of a valid
   11474   /// value, to be used as a mask.
   11475   bool IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
   11476                          bool AllowMask) const;
   11477 
   11478   /// DiagnoseAssignmentEnum - Warn if assignment to enum is a constant
   11479   /// integer not in the range of enum values.
   11480   void DiagnoseAssignmentEnum(QualType DstType, QualType SrcType,
   11481                               Expr *SrcExpr);
   11482 
   11483   /// CheckAssignmentConstraints - Perform type checking for assignment,
   11484   /// argument passing, variable initialization, and function return values.
   11485   /// C99 6.5.16.
   11486   AssignConvertType CheckAssignmentConstraints(SourceLocation Loc,
   11487                                                QualType LHSType,
   11488                                                QualType RHSType);
   11489 
   11490   /// Check assignment constraints and optionally prepare for a conversion of
   11491   /// the RHS to the LHS type. The conversion is prepared for if ConvertRHS
   11492   /// is true.
   11493   AssignConvertType CheckAssignmentConstraints(QualType LHSType,
   11494                                                ExprResult &RHS,
   11495                                                CastKind &Kind,
   11496                                                bool ConvertRHS = true);
   11497 
   11498   /// Check assignment constraints for an assignment of RHS to LHSType.
   11499   ///
   11500   /// \param LHSType The destination type for the assignment.
   11501   /// \param RHS The source expression for the assignment.
   11502   /// \param Diagnose If \c true, diagnostics may be produced when checking
   11503   ///        for assignability. If a diagnostic is produced, \p RHS will be
   11504   ///        set to ExprError(). Note that this function may still return
   11505   ///        without producing a diagnostic, even for an invalid assignment.
   11506   /// \param DiagnoseCFAudited If \c true, the target is a function parameter
   11507   ///        in an audited Core Foundation API and does not need to be checked
   11508   ///        for ARC retain issues.
   11509   /// \param ConvertRHS If \c true, \p RHS will be updated to model the
   11510   ///        conversions necessary to perform the assignment. If \c false,
   11511   ///        \p Diagnose must also be \c false.
   11512   AssignConvertType CheckSingleAssignmentConstraints(
   11513       QualType LHSType, ExprResult &RHS, bool Diagnose = true,
   11514       bool DiagnoseCFAudited = false, bool ConvertRHS = true);
   11515 
   11516   // If the lhs type is a transparent union, check whether we
   11517   // can initialize the transparent union with the given expression.
   11518   AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType,
   11519                                                              ExprResult &RHS);
   11520 
   11521   bool IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType);
   11522 
   11523   bool CheckExceptionSpecCompatibility(Expr *From, QualType ToType);
   11524 
   11525   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
   11526                                        AssignmentAction Action,
   11527                                        bool AllowExplicit = false);
   11528   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
   11529                                        const ImplicitConversionSequence& ICS,
   11530                                        AssignmentAction Action,
   11531                                        CheckedConversionKind CCK
   11532                                           = CCK_ImplicitConversion);
   11533   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
   11534                                        const StandardConversionSequence& SCS,
   11535                                        AssignmentAction Action,
   11536                                        CheckedConversionKind CCK);
   11537 
   11538   ExprResult PerformQualificationConversion(
   11539       Expr *E, QualType Ty, ExprValueKind VK = VK_RValue,
   11540       CheckedConversionKind CCK = CCK_ImplicitConversion);
   11541 
   11542   /// the following "Check" methods will return a valid/converted QualType
   11543   /// or a null QualType (indicating an error diagnostic was issued).
   11544 
   11545   /// type checking binary operators (subroutines of CreateBuiltinBinOp).
   11546   QualType InvalidOperands(SourceLocation Loc, ExprResult &LHS,
   11547                            ExprResult &RHS);
   11548   QualType InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS,
   11549                                  ExprResult &RHS);
   11550   QualType CheckPointerToMemberOperands( // C++ 5.5
   11551     ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK,
   11552     SourceLocation OpLoc, bool isIndirect);
   11553   QualType CheckMultiplyDivideOperands( // C99 6.5.5
   11554     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign,
   11555     bool IsDivide);
   11556   QualType CheckRemainderOperands( // C99 6.5.5
   11557     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
   11558     bool IsCompAssign = false);
   11559   QualType CheckAdditionOperands( // C99 6.5.6
   11560     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
   11561     BinaryOperatorKind Opc, QualType* CompLHSTy = nullptr);
   11562   QualType CheckSubtractionOperands( // C99 6.5.6
   11563     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
   11564     QualType* CompLHSTy = nullptr);
   11565   QualType CheckShiftOperands( // C99 6.5.7
   11566     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
   11567     BinaryOperatorKind Opc, bool IsCompAssign = false);
   11568   void CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE);
   11569   QualType CheckCompareOperands( // C99 6.5.8/9
   11570       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
   11571       BinaryOperatorKind Opc);
   11572   QualType CheckBitwiseOperands( // C99 6.5.[10...12]
   11573       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
   11574       BinaryOperatorKind Opc);
   11575   QualType CheckLogicalOperands( // C99 6.5.[13,14]
   11576     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
   11577     BinaryOperatorKind Opc);
   11578   // CheckAssignmentOperands is used for both simple and compound assignment.
   11579   // For simple assignment, pass both expressions and a null converted type.
   11580   // For compound assignment, pass both expressions and the converted type.
   11581   QualType CheckAssignmentOperands( // C99 6.5.16.[1,2]
   11582     Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType);
   11583 
   11584   ExprResult checkPseudoObjectIncDec(Scope *S, SourceLocation OpLoc,
   11585                                      UnaryOperatorKind Opcode, Expr *Op);
   11586   ExprResult checkPseudoObjectAssignment(Scope *S, SourceLocation OpLoc,
   11587                                          BinaryOperatorKind Opcode,
   11588                                          Expr *LHS, Expr *RHS);
   11589   ExprResult checkPseudoObjectRValue(Expr *E);
   11590   Expr *recreateSyntacticForm(PseudoObjectExpr *E);
   11591 
   11592   QualType CheckConditionalOperands( // C99 6.5.15
   11593     ExprResult &Cond, ExprResult &LHS, ExprResult &RHS,
   11594     ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc);
   11595   QualType CXXCheckConditionalOperands( // C++ 5.16
   11596     ExprResult &cond, ExprResult &lhs, ExprResult &rhs,
   11597     ExprValueKind &VK, ExprObjectKind &OK, SourceLocation questionLoc);
   11598   QualType CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS,
   11599                                        ExprResult &RHS,
   11600                                        SourceLocation QuestionLoc);
   11601   QualType FindCompositePointerType(SourceLocation Loc, Expr *&E1, Expr *&E2,
   11602                                     bool ConvertArgs = true);
   11603   QualType FindCompositePointerType(SourceLocation Loc,
   11604                                     ExprResult &E1, ExprResult &E2,
   11605                                     bool ConvertArgs = true) {
   11606     Expr *E1Tmp = E1.get(), *E2Tmp = E2.get();
   11607     QualType Composite =
   11608         FindCompositePointerType(Loc, E1Tmp, E2Tmp, ConvertArgs);
   11609     E1 = E1Tmp;
   11610     E2 = E2Tmp;
   11611     return Composite;
   11612   }
   11613 
   11614   QualType FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS,
   11615                                         SourceLocation QuestionLoc);
   11616 
   11617   bool DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr,
   11618                                   SourceLocation QuestionLoc);
   11619 
   11620   void DiagnoseAlwaysNonNullPointer(Expr *E,
   11621                                     Expr::NullPointerConstantKind NullType,
   11622                                     bool IsEqual, SourceRange Range);
   11623 
   11624   /// type checking for vector binary operators.
   11625   QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS,
   11626                                SourceLocation Loc, bool IsCompAssign,
   11627                                bool AllowBothBool, bool AllowBoolConversion);
   11628   QualType GetSignedVectorType(QualType V);
   11629   QualType CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS,
   11630                                       SourceLocation Loc,
   11631                                       BinaryOperatorKind Opc);
   11632   QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS,
   11633                                       SourceLocation Loc);
   11634 
   11635   /// Type checking for matrix binary operators.
   11636   QualType CheckMatrixElementwiseOperands(ExprResult &LHS, ExprResult &RHS,
   11637                                           SourceLocation Loc,
   11638                                           bool IsCompAssign);
   11639   QualType CheckMatrixMultiplyOperands(ExprResult &LHS, ExprResult &RHS,
   11640                                        SourceLocation Loc, bool IsCompAssign);
   11641 
   11642   bool isValidSveBitcast(QualType srcType, QualType destType);
   11643 
   11644   bool areMatrixTypesOfTheSameDimension(QualType srcTy, QualType destTy);
   11645 
   11646   bool areVectorTypesSameSize(QualType srcType, QualType destType);
   11647   bool areLaxCompatibleVectorTypes(QualType srcType, QualType destType);
   11648   bool isLaxVectorConversion(QualType srcType, QualType destType);
   11649 
   11650   /// type checking declaration initializers (C99 6.7.8)
   11651   bool CheckForConstantInitializer(Expr *e, QualType t);
   11652 
   11653   // type checking C++ declaration initializers (C++ [dcl.init]).
   11654 
   11655   /// ReferenceCompareResult - Expresses the result of comparing two
   11656   /// types (cv1 T1 and cv2 T2) to determine their compatibility for the
   11657   /// purposes of initialization by reference (C++ [dcl.init.ref]p4).
   11658   enum ReferenceCompareResult {
   11659     /// Ref_Incompatible - The two types are incompatible, so direct
   11660     /// reference binding is not possible.
   11661     Ref_Incompatible = 0,
   11662     /// Ref_Related - The two types are reference-related, which means
   11663     /// that their unqualified forms (T1 and T2) are either the same
   11664     /// or T1 is a base class of T2.
   11665     Ref_Related,
   11666     /// Ref_Compatible - The two types are reference-compatible.
   11667     Ref_Compatible
   11668   };
   11669 
   11670   // Fake up a scoped enumeration that still contextually converts to bool.
   11671   struct ReferenceConversionsScope {
   11672     /// The conversions that would be performed on an lvalue of type T2 when
   11673     /// binding a reference of type T1 to it, as determined when evaluating
   11674     /// whether T1 is reference-compatible with T2.
   11675     enum ReferenceConversions {
   11676       Qualification = 0x1,
   11677       NestedQualification = 0x2,
   11678       Function = 0x4,
   11679       DerivedToBase = 0x8,
   11680       ObjC = 0x10,
   11681       ObjCLifetime = 0x20,
   11682 
   11683       LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/ObjCLifetime)
   11684     };
   11685   };
   11686   using ReferenceConversions = ReferenceConversionsScope::ReferenceConversions;
   11687 
   11688   ReferenceCompareResult
   11689   CompareReferenceRelationship(SourceLocation Loc, QualType T1, QualType T2,
   11690                                ReferenceConversions *Conv = nullptr);
   11691 
   11692   ExprResult checkUnknownAnyCast(SourceRange TypeRange, QualType CastType,
   11693                                  Expr *CastExpr, CastKind &CastKind,
   11694                                  ExprValueKind &VK, CXXCastPath &Path);
   11695 
   11696   /// Force an expression with unknown-type to an expression of the
   11697   /// given type.
   11698   ExprResult forceUnknownAnyToType(Expr *E, QualType ToType);
   11699 
   11700   /// Type-check an expression that's being passed to an
   11701   /// __unknown_anytype parameter.
   11702   ExprResult checkUnknownAnyArg(SourceLocation callLoc,
   11703                                 Expr *result, QualType &paramType);
   11704 
   11705   // CheckMatrixCast - Check type constraints for matrix casts.
   11706   // We allow casting between matrixes of the same dimensions i.e. when they
   11707   // have the same number of rows and column. Returns true if the cast is
   11708   // invalid.
   11709   bool CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy,
   11710                        CastKind &Kind);
   11711 
   11712   // CheckVectorCast - check type constraints for vectors.
   11713   // Since vectors are an extension, there are no C standard reference for this.
   11714   // We allow casting between vectors and integer datatypes of the same size.
   11715   // returns true if the cast is invalid
   11716   bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty,
   11717                        CastKind &Kind);
   11718 
   11719   /// Prepare `SplattedExpr` for a vector splat operation, adding
   11720   /// implicit casts if necessary.
   11721   ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr);
   11722 
   11723   // CheckExtVectorCast - check type constraints for extended vectors.
   11724   // Since vectors are an extension, there are no C standard reference for this.
   11725   // We allow casting between vectors and integer datatypes of the same size,
   11726   // or vectors and the element type of that vector.
   11727   // returns the cast expr
   11728   ExprResult CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr,
   11729                                 CastKind &Kind);
   11730 
   11731   ExprResult BuildCXXFunctionalCastExpr(TypeSourceInfo *TInfo, QualType Type,
   11732                                         SourceLocation LParenLoc,
   11733                                         Expr *CastExpr,
   11734                                         SourceLocation RParenLoc);
   11735 
   11736   enum ARCConversionResult { ACR_okay, ACR_unbridged, ACR_error };
   11737 
   11738   /// Checks for invalid conversions and casts between
   11739   /// retainable pointers and other pointer kinds for ARC and Weak.
   11740   ARCConversionResult CheckObjCConversion(SourceRange castRange,
   11741                                           QualType castType, Expr *&op,
   11742                                           CheckedConversionKind CCK,
   11743                                           bool Diagnose = true,
   11744                                           bool DiagnoseCFAudited = false,
   11745                                           BinaryOperatorKind Opc = BO_PtrMemD
   11746                                           );
   11747 
   11748   Expr *stripARCUnbridgedCast(Expr *e);
   11749   void diagnoseARCUnbridgedCast(Expr *e);
   11750 
   11751   bool CheckObjCARCUnavailableWeakConversion(QualType castType,
   11752                                              QualType ExprType);
   11753 
   11754   /// checkRetainCycles - Check whether an Objective-C message send
   11755   /// might create an obvious retain cycle.
   11756   void checkRetainCycles(ObjCMessageExpr *msg);
   11757   void checkRetainCycles(Expr *receiver, Expr *argument);
   11758   void checkRetainCycles(VarDecl *Var, Expr *Init);
   11759 
   11760   /// checkUnsafeAssigns - Check whether +1 expr is being assigned
   11761   /// to weak/__unsafe_unretained type.
   11762   bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS);
   11763 
   11764   /// checkUnsafeExprAssigns - Check whether +1 expr is being assigned
   11765   /// to weak/__unsafe_unretained expression.
   11766   void checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS);
   11767 
   11768   /// CheckMessageArgumentTypes - Check types in an Obj-C message send.
   11769   /// \param Method - May be null.
   11770   /// \param [out] ReturnType - The return type of the send.
   11771   /// \return true iff there were any incompatible types.
   11772   bool CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType,
   11773                                  MultiExprArg Args, Selector Sel,
   11774                                  ArrayRef<SourceLocation> SelectorLocs,
   11775                                  ObjCMethodDecl *Method, bool isClassMessage,
   11776                                  bool isSuperMessage, SourceLocation lbrac,
   11777                                  SourceLocation rbrac, SourceRange RecRange,
   11778                                  QualType &ReturnType, ExprValueKind &VK);
   11779 
   11780   /// Determine the result of a message send expression based on
   11781   /// the type of the receiver, the method expected to receive the message,
   11782   /// and the form of the message send.
   11783   QualType getMessageSendResultType(const Expr *Receiver, QualType ReceiverType,
   11784                                     ObjCMethodDecl *Method, bool isClassMessage,
   11785                                     bool isSuperMessage);
   11786 
   11787   /// If the given expression involves a message send to a method
   11788   /// with a related result type, emit a note describing what happened.
   11789   void EmitRelatedResultTypeNote(const Expr *E);
   11790 
   11791   /// Given that we had incompatible pointer types in a return
   11792   /// statement, check whether we're in a method with a related result
   11793   /// type, and if so, emit a note describing what happened.
   11794   void EmitRelatedResultTypeNoteForReturn(QualType destType);
   11795 
   11796   class ConditionResult {
   11797     Decl *ConditionVar;
   11798     FullExprArg Condition;
   11799     bool Invalid;
   11800     bool HasKnownValue;
   11801     bool KnownValue;
   11802 
   11803     friend class Sema;
   11804     ConditionResult(Sema &S, Decl *ConditionVar, FullExprArg Condition,
   11805                     bool IsConstexpr)
   11806         : ConditionVar(ConditionVar), Condition(Condition), Invalid(false),
   11807           HasKnownValue(IsConstexpr && Condition.get() &&
   11808                         !Condition.get()->isValueDependent()),
   11809           KnownValue(HasKnownValue &&
   11810                      !!Condition.get()->EvaluateKnownConstInt(S.Context)) {}
   11811     explicit ConditionResult(bool Invalid)
   11812         : ConditionVar(nullptr), Condition(nullptr), Invalid(Invalid),
   11813           HasKnownValue(false), KnownValue(false) {}
   11814 
   11815   public:
   11816     ConditionResult() : ConditionResult(false) {}
   11817     bool isInvalid() const { return Invalid; }
   11818     std::pair<VarDecl *, Expr *> get() const {
   11819       return std::make_pair(cast_or_null<VarDecl>(ConditionVar),
   11820                             Condition.get());
   11821     }
   11822     llvm::Optional<bool> getKnownValue() const {
   11823       if (!HasKnownValue)
   11824         return None;
   11825       return KnownValue;
   11826     }
   11827   };
   11828   static ConditionResult ConditionError() { return ConditionResult(true); }
   11829 
   11830   enum class ConditionKind {
   11831     Boolean,     ///< A boolean condition, from 'if', 'while', 'for', or 'do'.
   11832     ConstexprIf, ///< A constant boolean condition from 'if constexpr'.
   11833     Switch       ///< An integral condition for a 'switch' statement.
   11834   };
   11835 
   11836   ConditionResult ActOnCondition(Scope *S, SourceLocation Loc,
   11837                                  Expr *SubExpr, ConditionKind CK);
   11838 
   11839   ConditionResult ActOnConditionVariable(Decl *ConditionVar,
   11840                                          SourceLocation StmtLoc,
   11841                                          ConditionKind CK);
   11842 
   11843   DeclResult ActOnCXXConditionDeclaration(Scope *S, Declarator &D);
   11844 
   11845   ExprResult CheckConditionVariable(VarDecl *ConditionVar,
   11846                                     SourceLocation StmtLoc,
   11847                                     ConditionKind CK);
   11848   ExprResult CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond);
   11849 
   11850   /// CheckBooleanCondition - Diagnose problems involving the use of
   11851   /// the given expression as a boolean condition (e.g. in an if
   11852   /// statement).  Also performs the standard function and array
   11853   /// decays, possibly changing the input variable.
   11854   ///
   11855   /// \param Loc - A location associated with the condition, e.g. the
   11856   /// 'if' keyword.
   11857   /// \return true iff there were any errors
   11858   ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E,
   11859                                    bool IsConstexpr = false);
   11860 
   11861   /// ActOnExplicitBoolSpecifier - Build an ExplicitSpecifier from an expression
   11862   /// found in an explicit(bool) specifier.
   11863   ExplicitSpecifier ActOnExplicitBoolSpecifier(Expr *E);
   11864 
   11865   /// tryResolveExplicitSpecifier - Attempt to resolve the explict specifier.
   11866   /// Returns true if the explicit specifier is now resolved.
   11867   bool tryResolveExplicitSpecifier(ExplicitSpecifier &ExplicitSpec);
   11868 
   11869   /// DiagnoseAssignmentAsCondition - Given that an expression is
   11870   /// being used as a boolean condition, warn if it's an assignment.
   11871   void DiagnoseAssignmentAsCondition(Expr *E);
   11872 
   11873   /// Redundant parentheses over an equality comparison can indicate
   11874   /// that the user intended an assignment used as condition.
   11875   void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE);
   11876 
   11877   /// CheckCXXBooleanCondition - Returns true if conversion to bool is invalid.
   11878   ExprResult CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr = false);
   11879 
   11880   /// ConvertIntegerToTypeWarnOnOverflow - Convert the specified APInt to have
   11881   /// the specified width and sign.  If an overflow occurs, detect it and emit
   11882   /// the specified diagnostic.
   11883   void ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &OldVal,
   11884                                           unsigned NewWidth, bool NewSign,
   11885                                           SourceLocation Loc, unsigned DiagID);
   11886 
   11887   /// Checks that the Objective-C declaration is declared in the global scope.
   11888   /// Emits an error and marks the declaration as invalid if it's not declared
   11889   /// in the global scope.
   11890   bool CheckObjCDeclScope(Decl *D);
   11891 
   11892   /// Abstract base class used for diagnosing integer constant
   11893   /// expression violations.
   11894   class VerifyICEDiagnoser {
   11895   public:
   11896     bool Suppress;
   11897 
   11898     VerifyICEDiagnoser(bool Suppress = false) : Suppress(Suppress) { }
   11899 
   11900     virtual SemaDiagnosticBuilder
   11901     diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T);
   11902     virtual SemaDiagnosticBuilder diagnoseNotICE(Sema &S,
   11903                                                  SourceLocation Loc) = 0;
   11904     virtual SemaDiagnosticBuilder diagnoseFold(Sema &S, SourceLocation Loc);
   11905     virtual ~VerifyICEDiagnoser() {}
   11906   };
   11907 
   11908   enum AllowFoldKind {
   11909     NoFold,
   11910     AllowFold,
   11911   };
   11912 
   11913   /// VerifyIntegerConstantExpression - Verifies that an expression is an ICE,
   11914   /// and reports the appropriate diagnostics. Returns false on success.
   11915   /// Can optionally return the value of the expression.
   11916   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
   11917                                              VerifyICEDiagnoser &Diagnoser,
   11918                                              AllowFoldKind CanFold = NoFold);
   11919   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
   11920                                              unsigned DiagID,
   11921                                              AllowFoldKind CanFold = NoFold);
   11922   ExprResult VerifyIntegerConstantExpression(Expr *E,
   11923                                              llvm::APSInt *Result = nullptr,
   11924                                              AllowFoldKind CanFold = NoFold);
   11925   ExprResult VerifyIntegerConstantExpression(Expr *E,
   11926                                              AllowFoldKind CanFold = NoFold) {
   11927     return VerifyIntegerConstantExpression(E, nullptr, CanFold);
   11928   }
   11929 
   11930   /// VerifyBitField - verifies that a bit field expression is an ICE and has
   11931   /// the correct width, and that the field type is valid.
   11932   /// Returns false on success.
   11933   /// Can optionally return whether the bit-field is of width 0
   11934   ExprResult VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName,
   11935                             QualType FieldTy, bool IsMsStruct,
   11936                             Expr *BitWidth, bool *ZeroWidth = nullptr);
   11937 
   11938 private:
   11939   unsigned ForceCUDAHostDeviceDepth = 0;
   11940 
   11941 public:
   11942   /// Increments our count of the number of times we've seen a pragma forcing
   11943   /// functions to be __host__ __device__.  So long as this count is greater
   11944   /// than zero, all functions encountered will be __host__ __device__.
   11945   void PushForceCUDAHostDevice();
   11946 
   11947   /// Decrements our count of the number of times we've seen a pragma forcing
   11948   /// functions to be __host__ __device__.  Returns false if the count is 0
   11949   /// before incrementing, so you can emit an error.
   11950   bool PopForceCUDAHostDevice();
   11951 
   11952   /// Diagnostics that are emitted only if we discover that the given function
   11953   /// must be codegen'ed.  Because handling these correctly adds overhead to
   11954   /// compilation, this is currently only enabled for CUDA compilations.
   11955   llvm::DenseMap<CanonicalDeclPtr<FunctionDecl>,
   11956                  std::vector<PartialDiagnosticAt>>
   11957       DeviceDeferredDiags;
   11958 
   11959   /// A pair of a canonical FunctionDecl and a SourceLocation.  When used as the
   11960   /// key in a hashtable, both the FD and location are hashed.
   11961   struct FunctionDeclAndLoc {
   11962     CanonicalDeclPtr<FunctionDecl> FD;
   11963     SourceLocation Loc;
   11964   };
   11965 
   11966   /// FunctionDecls and SourceLocations for which CheckCUDACall has emitted a
   11967   /// (maybe deferred) "bad call" diagnostic.  We use this to avoid emitting the
   11968   /// same deferred diag twice.
   11969   llvm::DenseSet<FunctionDeclAndLoc> LocsWithCUDACallDiags;
   11970 
   11971   /// An inverse call graph, mapping known-emitted functions to one of their
   11972   /// known-emitted callers (plus the location of the call).
   11973   ///
   11974   /// Functions that we can tell a priori must be emitted aren't added to this
   11975   /// map.
   11976   llvm::DenseMap</* Callee = */ CanonicalDeclPtr<FunctionDecl>,
   11977                  /* Caller = */ FunctionDeclAndLoc>
   11978       DeviceKnownEmittedFns;
   11979 
   11980   /// Creates a SemaDiagnosticBuilder that emits the diagnostic if the current
   11981   /// context is "used as device code".
   11982   ///
   11983   /// - If CurContext is a __host__ function, does not emit any diagnostics
   11984   ///   unless \p EmitOnBothSides is true.
   11985   /// - If CurContext is a __device__ or __global__ function, emits the
   11986   ///   diagnostics immediately.
   11987   /// - If CurContext is a __host__ __device__ function and we are compiling for
   11988   ///   the device, creates a diagnostic which is emitted if and when we realize
   11989   ///   that the function will be codegen'ed.
   11990   ///
   11991   /// Example usage:
   11992   ///
   11993   ///  // Variable-length arrays are not allowed in CUDA device code.
   11994   ///  if (CUDADiagIfDeviceCode(Loc, diag::err_cuda_vla) << CurrentCUDATarget())
   11995   ///    return ExprError();
   11996   ///  // Otherwise, continue parsing as normal.
   11997   SemaDiagnosticBuilder CUDADiagIfDeviceCode(SourceLocation Loc,
   11998                                              unsigned DiagID);
   11999 
   12000   /// Creates a SemaDiagnosticBuilder that emits the diagnostic if the current
   12001   /// context is "used as host code".
   12002   ///
   12003   /// Same as CUDADiagIfDeviceCode, with "host" and "device" switched.
   12004   SemaDiagnosticBuilder CUDADiagIfHostCode(SourceLocation Loc, unsigned DiagID);
   12005 
   12006   /// Creates a SemaDiagnosticBuilder that emits the diagnostic if the current
   12007   /// context is "used as device code".
   12008   ///
   12009   /// - If CurContext is a `declare target` function or it is known that the
   12010   /// function is emitted for the device, emits the diagnostics immediately.
   12011   /// - If CurContext is a non-`declare target` function and we are compiling
   12012   ///   for the device, creates a diagnostic which is emitted if and when we
   12013   ///   realize that the function will be codegen'ed.
   12014   ///
   12015   /// Example usage:
   12016   ///
   12017   ///  // Variable-length arrays are not allowed in NVPTX device code.
   12018   ///  if (diagIfOpenMPDeviceCode(Loc, diag::err_vla_unsupported))
   12019   ///    return ExprError();
   12020   ///  // Otherwise, continue parsing as normal.
   12021   SemaDiagnosticBuilder
   12022   diagIfOpenMPDeviceCode(SourceLocation Loc, unsigned DiagID, FunctionDecl *FD);
   12023 
   12024   /// Creates a SemaDiagnosticBuilder that emits the diagnostic if the current
   12025   /// context is "used as host code".
   12026   ///
   12027   /// - If CurContext is a `declare target` function or it is known that the
   12028   /// function is emitted for the host, emits the diagnostics immediately.
   12029   /// - If CurContext is a non-host function, just ignore it.
   12030   ///
   12031   /// Example usage:
   12032   ///
   12033   ///  // Variable-length arrays are not allowed in NVPTX device code.
   12034   ///  if (diagIfOpenMPHostode(Loc, diag::err_vla_unsupported))
   12035   ///    return ExprError();
   12036   ///  // Otherwise, continue parsing as normal.
   12037   SemaDiagnosticBuilder diagIfOpenMPHostCode(SourceLocation Loc,
   12038                                              unsigned DiagID, FunctionDecl *FD);
   12039 
   12040   SemaDiagnosticBuilder targetDiag(SourceLocation Loc, unsigned DiagID,
   12041                                    FunctionDecl *FD = nullptr);
   12042   SemaDiagnosticBuilder targetDiag(SourceLocation Loc,
   12043                                    const PartialDiagnostic &PD,
   12044                                    FunctionDecl *FD = nullptr) {
   12045     return targetDiag(Loc, PD.getDiagID(), FD) << PD;
   12046   }
   12047 
   12048   /// Check if the expression is allowed to be used in expressions for the
   12049   /// offloading devices.
   12050   void checkDeviceDecl(ValueDecl *D, SourceLocation Loc);
   12051 
   12052   enum CUDAFunctionTarget {
   12053     CFT_Device,
   12054     CFT_Global,
   12055     CFT_Host,
   12056     CFT_HostDevice,
   12057     CFT_InvalidTarget
   12058   };
   12059 
   12060   /// Determines whether the given function is a CUDA device/host/kernel/etc.
   12061   /// function.
   12062   ///
   12063   /// Use this rather than examining the function's attributes yourself -- you
   12064   /// will get it wrong.  Returns CFT_Host if D is null.
   12065   CUDAFunctionTarget IdentifyCUDATarget(const FunctionDecl *D,
   12066                                         bool IgnoreImplicitHDAttr = false);
   12067   CUDAFunctionTarget IdentifyCUDATarget(const ParsedAttributesView &Attrs);
   12068 
   12069   enum CUDAVariableTarget {
   12070     CVT_Device,  /// Emitted on device side with a shadow variable on host side
   12071     CVT_Host,    /// Emitted on host side only
   12072     CVT_Both,    /// Emitted on both sides with different addresses
   12073     CVT_Unified, /// Emitted as a unified address, e.g. managed variables
   12074   };
   12075   /// Determines whether the given variable is emitted on host or device side.
   12076   CUDAVariableTarget IdentifyCUDATarget(const VarDecl *D);
   12077 
   12078   /// Gets the CUDA target for the current context.
   12079   CUDAFunctionTarget CurrentCUDATarget() {
   12080     return IdentifyCUDATarget(dyn_cast<FunctionDecl>(CurContext));
   12081   }
   12082 
   12083   static bool isCUDAImplicitHostDeviceFunction(const FunctionDecl *D);
   12084 
   12085   // CUDA function call preference. Must be ordered numerically from
   12086   // worst to best.
   12087   enum CUDAFunctionPreference {
   12088     CFP_Never,      // Invalid caller/callee combination.
   12089     CFP_WrongSide,  // Calls from host-device to host or device
   12090                     // function that do not match current compilation
   12091                     // mode.
   12092     CFP_HostDevice, // Any calls to host/device functions.
   12093     CFP_SameSide,   // Calls from host-device to host or device
   12094                     // function matching current compilation mode.
   12095     CFP_Native,     // host-to-host or device-to-device calls.
   12096   };
   12097 
   12098   /// Identifies relative preference of a given Caller/Callee
   12099   /// combination, based on their host/device attributes.
   12100   /// \param Caller function which needs address of \p Callee.
   12101   ///               nullptr in case of global context.
   12102   /// \param Callee target function
   12103   ///
   12104   /// \returns preference value for particular Caller/Callee combination.
   12105   CUDAFunctionPreference IdentifyCUDAPreference(const FunctionDecl *Caller,
   12106                                                 const FunctionDecl *Callee);
   12107 
   12108   /// Determines whether Caller may invoke Callee, based on their CUDA
   12109   /// host/device attributes.  Returns false if the call is not allowed.
   12110   ///
   12111   /// Note: Will return true for CFP_WrongSide calls.  These may appear in
   12112   /// semantically correct CUDA programs, but only if they're never codegen'ed.
   12113   bool IsAllowedCUDACall(const FunctionDecl *Caller,
   12114                          const FunctionDecl *Callee) {
   12115     return IdentifyCUDAPreference(Caller, Callee) != CFP_Never;
   12116   }
   12117 
   12118   /// May add implicit CUDAHostAttr and CUDADeviceAttr attributes to FD,
   12119   /// depending on FD and the current compilation settings.
   12120   void maybeAddCUDAHostDeviceAttrs(FunctionDecl *FD,
   12121                                    const LookupResult &Previous);
   12122 
   12123   /// May add implicit CUDAConstantAttr attribute to VD, depending on VD
   12124   /// and current compilation settings.
   12125   void MaybeAddCUDAConstantAttr(VarDecl *VD);
   12126 
   12127 public:
   12128   /// Check whether we're allowed to call Callee from the current context.
   12129   ///
   12130   /// - If the call is never allowed in a semantically-correct program
   12131   ///   (CFP_Never), emits an error and returns false.
   12132   ///
   12133   /// - If the call is allowed in semantically-correct programs, but only if
   12134   ///   it's never codegen'ed (CFP_WrongSide), creates a deferred diagnostic to
   12135   ///   be emitted if and when the caller is codegen'ed, and returns true.
   12136   ///
   12137   ///   Will only create deferred diagnostics for a given SourceLocation once,
   12138   ///   so you can safely call this multiple times without generating duplicate
   12139   ///   deferred errors.
   12140   ///
   12141   /// - Otherwise, returns true without emitting any diagnostics.
   12142   bool CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee);
   12143 
   12144   void CUDACheckLambdaCapture(CXXMethodDecl *D, const sema::Capture &Capture);
   12145 
   12146   /// Set __device__ or __host__ __device__ attributes on the given lambda
   12147   /// operator() method.
   12148   ///
   12149   /// CUDA lambdas by default is host device function unless it has explicit
   12150   /// host or device attribute.
   12151   void CUDASetLambdaAttrs(CXXMethodDecl *Method);
   12152 
   12153   /// Finds a function in \p Matches with highest calling priority
   12154   /// from \p Caller context and erases all functions with lower
   12155   /// calling priority.
   12156   void EraseUnwantedCUDAMatches(
   12157       const FunctionDecl *Caller,
   12158       SmallVectorImpl<std::pair<DeclAccessPair, FunctionDecl *>> &Matches);
   12159 
   12160   /// Given a implicit special member, infer its CUDA target from the
   12161   /// calls it needs to make to underlying base/field special members.
   12162   /// \param ClassDecl the class for which the member is being created.
   12163   /// \param CSM the kind of special member.
   12164   /// \param MemberDecl the special member itself.
   12165   /// \param ConstRHS true if this is a copy operation with a const object on
   12166   ///        its RHS.
   12167   /// \param Diagnose true if this call should emit diagnostics.
   12168   /// \return true if there was an error inferring.
   12169   /// The result of this call is implicit CUDA target attribute(s) attached to
   12170   /// the member declaration.
   12171   bool inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl,
   12172                                                CXXSpecialMember CSM,
   12173                                                CXXMethodDecl *MemberDecl,
   12174                                                bool ConstRHS,
   12175                                                bool Diagnose);
   12176 
   12177   /// \return true if \p CD can be considered empty according to CUDA
   12178   /// (E.2.3.1 in CUDA 7.5 Programming guide).
   12179   bool isEmptyCudaConstructor(SourceLocation Loc, CXXConstructorDecl *CD);
   12180   bool isEmptyCudaDestructor(SourceLocation Loc, CXXDestructorDecl *CD);
   12181 
   12182   // \brief Checks that initializers of \p Var satisfy CUDA restrictions. In
   12183   // case of error emits appropriate diagnostic and invalidates \p Var.
   12184   //
   12185   // \details CUDA allows only empty constructors as initializers for global
   12186   // variables (see E.2.3.1, CUDA 7.5). The same restriction also applies to all
   12187   // __shared__ variables whether they are local or not (they all are implicitly
   12188   // static in CUDA). One exception is that CUDA allows constant initializers
   12189   // for __constant__ and __device__ variables.
   12190   void checkAllowedCUDAInitializer(VarDecl *VD);
   12191 
   12192   /// Check whether NewFD is a valid overload for CUDA. Emits
   12193   /// diagnostics and invalidates NewFD if not.
   12194   void checkCUDATargetOverload(FunctionDecl *NewFD,
   12195                                const LookupResult &Previous);
   12196   /// Copies target attributes from the template TD to the function FD.
   12197   void inheritCUDATargetAttrs(FunctionDecl *FD, const FunctionTemplateDecl &TD);
   12198 
   12199   /// Returns the name of the launch configuration function.  This is the name
   12200   /// of the function that will be called to configure kernel call, with the
   12201   /// parameters specified via <<<>>>.
   12202   std::string getCudaConfigureFuncName() const;
   12203 
   12204   /// \name Code completion
   12205   //@{
   12206   /// Describes the context in which code completion occurs.
   12207   enum ParserCompletionContext {
   12208     /// Code completion occurs at top-level or namespace context.
   12209     PCC_Namespace,
   12210     /// Code completion occurs within a class, struct, or union.
   12211     PCC_Class,
   12212     /// Code completion occurs within an Objective-C interface, protocol,
   12213     /// or category.
   12214     PCC_ObjCInterface,
   12215     /// Code completion occurs within an Objective-C implementation or
   12216     /// category implementation
   12217     PCC_ObjCImplementation,
   12218     /// Code completion occurs within the list of instance variables
   12219     /// in an Objective-C interface, protocol, category, or implementation.
   12220     PCC_ObjCInstanceVariableList,
   12221     /// Code completion occurs following one or more template
   12222     /// headers.
   12223     PCC_Template,
   12224     /// Code completion occurs following one or more template
   12225     /// headers within a class.
   12226     PCC_MemberTemplate,
   12227     /// Code completion occurs within an expression.
   12228     PCC_Expression,
   12229     /// Code completion occurs within a statement, which may
   12230     /// also be an expression or a declaration.
   12231     PCC_Statement,
   12232     /// Code completion occurs at the beginning of the
   12233     /// initialization statement (or expression) in a for loop.
   12234     PCC_ForInit,
   12235     /// Code completion occurs within the condition of an if,
   12236     /// while, switch, or for statement.
   12237     PCC_Condition,
   12238     /// Code completion occurs within the body of a function on a
   12239     /// recovery path, where we do not have a specific handle on our position
   12240     /// in the grammar.
   12241     PCC_RecoveryInFunction,
   12242     /// Code completion occurs where only a type is permitted.
   12243     PCC_Type,
   12244     /// Code completion occurs in a parenthesized expression, which
   12245     /// might also be a type cast.
   12246     PCC_ParenthesizedExpression,
   12247     /// Code completion occurs within a sequence of declaration
   12248     /// specifiers within a function, method, or block.
   12249     PCC_LocalDeclarationSpecifiers
   12250   };
   12251 
   12252   void CodeCompleteModuleImport(SourceLocation ImportLoc, ModuleIdPath Path);
   12253   void CodeCompleteOrdinaryName(Scope *S,
   12254                                 ParserCompletionContext CompletionContext);
   12255   void CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
   12256                             bool AllowNonIdentifiers,
   12257                             bool AllowNestedNameSpecifiers);
   12258 
   12259   struct CodeCompleteExpressionData;
   12260   void CodeCompleteExpression(Scope *S,
   12261                               const CodeCompleteExpressionData &Data);
   12262   void CodeCompleteExpression(Scope *S, QualType PreferredType,
   12263                               bool IsParenthesized = false);
   12264   void CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base, Expr *OtherOpBase,
   12265                                        SourceLocation OpLoc, bool IsArrow,
   12266                                        bool IsBaseExprStatement,
   12267                                        QualType PreferredType);
   12268   void CodeCompletePostfixExpression(Scope *S, ExprResult LHS,
   12269                                      QualType PreferredType);
   12270   void CodeCompleteTag(Scope *S, unsigned TagSpec);
   12271   void CodeCompleteTypeQualifiers(DeclSpec &DS);
   12272   void CodeCompleteFunctionQualifiers(DeclSpec &DS, Declarator &D,
   12273                                       const VirtSpecifiers *VS = nullptr);
   12274   void CodeCompleteBracketDeclarator(Scope *S);
   12275   void CodeCompleteCase(Scope *S);
   12276   /// Determines the preferred type of the current function argument, by
   12277   /// examining the signatures of all possible overloads.
   12278   /// Returns null if unknown or ambiguous, or if code completion is off.
   12279   ///
   12280   /// If the code completion point has been reached, also reports the function
   12281   /// signatures that were considered.
   12282   ///
   12283   /// FIXME: rename to GuessCallArgumentType to reduce confusion.
   12284   QualType ProduceCallSignatureHelp(Scope *S, Expr *Fn, ArrayRef<Expr *> Args,
   12285                                     SourceLocation OpenParLoc);
   12286   QualType ProduceConstructorSignatureHelp(Scope *S, QualType Type,
   12287                                            SourceLocation Loc,
   12288                                            ArrayRef<Expr *> Args,
   12289                                            SourceLocation OpenParLoc);
   12290   QualType ProduceCtorInitMemberSignatureHelp(Scope *S, Decl *ConstructorDecl,
   12291                                               CXXScopeSpec SS,
   12292                                               ParsedType TemplateTypeTy,
   12293                                               ArrayRef<Expr *> ArgExprs,
   12294                                               IdentifierInfo *II,
   12295                                               SourceLocation OpenParLoc);
   12296   void CodeCompleteInitializer(Scope *S, Decl *D);
   12297   /// Trigger code completion for a record of \p BaseType. \p InitExprs are
   12298   /// expressions in the initializer list seen so far and \p D is the current
   12299   /// Designation being parsed.
   12300   void CodeCompleteDesignator(const QualType BaseType,
   12301                               llvm::ArrayRef<Expr *> InitExprs,
   12302                               const Designation &D);
   12303   void CodeCompleteAfterIf(Scope *S, bool IsBracedThen);
   12304 
   12305   void CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS, bool EnteringContext,
   12306                                bool IsUsingDeclaration, QualType BaseType,
   12307                                QualType PreferredType);
   12308   void CodeCompleteUsing(Scope *S);
   12309   void CodeCompleteUsingDirective(Scope *S);
   12310   void CodeCompleteNamespaceDecl(Scope *S);
   12311   void CodeCompleteNamespaceAliasDecl(Scope *S);
   12312   void CodeCompleteOperatorName(Scope *S);
   12313   void CodeCompleteConstructorInitializer(
   12314                                 Decl *Constructor,
   12315                                 ArrayRef<CXXCtorInitializer *> Initializers);
   12316 
   12317   void CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro,
   12318                                     bool AfterAmpersand);
   12319   void CodeCompleteAfterFunctionEquals(Declarator &D);
   12320 
   12321   void CodeCompleteObjCAtDirective(Scope *S);
   12322   void CodeCompleteObjCAtVisibility(Scope *S);
   12323   void CodeCompleteObjCAtStatement(Scope *S);
   12324   void CodeCompleteObjCAtExpression(Scope *S);
   12325   void CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS);
   12326   void CodeCompleteObjCPropertyGetter(Scope *S);
   12327   void CodeCompleteObjCPropertySetter(Scope *S);
   12328   void CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
   12329                                    bool IsParameter);
   12330   void CodeCompleteObjCMessageReceiver(Scope *S);
   12331   void CodeCompleteObjCSuperMessage(Scope *S, SourceLocation SuperLoc,
   12332                                     ArrayRef<IdentifierInfo *> SelIdents,
   12333                                     bool AtArgumentExpression);
   12334   void CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver,
   12335                                     ArrayRef<IdentifierInfo *> SelIdents,
   12336                                     bool AtArgumentExpression,
   12337                                     bool IsSuper = false);
   12338   void CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver,
   12339                                        ArrayRef<IdentifierInfo *> SelIdents,
   12340                                        bool AtArgumentExpression,
   12341                                        ObjCInterfaceDecl *Super = nullptr);
   12342   void CodeCompleteObjCForCollection(Scope *S,
   12343                                      DeclGroupPtrTy IterationVar);
   12344   void CodeCompleteObjCSelector(Scope *S,
   12345                                 ArrayRef<IdentifierInfo *> SelIdents);
   12346   void CodeCompleteObjCProtocolReferences(
   12347                                          ArrayRef<IdentifierLocPair> Protocols);
   12348   void CodeCompleteObjCProtocolDecl(Scope *S);
   12349   void CodeCompleteObjCInterfaceDecl(Scope *S);
   12350   void CodeCompleteObjCSuperclass(Scope *S,
   12351                                   IdentifierInfo *ClassName,
   12352                                   SourceLocation ClassNameLoc);
   12353   void CodeCompleteObjCImplementationDecl(Scope *S);
   12354   void CodeCompleteObjCInterfaceCategory(Scope *S,
   12355                                          IdentifierInfo *ClassName,
   12356                                          SourceLocation ClassNameLoc);
   12357   void CodeCompleteObjCImplementationCategory(Scope *S,
   12358                                               IdentifierInfo *ClassName,
   12359                                               SourceLocation ClassNameLoc);
   12360   void CodeCompleteObjCPropertyDefinition(Scope *S);
   12361   void CodeCompleteObjCPropertySynthesizeIvar(Scope *S,
   12362                                               IdentifierInfo *PropertyName);
   12363   void CodeCompleteObjCMethodDecl(Scope *S, Optional<bool> IsInstanceMethod,
   12364                                   ParsedType ReturnType);
   12365   void CodeCompleteObjCMethodDeclSelector(Scope *S,
   12366                                           bool IsInstanceMethod,
   12367                                           bool AtParameterName,
   12368                                           ParsedType ReturnType,
   12369                                           ArrayRef<IdentifierInfo *> SelIdents);
   12370   void CodeCompleteObjCClassPropertyRefExpr(Scope *S, IdentifierInfo &ClassName,
   12371                                             SourceLocation ClassNameLoc,
   12372                                             bool IsBaseExprStatement);
   12373   void CodeCompletePreprocessorDirective(bool InConditional);
   12374   void CodeCompleteInPreprocessorConditionalExclusion(Scope *S);
   12375   void CodeCompletePreprocessorMacroName(bool IsDefinition);
   12376   void CodeCompletePreprocessorExpression();
   12377   void CodeCompletePreprocessorMacroArgument(Scope *S,
   12378                                              IdentifierInfo *Macro,
   12379                                              MacroInfo *MacroInfo,
   12380                                              unsigned Argument);
   12381   void CodeCompleteIncludedFile(llvm::StringRef Dir, bool IsAngled);
   12382   void CodeCompleteNaturalLanguage();
   12383   void CodeCompleteAvailabilityPlatformName();
   12384   void GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator,
   12385                                    CodeCompletionTUInfo &CCTUInfo,
   12386                   SmallVectorImpl<CodeCompletionResult> &Results);
   12387   //@}
   12388 
   12389   //===--------------------------------------------------------------------===//
   12390   // Extra semantic analysis beyond the C type system
   12391 
   12392 public:
   12393   SourceLocation getLocationOfStringLiteralByte(const StringLiteral *SL,
   12394                                                 unsigned ByteNo) const;
   12395 
   12396 private:
   12397   void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
   12398                         const ArraySubscriptExpr *ASE=nullptr,
   12399                         bool AllowOnePastEnd=true, bool IndexNegated=false);
   12400   void CheckArrayAccess(const Expr *E);
   12401   // Used to grab the relevant information from a FormatAttr and a
   12402   // FunctionDeclaration.
   12403   struct FormatStringInfo {
   12404     unsigned FormatIdx;
   12405     unsigned FirstDataArg;
   12406     bool HasVAListArg;
   12407   };
   12408 
   12409   static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember,
   12410                                   FormatStringInfo *FSI);
   12411   bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,
   12412                          const FunctionProtoType *Proto);
   12413   bool CheckObjCMethodCall(ObjCMethodDecl *Method, SourceLocation loc,
   12414                            ArrayRef<const Expr *> Args);
   12415   bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
   12416                         const FunctionProtoType *Proto);
   12417   bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto);
   12418   void CheckConstructorCall(FunctionDecl *FDecl, QualType ThisType,
   12419                             ArrayRef<const Expr *> Args,
   12420                             const FunctionProtoType *Proto, SourceLocation Loc);
   12421 
   12422   void CheckArgAlignment(SourceLocation Loc, NamedDecl *FDecl,
   12423                          StringRef ParamName, QualType ArgTy, QualType ParamTy);
   12424 
   12425   void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
   12426                  const Expr *ThisArg, ArrayRef<const Expr *> Args,
   12427                  bool IsMemberFunction, SourceLocation Loc, SourceRange Range,
   12428                  VariadicCallType CallType);
   12429 
   12430   bool CheckObjCString(Expr *Arg);
   12431   ExprResult CheckOSLogFormatStringArg(Expr *Arg);
   12432 
   12433   ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl,
   12434                                       unsigned BuiltinID, CallExpr *TheCall);
   12435 
   12436   bool CheckTSBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12437                                   CallExpr *TheCall);
   12438 
   12439   void checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall);
   12440 
   12441   bool CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall,
   12442                                     unsigned MaxWidth);
   12443   bool CheckNeonBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12444                                     CallExpr *TheCall);
   12445   bool CheckMVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   12446   bool CheckSVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   12447   bool CheckCDEBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12448                                    CallExpr *TheCall);
   12449   bool CheckARMCoprocessorImmediate(const TargetInfo &TI, const Expr *CoprocArg,
   12450                                     bool WantCDE);
   12451   bool CheckARMBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12452                                    CallExpr *TheCall);
   12453 
   12454   bool CheckAArch64BuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12455                                        CallExpr *TheCall);
   12456   bool CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   12457   bool CheckHexagonBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   12458   bool CheckHexagonBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall);
   12459   bool CheckMipsBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12460                                     CallExpr *TheCall);
   12461   bool CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID,
   12462                            CallExpr *TheCall);
   12463   bool CheckMipsBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall);
   12464   bool CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   12465   bool CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall);
   12466   bool CheckX86BuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall);
   12467   bool CheckX86BuiltinTileArguments(unsigned BuiltinID, CallExpr *TheCall);
   12468   bool CheckX86BuiltinTileArgumentsRange(CallExpr *TheCall,
   12469                                          ArrayRef<int> ArgNums);
   12470   bool CheckX86BuiltinTileDuplicate(CallExpr *TheCall, ArrayRef<int> ArgNums);
   12471   bool CheckX86BuiltinTileRangeAndDuplicate(CallExpr *TheCall,
   12472                                             ArrayRef<int> ArgNums);
   12473   bool CheckX86BuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12474                                    CallExpr *TheCall);
   12475   bool CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12476                                    CallExpr *TheCall);
   12477   bool CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   12478   bool CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum);
   12479   bool CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
   12480                                      CallExpr *TheCall);
   12481 
   12482   bool SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall);
   12483   bool SemaBuiltinVAStartARMMicrosoft(CallExpr *Call);
   12484   bool SemaBuiltinUnorderedCompare(CallExpr *TheCall);
   12485   bool SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs);
   12486   bool SemaBuiltinComplex(CallExpr *TheCall);
   12487   bool SemaBuiltinVSX(CallExpr *TheCall);
   12488   bool SemaBuiltinOSLogFormat(CallExpr *TheCall);
   12489 
   12490 public:
   12491   // Used by C++ template instantiation.
   12492   ExprResult SemaBuiltinShuffleVector(CallExpr *TheCall);
   12493   ExprResult SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo,
   12494                                    SourceLocation BuiltinLoc,
   12495                                    SourceLocation RParenLoc);
   12496 
   12497 private:
   12498   bool SemaBuiltinPrefetch(CallExpr *TheCall);
   12499   bool SemaBuiltinAllocaWithAlign(CallExpr *TheCall);
   12500   bool SemaBuiltinAssume(CallExpr *TheCall);
   12501   bool SemaBuiltinAssumeAligned(CallExpr *TheCall);
   12502   bool SemaBuiltinLongjmp(CallExpr *TheCall);
   12503   bool SemaBuiltinSetjmp(CallExpr *TheCall);
   12504   ExprResult SemaBuiltinAtomicOverloaded(ExprResult TheCallResult);
   12505   ExprResult SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult);
   12506   ExprResult SemaAtomicOpsOverloaded(ExprResult TheCallResult,
   12507                                      AtomicExpr::AtomicOp Op);
   12508   ExprResult SemaBuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult,
   12509                                                     bool IsDelete);
   12510   bool SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum,
   12511                               llvm::APSInt &Result);
   12512   bool SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low,
   12513                                    int High, bool RangeIsError = true);
   12514   bool SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum,
   12515                                       unsigned Multiple);
   12516   bool SemaBuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum);
   12517   bool SemaBuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum,
   12518                                          unsigned ArgBits);
   12519   bool SemaBuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum,
   12520                                                unsigned ArgBits);
   12521   bool SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall,
   12522                                 int ArgNum, unsigned ExpectedFieldNum,
   12523                                 bool AllowName);
   12524   bool SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall);
   12525   bool SemaBuiltinPPCMMACall(CallExpr *TheCall, const char *TypeDesc);
   12526 
   12527   bool CheckPPCMMAType(QualType Type, SourceLocation TypeLoc);
   12528 
   12529   // Matrix builtin handling.
   12530   ExprResult SemaBuiltinMatrixTranspose(CallExpr *TheCall,
   12531                                         ExprResult CallResult);
   12532   ExprResult SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall,
   12533                                               ExprResult CallResult);
   12534   ExprResult SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall,
   12535                                                ExprResult CallResult);
   12536 
   12537 public:
   12538   enum FormatStringType {
   12539     FST_Scanf,
   12540     FST_Printf,
   12541     FST_NSString,
   12542     FST_Strftime,
   12543     FST_Strfmon,
   12544     FST_Kprintf,
   12545     FST_FreeBSDKPrintf,
   12546     FST_OSTrace,
   12547     FST_OSLog,
   12548     FST_Unknown
   12549   };
   12550   static FormatStringType GetFormatStringType(const FormatAttr *Format);
   12551 
   12552   bool FormatStringHasSArg(const StringLiteral *FExpr);
   12553 
   12554   static bool GetFormatNSStringIdx(const FormatAttr *Format, unsigned &Idx);
   12555 
   12556 private:
   12557   bool CheckFormatArguments(const FormatAttr *Format,
   12558                             ArrayRef<const Expr *> Args,
   12559                             bool IsCXXMember,
   12560                             VariadicCallType CallType,
   12561                             SourceLocation Loc, SourceRange Range,
   12562                             llvm::SmallBitVector &CheckedVarArgs);
   12563   bool CheckFormatArguments(ArrayRef<const Expr *> Args,
   12564                             bool HasVAListArg, unsigned format_idx,
   12565                             unsigned firstDataArg, FormatStringType Type,
   12566                             VariadicCallType CallType,
   12567                             SourceLocation Loc, SourceRange range,
   12568                             llvm::SmallBitVector &CheckedVarArgs);
   12569 
   12570   void CheckAbsoluteValueFunction(const CallExpr *Call,
   12571                                   const FunctionDecl *FDecl);
   12572 
   12573   void CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl);
   12574 
   12575   void CheckMemaccessArguments(const CallExpr *Call,
   12576                                unsigned BId,
   12577                                IdentifierInfo *FnName);
   12578 
   12579   void CheckStrlcpycatArguments(const CallExpr *Call,
   12580                                 IdentifierInfo *FnName);
   12581 
   12582   void CheckStrncatArguments(const CallExpr *Call,
   12583                              IdentifierInfo *FnName);
   12584 
   12585   void CheckFreeArguments(const CallExpr *E);
   12586 
   12587   void CheckReturnValExpr(Expr *RetValExp, QualType lhsType,
   12588                           SourceLocation ReturnLoc,
   12589                           bool isObjCMethod = false,
   12590                           const AttrVec *Attrs = nullptr,
   12591                           const FunctionDecl *FD = nullptr);
   12592 
   12593 public:
   12594   void CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS);
   12595 
   12596 private:
   12597   void CheckImplicitConversions(Expr *E, SourceLocation CC = SourceLocation());
   12598   void CheckBoolLikeConversion(Expr *E, SourceLocation CC);
   12599   void CheckForIntOverflow(Expr *E);
   12600   void CheckUnsequencedOperations(const Expr *E);
   12601 
   12602   /// Perform semantic checks on a completed expression. This will either
   12603   /// be a full-expression or a default argument expression.
   12604   void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(),
   12605                           bool IsConstexpr = false);
   12606 
   12607   void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field,
   12608                                    Expr *Init);
   12609 
   12610   /// Check if there is a field shadowing.
   12611   void CheckShadowInheritedFields(const SourceLocation &Loc,
   12612                                   DeclarationName FieldName,
   12613                                   const CXXRecordDecl *RD,
   12614                                   bool DeclIsField = true);
   12615 
   12616   /// Check if the given expression contains 'break' or 'continue'
   12617   /// statement that produces control flow different from GCC.
   12618   void CheckBreakContinueBinding(Expr *E);
   12619 
   12620   /// Check whether receiver is mutable ObjC container which
   12621   /// attempts to add itself into the container
   12622   void CheckObjCCircularContainer(ObjCMessageExpr *Message);
   12623 
   12624   void CheckTCBEnforcement(const CallExpr *TheCall, const FunctionDecl *Callee);
   12625 
   12626   void AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE);
   12627   void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc,
   12628                                  bool DeleteWasArrayForm);
   12629 public:
   12630   /// Register a magic integral constant to be used as a type tag.
   12631   void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind,
   12632                                   uint64_t MagicValue, QualType Type,
   12633                                   bool LayoutCompatible, bool MustBeNull);
   12634 
   12635   struct TypeTagData {
   12636     TypeTagData() {}
   12637 
   12638     TypeTagData(QualType Type, bool LayoutCompatible, bool MustBeNull) :
   12639         Type(Type), LayoutCompatible(LayoutCompatible),
   12640         MustBeNull(MustBeNull)
   12641     {}
   12642 
   12643     QualType Type;
   12644 
   12645     /// If true, \c Type should be compared with other expression's types for
   12646     /// layout-compatibility.
   12647     unsigned LayoutCompatible : 1;
   12648     unsigned MustBeNull : 1;
   12649   };
   12650 
   12651   /// A pair of ArgumentKind identifier and magic value.  This uniquely
   12652   /// identifies the magic value.
   12653   typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue;
   12654 
   12655 private:
   12656   /// A map from magic value to type information.
   12657   std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>>
   12658       TypeTagForDatatypeMagicValues;
   12659 
   12660   /// Peform checks on a call of a function with argument_with_type_tag
   12661   /// or pointer_with_type_tag attributes.
   12662   void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr,
   12663                                 const ArrayRef<const Expr *> ExprArgs,
   12664                                 SourceLocation CallSiteLoc);
   12665 
   12666   /// Check if we are taking the address of a packed field
   12667   /// as this may be a problem if the pointer value is dereferenced.
   12668   void CheckAddressOfPackedMember(Expr *rhs);
   12669 
   12670   /// The parser's current scope.
   12671   ///
   12672   /// The parser maintains this state here.
   12673   Scope *CurScope;
   12674 
   12675   mutable IdentifierInfo *Ident_super;
   12676   mutable IdentifierInfo *Ident___float128;
   12677 
   12678   /// Nullability type specifiers.
   12679   IdentifierInfo *Ident__Nonnull = nullptr;
   12680   IdentifierInfo *Ident__Nullable = nullptr;
   12681   IdentifierInfo *Ident__Nullable_result = nullptr;
   12682   IdentifierInfo *Ident__Null_unspecified = nullptr;
   12683 
   12684   IdentifierInfo *Ident_NSError = nullptr;
   12685 
   12686   /// The handler for the FileChanged preprocessor events.
   12687   ///
   12688   /// Used for diagnostics that implement custom semantic analysis for #include
   12689   /// directives, like -Wpragma-pack.
   12690   sema::SemaPPCallbacks *SemaPPCallbackHandler;
   12691 
   12692 protected:
   12693   friend class Parser;
   12694   friend class InitializationSequence;
   12695   friend class ASTReader;
   12696   friend class ASTDeclReader;
   12697   friend class ASTWriter;
   12698 
   12699 public:
   12700   /// Retrieve the keyword associated
   12701   IdentifierInfo *getNullabilityKeyword(NullabilityKind nullability);
   12702 
   12703   /// The struct behind the CFErrorRef pointer.
   12704   RecordDecl *CFError = nullptr;
   12705   bool isCFError(RecordDecl *D);
   12706 
   12707   /// Retrieve the identifier "NSError".
   12708   IdentifierInfo *getNSErrorIdent();
   12709 
   12710   /// Retrieve the parser's current scope.
   12711   ///
   12712   /// This routine must only be used when it is certain that semantic analysis
   12713   /// and the parser are in precisely the same context, which is not the case
   12714   /// when, e.g., we are performing any kind of template instantiation.
   12715   /// Therefore, the only safe places to use this scope are in the parser
   12716   /// itself and in routines directly invoked from the parser and *never* from
   12717   /// template substitution or instantiation.
   12718   Scope *getCurScope() const { return CurScope; }
   12719 
   12720   void incrementMSManglingNumber() const {
   12721     return CurScope->incrementMSManglingNumber();
   12722   }
   12723 
   12724   IdentifierInfo *getSuperIdentifier() const;
   12725   IdentifierInfo *getFloat128Identifier() const;
   12726 
   12727   Decl *getObjCDeclContext() const;
   12728 
   12729   DeclContext *getCurLexicalContext() const {
   12730     return OriginalLexicalContext ? OriginalLexicalContext : CurContext;
   12731   }
   12732 
   12733   const DeclContext *getCurObjCLexicalContext() const {
   12734     const DeclContext *DC = getCurLexicalContext();
   12735     // A category implicitly has the attribute of the interface.
   12736     if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(DC))
   12737       DC = CatD->getClassInterface();
   12738     return DC;
   12739   }
   12740 
   12741   /// Determine the number of levels of enclosing template parameters. This is
   12742   /// only usable while parsing. Note that this does not include dependent
   12743   /// contexts in which no template parameters have yet been declared, such as
   12744   /// in a terse function template or generic lambda before the first 'auto' is
   12745   /// encountered.
   12746   unsigned getTemplateDepth(Scope *S) const;
   12747 
   12748   /// To be used for checking whether the arguments being passed to
   12749   /// function exceeds the number of parameters expected for it.
   12750   static bool TooManyArguments(size_t NumParams, size_t NumArgs,
   12751                                bool PartialOverloading = false) {
   12752     // We check whether we're just after a comma in code-completion.
   12753     if (NumArgs > 0 && PartialOverloading)
   12754       return NumArgs + 1 > NumParams; // If so, we view as an extra argument.
   12755     return NumArgs > NumParams;
   12756   }
   12757 
   12758   // Emitting members of dllexported classes is delayed until the class
   12759   // (including field initializers) is fully parsed.
   12760   SmallVector<CXXRecordDecl*, 4> DelayedDllExportClasses;
   12761   SmallVector<CXXMethodDecl*, 4> DelayedDllExportMemberFunctions;
   12762 
   12763 private:
   12764   int ParsingClassDepth = 0;
   12765 
   12766   class SavePendingParsedClassStateRAII {
   12767   public:
   12768     SavePendingParsedClassStateRAII(Sema &S) : S(S) { swapSavedState(); }
   12769 
   12770     ~SavePendingParsedClassStateRAII() {
   12771       assert(S.DelayedOverridingExceptionSpecChecks.empty() &&
   12772              "there shouldn't be any pending delayed exception spec checks");
   12773       assert(S.DelayedEquivalentExceptionSpecChecks.empty() &&
   12774              "there shouldn't be any pending delayed exception spec checks");
   12775       swapSavedState();
   12776     }
   12777 
   12778   private:
   12779     Sema &S;
   12780     decltype(DelayedOverridingExceptionSpecChecks)
   12781         SavedOverridingExceptionSpecChecks;
   12782     decltype(DelayedEquivalentExceptionSpecChecks)
   12783         SavedEquivalentExceptionSpecChecks;
   12784 
   12785     void swapSavedState() {
   12786       SavedOverridingExceptionSpecChecks.swap(
   12787           S.DelayedOverridingExceptionSpecChecks);
   12788       SavedEquivalentExceptionSpecChecks.swap(
   12789           S.DelayedEquivalentExceptionSpecChecks);
   12790     }
   12791   };
   12792 
   12793   /// Helper class that collects misaligned member designations and
   12794   /// their location info for delayed diagnostics.
   12795   struct MisalignedMember {
   12796     Expr *E;
   12797     RecordDecl *RD;
   12798     ValueDecl *MD;
   12799     CharUnits Alignment;
   12800 
   12801     MisalignedMember() : E(), RD(), MD(), Alignment() {}
   12802     MisalignedMember(Expr *E, RecordDecl *RD, ValueDecl *MD,
   12803                      CharUnits Alignment)
   12804         : E(E), RD(RD), MD(MD), Alignment(Alignment) {}
   12805     explicit MisalignedMember(Expr *E)
   12806         : MisalignedMember(E, nullptr, nullptr, CharUnits()) {}
   12807 
   12808     bool operator==(const MisalignedMember &m) { return this->E == m.E; }
   12809   };
   12810   /// Small set of gathered accesses to potentially misaligned members
   12811   /// due to the packed attribute.
   12812   SmallVector<MisalignedMember, 4> MisalignedMembers;
   12813 
   12814   /// Adds an expression to the set of gathered misaligned members.
   12815   void AddPotentialMisalignedMembers(Expr *E, RecordDecl *RD, ValueDecl *MD,
   12816                                      CharUnits Alignment);
   12817 
   12818 public:
   12819   /// Diagnoses the current set of gathered accesses. This typically
   12820   /// happens at full expression level. The set is cleared after emitting the
   12821   /// diagnostics.
   12822   void DiagnoseMisalignedMembers();
   12823 
   12824   /// This function checks if the expression is in the sef of potentially
   12825   /// misaligned members and it is converted to some pointer type T with lower
   12826   /// or equal alignment requirements. If so it removes it. This is used when
   12827   /// we do not want to diagnose such misaligned access (e.g. in conversions to
   12828   /// void*).
   12829   void DiscardMisalignedMemberAddress(const Type *T, Expr *E);
   12830 
   12831   /// This function calls Action when it determines that E designates a
   12832   /// misaligned member due to the packed attribute. This is used to emit
   12833   /// local diagnostics like in reference binding.
   12834   void RefersToMemberWithReducedAlignment(
   12835       Expr *E,
   12836       llvm::function_ref<void(Expr *, RecordDecl *, FieldDecl *, CharUnits)>
   12837           Action);
   12838 
   12839   /// Describes the reason a calling convention specification was ignored, used
   12840   /// for diagnostics.
   12841   enum class CallingConventionIgnoredReason {
   12842     ForThisTarget = 0,
   12843     VariadicFunction,
   12844     ConstructorDestructor,
   12845     BuiltinFunction
   12846   };
   12847   /// Creates a SemaDiagnosticBuilder that emits the diagnostic if the current
   12848   /// context is "used as device code".
   12849   ///
   12850   /// - If CurLexicalContext is a kernel function or it is known that the
   12851   ///   function will be emitted for the device, emits the diagnostics
   12852   ///   immediately.
   12853   /// - If CurLexicalContext is a function and we are compiling
   12854   ///   for the device, but we don't know that this function will be codegen'ed
   12855   ///   for devive yet, creates a diagnostic which is emitted if and when we
   12856   ///   realize that the function will be codegen'ed.
   12857   ///
   12858   /// Example usage:
   12859   ///
   12860   /// Diagnose __float128 type usage only from SYCL device code if the current
   12861   /// target doesn't support it
   12862   /// if (!S.Context.getTargetInfo().hasFloat128Type() &&
   12863   ///     S.getLangOpts().SYCLIsDevice)
   12864   ///   SYCLDiagIfDeviceCode(Loc, diag::err_type_unsupported) << "__float128";
   12865   SemaDiagnosticBuilder SYCLDiagIfDeviceCode(SourceLocation Loc,
   12866                                              unsigned DiagID);
   12867 
   12868   /// Check whether we're allowed to call Callee from the current context.
   12869   ///
   12870   /// - If the call is never allowed in a semantically-correct program
   12871   ///   emits an error and returns false.
   12872   ///
   12873   /// - If the call is allowed in semantically-correct programs, but only if
   12874   ///   it's never codegen'ed, creates a deferred diagnostic to be emitted if
   12875   ///   and when the caller is codegen'ed, and returns true.
   12876   ///
   12877   /// - Otherwise, returns true without emitting any diagnostics.
   12878   ///
   12879   /// Adds Callee to DeviceCallGraph if we don't know if its caller will be
   12880   /// codegen'ed yet.
   12881   bool checkSYCLDeviceFunction(SourceLocation Loc, FunctionDecl *Callee);
   12882 };
   12883 
   12884 /// RAII object that enters a new expression evaluation context.
   12885 class EnterExpressionEvaluationContext {
   12886   Sema &Actions;
   12887   bool Entered = true;
   12888 
   12889 public:
   12890   EnterExpressionEvaluationContext(
   12891       Sema &Actions, Sema::ExpressionEvaluationContext NewContext,
   12892       Decl *LambdaContextDecl = nullptr,
   12893       Sema::ExpressionEvaluationContextRecord::ExpressionKind ExprContext =
   12894           Sema::ExpressionEvaluationContextRecord::EK_Other,
   12895       bool ShouldEnter = true)
   12896       : Actions(Actions), Entered(ShouldEnter) {
   12897     if (Entered)
   12898       Actions.PushExpressionEvaluationContext(NewContext, LambdaContextDecl,
   12899                                               ExprContext);
   12900   }
   12901   EnterExpressionEvaluationContext(
   12902       Sema &Actions, Sema::ExpressionEvaluationContext NewContext,
   12903       Sema::ReuseLambdaContextDecl_t,
   12904       Sema::ExpressionEvaluationContextRecord::ExpressionKind ExprContext =
   12905           Sema::ExpressionEvaluationContextRecord::EK_Other)
   12906       : Actions(Actions) {
   12907     Actions.PushExpressionEvaluationContext(
   12908         NewContext, Sema::ReuseLambdaContextDecl, ExprContext);
   12909   }
   12910 
   12911   enum InitListTag { InitList };
   12912   EnterExpressionEvaluationContext(Sema &Actions, InitListTag,
   12913                                    bool ShouldEnter = true)
   12914       : Actions(Actions), Entered(false) {
   12915     // In C++11 onwards, narrowing checks are performed on the contents of
   12916     // braced-init-lists, even when they occur within unevaluated operands.
   12917     // Therefore we still need to instantiate constexpr functions used in such
   12918     // a context.
   12919     if (ShouldEnter && Actions.isUnevaluatedContext() &&
   12920         Actions.getLangOpts().CPlusPlus11) {
   12921       Actions.PushExpressionEvaluationContext(
   12922           Sema::ExpressionEvaluationContext::UnevaluatedList);
   12923       Entered = true;
   12924     }
   12925   }
   12926 
   12927   ~EnterExpressionEvaluationContext() {
   12928     if (Entered)
   12929       Actions.PopExpressionEvaluationContext();
   12930   }
   12931 };
   12932 
   12933 DeductionFailureInfo
   12934 MakeDeductionFailureInfo(ASTContext &Context, Sema::TemplateDeductionResult TDK,
   12935                          sema::TemplateDeductionInfo &Info);
   12936 
   12937 /// Contains a late templated function.
   12938 /// Will be parsed at the end of the translation unit, used by Sema & Parser.
   12939 struct LateParsedTemplate {
   12940   CachedTokens Toks;
   12941   /// The template function declaration to be late parsed.
   12942   Decl *D;
   12943 };
   12944 
   12945 template <>
   12946 void Sema::PragmaStack<Sema::AlignPackInfo>::Act(SourceLocation PragmaLocation,
   12947                                                  PragmaMsStackAction Action,
   12948                                                  llvm::StringRef StackSlotLabel,
   12949                                                  AlignPackInfo Value);
   12950 
   12951 } // end namespace clang
   12952 
   12953 namespace llvm {
   12954 // Hash a FunctionDeclAndLoc by looking at both its FunctionDecl and its
   12955 // SourceLocation.
   12956 template <> struct DenseMapInfo<clang::Sema::FunctionDeclAndLoc> {
   12957   using FunctionDeclAndLoc = clang::Sema::FunctionDeclAndLoc;
   12958   using FDBaseInfo = DenseMapInfo<clang::CanonicalDeclPtr<clang::FunctionDecl>>;
   12959 
   12960   static FunctionDeclAndLoc getEmptyKey() {
   12961     return {FDBaseInfo::getEmptyKey(), clang::SourceLocation()};
   12962   }
   12963 
   12964   static FunctionDeclAndLoc getTombstoneKey() {
   12965     return {FDBaseInfo::getTombstoneKey(), clang::SourceLocation()};
   12966   }
   12967 
   12968   static unsigned getHashValue(const FunctionDeclAndLoc &FDL) {
   12969     return hash_combine(FDBaseInfo::getHashValue(FDL.FD),
   12970                         FDL.Loc.getHashValue());
   12971   }
   12972 
   12973   static bool isEqual(const FunctionDeclAndLoc &LHS,
   12974                       const FunctionDeclAndLoc &RHS) {
   12975     return LHS.FD == RHS.FD && LHS.Loc == RHS.Loc;
   12976   }
   12977 };
   12978 } // namespace llvm
   12979 
   12980 #endif
   12981