• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===--- Sema.h - Semantic Analysis & AST Building --------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the Sema class, which performs semantic analysis and
11 // builds ASTs.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_CLANG_SEMA_SEMA_H
16 #define LLVM_CLANG_SEMA_SEMA_H
17 
18 #include "clang/AST/Attr.h"
19 #include "clang/AST/DeclarationName.h"
20 #include "clang/AST/Expr.h"
21 #include "clang/AST/ExprObjC.h"
22 #include "clang/AST/ExternalASTSource.h"
23 #include "clang/AST/LocInfoType.h"
24 #include "clang/AST/MangleNumberingContext.h"
25 #include "clang/AST/NSAPI.h"
26 #include "clang/AST/PrettyPrinter.h"
27 #include "clang/AST/TypeLoc.h"
28 #include "clang/Basic/ExpressionTraits.h"
29 #include "clang/Basic/LangOptions.h"
30 #include "clang/Basic/Module.h"
31 #include "clang/Basic/OpenMPKinds.h"
32 #include "clang/Basic/PragmaKinds.h"
33 #include "clang/Basic/Specifiers.h"
34 #include "clang/Basic/TemplateKinds.h"
35 #include "clang/Basic/TypeTraits.h"
36 #include "clang/Sema/AnalysisBasedWarnings.h"
37 #include "clang/Sema/CleanupInfo.h"
38 #include "clang/Sema/DeclSpec.h"
39 #include "clang/Sema/ExternalSemaSource.h"
40 #include "clang/Sema/IdentifierResolver.h"
41 #include "clang/Sema/ObjCMethodList.h"
42 #include "clang/Sema/Ownership.h"
43 #include "clang/Sema/Scope.h"
44 #include "clang/Sema/ScopeInfo.h"
45 #include "clang/Sema/TypoCorrection.h"
46 #include "clang/Sema/Weak.h"
47 #include "llvm/ADT/ArrayRef.h"
48 #include "llvm/ADT/Optional.h"
49 #include "llvm/ADT/SetVector.h"
50 #include "llvm/ADT/SmallPtrSet.h"
51 #include "llvm/ADT/SmallVector.h"
52 #include "llvm/ADT/TinyPtrVector.h"
53 #include <deque>
54 #include <memory>
55 #include <string>
56 #include <vector>
57 
58 namespace llvm {
59   class APSInt;
60   template <typename ValueT> struct DenseMapInfo;
61   template <typename ValueT, typename ValueInfoT> class DenseSet;
62   class SmallBitVector;
63   class InlineAsmIdentifierInfo;
64 }
65 
66 namespace clang {
67   class ADLResult;
68   class ASTConsumer;
69   class ASTContext;
70   class ASTMutationListener;
71   class ASTReader;
72   class ASTWriter;
73   class ArrayType;
74   class AttributeList;
75   class BlockDecl;
76   class CapturedDecl;
77   class CXXBasePath;
78   class CXXBasePaths;
79   class CXXBindTemporaryExpr;
80   typedef SmallVector<CXXBaseSpecifier*, 4> CXXCastPath;
81   class CXXConstructorDecl;
82   class CXXConversionDecl;
83   class CXXDeleteExpr;
84   class CXXDestructorDecl;
85   class CXXFieldCollector;
86   class CXXMemberCallExpr;
87   class CXXMethodDecl;
88   class CXXScopeSpec;
89   class CXXTemporary;
90   class CXXTryStmt;
91   class CallExpr;
92   class ClassTemplateDecl;
93   class ClassTemplatePartialSpecializationDecl;
94   class ClassTemplateSpecializationDecl;
95   class VarTemplatePartialSpecializationDecl;
96   class CodeCompleteConsumer;
97   class CodeCompletionAllocator;
98   class CodeCompletionTUInfo;
99   class CodeCompletionResult;
100   class Decl;
101   class DeclAccessPair;
102   class DeclContext;
103   class DeclRefExpr;
104   class DeclaratorDecl;
105   class DeducedTemplateArgument;
106   class DependentDiagnostic;
107   class DesignatedInitExpr;
108   class Designation;
109   class EnableIfAttr;
110   class EnumConstantDecl;
111   class Expr;
112   class ExtVectorType;
113   class FormatAttr;
114   class FriendDecl;
115   class FunctionDecl;
116   class FunctionProtoType;
117   class FunctionTemplateDecl;
118   class ImplicitConversionSequence;
119   class InitListExpr;
120   class InitializationKind;
121   class InitializationSequence;
122   class InitializedEntity;
123   class IntegerLiteral;
124   class LabelStmt;
125   class LambdaExpr;
126   class LangOptions;
127   class LocalInstantiationScope;
128   class LookupResult;
129   class MacroInfo;
130   typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath;
131   class ModuleLoader;
132   class MultiLevelTemplateArgumentList;
133   class NamedDecl;
134   class ObjCCategoryDecl;
135   class ObjCCategoryImplDecl;
136   class ObjCCompatibleAliasDecl;
137   class ObjCContainerDecl;
138   class ObjCImplDecl;
139   class ObjCImplementationDecl;
140   class ObjCInterfaceDecl;
141   class ObjCIvarDecl;
142   template <class T> class ObjCList;
143   class ObjCMessageExpr;
144   class ObjCMethodDecl;
145   class ObjCPropertyDecl;
146   class ObjCProtocolDecl;
147   class OMPThreadPrivateDecl;
148   class OMPDeclareReductionDecl;
149   class OMPDeclareSimdDecl;
150   class OMPClause;
151   struct OverloadCandidate;
152   class OverloadCandidateSet;
153   class OverloadExpr;
154   class ParenListExpr;
155   class ParmVarDecl;
156   class Preprocessor;
157   class PseudoDestructorTypeStorage;
158   class PseudoObjectExpr;
159   class QualType;
160   class StandardConversionSequence;
161   class Stmt;
162   class StringLiteral;
163   class SwitchStmt;
164   class TemplateArgument;
165   class TemplateArgumentList;
166   class TemplateArgumentLoc;
167   class TemplateDecl;
168   class TemplateParameterList;
169   class TemplatePartialOrderingContext;
170   class TemplateTemplateParmDecl;
171   class Token;
172   class TypeAliasDecl;
173   class TypedefDecl;
174   class TypedefNameDecl;
175   class TypeLoc;
176   class TypoCorrectionConsumer;
177   class UnqualifiedId;
178   class UnresolvedLookupExpr;
179   class UnresolvedMemberExpr;
180   class UnresolvedSetImpl;
181   class UnresolvedSetIterator;
182   class UsingDecl;
183   class UsingShadowDecl;
184   class ValueDecl;
185   class VarDecl;
186   class VarTemplateSpecializationDecl;
187   class VisibilityAttr;
188   class VisibleDeclConsumer;
189   class IndirectFieldDecl;
190   struct DeductionFailureInfo;
191   class TemplateSpecCandidateSet;
192 
193 namespace sema {
194   class AccessedEntity;
195   class BlockScopeInfo;
196   class CapturedRegionScopeInfo;
197   class CapturingScopeInfo;
198   class CompoundScopeInfo;
199   class DelayedDiagnostic;
200   class DelayedDiagnosticPool;
201   class FunctionScopeInfo;
202   class LambdaScopeInfo;
203   class PossiblyUnreachableDiag;
204   class TemplateDeductionInfo;
205 }
206 
207 namespace threadSafety {
208   class BeforeSet;
209   void threadSafetyCleanup(BeforeSet* Cache);
210 }
211 
212 // FIXME: No way to easily map from TemplateTypeParmTypes to
213 // TemplateTypeParmDecls, so we have this horrible PointerUnion.
214 typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType*, NamedDecl*>,
215                   SourceLocation> UnexpandedParameterPack;
216 
217 /// Describes whether we've seen any nullability information for the given
218 /// file.
219 struct FileNullability {
220   /// The first pointer declarator (of any pointer kind) in the file that does
221   /// not have a corresponding nullability annotation.
222   SourceLocation PointerLoc;
223 
224   /// Which kind of pointer declarator we saw.
225   uint8_t PointerKind;
226 
227   /// Whether we saw any type nullability annotations in the given file.
228   bool SawTypeNullability = false;
229 };
230 
231 /// A mapping from file IDs to a record of whether we've seen nullability
232 /// information in that file.
233 class FileNullabilityMap {
234   /// A mapping from file IDs to the nullability information for each file ID.
235   llvm::DenseMap<FileID, FileNullability> Map;
236 
237   /// A single-element cache based on the file ID.
238   struct {
239     FileID File;
240     FileNullability Nullability;
241   } Cache;
242 
243 public:
244   FileNullability &operator[](FileID file) {
245     // Check the single-element cache.
246     if (file == Cache.File)
247       return Cache.Nullability;
248 
249     // It's not in the single-element cache; flush the cache if we have one.
250     if (!Cache.File.isInvalid()) {
251       Map[Cache.File] = Cache.Nullability;
252     }
253 
254     // Pull this entry into the cache.
255     Cache.File = file;
256     Cache.Nullability = Map[file];
257     return Cache.Nullability;
258   }
259 };
260 
261 /// Sema - This implements semantic analysis and AST building for C.
262 class Sema {
263   Sema(const Sema &) = delete;
264   void operator=(const Sema &) = delete;
265 
266   ///\brief Source of additional semantic information.
267   ExternalSemaSource *ExternalSource;
268 
269   ///\brief Whether Sema has generated a multiplexer and has to delete it.
270   bool isMultiplexExternalSource;
271 
272   static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD);
273 
274   bool isVisibleSlow(const NamedDecl *D);
275 
shouldLinkPossiblyHiddenDecl(const NamedDecl * Old,const NamedDecl * New)276   bool shouldLinkPossiblyHiddenDecl(const NamedDecl *Old,
277                                     const NamedDecl *New) {
278     // We are about to link these. It is now safe to compute the linkage of
279     // the new decl. If the new decl has external linkage, we will
280     // link it with the hidden decl (which also has external linkage) and
281     // it will keep having external linkage. If it has internal linkage, we
282     // will not link it. Since it has no previous decls, it will remain
283     // with internal linkage.
284     return isVisible(Old) || New->isExternallyVisible();
285   }
286   bool shouldLinkPossiblyHiddenDecl(LookupResult &Old, const NamedDecl *New);
287 
288 public:
289   typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
290   typedef OpaquePtr<TemplateName> TemplateTy;
291   typedef OpaquePtr<QualType> TypeTy;
292 
293   OpenCLOptions OpenCLFeatures;
294   FPOptions FPFeatures;
295 
296   const LangOptions &LangOpts;
297   Preprocessor &PP;
298   ASTContext &Context;
299   ASTConsumer &Consumer;
300   DiagnosticsEngine &Diags;
301   SourceManager &SourceMgr;
302 
303   /// \brief Flag indicating whether or not to collect detailed statistics.
304   bool CollectStats;
305 
306   /// \brief Code-completion consumer.
307   CodeCompleteConsumer *CodeCompleter;
308 
309   /// CurContext - This is the current declaration context of parsing.
310   DeclContext *CurContext;
311 
312   /// \brief Generally null except when we temporarily switch decl contexts,
313   /// like in \see ActOnObjCTemporaryExitContainerContext.
314   DeclContext *OriginalLexicalContext;
315 
316   /// VAListTagName - The declaration name corresponding to __va_list_tag.
317   /// This is used as part of a hack to omit that class from ADL results.
318   DeclarationName VAListTagName;
319 
320   bool MSStructPragmaOn; // True when \#pragma ms_struct on
321 
322   /// \brief Controls member pointer representation format under the MS ABI.
323   LangOptions::PragmaMSPointersToMembersKind
324       MSPointerToMemberRepresentationMethod;
325 
326   /// Stack of active SEH __finally scopes.  Can be empty.
327   SmallVector<Scope*, 2> CurrentSEHFinally;
328 
329   /// \brief Source location for newly created implicit MSInheritanceAttrs
330   SourceLocation ImplicitMSInheritanceAttrLoc;
331 
332   enum PragmaMsStackAction {
333     PSK_Reset     = 0x0,                // #pragma ()
334     PSK_Set       = 0x1,                // #pragma (value)
335     PSK_Push      = 0x2,                // #pragma (push[, id])
336     PSK_Pop       = 0x4,                // #pragma (pop[, id])
337     PSK_Show      = 0x8,                // #pragma (show) -- only for "pack"!
338     PSK_Push_Set  = PSK_Push | PSK_Set, // #pragma (push[, id], value)
339     PSK_Pop_Set   = PSK_Pop | PSK_Set,  // #pragma (pop[, id], value)
340   };
341 
342   template<typename ValueType>
343   struct PragmaStack {
344     struct Slot {
345       llvm::StringRef StackSlotLabel;
346       ValueType Value;
347       SourceLocation PragmaLocation;
SlotPragmaStack::Slot348       Slot(llvm::StringRef StackSlotLabel,
349            ValueType Value,
350            SourceLocation PragmaLocation)
351         : StackSlotLabel(StackSlotLabel), Value(Value),
352           PragmaLocation(PragmaLocation) {}
353     };
354     void Act(SourceLocation PragmaLocation,
355              PragmaMsStackAction Action,
356              llvm::StringRef StackSlotLabel,
357              ValueType Value);
358 
359     // MSVC seems to add artificial slots to #pragma stacks on entering a C++
360     // method body to restore the stacks on exit, so it works like this:
361     //
362     //   struct S {
363     //     #pragma <name>(push, InternalPragmaSlot, <current_pragma_value>)
364     //     void Method {}
365     //     #pragma <name>(pop, InternalPragmaSlot)
366     //   };
367     //
368     // It works even with #pragma vtordisp, although MSVC doesn't support
369     //   #pragma vtordisp(push [, id], n)
370     // syntax.
371     //
372     // Push / pop a named sentinel slot.
SentinelActionPragmaStack373     void SentinelAction(PragmaMsStackAction Action, StringRef Label) {
374       assert((Action == PSK_Push || Action == PSK_Pop) &&
375              "Can only push / pop #pragma stack sentinels!");
376       Act(CurrentPragmaLocation, Action, Label, CurrentValue);
377     }
378 
379     // Constructors.
PragmaStackPragmaStack380     explicit PragmaStack(const ValueType &Default)
381         : DefaultValue(Default), CurrentValue(Default) {}
382 
383     SmallVector<Slot, 2> Stack;
384     ValueType DefaultValue; // Value used for PSK_Reset action.
385     ValueType CurrentValue;
386     SourceLocation CurrentPragmaLocation;
387   };
388   // FIXME: We should serialize / deserialize these if they occur in a PCH (but
389   // we shouldn't do so if they're in a module).
390 
391   /// \brief Whether to insert vtordisps prior to virtual bases in the Microsoft
392   /// C++ ABI.  Possible values are 0, 1, and 2, which mean:
393   ///
394   /// 0: Suppress all vtordisps
395   /// 1: Insert vtordisps in the presence of vbase overrides and non-trivial
396   ///    structors
397   /// 2: Always insert vtordisps to support RTTI on partially constructed
398   ///    objects
399   PragmaStack<MSVtorDispAttr::Mode> VtorDispStack;
400   // #pragma pack.
401   // Sentinel to represent when the stack is set to mac68k alignment.
402   static const unsigned kMac68kAlignmentSentinel = ~0U;
403   PragmaStack<unsigned> PackStack;
404   // Segment #pragmas.
405   PragmaStack<StringLiteral *> DataSegStack;
406   PragmaStack<StringLiteral *> BSSSegStack;
407   PragmaStack<StringLiteral *> ConstSegStack;
408   PragmaStack<StringLiteral *> CodeSegStack;
409 
410   // RAII object to push / pop sentinel slots for all MS #pragma stacks.
411   // Actions should be performed only if we enter / exit a C++ method body.
412   class PragmaStackSentinelRAII {
413   public:
414     PragmaStackSentinelRAII(Sema &S, StringRef SlotLabel, bool ShouldAct);
415     ~PragmaStackSentinelRAII();
416 
417   private:
418     Sema &S;
419     StringRef SlotLabel;
420     bool ShouldAct;
421   };
422 
423   /// A mapping that describes the nullability we've seen in each header file.
424   FileNullabilityMap NullabilityMap;
425 
426   /// Last section used with #pragma init_seg.
427   StringLiteral *CurInitSeg;
428   SourceLocation CurInitSegLoc;
429 
430   /// VisContext - Manages the stack for \#pragma GCC visibility.
431   void *VisContext; // Really a "PragmaVisStack*"
432 
433   /// \brief This represents the last location of a "#pragma clang optimize off"
434   /// directive if such a directive has not been closed by an "on" yet. If
435   /// optimizations are currently "on", this is set to an invalid location.
436   SourceLocation OptimizeOffPragmaLocation;
437 
438   /// \brief Flag indicating if Sema is building a recovery call expression.
439   ///
440   /// This flag is used to avoid building recovery call expressions
441   /// if Sema is already doing so, which would cause infinite recursions.
442   bool IsBuildingRecoveryCallExpr;
443 
444   /// Used to control the generation of ExprWithCleanups.
445   CleanupInfo Cleanup;
446 
447   /// ExprCleanupObjects - This is the stack of objects requiring
448   /// cleanup that are created by the current full expression.  The
449   /// element type here is ExprWithCleanups::Object.
450   SmallVector<BlockDecl*, 8> ExprCleanupObjects;
451 
452   /// \brief Store a list of either DeclRefExprs or MemberExprs
453   ///  that contain a reference to a variable (constant) that may or may not
454   ///  be odr-used in this Expr, and we won't know until all lvalue-to-rvalue
455   ///  and discarded value conversions have been applied to all subexpressions
456   ///  of the enclosing full expression.  This is cleared at the end of each
457   ///  full expression.
458   llvm::SmallPtrSet<Expr*, 2> MaybeODRUseExprs;
459 
460   /// \brief Stack containing information about each of the nested
461   /// function, block, and method scopes that are currently active.
462   ///
463   /// This array is never empty.  Clients should ignore the first
464   /// element, which is used to cache a single FunctionScopeInfo
465   /// that's used to parse every top-level function.
466   SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes;
467 
468   typedef LazyVector<TypedefNameDecl *, ExternalSemaSource,
469                      &ExternalSemaSource::ReadExtVectorDecls, 2, 2>
470     ExtVectorDeclsType;
471 
472   /// ExtVectorDecls - This is a list all the extended vector types. This allows
473   /// us to associate a raw vector type with one of the ext_vector type names.
474   /// This is only necessary for issuing pretty diagnostics.
475   ExtVectorDeclsType ExtVectorDecls;
476 
477   /// FieldCollector - Collects CXXFieldDecls during parsing of C++ classes.
478   std::unique_ptr<CXXFieldCollector> FieldCollector;
479 
480   typedef llvm::SmallSetVector<const NamedDecl*, 16> NamedDeclSetType;
481 
482   /// \brief Set containing all declared private fields that are not used.
483   NamedDeclSetType UnusedPrivateFields;
484 
485   /// \brief Set containing all typedefs that are likely unused.
486   llvm::SmallSetVector<const TypedefNameDecl *, 4>
487       UnusedLocalTypedefNameCandidates;
488 
489   /// \brief Delete-expressions to be analyzed at the end of translation unit
490   ///
491   /// This list contains class members, and locations of delete-expressions
492   /// that could not be proven as to whether they mismatch with new-expression
493   /// used in initializer of the field.
494   typedef std::pair<SourceLocation, bool> DeleteExprLoc;
495   typedef llvm::SmallVector<DeleteExprLoc, 4> DeleteLocs;
496   llvm::MapVector<FieldDecl *, DeleteLocs> DeleteExprs;
497 
498   typedef llvm::SmallPtrSet<const CXXRecordDecl*, 8> RecordDeclSetTy;
499 
500   /// PureVirtualClassDiagSet - a set of class declarations which we have
501   /// emitted a list of pure virtual functions. Used to prevent emitting the
502   /// same list more than once.
503   std::unique_ptr<RecordDeclSetTy> PureVirtualClassDiagSet;
504 
505   /// ParsingInitForAutoVars - a set of declarations with auto types for which
506   /// we are currently parsing the initializer.
507   llvm::SmallPtrSet<const Decl*, 4> ParsingInitForAutoVars;
508 
509   /// \brief Look for a locally scoped extern "C" declaration by the given name.
510   NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
511 
512   typedef LazyVector<VarDecl *, ExternalSemaSource,
513                      &ExternalSemaSource::ReadTentativeDefinitions, 2, 2>
514     TentativeDefinitionsType;
515 
516   /// \brief All the tentative definitions encountered in the TU.
517   TentativeDefinitionsType TentativeDefinitions;
518 
519   typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource,
520                      &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2>
521     UnusedFileScopedDeclsType;
522 
523   /// \brief The set of file scoped decls seen so far that have not been used
524   /// and must warn if not used. Only contains the first declaration.
525   UnusedFileScopedDeclsType UnusedFileScopedDecls;
526 
527   typedef LazyVector<CXXConstructorDecl *, ExternalSemaSource,
528                      &ExternalSemaSource::ReadDelegatingConstructors, 2, 2>
529     DelegatingCtorDeclsType;
530 
531   /// \brief All the delegating constructors seen so far in the file, used for
532   /// cycle detection at the end of the TU.
533   DelegatingCtorDeclsType DelegatingCtorDecls;
534 
535   /// \brief All the overriding functions seen during a class definition
536   /// that had their exception spec checks delayed, plus the overridden
537   /// function.
538   SmallVector<std::pair<const CXXMethodDecl*, const CXXMethodDecl*>, 2>
539     DelayedExceptionSpecChecks;
540 
541   /// \brief All the members seen during a class definition which were both
542   /// explicitly defaulted and had explicitly-specified exception
543   /// specifications, along with the function type containing their
544   /// user-specified exception specification. Those exception specifications
545   /// were overridden with the default specifications, but we still need to
546   /// check whether they are compatible with the default specification, and
547   /// we can't do that until the nesting set of class definitions is complete.
548   SmallVector<std::pair<CXXMethodDecl*, const FunctionProtoType*>, 2>
549     DelayedDefaultedMemberExceptionSpecs;
550 
551   typedef llvm::MapVector<const FunctionDecl *, LateParsedTemplate *>
552       LateParsedTemplateMapT;
553   LateParsedTemplateMapT LateParsedTemplateMap;
554 
555   /// \brief Callback to the parser to parse templated functions when needed.
556   typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT);
557   typedef void LateTemplateParserCleanupCB(void *P);
558   LateTemplateParserCB *LateTemplateParser;
559   LateTemplateParserCleanupCB *LateTemplateParserCleanup;
560   void *OpaqueParser;
561 
SetLateTemplateParser(LateTemplateParserCB * LTP,LateTemplateParserCleanupCB * LTPCleanup,void * P)562   void SetLateTemplateParser(LateTemplateParserCB *LTP,
563                              LateTemplateParserCleanupCB *LTPCleanup,
564                              void *P) {
565     LateTemplateParser = LTP;
566     LateTemplateParserCleanup = LTPCleanup;
567     OpaqueParser = P;
568   }
569 
570   class DelayedDiagnostics;
571 
572   class DelayedDiagnosticsState {
573     sema::DelayedDiagnosticPool *SavedPool;
574     friend class Sema::DelayedDiagnostics;
575   };
576   typedef DelayedDiagnosticsState ParsingDeclState;
577   typedef DelayedDiagnosticsState ProcessingContextState;
578 
579   /// A class which encapsulates the logic for delaying diagnostics
580   /// during parsing and other processing.
581   class DelayedDiagnostics {
582     /// \brief The current pool of diagnostics into which delayed
583     /// diagnostics should go.
584     sema::DelayedDiagnosticPool *CurPool;
585 
586   public:
DelayedDiagnostics()587     DelayedDiagnostics() : CurPool(nullptr) {}
588 
589     /// Adds a delayed diagnostic.
590     void add(const sema::DelayedDiagnostic &diag); // in DelayedDiagnostic.h
591 
592     /// Determines whether diagnostics should be delayed.
shouldDelayDiagnostics()593     bool shouldDelayDiagnostics() { return CurPool != nullptr; }
594 
595     /// Returns the current delayed-diagnostics pool.
getCurrentPool()596     sema::DelayedDiagnosticPool *getCurrentPool() const {
597       return CurPool;
598     }
599 
600     /// Enter a new scope.  Access and deprecation diagnostics will be
601     /// collected in this pool.
push(sema::DelayedDiagnosticPool & pool)602     DelayedDiagnosticsState push(sema::DelayedDiagnosticPool &pool) {
603       DelayedDiagnosticsState state;
604       state.SavedPool = CurPool;
605       CurPool = &pool;
606       return state;
607     }
608 
609     /// Leave a delayed-diagnostic state that was previously pushed.
610     /// Do not emit any of the diagnostics.  This is performed as part
611     /// of the bookkeeping of popping a pool "properly".
popWithoutEmitting(DelayedDiagnosticsState state)612     void popWithoutEmitting(DelayedDiagnosticsState state) {
613       CurPool = state.SavedPool;
614     }
615 
616     /// Enter a new scope where access and deprecation diagnostics are
617     /// not delayed.
pushUndelayed()618     DelayedDiagnosticsState pushUndelayed() {
619       DelayedDiagnosticsState state;
620       state.SavedPool = CurPool;
621       CurPool = nullptr;
622       return state;
623     }
624 
625     /// Undo a previous pushUndelayed().
popUndelayed(DelayedDiagnosticsState state)626     void popUndelayed(DelayedDiagnosticsState state) {
627       assert(CurPool == nullptr);
628       CurPool = state.SavedPool;
629     }
630   } DelayedDiagnostics;
631 
632   /// A RAII object to temporarily push a declaration context.
633   class ContextRAII {
634   private:
635     Sema &S;
636     DeclContext *SavedContext;
637     ProcessingContextState SavedContextState;
638     QualType SavedCXXThisTypeOverride;
639 
640   public:
641     ContextRAII(Sema &S, DeclContext *ContextToPush, bool NewThisContext = true)
S(S)642       : S(S), SavedContext(S.CurContext),
643         SavedContextState(S.DelayedDiagnostics.pushUndelayed()),
644         SavedCXXThisTypeOverride(S.CXXThisTypeOverride)
645     {
646       assert(ContextToPush && "pushing null context");
647       S.CurContext = ContextToPush;
648       if (NewThisContext)
649         S.CXXThisTypeOverride = QualType();
650     }
651 
pop()652     void pop() {
653       if (!SavedContext) return;
654       S.CurContext = SavedContext;
655       S.DelayedDiagnostics.popUndelayed(SavedContextState);
656       S.CXXThisTypeOverride = SavedCXXThisTypeOverride;
657       SavedContext = nullptr;
658     }
659 
~ContextRAII()660     ~ContextRAII() {
661       pop();
662     }
663   };
664 
665   /// \brief RAII object to handle the state changes required to synthesize
666   /// a function body.
667   class SynthesizedFunctionScope {
668     Sema &S;
669     Sema::ContextRAII SavedContext;
670 
671   public:
SynthesizedFunctionScope(Sema & S,DeclContext * DC)672     SynthesizedFunctionScope(Sema &S, DeclContext *DC)
673       : S(S), SavedContext(S, DC)
674     {
675       S.PushFunctionScope();
676       S.PushExpressionEvaluationContext(Sema::PotentiallyEvaluated);
677     }
678 
~SynthesizedFunctionScope()679     ~SynthesizedFunctionScope() {
680       S.PopExpressionEvaluationContext();
681       S.PopFunctionScopeInfo();
682     }
683   };
684 
685   /// WeakUndeclaredIdentifiers - Identifiers contained in
686   /// \#pragma weak before declared. rare. may alias another
687   /// identifier, declared or undeclared
688   llvm::MapVector<IdentifierInfo *, WeakInfo> WeakUndeclaredIdentifiers;
689 
690   /// ExtnameUndeclaredIdentifiers - Identifiers contained in
691   /// \#pragma redefine_extname before declared.  Used in Solaris system headers
692   /// to define functions that occur in multiple standards to call the version
693   /// in the currently selected standard.
694   llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*> ExtnameUndeclaredIdentifiers;
695 
696 
697   /// \brief Load weak undeclared identifiers from the external source.
698   void LoadExternalWeakUndeclaredIdentifiers();
699 
700   /// WeakTopLevelDecl - Translation-unit scoped declarations generated by
701   /// \#pragma weak during processing of other Decls.
702   /// I couldn't figure out a clean way to generate these in-line, so
703   /// we store them here and handle separately -- which is a hack.
704   /// It would be best to refactor this.
705   SmallVector<Decl*,2> WeakTopLevelDecl;
706 
707   IdentifierResolver IdResolver;
708 
709   /// Translation Unit Scope - useful to Objective-C actions that need
710   /// to lookup file scope declarations in the "ordinary" C decl namespace.
711   /// For example, user-defined classes, built-in "id" type, etc.
712   Scope *TUScope;
713 
714   /// \brief The C++ "std" namespace, where the standard library resides.
715   LazyDeclPtr StdNamespace;
716 
717   /// \brief The C++ "std::bad_alloc" class, which is defined by the C++
718   /// standard library.
719   LazyDeclPtr StdBadAlloc;
720 
721   /// \brief The C++ "std::initializer_list" template, which is defined in
722   /// \<initializer_list>.
723   ClassTemplateDecl *StdInitializerList;
724 
725   /// \brief The C++ "type_info" declaration, which is defined in \<typeinfo>.
726   RecordDecl *CXXTypeInfoDecl;
727 
728   /// \brief The MSVC "_GUID" struct, which is defined in MSVC header files.
729   RecordDecl *MSVCGuidDecl;
730 
731   /// \brief Caches identifiers/selectors for NSFoundation APIs.
732   std::unique_ptr<NSAPI> NSAPIObj;
733 
734   /// \brief The declaration of the Objective-C NSNumber class.
735   ObjCInterfaceDecl *NSNumberDecl;
736 
737   /// \brief The declaration of the Objective-C NSValue class.
738   ObjCInterfaceDecl *NSValueDecl;
739 
740   /// \brief Pointer to NSNumber type (NSNumber *).
741   QualType NSNumberPointer;
742 
743   /// \brief Pointer to NSValue type (NSValue *).
744   QualType NSValuePointer;
745 
746   /// \brief The Objective-C NSNumber methods used to create NSNumber literals.
747   ObjCMethodDecl *NSNumberLiteralMethods[NSAPI::NumNSNumberLiteralMethods];
748 
749   /// \brief The declaration of the Objective-C NSString class.
750   ObjCInterfaceDecl *NSStringDecl;
751 
752   /// \brief Pointer to NSString type (NSString *).
753   QualType NSStringPointer;
754 
755   /// \brief The declaration of the stringWithUTF8String: method.
756   ObjCMethodDecl *StringWithUTF8StringMethod;
757 
758   /// \brief The declaration of the valueWithBytes:objCType: method.
759   ObjCMethodDecl *ValueWithBytesObjCTypeMethod;
760 
761   /// \brief The declaration of the Objective-C NSArray class.
762   ObjCInterfaceDecl *NSArrayDecl;
763 
764   /// \brief The declaration of the arrayWithObjects:count: method.
765   ObjCMethodDecl *ArrayWithObjectsMethod;
766 
767   /// \brief The declaration of the Objective-C NSDictionary class.
768   ObjCInterfaceDecl *NSDictionaryDecl;
769 
770   /// \brief The declaration of the dictionaryWithObjects:forKeys:count: method.
771   ObjCMethodDecl *DictionaryWithObjectsMethod;
772 
773   /// \brief id<NSCopying> type.
774   QualType QIDNSCopying;
775 
776   /// \brief will hold 'respondsToSelector:'
777   Selector RespondsToSelectorSel;
778 
779   /// \brief counter for internal MS Asm label names.
780   unsigned MSAsmLabelNameCounter;
781 
782   /// A flag to remember whether the implicit forms of operator new and delete
783   /// have been declared.
784   bool GlobalNewDeleteDeclared;
785 
786   /// A flag to indicate that we're in a context that permits abstract
787   /// references to fields.  This is really a
788   bool AllowAbstractFieldReference;
789 
790   /// \brief Describes how the expressions currently being parsed are
791   /// evaluated at run-time, if at all.
792   enum ExpressionEvaluationContext {
793     /// \brief The current expression and its subexpressions occur within an
794     /// unevaluated operand (C++11 [expr]p7), such as the subexpression of
795     /// \c sizeof, where the type of the expression may be significant but
796     /// no code will be generated to evaluate the value of the expression at
797     /// run time.
798     Unevaluated,
799 
800     /// \brief The current expression occurs within a discarded statement.
801     /// This behaves largely similarly to an unevaluated operand in preventing
802     /// definitions from being required, but not in other ways.
803     DiscardedStatement,
804 
805     /// \brief The current expression occurs within an unevaluated
806     /// operand that unconditionally permits abstract references to
807     /// fields, such as a SIZE operator in MS-style inline assembly.
808     UnevaluatedAbstract,
809 
810     /// \brief The current context is "potentially evaluated" in C++11 terms,
811     /// but the expression is evaluated at compile-time (like the values of
812     /// cases in a switch statement).
813     ConstantEvaluated,
814 
815     /// \brief The current expression is potentially evaluated at run time,
816     /// which means that code may be generated to evaluate the value of the
817     /// expression at run time.
818     PotentiallyEvaluated,
819 
820     /// \brief The current expression is potentially evaluated, but any
821     /// declarations referenced inside that expression are only used if
822     /// in fact the current expression is used.
823     ///
824     /// This value is used when parsing default function arguments, for which
825     /// we would like to provide diagnostics (e.g., passing non-POD arguments
826     /// through varargs) but do not want to mark declarations as "referenced"
827     /// until the default argument is used.
828     PotentiallyEvaluatedIfUsed
829   };
830 
831   /// \brief Data structure used to record current or nested
832   /// expression evaluation contexts.
833   struct ExpressionEvaluationContextRecord {
834     /// \brief The expression evaluation context.
835     ExpressionEvaluationContext Context;
836 
837     /// \brief Whether the enclosing context needed a cleanup.
838     CleanupInfo ParentCleanup;
839 
840     /// \brief Whether we are in a decltype expression.
841     bool IsDecltype;
842 
843     /// \brief The number of active cleanup objects when we entered
844     /// this expression evaluation context.
845     unsigned NumCleanupObjects;
846 
847     /// \brief The number of typos encountered during this expression evaluation
848     /// context (i.e. the number of TypoExprs created).
849     unsigned NumTypos;
850 
851     llvm::SmallPtrSet<Expr*, 2> SavedMaybeODRUseExprs;
852 
853     /// \brief The lambdas that are present within this context, if it
854     /// is indeed an unevaluated context.
855     SmallVector<LambdaExpr *, 2> Lambdas;
856 
857     /// \brief The declaration that provides context for lambda expressions
858     /// and block literals if the normal declaration context does not
859     /// suffice, e.g., in a default function argument.
860     Decl *ManglingContextDecl;
861 
862     /// \brief The context information used to mangle lambda expressions
863     /// and block literals within this context.
864     ///
865     /// This mangling information is allocated lazily, since most contexts
866     /// do not have lambda expressions or block literals.
867     IntrusiveRefCntPtr<MangleNumberingContext> MangleNumbering;
868 
869     /// \brief If we are processing a decltype type, a set of call expressions
870     /// for which we have deferred checking the completeness of the return type.
871     SmallVector<CallExpr *, 8> DelayedDecltypeCalls;
872 
873     /// \brief If we are processing a decltype type, a set of temporary binding
874     /// expressions for which we have deferred checking the destructor.
875     SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds;
876 
ExpressionEvaluationContextRecordExpressionEvaluationContextRecord877     ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context,
878                                       unsigned NumCleanupObjects,
879                                       CleanupInfo ParentCleanup,
880                                       Decl *ManglingContextDecl,
881                                       bool IsDecltype)
882       : Context(Context), ParentCleanup(ParentCleanup),
883         IsDecltype(IsDecltype), NumCleanupObjects(NumCleanupObjects),
884         NumTypos(0),
885         ManglingContextDecl(ManglingContextDecl), MangleNumbering() { }
886 
887     /// \brief Retrieve the mangling numbering context, used to consistently
888     /// number constructs like lambdas for mangling.
889     MangleNumberingContext &getMangleNumberingContext(ASTContext &Ctx);
890 
isUnevaluatedExpressionEvaluationContextRecord891     bool isUnevaluated() const {
892       return Context == Unevaluated || Context == UnevaluatedAbstract;
893     }
894   };
895 
896   /// A stack of expression evaluation contexts.
897   SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts;
898 
899   /// \brief Compute the mangling number context for a lambda expression or
900   /// block literal.
901   ///
902   /// \param DC - The DeclContext containing the lambda expression or
903   /// block literal.
904   /// \param[out] ManglingContextDecl - Returns the ManglingContextDecl
905   /// associated with the context, if relevant.
906   MangleNumberingContext *getCurrentMangleNumberContext(
907     const DeclContext *DC,
908     Decl *&ManglingContextDecl);
909 
910 
911   /// SpecialMemberOverloadResult - The overloading result for a special member
912   /// function.
913   ///
914   /// This is basically a wrapper around PointerIntPair. The lowest bits of the
915   /// integer are used to determine whether overload resolution succeeded.
916   class SpecialMemberOverloadResult : public llvm::FastFoldingSetNode {
917   public:
918     enum Kind {
919       NoMemberOrDeleted,
920       Ambiguous,
921       Success
922     };
923 
924   private:
925     llvm::PointerIntPair<CXXMethodDecl*, 2> Pair;
926 
927   public:
SpecialMemberOverloadResult(const llvm::FoldingSetNodeID & ID)928     SpecialMemberOverloadResult(const llvm::FoldingSetNodeID &ID)
929       : FastFoldingSetNode(ID)
930     {}
931 
getMethod()932     CXXMethodDecl *getMethod() const { return Pair.getPointer(); }
setMethod(CXXMethodDecl * MD)933     void setMethod(CXXMethodDecl *MD) { Pair.setPointer(MD); }
934 
getKind()935     Kind getKind() const { return static_cast<Kind>(Pair.getInt()); }
setKind(Kind K)936     void setKind(Kind K) { Pair.setInt(K); }
937   };
938 
939   /// \brief A cache of special member function overload resolution results
940   /// for C++ records.
941   llvm::FoldingSet<SpecialMemberOverloadResult> SpecialMemberCache;
942 
943   /// \brief A cache of the flags available in enumerations with the flag_bits
944   /// attribute.
945   mutable llvm::DenseMap<const EnumDecl*, llvm::APInt> FlagBitsCache;
946 
947   /// \brief The kind of translation unit we are processing.
948   ///
949   /// When we're processing a complete translation unit, Sema will perform
950   /// end-of-translation-unit semantic tasks (such as creating
951   /// initializers for tentative definitions in C) once parsing has
952   /// completed. Modules and precompiled headers perform different kinds of
953   /// checks.
954   TranslationUnitKind TUKind;
955 
956   llvm::BumpPtrAllocator BumpAlloc;
957 
958   /// \brief The number of SFINAE diagnostics that have been trapped.
959   unsigned NumSFINAEErrors;
960 
961   typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>>
962     UnparsedDefaultArgInstantiationsMap;
963 
964   /// \brief A mapping from parameters with unparsed default arguments to the
965   /// set of instantiations of each parameter.
966   ///
967   /// This mapping is a temporary data structure used when parsing
968   /// nested class templates or nested classes of class templates,
969   /// where we might end up instantiating an inner class before the
970   /// default arguments of its methods have been parsed.
971   UnparsedDefaultArgInstantiationsMap UnparsedDefaultArgInstantiations;
972 
973   // Contains the locations of the beginning of unparsed default
974   // argument locations.
975   llvm::DenseMap<ParmVarDecl *, SourceLocation> UnparsedDefaultArgLocs;
976 
977   /// UndefinedInternals - all the used, undefined objects which require a
978   /// definition in this translation unit.
979   llvm::MapVector<NamedDecl *, SourceLocation> UndefinedButUsed;
980 
981   /// Obtain a sorted list of functions that are undefined but ODR-used.
982   void getUndefinedButUsed(
983       SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined);
984 
985   /// Retrieves list of suspicious delete-expressions that will be checked at
986   /// the end of translation unit.
987   const llvm::MapVector<FieldDecl *, DeleteLocs> &
988   getMismatchingDeleteExpressions() const;
989 
990   typedef std::pair<ObjCMethodList, ObjCMethodList> GlobalMethods;
991   typedef llvm::DenseMap<Selector, GlobalMethods> GlobalMethodPool;
992 
993   /// Method Pool - allows efficient lookup when typechecking messages to "id".
994   /// We need to maintain a list, since selectors can have differing signatures
995   /// across classes. In Cocoa, this happens to be extremely uncommon (only 1%
996   /// of selectors are "overloaded").
997   /// At the head of the list it is recorded whether there were 0, 1, or >= 2
998   /// methods inside categories with a particular selector.
999   GlobalMethodPool MethodPool;
1000 
1001   /// Method selectors used in a \@selector expression. Used for implementation
1002   /// of -Wselector.
1003   llvm::MapVector<Selector, SourceLocation> ReferencedSelectors;
1004 
1005   /// Kinds of C++ special members.
1006   enum CXXSpecialMember {
1007     CXXDefaultConstructor,
1008     CXXCopyConstructor,
1009     CXXMoveConstructor,
1010     CXXCopyAssignment,
1011     CXXMoveAssignment,
1012     CXXDestructor,
1013     CXXInvalid
1014   };
1015 
1016   typedef std::pair<CXXRecordDecl*, CXXSpecialMember> SpecialMemberDecl;
1017 
1018   /// The C++ special members which we are currently in the process of
1019   /// declaring. If this process recursively triggers the declaration of the
1020   /// same special member, we should act as if it is not yet declared.
1021   llvm::SmallSet<SpecialMemberDecl, 4> SpecialMembersBeingDeclared;
1022 
1023   void ReadMethodPool(Selector Sel);
1024   void updateOutOfDateSelector(Selector Sel);
1025 
1026   /// Private Helper predicate to check for 'self'.
1027   bool isSelfExpr(Expr *RExpr);
1028   bool isSelfExpr(Expr *RExpr, const ObjCMethodDecl *Method);
1029 
1030   /// \brief Cause the active diagnostic on the DiagosticsEngine to be
1031   /// emitted. This is closely coupled to the SemaDiagnosticBuilder class and
1032   /// should not be used elsewhere.
1033   void EmitCurrentDiagnostic(unsigned DiagID);
1034 
1035   /// Records and restores the FP_CONTRACT state on entry/exit of compound
1036   /// statements.
1037   class FPContractStateRAII {
1038   public:
FPContractStateRAII(Sema & S)1039     FPContractStateRAII(Sema& S)
1040       : S(S), OldFPContractState(S.FPFeatures.fp_contract) {}
~FPContractStateRAII()1041     ~FPContractStateRAII() {
1042       S.FPFeatures.fp_contract = OldFPContractState;
1043     }
1044   private:
1045     Sema& S;
1046     bool OldFPContractState : 1;
1047   };
1048 
1049   void addImplicitTypedef(StringRef Name, QualType T);
1050 
1051 public:
1052   Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
1053        TranslationUnitKind TUKind = TU_Complete,
1054        CodeCompleteConsumer *CompletionConsumer = nullptr);
1055   ~Sema();
1056 
1057   /// \brief Perform initialization that occurs after the parser has been
1058   /// initialized but before it parses anything.
1059   void Initialize();
1060 
getLangOpts()1061   const LangOptions &getLangOpts() const { return LangOpts; }
getOpenCLOptions()1062   OpenCLOptions &getOpenCLOptions() { return OpenCLFeatures; }
getFPOptions()1063   FPOptions     &getFPOptions() { return FPFeatures; }
1064 
getDiagnostics()1065   DiagnosticsEngine &getDiagnostics() const { return Diags; }
getSourceManager()1066   SourceManager &getSourceManager() const { return SourceMgr; }
getPreprocessor()1067   Preprocessor &getPreprocessor() const { return PP; }
getASTContext()1068   ASTContext &getASTContext() const { return Context; }
getASTConsumer()1069   ASTConsumer &getASTConsumer() const { return Consumer; }
1070   ASTMutationListener *getASTMutationListener() const;
getExternalSource()1071   ExternalSemaSource* getExternalSource() const { return ExternalSource; }
1072 
1073   ///\brief Registers an external source. If an external source already exists,
1074   /// creates a multiplex external source and appends to it.
1075   ///
1076   ///\param[in] E - A non-null external sema source.
1077   ///
1078   void addExternalSource(ExternalSemaSource *E);
1079 
1080   void PrintStats() const;
1081 
1082   /// \brief Helper class that creates diagnostics with optional
1083   /// template instantiation stacks.
1084   ///
1085   /// This class provides a wrapper around the basic DiagnosticBuilder
1086   /// class that emits diagnostics. SemaDiagnosticBuilder is
1087   /// responsible for emitting the diagnostic (as DiagnosticBuilder
1088   /// does) and, if the diagnostic comes from inside a template
1089   /// instantiation, printing the template instantiation stack as
1090   /// well.
1091   class SemaDiagnosticBuilder : public DiagnosticBuilder {
1092     Sema &SemaRef;
1093     unsigned DiagID;
1094 
1095   public:
SemaDiagnosticBuilder(DiagnosticBuilder & DB,Sema & SemaRef,unsigned DiagID)1096     SemaDiagnosticBuilder(DiagnosticBuilder &DB, Sema &SemaRef, unsigned DiagID)
1097       : DiagnosticBuilder(DB), SemaRef(SemaRef), DiagID(DiagID) { }
1098 
1099     // This is a cunning lie. DiagnosticBuilder actually performs move
1100     // construction in its copy constructor (but due to varied uses, it's not
1101     // possible to conveniently express this as actual move construction). So
1102     // the default copy ctor here is fine, because the base class disables the
1103     // source anyway, so the user-defined ~SemaDiagnosticBuilder is a safe no-op
1104     // in that case anwyay.
1105     SemaDiagnosticBuilder(const SemaDiagnosticBuilder&) = default;
1106 
~SemaDiagnosticBuilder()1107     ~SemaDiagnosticBuilder() {
1108       // If we aren't active, there is nothing to do.
1109       if (!isActive()) return;
1110 
1111       // Otherwise, we need to emit the diagnostic. First flush the underlying
1112       // DiagnosticBuilder data, and clear the diagnostic builder itself so it
1113       // won't emit the diagnostic in its own destructor.
1114       //
1115       // This seems wasteful, in that as written the DiagnosticBuilder dtor will
1116       // do its own needless checks to see if the diagnostic needs to be
1117       // emitted. However, because we take care to ensure that the builder
1118       // objects never escape, a sufficiently smart compiler will be able to
1119       // eliminate that code.
1120       FlushCounts();
1121       Clear();
1122 
1123       // Dispatch to Sema to emit the diagnostic.
1124       SemaRef.EmitCurrentDiagnostic(DiagID);
1125     }
1126 
1127     /// Teach operator<< to produce an object of the correct type.
1128     template<typename T>
1129     friend const SemaDiagnosticBuilder &operator<<(
1130         const SemaDiagnosticBuilder &Diag, const T &Value) {
1131       const DiagnosticBuilder &BaseDiag = Diag;
1132       BaseDiag << Value;
1133       return Diag;
1134     }
1135   };
1136 
1137   /// \brief Emit a diagnostic.
Diag(SourceLocation Loc,unsigned DiagID)1138   SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
1139     DiagnosticBuilder DB = Diags.Report(Loc, DiagID);
1140     return SemaDiagnosticBuilder(DB, *this, DiagID);
1141   }
1142 
1143   /// \brief Emit a partial diagnostic.
1144   SemaDiagnosticBuilder Diag(SourceLocation Loc, const PartialDiagnostic& PD);
1145 
1146   /// \brief Build a partial diagnostic.
1147   PartialDiagnostic PDiag(unsigned DiagID = 0); // in SemaInternal.h
1148 
1149   bool findMacroSpelling(SourceLocation &loc, StringRef name);
1150 
1151   /// \brief Get a string to suggest for zero-initialization of a type.
1152   std::string
1153   getFixItZeroInitializerForType(QualType T, SourceLocation Loc) const;
1154   std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const;
1155 
1156   /// \brief Calls \c Lexer::getLocForEndOfToken()
1157   SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0);
1158 
1159   /// \brief Retrieve the module loader associated with the preprocessor.
1160   ModuleLoader &getModuleLoader() const;
1161 
1162   void emitAndClearUnusedLocalTypedefWarnings();
1163 
1164   void ActOnEndOfTranslationUnit();
1165 
1166   void CheckDelegatingCtorCycles();
1167 
1168   Scope *getScopeForContext(DeclContext *Ctx);
1169 
1170   void PushFunctionScope();
1171   void PushBlockScope(Scope *BlockScope, BlockDecl *Block);
1172   sema::LambdaScopeInfo *PushLambdaScope();
1173 
1174   /// \brief This is used to inform Sema what the current TemplateParameterDepth
1175   /// is during Parsing.  Currently it is used to pass on the depth
1176   /// when parsing generic lambda 'auto' parameters.
1177   void RecordParsingTemplateParameterDepth(unsigned Depth);
1178 
1179   void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD,
1180                                RecordDecl *RD,
1181                                CapturedRegionKind K);
1182   void
1183   PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr,
1184                        const Decl *D = nullptr,
1185                        const BlockExpr *blkExpr = nullptr);
1186 
getCurFunction()1187   sema::FunctionScopeInfo *getCurFunction() const {
1188     return FunctionScopes.back();
1189   }
1190 
getEnclosingFunction()1191   sema::FunctionScopeInfo *getEnclosingFunction() const {
1192     if (FunctionScopes.empty())
1193       return nullptr;
1194 
1195     for (int e = FunctionScopes.size()-1; e >= 0; --e) {
1196       if (isa<sema::BlockScopeInfo>(FunctionScopes[e]))
1197         continue;
1198       return FunctionScopes[e];
1199     }
1200     return nullptr;
1201   }
1202 
1203   template <typename ExprT>
1204   void recordUseOfEvaluatedWeak(const ExprT *E, bool IsRead=true) {
1205     if (!isUnevaluatedContext())
1206       getCurFunction()->recordUseOfWeak(E, IsRead);
1207   }
1208 
1209   void PushCompoundScope();
1210   void PopCompoundScope();
1211 
1212   sema::CompoundScopeInfo &getCurCompoundScope() const;
1213 
1214   bool hasAnyUnrecoverableErrorsInThisFunction() const;
1215 
1216   /// \brief Retrieve the current block, if any.
1217   sema::BlockScopeInfo *getCurBlock();
1218 
1219   /// \brief Retrieve the current lambda scope info, if any.
1220   sema::LambdaScopeInfo *getCurLambda();
1221 
1222   /// \brief Retrieve the current generic lambda info, if any.
1223   sema::LambdaScopeInfo *getCurGenericLambda();
1224 
1225   /// \brief Retrieve the current captured region, if any.
1226   sema::CapturedRegionScopeInfo *getCurCapturedRegion();
1227 
1228   /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls
WeakTopLevelDecls()1229   SmallVectorImpl<Decl *> &WeakTopLevelDecls() { return WeakTopLevelDecl; }
1230 
1231   void ActOnComment(SourceRange Comment);
1232 
1233   //===--------------------------------------------------------------------===//
1234   // Type Analysis / Processing: SemaType.cpp.
1235   //
1236 
1237   QualType BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs,
1238                               const DeclSpec *DS = nullptr);
1239   QualType BuildQualifiedType(QualType T, SourceLocation Loc, unsigned CVRA,
1240                               const DeclSpec *DS = nullptr);
1241   QualType BuildPointerType(QualType T,
1242                             SourceLocation Loc, DeclarationName Entity);
1243   QualType BuildReferenceType(QualType T, bool LValueRef,
1244                               SourceLocation Loc, DeclarationName Entity);
1245   QualType BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
1246                           Expr *ArraySize, unsigned Quals,
1247                           SourceRange Brackets, DeclarationName Entity);
1248   QualType BuildExtVectorType(QualType T, Expr *ArraySize,
1249                               SourceLocation AttrLoc);
1250 
1251   bool CheckFunctionReturnType(QualType T, SourceLocation Loc);
1252 
1253   /// \brief Build a function type.
1254   ///
1255   /// This routine checks the function type according to C++ rules and
1256   /// under the assumption that the result type and parameter types have
1257   /// just been instantiated from a template. It therefore duplicates
1258   /// some of the behavior of GetTypeForDeclarator, but in a much
1259   /// simpler form that is only suitable for this narrow use case.
1260   ///
1261   /// \param T The return type of the function.
1262   ///
1263   /// \param ParamTypes The parameter types of the function. This array
1264   /// will be modified to account for adjustments to the types of the
1265   /// function parameters.
1266   ///
1267   /// \param Loc The location of the entity whose type involves this
1268   /// function type or, if there is no such entity, the location of the
1269   /// type that will have function type.
1270   ///
1271   /// \param Entity The name of the entity that involves the function
1272   /// type, if known.
1273   ///
1274   /// \param EPI Extra information about the function type. Usually this will
1275   /// be taken from an existing function with the same prototype.
1276   ///
1277   /// \returns A suitable function type, if there are no errors. The
1278   /// unqualified type will always be a FunctionProtoType.
1279   /// Otherwise, returns a NULL type.
1280   QualType BuildFunctionType(QualType T,
1281                              MutableArrayRef<QualType> ParamTypes,
1282                              SourceLocation Loc, DeclarationName Entity,
1283                              const FunctionProtoType::ExtProtoInfo &EPI);
1284 
1285   QualType BuildMemberPointerType(QualType T, QualType Class,
1286                                   SourceLocation Loc,
1287                                   DeclarationName Entity);
1288   QualType BuildBlockPointerType(QualType T,
1289                                  SourceLocation Loc, DeclarationName Entity);
1290   QualType BuildParenType(QualType T);
1291   QualType BuildAtomicType(QualType T, SourceLocation Loc);
1292   QualType BuildPipeType(QualType T,
1293                          SourceLocation Loc);
1294 
1295   TypeSourceInfo *GetTypeForDeclarator(Declarator &D, Scope *S);
1296   TypeSourceInfo *GetTypeForDeclaratorCast(Declarator &D, QualType FromTy);
1297   TypeSourceInfo *GetTypeSourceInfoForDeclarator(Declarator &D, QualType T,
1298                                                TypeSourceInfo *ReturnTypeInfo);
1299 
1300   /// \brief Package the given type and TSI into a ParsedType.
1301   ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo);
1302   DeclarationNameInfo GetNameForDeclarator(Declarator &D);
1303   DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name);
1304   static QualType GetTypeFromParser(ParsedType Ty,
1305                                     TypeSourceInfo **TInfo = nullptr);
1306   CanThrowResult canThrow(const Expr *E);
1307   const FunctionProtoType *ResolveExceptionSpec(SourceLocation Loc,
1308                                                 const FunctionProtoType *FPT);
1309   void UpdateExceptionSpec(FunctionDecl *FD,
1310                            const FunctionProtoType::ExceptionSpecInfo &ESI);
1311   bool CheckSpecifiedExceptionType(QualType &T, SourceRange Range);
1312   bool CheckDistantExceptionSpec(QualType T);
1313   bool CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New);
1314   bool CheckEquivalentExceptionSpec(
1315       const FunctionProtoType *Old, SourceLocation OldLoc,
1316       const FunctionProtoType *New, SourceLocation NewLoc);
1317   bool CheckEquivalentExceptionSpec(
1318       const PartialDiagnostic &DiagID, const PartialDiagnostic & NoteID,
1319       const FunctionProtoType *Old, SourceLocation OldLoc,
1320       const FunctionProtoType *New, SourceLocation NewLoc,
1321       bool *MissingExceptionSpecification = nullptr,
1322       bool *MissingEmptyExceptionSpecification = nullptr,
1323       bool AllowNoexceptAllMatchWithNoSpec = false,
1324       bool IsOperatorNew = false);
1325   bool CheckExceptionSpecSubset(
1326       const PartialDiagnostic &DiagID, const PartialDiagnostic & NoteID,
1327       const FunctionProtoType *Superset, SourceLocation SuperLoc,
1328       const FunctionProtoType *Subset, SourceLocation SubLoc);
1329   bool CheckParamExceptionSpec(const PartialDiagnostic & NoteID,
1330       const FunctionProtoType *Target, SourceLocation TargetLoc,
1331       const FunctionProtoType *Source, SourceLocation SourceLoc);
1332 
1333   TypeResult ActOnTypeName(Scope *S, Declarator &D);
1334 
1335   /// \brief The parser has parsed the context-sensitive type 'instancetype'
1336   /// in an Objective-C message declaration. Return the appropriate type.
1337   ParsedType ActOnObjCInstanceType(SourceLocation Loc);
1338 
1339   /// \brief Abstract class used to diagnose incomplete types.
1340   struct TypeDiagnoser {
TypeDiagnoserTypeDiagnoser1341     TypeDiagnoser() {}
1342 
1343     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) = 0;
~TypeDiagnoserTypeDiagnoser1344     virtual ~TypeDiagnoser() {}
1345   };
1346 
getPrintable(int I)1347   static int getPrintable(int I) { return I; }
getPrintable(unsigned I)1348   static unsigned getPrintable(unsigned I) { return I; }
getPrintable(bool B)1349   static bool getPrintable(bool B) { return B; }
getPrintable(const char * S)1350   static const char * getPrintable(const char *S) { return S; }
getPrintable(StringRef S)1351   static StringRef getPrintable(StringRef S) { return S; }
getPrintable(const std::string & S)1352   static const std::string &getPrintable(const std::string &S) { return S; }
getPrintable(const IdentifierInfo * II)1353   static const IdentifierInfo *getPrintable(const IdentifierInfo *II) {
1354     return II;
1355   }
getPrintable(DeclarationName N)1356   static DeclarationName getPrintable(DeclarationName N) { return N; }
getPrintable(QualType T)1357   static QualType getPrintable(QualType T) { return T; }
getPrintable(SourceRange R)1358   static SourceRange getPrintable(SourceRange R) { return R; }
getPrintable(SourceLocation L)1359   static SourceRange getPrintable(SourceLocation L) { return L; }
getPrintable(const Expr * E)1360   static SourceRange getPrintable(const Expr *E) { return E->getSourceRange(); }
getPrintable(TypeLoc TL)1361   static SourceRange getPrintable(TypeLoc TL) { return TL.getSourceRange();}
1362 
1363   template <typename... Ts> class BoundTypeDiagnoser : public TypeDiagnoser {
1364     unsigned DiagID;
1365     std::tuple<const Ts &...> Args;
1366 
1367     template <std::size_t... Is>
emit(const SemaDiagnosticBuilder & DB,llvm::index_sequence<Is...>)1368     void emit(const SemaDiagnosticBuilder &DB,
1369               llvm::index_sequence<Is...>) const {
1370       // Apply all tuple elements to the builder in order.
1371       bool Dummy[] = {false, (DB << getPrintable(std::get<Is>(Args)))...};
1372       (void)Dummy;
1373     }
1374 
1375   public:
BoundTypeDiagnoser(unsigned DiagID,const Ts &...Args)1376     BoundTypeDiagnoser(unsigned DiagID, const Ts &...Args)
1377         : TypeDiagnoser(), DiagID(DiagID), Args(Args...) {
1378       assert(DiagID != 0 && "no diagnostic for type diagnoser");
1379     }
1380 
diagnose(Sema & S,SourceLocation Loc,QualType T)1381     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
1382       const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID);
1383       emit(DB, llvm::index_sequence_for<Ts...>());
1384       DB << T;
1385     }
1386   };
1387 
1388 private:
1389   bool RequireCompleteTypeImpl(SourceLocation Loc, QualType T,
1390                                TypeDiagnoser *Diagnoser);
1391 
1392   VisibleModuleSet VisibleModules;
1393   llvm::SmallVector<VisibleModuleSet, 16> VisibleModulesStack;
1394 
1395   Module *CachedFakeTopLevelModule;
1396 
1397 public:
1398   /// \brief Get the module owning an entity.
1399   Module *getOwningModule(Decl *Entity);
1400 
1401   /// \brief Make a merged definition of an existing hidden definition \p ND
1402   /// visible at the specified location.
1403   void makeMergedDefinitionVisible(NamedDecl *ND, SourceLocation Loc);
1404 
isModuleVisible(Module * M)1405   bool isModuleVisible(Module *M) { return VisibleModules.isVisible(M); }
1406 
1407   /// Determine whether a declaration is visible to name lookup.
isVisible(const NamedDecl * D)1408   bool isVisible(const NamedDecl *D) {
1409     return !D->isHidden() || isVisibleSlow(D);
1410   }
1411 
1412   /// Determine whether any declaration of an entity is visible.
1413   bool
1414   hasVisibleDeclaration(const NamedDecl *D,
1415                         llvm::SmallVectorImpl<Module *> *Modules = nullptr) {
1416     return isVisible(D) || hasVisibleDeclarationSlow(D, Modules);
1417   }
1418   bool hasVisibleDeclarationSlow(const NamedDecl *D,
1419                                  llvm::SmallVectorImpl<Module *> *Modules);
1420 
1421   bool hasVisibleMergedDefinition(NamedDecl *Def);
1422 
1423   /// Determine if \p D has a visible definition. If not, suggest a declaration
1424   /// that should be made visible to expose the definition.
1425   bool hasVisibleDefinition(NamedDecl *D, NamedDecl **Suggested,
1426                             bool OnlyNeedComplete = false);
hasVisibleDefinition(const NamedDecl * D)1427   bool hasVisibleDefinition(const NamedDecl *D) {
1428     NamedDecl *Hidden;
1429     return hasVisibleDefinition(const_cast<NamedDecl*>(D), &Hidden);
1430   }
1431 
1432   /// Determine if the template parameter \p D has a visible default argument.
1433   bool
1434   hasVisibleDefaultArgument(const NamedDecl *D,
1435                             llvm::SmallVectorImpl<Module *> *Modules = nullptr);
1436 
1437   /// Determine if there is a visible declaration of \p D that is a member
1438   /// specialization declaration (as opposed to an instantiated declaration).
1439   bool hasVisibleMemberSpecialization(
1440       const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
1441 
1442   /// Determine if \p A and \p B are equivalent internal linkage declarations
1443   /// from different modules, and thus an ambiguity error can be downgraded to
1444   /// an extension warning.
1445   bool isEquivalentInternalLinkageDeclaration(const NamedDecl *A,
1446                                               const NamedDecl *B);
1447   void diagnoseEquivalentInternalLinkageDeclarations(
1448       SourceLocation Loc, const NamedDecl *D,
1449       ArrayRef<const NamedDecl *> Equiv);
1450 
isCompleteType(SourceLocation Loc,QualType T)1451   bool isCompleteType(SourceLocation Loc, QualType T) {
1452     return !RequireCompleteTypeImpl(Loc, T, nullptr);
1453   }
1454   bool RequireCompleteType(SourceLocation Loc, QualType T,
1455                            TypeDiagnoser &Diagnoser);
1456   bool RequireCompleteType(SourceLocation Loc, QualType T,
1457                            unsigned DiagID);
1458 
1459   template <typename... Ts>
RequireCompleteType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)1460   bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID,
1461                            const Ts &...Args) {
1462     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
1463     return RequireCompleteType(Loc, T, Diagnoser);
1464   }
1465 
1466   void completeExprArrayBound(Expr *E);
1467   bool RequireCompleteExprType(Expr *E, TypeDiagnoser &Diagnoser);
1468   bool RequireCompleteExprType(Expr *E, unsigned DiagID);
1469 
1470   template <typename... Ts>
RequireCompleteExprType(Expr * E,unsigned DiagID,const Ts &...Args)1471   bool RequireCompleteExprType(Expr *E, unsigned DiagID, const Ts &...Args) {
1472     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
1473     return RequireCompleteExprType(E, Diagnoser);
1474   }
1475 
1476   bool RequireLiteralType(SourceLocation Loc, QualType T,
1477                           TypeDiagnoser &Diagnoser);
1478   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID);
1479 
1480   template <typename... Ts>
RequireLiteralType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)1481   bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID,
1482                           const Ts &...Args) {
1483     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
1484     return RequireLiteralType(Loc, T, Diagnoser);
1485   }
1486 
1487   QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
1488                              const CXXScopeSpec &SS, QualType T);
1489 
1490   QualType BuildTypeofExprType(Expr *E, SourceLocation Loc);
1491   /// If AsUnevaluated is false, E is treated as though it were an evaluated
1492   /// context, such as when building a type for decltype(auto).
1493   QualType BuildDecltypeType(Expr *E, SourceLocation Loc,
1494                              bool AsUnevaluated = true);
1495   QualType BuildUnaryTransformType(QualType BaseType,
1496                                    UnaryTransformType::UTTKind UKind,
1497                                    SourceLocation Loc);
1498 
1499   //===--------------------------------------------------------------------===//
1500   // Symbol table / Decl tracking callbacks: SemaDecl.cpp.
1501   //
1502 
1503   struct SkipBodyInfo {
SkipBodyInfoSkipBodyInfo1504     SkipBodyInfo() : ShouldSkip(false), Previous(nullptr) {}
1505     bool ShouldSkip;
1506     NamedDecl *Previous;
1507   };
1508 
1509   /// List of decls defined in a function prototype. This contains EnumConstants
1510   /// that incorrectly end up in translation unit scope because there is no
1511   /// function to pin them on. ActOnFunctionDeclarator reads this list and patches
1512   /// them into the FunctionDecl.
1513   std::vector<NamedDecl*> DeclsInPrototypeScope;
1514 
1515   DeclGroupPtrTy ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType = nullptr);
1516 
1517   void DiagnoseUseOfUnimplementedSelectors();
1518 
1519   bool isSimpleTypeSpecifier(tok::TokenKind Kind) const;
1520 
1521   ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
1522                          Scope *S, CXXScopeSpec *SS = nullptr,
1523                          bool isClassName = false, bool HasTrailingDot = false,
1524                          ParsedType ObjectType = nullptr,
1525                          bool IsCtorOrDtorName = false,
1526                          bool WantNontrivialTypeSourceInfo = false,
1527                          IdentifierInfo **CorrectedII = nullptr);
1528   TypeSpecifierType isTagName(IdentifierInfo &II, Scope *S);
1529   bool isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S);
1530   void DiagnoseUnknownTypeName(IdentifierInfo *&II,
1531                                SourceLocation IILoc,
1532                                Scope *S,
1533                                CXXScopeSpec *SS,
1534                                ParsedType &SuggestedType,
1535                                bool AllowClassTemplates = false);
1536 
1537   /// Attempt to behave like MSVC in situations where lookup of an unqualified
1538   /// type name has failed in a dependent context. In these situations, we
1539   /// automatically form a DependentTypeName that will retry lookup in a related
1540   /// scope during instantiation.
1541   ParsedType ActOnMSVCUnknownTypeName(const IdentifierInfo &II,
1542                                       SourceLocation NameLoc,
1543                                       bool IsTemplateTypeArg);
1544 
1545   /// \brief Describes the result of the name lookup and resolution performed
1546   /// by \c ClassifyName().
1547   enum NameClassificationKind {
1548     NC_Unknown,
1549     NC_Error,
1550     NC_Keyword,
1551     NC_Type,
1552     NC_Expression,
1553     NC_NestedNameSpecifier,
1554     NC_TypeTemplate,
1555     NC_VarTemplate,
1556     NC_FunctionTemplate
1557   };
1558 
1559   class NameClassification {
1560     NameClassificationKind Kind;
1561     ExprResult Expr;
1562     TemplateName Template;
1563     ParsedType Type;
1564     const IdentifierInfo *Keyword;
1565 
NameClassification(NameClassificationKind Kind)1566     explicit NameClassification(NameClassificationKind Kind) : Kind(Kind) {}
1567 
1568   public:
NameClassification(ExprResult Expr)1569     NameClassification(ExprResult Expr) : Kind(NC_Expression), Expr(Expr) {}
1570 
NameClassification(ParsedType Type)1571     NameClassification(ParsedType Type) : Kind(NC_Type), Type(Type) {}
1572 
NameClassification(const IdentifierInfo * Keyword)1573     NameClassification(const IdentifierInfo *Keyword)
1574       : Kind(NC_Keyword), Keyword(Keyword) { }
1575 
Error()1576     static NameClassification Error() {
1577       return NameClassification(NC_Error);
1578     }
1579 
Unknown()1580     static NameClassification Unknown() {
1581       return NameClassification(NC_Unknown);
1582     }
1583 
NestedNameSpecifier()1584     static NameClassification NestedNameSpecifier() {
1585       return NameClassification(NC_NestedNameSpecifier);
1586     }
1587 
TypeTemplate(TemplateName Name)1588     static NameClassification TypeTemplate(TemplateName Name) {
1589       NameClassification Result(NC_TypeTemplate);
1590       Result.Template = Name;
1591       return Result;
1592     }
1593 
VarTemplate(TemplateName Name)1594     static NameClassification VarTemplate(TemplateName Name) {
1595       NameClassification Result(NC_VarTemplate);
1596       Result.Template = Name;
1597       return Result;
1598     }
1599 
FunctionTemplate(TemplateName Name)1600     static NameClassification FunctionTemplate(TemplateName Name) {
1601       NameClassification Result(NC_FunctionTemplate);
1602       Result.Template = Name;
1603       return Result;
1604     }
1605 
getKind()1606     NameClassificationKind getKind() const { return Kind; }
1607 
getType()1608     ParsedType getType() const {
1609       assert(Kind == NC_Type);
1610       return Type;
1611     }
1612 
getExpression()1613     ExprResult getExpression() const {
1614       assert(Kind == NC_Expression);
1615       return Expr;
1616     }
1617 
getTemplateName()1618     TemplateName getTemplateName() const {
1619       assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate ||
1620              Kind == NC_VarTemplate);
1621       return Template;
1622     }
1623 
getTemplateNameKind()1624     TemplateNameKind getTemplateNameKind() const {
1625       switch (Kind) {
1626       case NC_TypeTemplate:
1627         return TNK_Type_template;
1628       case NC_FunctionTemplate:
1629         return TNK_Function_template;
1630       case NC_VarTemplate:
1631         return TNK_Var_template;
1632       default:
1633         llvm_unreachable("unsupported name classification.");
1634       }
1635     }
1636   };
1637 
1638   /// \brief Perform name lookup on the given name, classifying it based on
1639   /// the results of name lookup and the following token.
1640   ///
1641   /// This routine is used by the parser to resolve identifiers and help direct
1642   /// parsing. When the identifier cannot be found, this routine will attempt
1643   /// to correct the typo and classify based on the resulting name.
1644   ///
1645   /// \param S The scope in which we're performing name lookup.
1646   ///
1647   /// \param SS The nested-name-specifier that precedes the name.
1648   ///
1649   /// \param Name The identifier. If typo correction finds an alternative name,
1650   /// this pointer parameter will be updated accordingly.
1651   ///
1652   /// \param NameLoc The location of the identifier.
1653   ///
1654   /// \param NextToken The token following the identifier. Used to help
1655   /// disambiguate the name.
1656   ///
1657   /// \param IsAddressOfOperand True if this name is the operand of a unary
1658   ///        address of ('&') expression, assuming it is classified as an
1659   ///        expression.
1660   ///
1661   /// \param CCC The correction callback, if typo correction is desired.
1662   NameClassification
1663   ClassifyName(Scope *S, CXXScopeSpec &SS, IdentifierInfo *&Name,
1664                SourceLocation NameLoc, const Token &NextToken,
1665                bool IsAddressOfOperand,
1666                std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr);
1667 
1668   Decl *ActOnDeclarator(Scope *S, Declarator &D);
1669 
1670   NamedDecl *HandleDeclarator(Scope *S, Declarator &D,
1671                               MultiTemplateParamsArg TemplateParameterLists);
1672   void RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S);
1673   bool DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo Info);
1674   bool diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
1675                                     DeclarationName Name,
1676                                     SourceLocation Loc);
1677   void
1678   diagnoseIgnoredQualifiers(unsigned DiagID, unsigned Quals,
1679                             SourceLocation FallbackLoc,
1680                             SourceLocation ConstQualLoc = SourceLocation(),
1681                             SourceLocation VolatileQualLoc = SourceLocation(),
1682                             SourceLocation RestrictQualLoc = SourceLocation(),
1683                             SourceLocation AtomicQualLoc = SourceLocation(),
1684                             SourceLocation UnalignedQualLoc = SourceLocation());
1685 
1686   static bool adjustContextForLocalExternDecl(DeclContext *&DC);
1687   void DiagnoseFunctionSpecifiers(const DeclSpec &DS);
1688   void CheckShadow(Scope *S, VarDecl *D, const LookupResult& R);
1689   void CheckShadow(Scope *S, VarDecl *D);
1690 
1691   /// Warn if 'E', which is an expression that is about to be modified, refers
1692   /// to a shadowing declaration.
1693   void CheckShadowingDeclModification(Expr *E, SourceLocation Loc);
1694 
1695 private:
1696   /// Map of current shadowing declarations to shadowed declarations. Warn if
1697   /// it looks like the user is trying to modify the shadowing declaration.
1698   llvm::DenseMap<const NamedDecl *, const NamedDecl *> ShadowingDecls;
1699 
1700 public:
1701   void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange);
1702   void handleTagNumbering(const TagDecl *Tag, Scope *TagScope);
1703   void setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec,
1704                                     TypedefNameDecl *NewTD);
1705   void CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *D);
1706   NamedDecl* ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
1707                                     TypeSourceInfo *TInfo,
1708                                     LookupResult &Previous);
1709   NamedDecl* ActOnTypedefNameDecl(Scope* S, DeclContext* DC, TypedefNameDecl *D,
1710                                   LookupResult &Previous, bool &Redeclaration);
1711   NamedDecl *ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
1712                                      TypeSourceInfo *TInfo,
1713                                      LookupResult &Previous,
1714                                      MultiTemplateParamsArg TemplateParamLists,
1715                                      bool &AddToScope);
1716   // Returns true if the variable declaration is a redeclaration
1717   bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous);
1718   void CheckVariableDeclarationType(VarDecl *NewVD);
1719   void CheckCompleteVariableDeclaration(VarDecl *var);
1720   void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D);
1721 
1722   NamedDecl* ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
1723                                      TypeSourceInfo *TInfo,
1724                                      LookupResult &Previous,
1725                                      MultiTemplateParamsArg TemplateParamLists,
1726                                      bool &AddToScope);
1727   bool AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD);
1728 
1729   bool CheckConstexprFunctionDecl(const FunctionDecl *FD);
1730   bool CheckConstexprFunctionBody(const FunctionDecl *FD, Stmt *Body);
1731 
1732   void DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD);
1733   void FindHiddenVirtualMethods(CXXMethodDecl *MD,
1734                           SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods);
1735   void NoteHiddenVirtualMethods(CXXMethodDecl *MD,
1736                           SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods);
1737   // Returns true if the function declaration is a redeclaration
1738   bool CheckFunctionDeclaration(Scope *S,
1739                                 FunctionDecl *NewFD, LookupResult &Previous,
1740                                 bool IsExplicitSpecialization);
1741   void CheckMain(FunctionDecl *FD, const DeclSpec &D);
1742   void CheckMSVCRTEntryPoint(FunctionDecl *FD);
1743   Decl *ActOnParamDeclarator(Scope *S, Declarator &D);
1744   ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC,
1745                                           SourceLocation Loc,
1746                                           QualType T);
1747   ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc,
1748                               SourceLocation NameLoc, IdentifierInfo *Name,
1749                               QualType T, TypeSourceInfo *TSInfo,
1750                               StorageClass SC);
1751   void ActOnParamDefaultArgument(Decl *param,
1752                                  SourceLocation EqualLoc,
1753                                  Expr *defarg);
1754   void ActOnParamUnparsedDefaultArgument(Decl *param,
1755                                          SourceLocation EqualLoc,
1756                                          SourceLocation ArgLoc);
1757   void ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc);
1758   bool SetParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
1759                                SourceLocation EqualLoc);
1760 
1761   void AddInitializerToDecl(Decl *dcl, Expr *init, bool DirectInit,
1762                             bool TypeMayContainAuto);
1763   void ActOnUninitializedDecl(Decl *dcl, bool TypeMayContainAuto);
1764   void ActOnInitializerError(Decl *Dcl);
1765   void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc);
1766   void ActOnCXXForRangeDecl(Decl *D);
1767   StmtResult ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc,
1768                                         IdentifierInfo *Ident,
1769                                         ParsedAttributes &Attrs,
1770                                         SourceLocation AttrEnd);
1771   void SetDeclDeleted(Decl *dcl, SourceLocation DelLoc);
1772   void SetDeclDefaulted(Decl *dcl, SourceLocation DefaultLoc);
1773   void FinalizeDeclaration(Decl *D);
1774   DeclGroupPtrTy FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
1775                                          ArrayRef<Decl *> Group);
1776   DeclGroupPtrTy BuildDeclaratorGroup(MutableArrayRef<Decl *> Group,
1777                                       bool TypeMayContainAuto = true);
1778 
1779   /// Should be called on all declarations that might have attached
1780   /// documentation comments.
1781   void ActOnDocumentableDecl(Decl *D);
1782   void ActOnDocumentableDecls(ArrayRef<Decl *> Group);
1783 
1784   void ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
1785                                        SourceLocation LocAfterDecls);
1786   void CheckForFunctionRedefinition(
1787       FunctionDecl *FD, const FunctionDecl *EffectiveDefinition = nullptr,
1788       SkipBodyInfo *SkipBody = nullptr);
1789   Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D,
1790                                 MultiTemplateParamsArg TemplateParamLists,
1791                                 SkipBodyInfo *SkipBody = nullptr);
1792   Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D,
1793                                 SkipBodyInfo *SkipBody = nullptr);
1794   void ActOnStartOfObjCMethodDef(Scope *S, Decl *D);
isObjCMethodDecl(Decl * D)1795   bool isObjCMethodDecl(Decl *D) {
1796     return D && isa<ObjCMethodDecl>(D);
1797   }
1798 
1799   /// \brief Determine whether we can delay parsing the body of a function or
1800   /// function template until it is used, assuming we don't care about emitting
1801   /// code for that function.
1802   ///
1803   /// This will be \c false if we may need the body of the function in the
1804   /// middle of parsing an expression (where it's impractical to switch to
1805   /// parsing a different function), for instance, if it's constexpr in C++11
1806   /// or has an 'auto' return type in C++14. These cases are essentially bugs.
1807   bool canDelayFunctionBody(const Declarator &D);
1808 
1809   /// \brief Determine whether we can skip parsing the body of a function
1810   /// definition, assuming we don't care about analyzing its body or emitting
1811   /// code for that function.
1812   ///
1813   /// This will be \c false only if we may need the body of the function in
1814   /// order to parse the rest of the program (for instance, if it is
1815   /// \c constexpr in C++11 or has an 'auto' return type in C++14).
1816   bool canSkipFunctionBody(Decl *D);
1817 
1818   void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope);
1819   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body);
1820   Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation);
1821   Decl *ActOnSkippedFunctionBody(Decl *Decl);
1822   void ActOnFinishInlineFunctionDef(FunctionDecl *D);
1823 
1824   /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an
1825   /// attribute for which parsing is delayed.
1826   void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs);
1827 
1828   /// \brief Diagnose any unused parameters in the given sequence of
1829   /// ParmVarDecl pointers.
1830   void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters);
1831 
1832   /// \brief Diagnose whether the size of parameters or return value of a
1833   /// function or obj-c method definition is pass-by-value and larger than a
1834   /// specified threshold.
1835   void
1836   DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters,
1837                                          QualType ReturnTy, NamedDecl *D);
1838 
1839   void DiagnoseInvalidJumps(Stmt *Body);
1840   Decl *ActOnFileScopeAsmDecl(Expr *expr,
1841                               SourceLocation AsmLoc,
1842                               SourceLocation RParenLoc);
1843 
1844   /// \brief Handle a C++11 empty-declaration and attribute-declaration.
1845   Decl *ActOnEmptyDeclaration(Scope *S,
1846                               AttributeList *AttrList,
1847                               SourceLocation SemiLoc);
1848 
1849   /// \brief The parser has processed a module import declaration.
1850   ///
1851   /// \param AtLoc The location of the '@' symbol, if any.
1852   ///
1853   /// \param ImportLoc The location of the 'import' keyword.
1854   ///
1855   /// \param Path The module access path.
1856   DeclResult ActOnModuleImport(SourceLocation AtLoc, SourceLocation ImportLoc,
1857                                ModuleIdPath Path);
1858 
1859   /// \brief The parser has processed a module import translated from a
1860   /// #include or similar preprocessing directive.
1861   void ActOnModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
1862 
1863   /// \brief The parsed has entered a submodule.
1864   void ActOnModuleBegin(SourceLocation DirectiveLoc, Module *Mod);
1865   /// \brief The parser has left a submodule.
1866   void ActOnModuleEnd(SourceLocation DirectiveLoc, Module *Mod);
1867 
1868   /// \brief Check if module import may be found in the current context,
1869   /// emit error if not.
1870   void diagnoseMisplacedModuleImport(Module *M, SourceLocation ImportLoc);
1871 
1872   /// \brief Create an implicit import of the given module at the given
1873   /// source location, for error recovery, if possible.
1874   ///
1875   /// This routine is typically used when an entity found by name lookup
1876   /// is actually hidden within a module that we know about but the user
1877   /// has forgotten to import.
1878   void createImplicitModuleImportForErrorRecovery(SourceLocation Loc,
1879                                                   Module *Mod);
1880 
1881   /// Kinds of missing import. Note, the values of these enumerators correspond
1882   /// to %select values in diagnostics.
1883   enum class MissingImportKind {
1884     Declaration,
1885     Definition,
1886     DefaultArgument,
1887     ExplicitSpecialization,
1888     PartialSpecialization
1889   };
1890 
1891   /// \brief Diagnose that the specified declaration needs to be visible but
1892   /// isn't, and suggest a module import that would resolve the problem.
1893   void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl,
1894                              MissingImportKind MIK, bool Recover = true);
1895   void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl,
1896                              SourceLocation DeclLoc, ArrayRef<Module *> Modules,
1897                              MissingImportKind MIK, bool Recover);
1898 
1899   /// \brief We've found a use of a templated declaration that would trigger an
1900   /// implicit instantiation. Check that any relevant explicit specializations
1901   /// and partial specializations are visible, and diagnose if not.
1902   void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec);
1903 
1904   /// \brief We've found a use of a template specialization that would select a
1905   /// partial specialization. Check that the partial specialization is visible,
1906   /// and diagnose if not.
1907   void checkPartialSpecializationVisibility(SourceLocation Loc,
1908                                             NamedDecl *Spec);
1909 
1910   /// \brief Retrieve a suitable printing policy.
getPrintingPolicy()1911   PrintingPolicy getPrintingPolicy() const {
1912     return getPrintingPolicy(Context, PP);
1913   }
1914 
1915   /// \brief Retrieve a suitable printing policy.
1916   static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx,
1917                                           const Preprocessor &PP);
1918 
1919   /// Scope actions.
1920   void ActOnPopScope(SourceLocation Loc, Scope *S);
1921   void ActOnTranslationUnitScope(Scope *S);
1922 
1923   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
1924                                    RecordDecl *&AnonRecord);
1925   Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
1926                                    MultiTemplateParamsArg TemplateParams,
1927                                    bool IsExplicitInstantiation,
1928                                    RecordDecl *&AnonRecord);
1929 
1930   Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
1931                                     AccessSpecifier AS,
1932                                     RecordDecl *Record,
1933                                     const PrintingPolicy &Policy);
1934 
1935   Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
1936                                        RecordDecl *Record);
1937 
1938   bool isAcceptableTagRedeclaration(const TagDecl *Previous,
1939                                     TagTypeKind NewTag, bool isDefinition,
1940                                     SourceLocation NewTagLoc,
1941                                     const IdentifierInfo *Name);
1942 
1943   enum TagUseKind {
1944     TUK_Reference,   // Reference to a tag:  'struct foo *X;'
1945     TUK_Declaration, // Fwd decl of a tag:   'struct foo;'
1946     TUK_Definition,  // Definition of a tag: 'struct foo { int X; } Y;'
1947     TUK_Friend       // Friend declaration:  'friend struct foo;'
1948   };
1949 
1950   Decl *ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
1951                  SourceLocation KWLoc, CXXScopeSpec &SS,
1952                  IdentifierInfo *Name, SourceLocation NameLoc,
1953                  AttributeList *Attr, AccessSpecifier AS,
1954                  SourceLocation ModulePrivateLoc,
1955                  MultiTemplateParamsArg TemplateParameterLists,
1956                  bool &OwnedDecl, bool &IsDependent,
1957                  SourceLocation ScopedEnumKWLoc,
1958                  bool ScopedEnumUsesClassTag, TypeResult UnderlyingType,
1959                  bool IsTypeSpecifier, SkipBodyInfo *SkipBody = nullptr);
1960 
1961   Decl *ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
1962                                 unsigned TagSpec, SourceLocation TagLoc,
1963                                 CXXScopeSpec &SS,
1964                                 IdentifierInfo *Name, SourceLocation NameLoc,
1965                                 AttributeList *Attr,
1966                                 MultiTemplateParamsArg TempParamLists);
1967 
1968   TypeResult ActOnDependentTag(Scope *S,
1969                                unsigned TagSpec,
1970                                TagUseKind TUK,
1971                                const CXXScopeSpec &SS,
1972                                IdentifierInfo *Name,
1973                                SourceLocation TagLoc,
1974                                SourceLocation NameLoc);
1975 
1976   void ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart,
1977                  IdentifierInfo *ClassName,
1978                  SmallVectorImpl<Decl *> &Decls);
1979   Decl *ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
1980                    Declarator &D, Expr *BitfieldWidth);
1981 
1982   FieldDecl *HandleField(Scope *S, RecordDecl *TagD, SourceLocation DeclStart,
1983                          Declarator &D, Expr *BitfieldWidth,
1984                          InClassInitStyle InitStyle,
1985                          AccessSpecifier AS);
1986   MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD,
1987                                    SourceLocation DeclStart,
1988                                    Declarator &D, Expr *BitfieldWidth,
1989                                    InClassInitStyle InitStyle,
1990                                    AccessSpecifier AS,
1991                                    AttributeList *MSPropertyAttr);
1992 
1993   FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T,
1994                             TypeSourceInfo *TInfo,
1995                             RecordDecl *Record, SourceLocation Loc,
1996                             bool Mutable, Expr *BitfieldWidth,
1997                             InClassInitStyle InitStyle,
1998                             SourceLocation TSSL,
1999                             AccessSpecifier AS, NamedDecl *PrevDecl,
2000                             Declarator *D = nullptr);
2001 
2002   bool CheckNontrivialField(FieldDecl *FD);
2003   void DiagnoseNontrivial(const CXXRecordDecl *Record, CXXSpecialMember CSM);
2004   bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
2005                               bool Diagnose = false);
2006   CXXSpecialMember getSpecialMember(const CXXMethodDecl *MD);
2007   void ActOnLastBitfield(SourceLocation DeclStart,
2008                          SmallVectorImpl<Decl *> &AllIvarDecls);
2009   Decl *ActOnIvar(Scope *S, SourceLocation DeclStart,
2010                   Declarator &D, Expr *BitfieldWidth,
2011                   tok::ObjCKeywordKind visibility);
2012 
2013   // This is used for both record definitions and ObjC interface declarations.
2014   void ActOnFields(Scope* S, SourceLocation RecLoc, Decl *TagDecl,
2015                    ArrayRef<Decl *> Fields,
2016                    SourceLocation LBrac, SourceLocation RBrac,
2017                    AttributeList *AttrList);
2018 
2019   /// ActOnTagStartDefinition - Invoked when we have entered the
2020   /// scope of a tag's definition (e.g., for an enumeration, class,
2021   /// struct, or union).
2022   void ActOnTagStartDefinition(Scope *S, Decl *TagDecl);
2023 
2024   typedef void *SkippedDefinitionContext;
2025 
2026   /// \brief Invoked when we enter a tag definition that we're skipping.
2027   SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD);
2028 
2029   Decl *ActOnObjCContainerStartDefinition(Decl *IDecl);
2030 
2031   /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a
2032   /// C++ record definition's base-specifiers clause and are starting its
2033   /// member declarations.
2034   void ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagDecl,
2035                                        SourceLocation FinalLoc,
2036                                        bool IsFinalSpelledSealed,
2037                                        SourceLocation LBraceLoc);
2038 
2039   /// ActOnTagFinishDefinition - Invoked once we have finished parsing
2040   /// the definition of a tag (enumeration, class, struct, or union).
2041   void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl,
2042                                 SourceLocation RBraceLoc);
2043 
2044   void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context);
2045 
2046   void ActOnObjCContainerFinishDefinition();
2047 
2048   /// \brief Invoked when we must temporarily exit the objective-c container
2049   /// scope for parsing/looking-up C constructs.
2050   ///
2051   /// Must be followed by a call to \see ActOnObjCReenterContainerContext
2052   void ActOnObjCTemporaryExitContainerContext(DeclContext *DC);
2053   void ActOnObjCReenterContainerContext(DeclContext *DC);
2054 
2055   /// ActOnTagDefinitionError - Invoked when there was an unrecoverable
2056   /// error parsing the definition of a tag.
2057   void ActOnTagDefinitionError(Scope *S, Decl *TagDecl);
2058 
2059   EnumConstantDecl *CheckEnumConstant(EnumDecl *Enum,
2060                                       EnumConstantDecl *LastEnumConst,
2061                                       SourceLocation IdLoc,
2062                                       IdentifierInfo *Id,
2063                                       Expr *val);
2064   bool CheckEnumUnderlyingType(TypeSourceInfo *TI);
2065   bool CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
2066                               QualType EnumUnderlyingTy,
2067                               bool EnumUnderlyingIsImplicit,
2068                               const EnumDecl *Prev);
2069 
2070   /// Determine whether the body of an anonymous enumeration should be skipped.
2071   /// \param II The name of the first enumerator.
2072   SkipBodyInfo shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II,
2073                                       SourceLocation IILoc);
2074 
2075   Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant,
2076                           SourceLocation IdLoc, IdentifierInfo *Id,
2077                           AttributeList *Attrs,
2078                           SourceLocation EqualLoc, Expr *Val);
2079   void ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc,
2080                      SourceLocation RBraceLoc, Decl *EnumDecl,
2081                      ArrayRef<Decl *> Elements,
2082                      Scope *S, AttributeList *Attr);
2083 
2084   DeclContext *getContainingDC(DeclContext *DC);
2085 
2086   /// Set the current declaration context until it gets popped.
2087   void PushDeclContext(Scope *S, DeclContext *DC);
2088   void PopDeclContext();
2089 
2090   /// EnterDeclaratorContext - Used when we must lookup names in the context
2091   /// of a declarator's nested name specifier.
2092   void EnterDeclaratorContext(Scope *S, DeclContext *DC);
2093   void ExitDeclaratorContext(Scope *S);
2094 
2095   /// Push the parameters of D, which must be a function, into scope.
2096   void ActOnReenterFunctionContext(Scope* S, Decl* D);
2097   void ActOnExitFunctionContext();
2098 
2099   DeclContext *getFunctionLevelDeclContext();
2100 
2101   /// getCurFunctionDecl - If inside of a function body, this returns a pointer
2102   /// to the function decl for the function being parsed.  If we're currently
2103   /// in a 'block', this returns the containing context.
2104   FunctionDecl *getCurFunctionDecl();
2105 
2106   /// getCurMethodDecl - If inside of a method body, this returns a pointer to
2107   /// the method decl for the method being parsed.  If we're currently
2108   /// in a 'block', this returns the containing context.
2109   ObjCMethodDecl *getCurMethodDecl();
2110 
2111   /// getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method
2112   /// or C function we're in, otherwise return null.  If we're currently
2113   /// in a 'block', this returns the containing context.
2114   NamedDecl *getCurFunctionOrMethodDecl();
2115 
2116   /// Add this decl to the scope shadowed decl chains.
2117   void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true);
2118 
2119   /// \brief Make the given externally-produced declaration visible at the
2120   /// top level scope.
2121   ///
2122   /// \param D The externally-produced declaration to push.
2123   ///
2124   /// \param Name The name of the externally-produced declaration.
2125   void pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name);
2126 
2127   /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true
2128   /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns
2129   /// true if 'D' belongs to the given declaration context.
2130   ///
2131   /// \param AllowInlineNamespace If \c true, allow the declaration to be in the
2132   ///        enclosing namespace set of the context, rather than contained
2133   ///        directly within it.
2134   bool isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S = nullptr,
2135                      bool AllowInlineNamespace = false);
2136 
2137   /// Finds the scope corresponding to the given decl context, if it
2138   /// happens to be an enclosing scope.  Otherwise return NULL.
2139   static Scope *getScopeForDeclContext(Scope *S, DeclContext *DC);
2140 
2141   /// Subroutines of ActOnDeclarator().
2142   TypedefDecl *ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
2143                                 TypeSourceInfo *TInfo);
2144   bool isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New);
2145 
2146   /// \brief Describes the kind of merge to perform for availability
2147   /// attributes (including "deprecated", "unavailable", and "availability").
2148   enum AvailabilityMergeKind {
2149     /// \brief Don't merge availability attributes at all.
2150     AMK_None,
2151     /// \brief Merge availability attributes for a redeclaration, which requires
2152     /// an exact match.
2153     AMK_Redeclaration,
2154     /// \brief Merge availability attributes for an override, which requires
2155     /// an exact match or a weakening of constraints.
2156     AMK_Override,
2157     /// \brief Merge availability attributes for an implementation of
2158     /// a protocol requirement.
2159     AMK_ProtocolImplementation,
2160   };
2161 
2162   /// Attribute merging methods. Return true if a new attribute was added.
2163   AvailabilityAttr *mergeAvailabilityAttr(NamedDecl *D, SourceRange Range,
2164                                           IdentifierInfo *Platform,
2165                                           bool Implicit,
2166                                           VersionTuple Introduced,
2167                                           VersionTuple Deprecated,
2168                                           VersionTuple Obsoleted,
2169                                           bool IsUnavailable,
2170                                           StringRef Message,
2171                                           bool IsStrict, StringRef Replacement,
2172                                           AvailabilityMergeKind AMK,
2173                                           unsigned AttrSpellingListIndex);
2174   TypeVisibilityAttr *mergeTypeVisibilityAttr(Decl *D, SourceRange Range,
2175                                        TypeVisibilityAttr::VisibilityType Vis,
2176                                               unsigned AttrSpellingListIndex);
2177   VisibilityAttr *mergeVisibilityAttr(Decl *D, SourceRange Range,
2178                                       VisibilityAttr::VisibilityType Vis,
2179                                       unsigned AttrSpellingListIndex);
2180   DLLImportAttr *mergeDLLImportAttr(Decl *D, SourceRange Range,
2181                                     unsigned AttrSpellingListIndex);
2182   DLLExportAttr *mergeDLLExportAttr(Decl *D, SourceRange Range,
2183                                     unsigned AttrSpellingListIndex);
2184   MSInheritanceAttr *
2185   mergeMSInheritanceAttr(Decl *D, SourceRange Range, bool BestCase,
2186                          unsigned AttrSpellingListIndex,
2187                          MSInheritanceAttr::Spelling SemanticSpelling);
2188   FormatAttr *mergeFormatAttr(Decl *D, SourceRange Range,
2189                               IdentifierInfo *Format, int FormatIdx,
2190                               int FirstArg, unsigned AttrSpellingListIndex);
2191   SectionAttr *mergeSectionAttr(Decl *D, SourceRange Range, StringRef Name,
2192                                 unsigned AttrSpellingListIndex);
2193   AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D, SourceRange Range,
2194                                           IdentifierInfo *Ident,
2195                                           unsigned AttrSpellingListIndex);
2196   MinSizeAttr *mergeMinSizeAttr(Decl *D, SourceRange Range,
2197                                 unsigned AttrSpellingListIndex);
2198   OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D, SourceRange Range,
2199                                           unsigned AttrSpellingListIndex);
2200   InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, SourceRange Range,
2201                                                 IdentifierInfo *Ident,
2202                                                 unsigned AttrSpellingListIndex);
2203   CommonAttr *mergeCommonAttr(Decl *D, SourceRange Range, IdentifierInfo *Ident,
2204                               unsigned AttrSpellingListIndex);
2205 
2206   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
2207                            AvailabilityMergeKind AMK = AMK_Redeclaration);
2208   void MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New,
2209                             LookupResult &OldDecls);
2210   bool MergeFunctionDecl(FunctionDecl *New, NamedDecl *&Old, Scope *S,
2211                          bool MergeTypeWithOld);
2212   bool MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
2213                                     Scope *S, bool MergeTypeWithOld);
2214   void mergeObjCMethodDecls(ObjCMethodDecl *New, ObjCMethodDecl *Old);
2215   void MergeVarDecl(VarDecl *New, LookupResult &Previous);
2216   void MergeVarDeclTypes(VarDecl *New, VarDecl *Old, bool MergeTypeWithOld);
2217   void MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old);
2218   bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S);
2219 
2220   // AssignmentAction - This is used by all the assignment diagnostic functions
2221   // to represent what is actually causing the operation
2222   enum AssignmentAction {
2223     AA_Assigning,
2224     AA_Passing,
2225     AA_Returning,
2226     AA_Converting,
2227     AA_Initializing,
2228     AA_Sending,
2229     AA_Casting,
2230     AA_Passing_CFAudited
2231   };
2232 
2233   /// C++ Overloading.
2234   enum OverloadKind {
2235     /// This is a legitimate overload: the existing declarations are
2236     /// functions or function templates with different signatures.
2237     Ovl_Overload,
2238 
2239     /// This is not an overload because the signature exactly matches
2240     /// an existing declaration.
2241     Ovl_Match,
2242 
2243     /// This is not an overload because the lookup results contain a
2244     /// non-function.
2245     Ovl_NonFunction
2246   };
2247   OverloadKind CheckOverload(Scope *S,
2248                              FunctionDecl *New,
2249                              const LookupResult &OldDecls,
2250                              NamedDecl *&OldDecl,
2251                              bool IsForUsingDecl);
2252   bool IsOverload(FunctionDecl *New, FunctionDecl *Old, bool IsForUsingDecl,
2253                   bool ConsiderCudaAttrs = true);
2254 
2255   /// \brief Checks availability of the function depending on the current
2256   /// function context.Inside an unavailable function,unavailability is ignored.
2257   ///
2258   /// \returns true if \p FD is unavailable and current context is inside
2259   /// an available function, false otherwise.
2260   bool isFunctionConsideredUnavailable(FunctionDecl *FD);
2261 
2262   ImplicitConversionSequence
2263   TryImplicitConversion(Expr *From, QualType ToType,
2264                         bool SuppressUserConversions,
2265                         bool AllowExplicit,
2266                         bool InOverloadResolution,
2267                         bool CStyle,
2268                         bool AllowObjCWritebackConversion);
2269 
2270   bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType);
2271   bool IsFloatingPointPromotion(QualType FromType, QualType ToType);
2272   bool IsComplexPromotion(QualType FromType, QualType ToType);
2273   bool IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
2274                            bool InOverloadResolution,
2275                            QualType& ConvertedType, bool &IncompatibleObjC);
2276   bool isObjCPointerConversion(QualType FromType, QualType ToType,
2277                                QualType& ConvertedType, bool &IncompatibleObjC);
2278   bool isObjCWritebackConversion(QualType FromType, QualType ToType,
2279                                  QualType &ConvertedType);
2280   bool IsBlockPointerConversion(QualType FromType, QualType ToType,
2281                                 QualType& ConvertedType);
2282   bool FunctionParamTypesAreEqual(const FunctionProtoType *OldType,
2283                                   const FunctionProtoType *NewType,
2284                                   unsigned *ArgPos = nullptr);
2285   void HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2286                                   QualType FromType, QualType ToType);
2287 
2288   void maybeExtendBlockObject(ExprResult &E);
2289   CastKind PrepareCastToObjCObjectPointer(ExprResult &E);
2290   bool CheckPointerConversion(Expr *From, QualType ToType,
2291                               CastKind &Kind,
2292                               CXXCastPath& BasePath,
2293                               bool IgnoreBaseAccess,
2294                               bool Diagnose = true);
2295   bool IsMemberPointerConversion(Expr *From, QualType FromType, QualType ToType,
2296                                  bool InOverloadResolution,
2297                                  QualType &ConvertedType);
2298   bool CheckMemberPointerConversion(Expr *From, QualType ToType,
2299                                     CastKind &Kind,
2300                                     CXXCastPath &BasePath,
2301                                     bool IgnoreBaseAccess);
2302   bool IsQualificationConversion(QualType FromType, QualType ToType,
2303                                  bool CStyle, bool &ObjCLifetimeConversion);
2304   bool IsNoReturnConversion(QualType FromType, QualType ToType,
2305                             QualType &ResultTy);
2306   bool DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType);
2307   bool isSameOrCompatibleFunctionType(CanQualType Param, CanQualType Arg);
2308 
2309   ExprResult PerformMoveOrCopyInitialization(const InitializedEntity &Entity,
2310                                              const VarDecl *NRVOCandidate,
2311                                              QualType ResultType,
2312                                              Expr *Value,
2313                                              bool AllowNRVO = true);
2314 
2315   bool CanPerformCopyInitialization(const InitializedEntity &Entity,
2316                                     ExprResult Init);
2317   ExprResult PerformCopyInitialization(const InitializedEntity &Entity,
2318                                        SourceLocation EqualLoc,
2319                                        ExprResult Init,
2320                                        bool TopLevelOfInitList = false,
2321                                        bool AllowExplicit = false);
2322   ExprResult PerformObjectArgumentInitialization(Expr *From,
2323                                                  NestedNameSpecifier *Qualifier,
2324                                                  NamedDecl *FoundDecl,
2325                                                  CXXMethodDecl *Method);
2326 
2327   ExprResult PerformContextuallyConvertToBool(Expr *From);
2328   ExprResult PerformContextuallyConvertToObjCPointer(Expr *From);
2329 
2330   /// Contexts in which a converted constant expression is required.
2331   enum CCEKind {
2332     CCEK_CaseValue,   ///< Expression in a case label.
2333     CCEK_Enumerator,  ///< Enumerator value with fixed underlying type.
2334     CCEK_TemplateArg, ///< Value of a non-type template parameter.
2335     CCEK_NewExpr,     ///< Constant expression in a noptr-new-declarator.
2336     CCEK_ConstexprIf  ///< Condition in a constexpr if statement.
2337   };
2338   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
2339                                               llvm::APSInt &Value, CCEKind CCE);
2340   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
2341                                               APValue &Value, CCEKind CCE);
2342 
2343   /// \brief Abstract base class used to perform a contextual implicit
2344   /// conversion from an expression to any type passing a filter.
2345   class ContextualImplicitConverter {
2346   public:
2347     bool Suppress;
2348     bool SuppressConversion;
2349 
2350     ContextualImplicitConverter(bool Suppress = false,
2351                                 bool SuppressConversion = false)
Suppress(Suppress)2352         : Suppress(Suppress), SuppressConversion(SuppressConversion) {}
2353 
2354     /// \brief Determine whether the specified type is a valid destination type
2355     /// for this conversion.
2356     virtual bool match(QualType T) = 0;
2357 
2358     /// \brief Emits a diagnostic complaining that the expression does not have
2359     /// integral or enumeration type.
2360     virtual SemaDiagnosticBuilder
2361     diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) = 0;
2362 
2363     /// \brief Emits a diagnostic when the expression has incomplete class type.
2364     virtual SemaDiagnosticBuilder
2365     diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0;
2366 
2367     /// \brief Emits a diagnostic when the only matching conversion function
2368     /// is explicit.
2369     virtual SemaDiagnosticBuilder diagnoseExplicitConv(
2370         Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
2371 
2372     /// \brief Emits a note for the explicit conversion function.
2373     virtual SemaDiagnosticBuilder
2374     noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
2375 
2376     /// \brief Emits a diagnostic when there are multiple possible conversion
2377     /// functions.
2378     virtual SemaDiagnosticBuilder
2379     diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) = 0;
2380 
2381     /// \brief Emits a note for one of the candidate conversions.
2382     virtual SemaDiagnosticBuilder
2383     noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
2384 
2385     /// \brief Emits a diagnostic when we picked a conversion function
2386     /// (for cases when we are not allowed to pick a conversion function).
2387     virtual SemaDiagnosticBuilder diagnoseConversion(
2388         Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
2389 
~ContextualImplicitConverter()2390     virtual ~ContextualImplicitConverter() {}
2391   };
2392 
2393   class ICEConvertDiagnoser : public ContextualImplicitConverter {
2394     bool AllowScopedEnumerations;
2395 
2396   public:
ICEConvertDiagnoser(bool AllowScopedEnumerations,bool Suppress,bool SuppressConversion)2397     ICEConvertDiagnoser(bool AllowScopedEnumerations,
2398                         bool Suppress, bool SuppressConversion)
2399         : ContextualImplicitConverter(Suppress, SuppressConversion),
2400           AllowScopedEnumerations(AllowScopedEnumerations) {}
2401 
2402     /// Match an integral or (possibly scoped) enumeration type.
2403     bool match(QualType T) override;
2404 
2405     SemaDiagnosticBuilder
diagnoseNoMatch(Sema & S,SourceLocation Loc,QualType T)2406     diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) override {
2407       return diagnoseNotInt(S, Loc, T);
2408     }
2409 
2410     /// \brief Emits a diagnostic complaining that the expression does not have
2411     /// integral or enumeration type.
2412     virtual SemaDiagnosticBuilder
2413     diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) = 0;
2414   };
2415 
2416   /// Perform a contextual implicit conversion.
2417   ExprResult PerformContextualImplicitConversion(
2418       SourceLocation Loc, Expr *FromE, ContextualImplicitConverter &Converter);
2419 
2420 
2421   enum ObjCSubscriptKind {
2422     OS_Array,
2423     OS_Dictionary,
2424     OS_Error
2425   };
2426   ObjCSubscriptKind CheckSubscriptingKind(Expr *FromE);
2427 
2428   // Note that LK_String is intentionally after the other literals, as
2429   // this is used for diagnostics logic.
2430   enum ObjCLiteralKind {
2431     LK_Array,
2432     LK_Dictionary,
2433     LK_Numeric,
2434     LK_Boxed,
2435     LK_String,
2436     LK_Block,
2437     LK_None
2438   };
2439   ObjCLiteralKind CheckLiteralKind(Expr *FromE);
2440 
2441   ExprResult PerformObjectMemberConversion(Expr *From,
2442                                            NestedNameSpecifier *Qualifier,
2443                                            NamedDecl *FoundDecl,
2444                                            NamedDecl *Member);
2445 
2446   // Members have to be NamespaceDecl* or TranslationUnitDecl*.
2447   // TODO: make this is a typesafe union.
2448   typedef llvm::SmallSetVector<DeclContext   *, 16> AssociatedNamespaceSet;
2449   typedef llvm::SmallSetVector<CXXRecordDecl *, 16> AssociatedClassSet;
2450 
2451   void AddOverloadCandidate(FunctionDecl *Function,
2452                             DeclAccessPair FoundDecl,
2453                             ArrayRef<Expr *> Args,
2454                             OverloadCandidateSet& CandidateSet,
2455                             bool SuppressUserConversions = false,
2456                             bool PartialOverloading = false,
2457                             bool AllowExplicit = false);
2458   void AddFunctionCandidates(const UnresolvedSetImpl &Functions,
2459                       ArrayRef<Expr *> Args,
2460                       OverloadCandidateSet &CandidateSet,
2461                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
2462                       bool SuppressUserConversions = false,
2463                       bool PartialOverloading = false);
2464   void AddMethodCandidate(DeclAccessPair FoundDecl,
2465                           QualType ObjectType,
2466                           Expr::Classification ObjectClassification,
2467                           ArrayRef<Expr *> Args,
2468                           OverloadCandidateSet& CandidateSet,
2469                           bool SuppressUserConversion = false);
2470   void AddMethodCandidate(CXXMethodDecl *Method,
2471                           DeclAccessPair FoundDecl,
2472                           CXXRecordDecl *ActingContext, QualType ObjectType,
2473                           Expr::Classification ObjectClassification,
2474                           ArrayRef<Expr *> Args,
2475                           OverloadCandidateSet& CandidateSet,
2476                           bool SuppressUserConversions = false,
2477                           bool PartialOverloading = false);
2478   void AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
2479                                   DeclAccessPair FoundDecl,
2480                                   CXXRecordDecl *ActingContext,
2481                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
2482                                   QualType ObjectType,
2483                                   Expr::Classification ObjectClassification,
2484                                   ArrayRef<Expr *> Args,
2485                                   OverloadCandidateSet& CandidateSet,
2486                                   bool SuppressUserConversions = false,
2487                                   bool PartialOverloading = false);
2488   void AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
2489                                     DeclAccessPair FoundDecl,
2490                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
2491                                     ArrayRef<Expr *> Args,
2492                                     OverloadCandidateSet& CandidateSet,
2493                                     bool SuppressUserConversions = false,
2494                                     bool PartialOverloading = false);
2495   void AddConversionCandidate(CXXConversionDecl *Conversion,
2496                               DeclAccessPair FoundDecl,
2497                               CXXRecordDecl *ActingContext,
2498                               Expr *From, QualType ToType,
2499                               OverloadCandidateSet& CandidateSet,
2500                               bool AllowObjCConversionOnExplicit);
2501   void AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
2502                                       DeclAccessPair FoundDecl,
2503                                       CXXRecordDecl *ActingContext,
2504                                       Expr *From, QualType ToType,
2505                                       OverloadCandidateSet &CandidateSet,
2506                                       bool AllowObjCConversionOnExplicit);
2507   void AddSurrogateCandidate(CXXConversionDecl *Conversion,
2508                              DeclAccessPair FoundDecl,
2509                              CXXRecordDecl *ActingContext,
2510                              const FunctionProtoType *Proto,
2511                              Expr *Object, ArrayRef<Expr *> Args,
2512                              OverloadCandidateSet& CandidateSet);
2513   void AddMemberOperatorCandidates(OverloadedOperatorKind Op,
2514                                    SourceLocation OpLoc, ArrayRef<Expr *> Args,
2515                                    OverloadCandidateSet& CandidateSet,
2516                                    SourceRange OpRange = SourceRange());
2517   void AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
2518                            ArrayRef<Expr *> Args,
2519                            OverloadCandidateSet& CandidateSet,
2520                            bool IsAssignmentOperator = false,
2521                            unsigned NumContextualBoolArguments = 0);
2522   void AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
2523                                     SourceLocation OpLoc, ArrayRef<Expr *> Args,
2524                                     OverloadCandidateSet& CandidateSet);
2525   void AddArgumentDependentLookupCandidates(DeclarationName Name,
2526                                             SourceLocation Loc,
2527                                             ArrayRef<Expr *> Args,
2528                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
2529                                             OverloadCandidateSet& CandidateSet,
2530                                             bool PartialOverloading = false);
2531 
2532   // Emit as a 'note' the specific overload candidate
2533   void NoteOverloadCandidate(NamedDecl *Found, FunctionDecl *Fn,
2534                              QualType DestType = QualType(),
2535                              bool TakingAddress = false);
2536 
2537   // Emit as a series of 'note's all template and non-templates identified by
2538   // the expression Expr
2539   void NoteAllOverloadCandidates(Expr *E, QualType DestType = QualType(),
2540                                  bool TakingAddress = false);
2541 
2542   /// Check the enable_if expressions on the given function. Returns the first
2543   /// failing attribute, or NULL if they were all successful.
2544   EnableIfAttr *CheckEnableIf(FunctionDecl *Function, ArrayRef<Expr *> Args,
2545                               bool MissingImplicitThis = false);
2546 
2547   /// Returns whether the given function's address can be taken or not,
2548   /// optionally emitting a diagnostic if the address can't be taken.
2549   ///
2550   /// Returns false if taking the address of the function is illegal.
2551   bool checkAddressOfFunctionIsAvailable(const FunctionDecl *Function,
2552                                          bool Complain = false,
2553                                          SourceLocation Loc = SourceLocation());
2554 
2555   // [PossiblyAFunctionType]  -->   [Return]
2556   // NonFunctionType --> NonFunctionType
2557   // R (A) --> R(A)
2558   // R (*)(A) --> R (A)
2559   // R (&)(A) --> R (A)
2560   // R (S::*)(A) --> R (A)
2561   QualType ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType);
2562 
2563   FunctionDecl *
2564   ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
2565                                      QualType TargetType,
2566                                      bool Complain,
2567                                      DeclAccessPair &Found,
2568                                      bool *pHadMultipleCandidates = nullptr);
2569 
2570   FunctionDecl *
2571   resolveAddressOfOnlyViableOverloadCandidate(Expr *E,
2572                                               DeclAccessPair &FoundResult);
2573 
2574   bool resolveAndFixAddressOfOnlyViableOverloadCandidate(ExprResult &SrcExpr);
2575 
2576   FunctionDecl *
2577   ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
2578                                               bool Complain = false,
2579                                               DeclAccessPair *Found = nullptr);
2580 
2581   bool ResolveAndFixSingleFunctionTemplateSpecialization(
2582                       ExprResult &SrcExpr,
2583                       bool DoFunctionPointerConverion = false,
2584                       bool Complain = false,
2585                       SourceRange OpRangeForComplaining = SourceRange(),
2586                       QualType DestTypeForComplaining = QualType(),
2587                       unsigned DiagIDForComplaining = 0);
2588 
2589 
2590   Expr *FixOverloadedFunctionReference(Expr *E,
2591                                        DeclAccessPair FoundDecl,
2592                                        FunctionDecl *Fn);
2593   ExprResult FixOverloadedFunctionReference(ExprResult,
2594                                             DeclAccessPair FoundDecl,
2595                                             FunctionDecl *Fn);
2596 
2597   void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
2598                                    ArrayRef<Expr *> Args,
2599                                    OverloadCandidateSet &CandidateSet,
2600                                    bool PartialOverloading = false);
2601 
2602   // An enum used to represent the different possible results of building a
2603   // range-based for loop.
2604   enum ForRangeStatus {
2605     FRS_Success,
2606     FRS_NoViableFunction,
2607     FRS_DiagnosticIssued
2608   };
2609 
2610   ForRangeStatus BuildForRangeBeginEndCall(SourceLocation Loc,
2611                                            SourceLocation RangeLoc,
2612                                            const DeclarationNameInfo &NameInfo,
2613                                            LookupResult &MemberLookup,
2614                                            OverloadCandidateSet *CandidateSet,
2615                                            Expr *Range, ExprResult *CallExpr);
2616 
2617   ExprResult BuildOverloadedCallExpr(Scope *S, Expr *Fn,
2618                                      UnresolvedLookupExpr *ULE,
2619                                      SourceLocation LParenLoc,
2620                                      MultiExprArg Args,
2621                                      SourceLocation RParenLoc,
2622                                      Expr *ExecConfig,
2623                                      bool AllowTypoCorrection=true,
2624                                      bool CalleesAddressIsTaken=false);
2625 
2626   bool buildOverloadedCallSet(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
2627                               MultiExprArg Args, SourceLocation RParenLoc,
2628                               OverloadCandidateSet *CandidateSet,
2629                               ExprResult *Result);
2630 
2631   ExprResult CreateOverloadedUnaryOp(SourceLocation OpLoc,
2632                                      UnaryOperatorKind Opc,
2633                                      const UnresolvedSetImpl &Fns,
2634                                      Expr *input);
2635 
2636   ExprResult CreateOverloadedBinOp(SourceLocation OpLoc,
2637                                    BinaryOperatorKind Opc,
2638                                    const UnresolvedSetImpl &Fns,
2639                                    Expr *LHS, Expr *RHS);
2640 
2641   ExprResult CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
2642                                                 SourceLocation RLoc,
2643                                                 Expr *Base,Expr *Idx);
2644 
2645   ExprResult
2646   BuildCallToMemberFunction(Scope *S, Expr *MemExpr,
2647                             SourceLocation LParenLoc,
2648                             MultiExprArg Args,
2649                             SourceLocation RParenLoc);
2650   ExprResult
2651   BuildCallToObjectOfClassType(Scope *S, Expr *Object, SourceLocation LParenLoc,
2652                                MultiExprArg Args,
2653                                SourceLocation RParenLoc);
2654 
2655   ExprResult BuildOverloadedArrowExpr(Scope *S, Expr *Base,
2656                                       SourceLocation OpLoc,
2657                                       bool *NoArrowOperatorFound = nullptr);
2658 
2659   /// CheckCallReturnType - Checks that a call expression's return type is
2660   /// complete. Returns true on failure. The location passed in is the location
2661   /// that best represents the call.
2662   bool CheckCallReturnType(QualType ReturnType, SourceLocation Loc,
2663                            CallExpr *CE, FunctionDecl *FD);
2664 
2665   /// Helpers for dealing with blocks and functions.
2666   bool CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters,
2667                                 bool CheckParameterNames);
2668   void CheckCXXDefaultArguments(FunctionDecl *FD);
2669   void CheckExtraCXXDefaultArguments(Declarator &D);
2670   Scope *getNonFieldDeclScope(Scope *S);
2671 
2672   /// \name Name lookup
2673   ///
2674   /// These routines provide name lookup that is used during semantic
2675   /// analysis to resolve the various kinds of names (identifiers,
2676   /// overloaded operator names, constructor names, etc.) into zero or
2677   /// more declarations within a particular scope. The major entry
2678   /// points are LookupName, which performs unqualified name lookup,
2679   /// and LookupQualifiedName, which performs qualified name lookup.
2680   ///
2681   /// All name lookup is performed based on some specific criteria,
2682   /// which specify what names will be visible to name lookup and how
2683   /// far name lookup should work. These criteria are important both
2684   /// for capturing language semantics (certain lookups will ignore
2685   /// certain names, for example) and for performance, since name
2686   /// lookup is often a bottleneck in the compilation of C++. Name
2687   /// lookup criteria is specified via the LookupCriteria enumeration.
2688   ///
2689   /// The results of name lookup can vary based on the kind of name
2690   /// lookup performed, the current language, and the translation
2691   /// unit. In C, for example, name lookup will either return nothing
2692   /// (no entity found) or a single declaration. In C++, name lookup
2693   /// can additionally refer to a set of overloaded functions or
2694   /// result in an ambiguity. All of the possible results of name
2695   /// lookup are captured by the LookupResult class, which provides
2696   /// the ability to distinguish among them.
2697   //@{
2698 
2699   /// @brief Describes the kind of name lookup to perform.
2700   enum LookupNameKind {
2701     /// Ordinary name lookup, which finds ordinary names (functions,
2702     /// variables, typedefs, etc.) in C and most kinds of names
2703     /// (functions, variables, members, types, etc.) in C++.
2704     LookupOrdinaryName = 0,
2705     /// Tag name lookup, which finds the names of enums, classes,
2706     /// structs, and unions.
2707     LookupTagName,
2708     /// Label name lookup.
2709     LookupLabel,
2710     /// Member name lookup, which finds the names of
2711     /// class/struct/union members.
2712     LookupMemberName,
2713     /// Look up of an operator name (e.g., operator+) for use with
2714     /// operator overloading. This lookup is similar to ordinary name
2715     /// lookup, but will ignore any declarations that are class members.
2716     LookupOperatorName,
2717     /// Look up of a name that precedes the '::' scope resolution
2718     /// operator in C++. This lookup completely ignores operator, object,
2719     /// function, and enumerator names (C++ [basic.lookup.qual]p1).
2720     LookupNestedNameSpecifierName,
2721     /// Look up a namespace name within a C++ using directive or
2722     /// namespace alias definition, ignoring non-namespace names (C++
2723     /// [basic.lookup.udir]p1).
2724     LookupNamespaceName,
2725     /// Look up all declarations in a scope with the given name,
2726     /// including resolved using declarations.  This is appropriate
2727     /// for checking redeclarations for a using declaration.
2728     LookupUsingDeclName,
2729     /// Look up an ordinary name that is going to be redeclared as a
2730     /// name with linkage. This lookup ignores any declarations that
2731     /// are outside of the current scope unless they have linkage. See
2732     /// C99 6.2.2p4-5 and C++ [basic.link]p6.
2733     LookupRedeclarationWithLinkage,
2734     /// Look up a friend of a local class. This lookup does not look
2735     /// outside the innermost non-class scope. See C++11 [class.friend]p11.
2736     LookupLocalFriendName,
2737     /// Look up the name of an Objective-C protocol.
2738     LookupObjCProtocolName,
2739     /// Look up implicit 'self' parameter of an objective-c method.
2740     LookupObjCImplicitSelfParam,
2741     /// \brief Look up the name of an OpenMP user-defined reduction operation.
2742     LookupOMPReductionName,
2743     /// \brief Look up any declaration with any name.
2744     LookupAnyName
2745   };
2746 
2747   /// \brief Specifies whether (or how) name lookup is being performed for a
2748   /// redeclaration (vs. a reference).
2749   enum RedeclarationKind {
2750     /// \brief The lookup is a reference to this name that is not for the
2751     /// purpose of redeclaring the name.
2752     NotForRedeclaration = 0,
2753     /// \brief The lookup results will be used for redeclaration of a name,
2754     /// if an entity by that name already exists.
2755     ForRedeclaration
2756   };
2757 
2758   /// \brief The possible outcomes of name lookup for a literal operator.
2759   enum LiteralOperatorLookupResult {
2760     /// \brief The lookup resulted in an error.
2761     LOLR_Error,
2762     /// \brief The lookup found a single 'cooked' literal operator, which
2763     /// expects a normal literal to be built and passed to it.
2764     LOLR_Cooked,
2765     /// \brief The lookup found a single 'raw' literal operator, which expects
2766     /// a string literal containing the spelling of the literal token.
2767     LOLR_Raw,
2768     /// \brief The lookup found an overload set of literal operator templates,
2769     /// which expect the characters of the spelling of the literal token to be
2770     /// passed as a non-type template argument pack.
2771     LOLR_Template,
2772     /// \brief The lookup found an overload set of literal operator templates,
2773     /// which expect the character type and characters of the spelling of the
2774     /// string literal token to be passed as template arguments.
2775     LOLR_StringTemplate
2776   };
2777 
2778   SpecialMemberOverloadResult *LookupSpecialMember(CXXRecordDecl *D,
2779                                                    CXXSpecialMember SM,
2780                                                    bool ConstArg,
2781                                                    bool VolatileArg,
2782                                                    bool RValueThis,
2783                                                    bool ConstThis,
2784                                                    bool VolatileThis);
2785 
2786   typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator;
2787   typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)>
2788       TypoRecoveryCallback;
2789 
2790 private:
2791   bool CppLookupName(LookupResult &R, Scope *S);
2792 
2793   struct TypoExprState {
2794     std::unique_ptr<TypoCorrectionConsumer> Consumer;
2795     TypoDiagnosticGenerator DiagHandler;
2796     TypoRecoveryCallback RecoveryHandler;
2797     TypoExprState();
2798     TypoExprState(TypoExprState&& other) LLVM_NOEXCEPT;
2799     TypoExprState& operator=(TypoExprState&& other) LLVM_NOEXCEPT;
2800   };
2801 
2802   /// \brief The set of unhandled TypoExprs and their associated state.
2803   llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos;
2804 
2805   /// \brief Creates a new TypoExpr AST node.
2806   TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC,
2807                               TypoDiagnosticGenerator TDG,
2808                               TypoRecoveryCallback TRC);
2809 
2810   // \brief The set of known/encountered (unique, canonicalized) NamespaceDecls.
2811   //
2812   // The boolean value will be true to indicate that the namespace was loaded
2813   // from an AST/PCH file, or false otherwise.
2814   llvm::MapVector<NamespaceDecl*, bool> KnownNamespaces;
2815 
2816   /// \brief Whether we have already loaded known namespaces from an extenal
2817   /// source.
2818   bool LoadedExternalKnownNamespaces;
2819 
2820   /// \brief Helper for CorrectTypo and CorrectTypoDelayed used to create and
2821   /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction
2822   /// should be skipped entirely.
2823   std::unique_ptr<TypoCorrectionConsumer>
2824   makeTypoCorrectionConsumer(const DeclarationNameInfo &Typo,
2825                              Sema::LookupNameKind LookupKind, Scope *S,
2826                              CXXScopeSpec *SS,
2827                              std::unique_ptr<CorrectionCandidateCallback> CCC,
2828                              DeclContext *MemberContext, bool EnteringContext,
2829                              const ObjCObjectPointerType *OPT,
2830                              bool ErrorRecovery);
2831 
2832 public:
2833   const TypoExprState &getTypoExprState(TypoExpr *TE) const;
2834 
2835   /// \brief Clears the state of the given TypoExpr.
2836   void clearDelayedTypo(TypoExpr *TE);
2837 
2838   /// \brief Look up a name, looking for a single declaration.  Return
2839   /// null if the results were absent, ambiguous, or overloaded.
2840   ///
2841   /// It is preferable to use the elaborated form and explicitly handle
2842   /// ambiguity and overloaded.
2843   NamedDecl *LookupSingleName(Scope *S, DeclarationName Name,
2844                               SourceLocation Loc,
2845                               LookupNameKind NameKind,
2846                               RedeclarationKind Redecl
2847                                 = NotForRedeclaration);
2848   bool LookupName(LookupResult &R, Scope *S,
2849                   bool AllowBuiltinCreation = false);
2850   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
2851                            bool InUnqualifiedLookup = false);
2852   bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
2853                            CXXScopeSpec &SS);
2854   bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS,
2855                         bool AllowBuiltinCreation = false,
2856                         bool EnteringContext = false);
2857   ObjCProtocolDecl *LookupProtocol(IdentifierInfo *II, SourceLocation IdLoc,
2858                                    RedeclarationKind Redecl
2859                                      = NotForRedeclaration);
2860   bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class);
2861 
2862   void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,
2863                                     QualType T1, QualType T2,
2864                                     UnresolvedSetImpl &Functions);
2865   void addOverloadedOperatorToUnresolvedSet(UnresolvedSetImpl &Functions,
2866                                             DeclAccessPair Operator,
2867                                             QualType T1, QualType T2);
2868 
2869   LabelDecl *LookupOrCreateLabel(IdentifierInfo *II, SourceLocation IdentLoc,
2870                                  SourceLocation GnuLabelLoc = SourceLocation());
2871 
2872   DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class);
2873   CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class);
2874   CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class,
2875                                                unsigned Quals);
2876   CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals,
2877                                          bool RValueThis, unsigned ThisQuals);
2878   CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class,
2879                                               unsigned Quals);
2880   CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, unsigned Quals,
2881                                         bool RValueThis, unsigned ThisQuals);
2882   CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class);
2883 
2884   bool checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Id);
2885   LiteralOperatorLookupResult LookupLiteralOperator(Scope *S, LookupResult &R,
2886                                                     ArrayRef<QualType> ArgTys,
2887                                                     bool AllowRaw,
2888                                                     bool AllowTemplate,
2889                                                     bool AllowStringTemplate);
2890   bool isKnownName(StringRef name);
2891 
2892   void ArgumentDependentLookup(DeclarationName Name, SourceLocation Loc,
2893                                ArrayRef<Expr *> Args, ADLResult &Functions);
2894 
2895   void LookupVisibleDecls(Scope *S, LookupNameKind Kind,
2896                           VisibleDeclConsumer &Consumer,
2897                           bool IncludeGlobalScope = true);
2898   void LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind,
2899                           VisibleDeclConsumer &Consumer,
2900                           bool IncludeGlobalScope = true);
2901 
2902   enum CorrectTypoKind {
2903     CTK_NonError,     // CorrectTypo used in a non error recovery situation.
2904     CTK_ErrorRecovery // CorrectTypo used in normal error recovery.
2905   };
2906 
2907   TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo,
2908                              Sema::LookupNameKind LookupKind,
2909                              Scope *S, CXXScopeSpec *SS,
2910                              std::unique_ptr<CorrectionCandidateCallback> CCC,
2911                              CorrectTypoKind Mode,
2912                              DeclContext *MemberContext = nullptr,
2913                              bool EnteringContext = false,
2914                              const ObjCObjectPointerType *OPT = nullptr,
2915                              bool RecordFailure = true);
2916 
2917   TypoExpr *CorrectTypoDelayed(const DeclarationNameInfo &Typo,
2918                                Sema::LookupNameKind LookupKind, Scope *S,
2919                                CXXScopeSpec *SS,
2920                                std::unique_ptr<CorrectionCandidateCallback> CCC,
2921                                TypoDiagnosticGenerator TDG,
2922                                TypoRecoveryCallback TRC, CorrectTypoKind Mode,
2923                                DeclContext *MemberContext = nullptr,
2924                                bool EnteringContext = false,
2925                                const ObjCObjectPointerType *OPT = nullptr);
2926 
2927   /// \brief Process any TypoExprs in the given Expr and its children,
2928   /// generating diagnostics as appropriate and returning a new Expr if there
2929   /// were typos that were all successfully corrected and ExprError if one or
2930   /// more typos could not be corrected.
2931   ///
2932   /// \param E The Expr to check for TypoExprs.
2933   ///
2934   /// \param InitDecl A VarDecl to avoid because the Expr being corrected is its
2935   /// initializer.
2936   ///
2937   /// \param Filter A function applied to a newly rebuilt Expr to determine if
2938   /// it is an acceptable/usable result from a single combination of typo
2939   /// corrections. As long as the filter returns ExprError, different
2940   /// combinations of corrections will be tried until all are exhausted.
2941   ExprResult
2942   CorrectDelayedTyposInExpr(Expr *E, VarDecl *InitDecl = nullptr,
2943                             llvm::function_ref<ExprResult(Expr *)> Filter =
2944                                 [](Expr *E) -> ExprResult { return E; });
2945 
2946   ExprResult
CorrectDelayedTyposInExpr(Expr * E,llvm::function_ref<ExprResult (Expr *)> Filter)2947   CorrectDelayedTyposInExpr(Expr *E,
2948                             llvm::function_ref<ExprResult(Expr *)> Filter) {
2949     return CorrectDelayedTyposInExpr(E, nullptr, Filter);
2950   }
2951 
2952   ExprResult
2953   CorrectDelayedTyposInExpr(ExprResult ER, VarDecl *InitDecl = nullptr,
2954                             llvm::function_ref<ExprResult(Expr *)> Filter =
2955                                 [](Expr *E) -> ExprResult { return E; }) {
2956     return ER.isInvalid() ? ER : CorrectDelayedTyposInExpr(ER.get(), Filter);
2957   }
2958 
2959   ExprResult
CorrectDelayedTyposInExpr(ExprResult ER,llvm::function_ref<ExprResult (Expr *)> Filter)2960   CorrectDelayedTyposInExpr(ExprResult ER,
2961                             llvm::function_ref<ExprResult(Expr *)> Filter) {
2962     return CorrectDelayedTyposInExpr(ER, nullptr, Filter);
2963   }
2964 
2965   void diagnoseTypo(const TypoCorrection &Correction,
2966                     const PartialDiagnostic &TypoDiag,
2967                     bool ErrorRecovery = true);
2968 
2969   void diagnoseTypo(const TypoCorrection &Correction,
2970                     const PartialDiagnostic &TypoDiag,
2971                     const PartialDiagnostic &PrevNote,
2972                     bool ErrorRecovery = true);
2973 
2974   void FindAssociatedClassesAndNamespaces(SourceLocation InstantiationLoc,
2975                                           ArrayRef<Expr *> Args,
2976                                    AssociatedNamespaceSet &AssociatedNamespaces,
2977                                    AssociatedClassSet &AssociatedClasses);
2978 
2979   void FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S,
2980                             bool ConsiderLinkage, bool AllowInlineNamespace);
2981 
2982   void DiagnoseAmbiguousLookup(LookupResult &Result);
2983   //@}
2984 
2985   ObjCInterfaceDecl *getObjCInterfaceDecl(IdentifierInfo *&Id,
2986                                           SourceLocation IdLoc,
2987                                           bool TypoCorrection = false);
2988   NamedDecl *LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID,
2989                                  Scope *S, bool ForRedeclaration,
2990                                  SourceLocation Loc);
2991   NamedDecl *ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II,
2992                                       Scope *S);
2993   void AddKnownFunctionAttributes(FunctionDecl *FD);
2994 
2995   // More parsing and symbol table subroutines.
2996 
2997   void ProcessPragmaWeak(Scope *S, Decl *D);
2998   // Decl attributes - this routine is the top level dispatcher.
2999   void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD);
3000   void ProcessDeclAttributeList(Scope *S, Decl *D, const AttributeList *AL,
3001                                 bool IncludeCXX11Attributes = true);
3002   bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl,
3003                                       const AttributeList *AttrList);
3004 
3005   void checkUnusedDeclAttributes(Declarator &D);
3006 
3007   /// Determine if type T is a valid subject for a nonnull and similar
3008   /// attributes. By default, we look through references (the behavior used by
3009   /// nonnull), but if the second parameter is true, then we treat a reference
3010   /// type as valid.
3011   bool isValidPointerAttrType(QualType T, bool RefOkay = false);
3012 
3013   bool CheckRegparmAttr(const AttributeList &attr, unsigned &value);
3014   bool CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC,
3015                             const FunctionDecl *FD = nullptr);
3016   bool CheckNoReturnAttr(const AttributeList &attr);
3017   bool checkStringLiteralArgumentAttr(const AttributeList &Attr,
3018                                       unsigned ArgNum, StringRef &Str,
3019                                       SourceLocation *ArgLocation = nullptr);
3020   bool checkSectionName(SourceLocation LiteralLoc, StringRef Str);
3021   void checkTargetAttr(SourceLocation LiteralLoc, StringRef Str);
3022   bool checkMSInheritanceAttrOnDefinition(
3023       CXXRecordDecl *RD, SourceRange Range, bool BestCase,
3024       MSInheritanceAttr::Spelling SemanticSpelling);
3025 
3026   void CheckAlignasUnderalignment(Decl *D);
3027 
3028   /// Adjust the calling convention of a method to be the ABI default if it
3029   /// wasn't specified explicitly.  This handles method types formed from
3030   /// function type typedefs and typename template arguments.
3031   void adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor,
3032                               SourceLocation Loc);
3033 
3034   // Check if there is an explicit attribute, but only look through parens.
3035   // The intent is to look for an attribute on the current declarator, but not
3036   // one that came from a typedef.
3037   bool hasExplicitCallingConv(QualType &T);
3038 
3039   /// Get the outermost AttributedType node that sets a calling convention.
3040   /// Valid types should not have multiple attributes with different CCs.
3041   const AttributedType *getCallingConvAttributedType(QualType T) const;
3042 
3043   /// Check whether a nullability type specifier can be added to the given
3044   /// type.
3045   ///
3046   /// \param type The type to which the nullability specifier will be
3047   /// added. On success, this type will be updated appropriately.
3048   ///
3049   /// \param nullability The nullability specifier to add.
3050   ///
3051   /// \param nullabilityLoc The location of the nullability specifier.
3052   ///
3053   /// \param isContextSensitive Whether this nullability specifier was
3054   /// written as a context-sensitive keyword (in an Objective-C
3055   /// method) or an Objective-C property attribute, rather than as an
3056   /// underscored type specifier.
3057   ///
3058   /// \returns true if nullability cannot be applied, false otherwise.
3059   bool checkNullabilityTypeSpecifier(QualType &type, NullabilityKind nullability,
3060                                      SourceLocation nullabilityLoc,
3061                                      bool isContextSensitive);
3062 
3063   /// \brief Stmt attributes - this routine is the top level dispatcher.
3064   StmtResult ProcessStmtAttributes(Stmt *Stmt, AttributeList *Attrs,
3065                                    SourceRange Range);
3066 
3067   void WarnConflictingTypedMethods(ObjCMethodDecl *Method,
3068                                    ObjCMethodDecl *MethodDecl,
3069                                    bool IsProtocolMethodDecl);
3070 
3071   void CheckConflictingOverridingMethod(ObjCMethodDecl *Method,
3072                                    ObjCMethodDecl *Overridden,
3073                                    bool IsProtocolMethodDecl);
3074 
3075   /// WarnExactTypedMethods - This routine issues a warning if method
3076   /// implementation declaration matches exactly that of its declaration.
3077   void WarnExactTypedMethods(ObjCMethodDecl *Method,
3078                              ObjCMethodDecl *MethodDecl,
3079                              bool IsProtocolMethodDecl);
3080 
3081   typedef llvm::SmallPtrSet<Selector, 8> SelectorSet;
3082   typedef llvm::DenseMap<Selector, ObjCMethodDecl*> ProtocolsMethodsMap;
3083 
3084   /// CheckImplementationIvars - This routine checks if the instance variables
3085   /// listed in the implelementation match those listed in the interface.
3086   void CheckImplementationIvars(ObjCImplementationDecl *ImpDecl,
3087                                 ObjCIvarDecl **Fields, unsigned nIvars,
3088                                 SourceLocation Loc);
3089 
3090   /// ImplMethodsVsClassMethods - This is main routine to warn if any method
3091   /// remains unimplemented in the class or category \@implementation.
3092   void ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl,
3093                                  ObjCContainerDecl* IDecl,
3094                                  bool IncompleteImpl = false);
3095 
3096   /// DiagnoseUnimplementedProperties - This routine warns on those properties
3097   /// which must be implemented by this implementation.
3098   void DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl,
3099                                        ObjCContainerDecl *CDecl,
3100                                        bool SynthesizeProperties);
3101 
3102   /// Diagnose any null-resettable synthesized setters.
3103   void diagnoseNullResettableSynthesizedSetters(const ObjCImplDecl *impDecl);
3104 
3105   /// DefaultSynthesizeProperties - This routine default synthesizes all
3106   /// properties which must be synthesized in the class's \@implementation.
3107   void DefaultSynthesizeProperties (Scope *S, ObjCImplDecl* IMPDecl,
3108                                     ObjCInterfaceDecl *IDecl);
3109   void DefaultSynthesizeProperties(Scope *S, Decl *D);
3110 
3111   /// IvarBacksCurrentMethodAccessor - This routine returns 'true' if 'IV' is
3112   /// an ivar synthesized for 'Method' and 'Method' is a property accessor
3113   /// declared in class 'IFace'.
3114   bool IvarBacksCurrentMethodAccessor(ObjCInterfaceDecl *IFace,
3115                                       ObjCMethodDecl *Method, ObjCIvarDecl *IV);
3116 
3117   /// DiagnoseUnusedBackingIvarInAccessor - Issue an 'unused' warning if ivar which
3118   /// backs the property is not used in the property's accessor.
3119   void DiagnoseUnusedBackingIvarInAccessor(Scope *S,
3120                                            const ObjCImplementationDecl *ImplD);
3121 
3122   /// GetIvarBackingPropertyAccessor - If method is a property setter/getter and
3123   /// it property has a backing ivar, returns this ivar; otherwise, returns NULL.
3124   /// It also returns ivar's property on success.
3125   ObjCIvarDecl *GetIvarBackingPropertyAccessor(const ObjCMethodDecl *Method,
3126                                                const ObjCPropertyDecl *&PDecl) const;
3127 
3128   /// Called by ActOnProperty to handle \@property declarations in
3129   /// class extensions.
3130   ObjCPropertyDecl *HandlePropertyInClassExtension(Scope *S,
3131                       SourceLocation AtLoc,
3132                       SourceLocation LParenLoc,
3133                       FieldDeclarator &FD,
3134                       Selector GetterSel,
3135                       Selector SetterSel,
3136                       const bool isReadWrite,
3137                       unsigned &Attributes,
3138                       const unsigned AttributesAsWritten,
3139                       QualType T,
3140                       TypeSourceInfo *TSI,
3141                       tok::ObjCKeywordKind MethodImplKind);
3142 
3143   /// Called by ActOnProperty and HandlePropertyInClassExtension to
3144   /// handle creating the ObjcPropertyDecl for a category or \@interface.
3145   ObjCPropertyDecl *CreatePropertyDecl(Scope *S,
3146                                        ObjCContainerDecl *CDecl,
3147                                        SourceLocation AtLoc,
3148                                        SourceLocation LParenLoc,
3149                                        FieldDeclarator &FD,
3150                                        Selector GetterSel,
3151                                        Selector SetterSel,
3152                                        const bool isReadWrite,
3153                                        const unsigned Attributes,
3154                                        const unsigned AttributesAsWritten,
3155                                        QualType T,
3156                                        TypeSourceInfo *TSI,
3157                                        tok::ObjCKeywordKind MethodImplKind,
3158                                        DeclContext *lexicalDC = nullptr);
3159 
3160   /// AtomicPropertySetterGetterRules - This routine enforces the rule (via
3161   /// warning) when atomic property has one but not the other user-declared
3162   /// setter or getter.
3163   void AtomicPropertySetterGetterRules(ObjCImplDecl* IMPDecl,
3164                                        ObjCInterfaceDecl* IDecl);
3165 
3166   void DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D);
3167 
3168   void DiagnoseMissingDesignatedInitOverrides(
3169                                           const ObjCImplementationDecl *ImplD,
3170                                           const ObjCInterfaceDecl *IFD);
3171 
3172   void DiagnoseDuplicateIvars(ObjCInterfaceDecl *ID, ObjCInterfaceDecl *SID);
3173 
3174   enum MethodMatchStrategy {
3175     MMS_loose,
3176     MMS_strict
3177   };
3178 
3179   /// MatchTwoMethodDeclarations - Checks if two methods' type match and returns
3180   /// true, or false, accordingly.
3181   bool MatchTwoMethodDeclarations(const ObjCMethodDecl *Method,
3182                                   const ObjCMethodDecl *PrevMethod,
3183                                   MethodMatchStrategy strategy = MMS_strict);
3184 
3185   /// MatchAllMethodDeclarations - Check methods declaraed in interface or
3186   /// or protocol against those declared in their implementations.
3187   void MatchAllMethodDeclarations(const SelectorSet &InsMap,
3188                                   const SelectorSet &ClsMap,
3189                                   SelectorSet &InsMapSeen,
3190                                   SelectorSet &ClsMapSeen,
3191                                   ObjCImplDecl* IMPDecl,
3192                                   ObjCContainerDecl* IDecl,
3193                                   bool &IncompleteImpl,
3194                                   bool ImmediateClass,
3195                                   bool WarnCategoryMethodImpl=false);
3196 
3197   /// CheckCategoryVsClassMethodMatches - Checks that methods implemented in
3198   /// category matches with those implemented in its primary class and
3199   /// warns each time an exact match is found.
3200   void CheckCategoryVsClassMethodMatches(ObjCCategoryImplDecl *CatIMP);
3201 
3202   /// \brief Add the given method to the list of globally-known methods.
3203   void addMethodToGlobalList(ObjCMethodList *List, ObjCMethodDecl *Method);
3204 
3205 private:
3206   /// AddMethodToGlobalPool - Add an instance or factory method to the global
3207   /// pool. See descriptoin of AddInstanceMethodToGlobalPool.
3208   void AddMethodToGlobalPool(ObjCMethodDecl *Method, bool impl, bool instance);
3209 
3210   /// LookupMethodInGlobalPool - Returns the instance or factory method and
3211   /// optionally warns if there are multiple signatures.
3212   ObjCMethodDecl *LookupMethodInGlobalPool(Selector Sel, SourceRange R,
3213                                            bool receiverIdOrClass,
3214                                            bool instance);
3215 
3216 public:
3217   /// \brief - Returns instance or factory methods in global method pool for
3218   /// given selector. It checks the desired kind first, if none is found, and
3219   /// parameter checkTheOther is set, it then checks the other kind. If no such
3220   /// method or only one method is found, function returns false; otherwise, it
3221   /// returns true.
3222   bool
3223   CollectMultipleMethodsInGlobalPool(Selector Sel,
3224                                      SmallVectorImpl<ObjCMethodDecl*>& Methods,
3225                                      bool InstanceFirst, bool CheckTheOther,
3226                                      const ObjCObjectType *TypeBound = nullptr);
3227 
3228   bool
3229   AreMultipleMethodsInGlobalPool(Selector Sel, ObjCMethodDecl *BestMethod,
3230                                  SourceRange R, bool receiverIdOrClass,
3231                                  SmallVectorImpl<ObjCMethodDecl*>& Methods);
3232 
3233   void
3234   DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl*> &Methods,
3235                                      Selector Sel, SourceRange R,
3236                                      bool receiverIdOrClass);
3237 
3238 private:
3239   /// \brief - Returns a selector which best matches given argument list or
3240   /// nullptr if none could be found
3241   ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args,
3242                                    bool IsInstance,
3243                                    SmallVectorImpl<ObjCMethodDecl*>& Methods);
3244 
3245 
3246   /// \brief Record the typo correction failure and return an empty correction.
3247   TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc,
3248                                   bool RecordFailure = true) {
3249     if (RecordFailure)
3250       TypoCorrectionFailures[Typo].insert(TypoLoc);
3251     return TypoCorrection();
3252   }
3253 
3254 public:
3255   /// AddInstanceMethodToGlobalPool - All instance methods in a translation
3256   /// unit are added to a global pool. This allows us to efficiently associate
3257   /// a selector with a method declaraation for purposes of typechecking
3258   /// messages sent to "id" (where the class of the object is unknown).
3259   void AddInstanceMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) {
3260     AddMethodToGlobalPool(Method, impl, /*instance*/true);
3261   }
3262 
3263   /// AddFactoryMethodToGlobalPool - Same as above, but for factory methods.
3264   void AddFactoryMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) {
3265     AddMethodToGlobalPool(Method, impl, /*instance*/false);
3266   }
3267 
3268   /// AddAnyMethodToGlobalPool - Add any method, instance or factory to global
3269   /// pool.
3270   void AddAnyMethodToGlobalPool(Decl *D);
3271 
3272   /// LookupInstanceMethodInGlobalPool - Returns the method and warns if
3273   /// there are multiple signatures.
3274   ObjCMethodDecl *LookupInstanceMethodInGlobalPool(Selector Sel, SourceRange R,
3275                                                    bool receiverIdOrClass=false) {
3276     return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass,
3277                                     /*instance*/true);
3278   }
3279 
3280   /// LookupFactoryMethodInGlobalPool - Returns the method and warns if
3281   /// there are multiple signatures.
3282   ObjCMethodDecl *LookupFactoryMethodInGlobalPool(Selector Sel, SourceRange R,
3283                                                   bool receiverIdOrClass=false) {
3284     return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass,
3285                                     /*instance*/false);
3286   }
3287 
3288   const ObjCMethodDecl *SelectorsForTypoCorrection(Selector Sel,
3289                               QualType ObjectType=QualType());
3290   /// LookupImplementedMethodInGlobalPool - Returns the method which has an
3291   /// implementation.
3292   ObjCMethodDecl *LookupImplementedMethodInGlobalPool(Selector Sel);
3293 
3294   /// CollectIvarsToConstructOrDestruct - Collect those ivars which require
3295   /// initialization.
3296   void CollectIvarsToConstructOrDestruct(ObjCInterfaceDecl *OI,
3297                                   SmallVectorImpl<ObjCIvarDecl*> &Ivars);
3298 
3299   //===--------------------------------------------------------------------===//
3300   // Statement Parsing Callbacks: SemaStmt.cpp.
3301 public:
3302   class FullExprArg {
3303   public:
FullExprArg()3304     FullExprArg() : E(nullptr) { }
FullExprArg(Sema & actions)3305     FullExprArg(Sema &actions) : E(nullptr) { }
3306 
release()3307     ExprResult release() {
3308       return E;
3309     }
3310 
get()3311     Expr *get() const { return E; }
3312 
3313     Expr *operator->() {
3314       return E;
3315     }
3316 
3317   private:
3318     // FIXME: No need to make the entire Sema class a friend when it's just
3319     // Sema::MakeFullExpr that needs access to the constructor below.
3320     friend class Sema;
3321 
FullExprArg(Expr * expr)3322     explicit FullExprArg(Expr *expr) : E(expr) {}
3323 
3324     Expr *E;
3325   };
3326 
MakeFullExpr(Expr * Arg)3327   FullExprArg MakeFullExpr(Expr *Arg) {
3328     return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation());
3329   }
MakeFullExpr(Expr * Arg,SourceLocation CC)3330   FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) {
3331     return FullExprArg(ActOnFinishFullExpr(Arg, CC).get());
3332   }
MakeFullDiscardedValueExpr(Expr * Arg)3333   FullExprArg MakeFullDiscardedValueExpr(Expr *Arg) {
3334     ExprResult FE =
3335       ActOnFinishFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation(),
3336                           /*DiscardedValue*/ true);
3337     return FullExprArg(FE.get());
3338   }
3339 
3340   StmtResult ActOnExprStmt(ExprResult Arg);
3341   StmtResult ActOnExprStmtError();
3342 
3343   StmtResult ActOnNullStmt(SourceLocation SemiLoc,
3344                            bool HasLeadingEmptyMacro = false);
3345 
3346   void ActOnStartOfCompoundStmt();
3347   void ActOnFinishOfCompoundStmt();
3348   StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,
3349                                ArrayRef<Stmt *> Elts, bool isStmtExpr);
3350 
3351   /// \brief A RAII object to enter scope of a compound statement.
3352   class CompoundScopeRAII {
3353   public:
CompoundScopeRAII(Sema & S)3354     CompoundScopeRAII(Sema &S): S(S) {
3355       S.ActOnStartOfCompoundStmt();
3356     }
3357 
~CompoundScopeRAII()3358     ~CompoundScopeRAII() {
3359       S.ActOnFinishOfCompoundStmt();
3360     }
3361 
3362   private:
3363     Sema &S;
3364   };
3365 
3366   /// An RAII helper that pops function a function scope on exit.
3367   struct FunctionScopeRAII {
3368     Sema &S;
3369     bool Active;
FunctionScopeRAIIFunctionScopeRAII3370     FunctionScopeRAII(Sema &S) : S(S), Active(true) {}
~FunctionScopeRAIIFunctionScopeRAII3371     ~FunctionScopeRAII() {
3372       if (Active)
3373         S.PopFunctionScopeInfo();
3374     }
disableFunctionScopeRAII3375     void disable() { Active = false; }
3376   };
3377 
3378   StmtResult ActOnDeclStmt(DeclGroupPtrTy Decl,
3379                                    SourceLocation StartLoc,
3380                                    SourceLocation EndLoc);
3381   void ActOnForEachDeclStmt(DeclGroupPtrTy Decl);
3382   StmtResult ActOnForEachLValueExpr(Expr *E);
3383   StmtResult ActOnCaseStmt(SourceLocation CaseLoc, Expr *LHSVal,
3384                                    SourceLocation DotDotDotLoc, Expr *RHSVal,
3385                                    SourceLocation ColonLoc);
3386   void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt);
3387 
3388   StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
3389                                       SourceLocation ColonLoc,
3390                                       Stmt *SubStmt, Scope *CurScope);
3391   StmtResult ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl,
3392                             SourceLocation ColonLoc, Stmt *SubStmt);
3393 
3394   StmtResult ActOnAttributedStmt(SourceLocation AttrLoc,
3395                                  ArrayRef<const Attr*> Attrs,
3396                                  Stmt *SubStmt);
3397 
3398   class ConditionResult;
3399   StmtResult ActOnIfStmt(SourceLocation IfLoc, bool IsConstexpr,
3400                          Stmt *InitStmt,
3401                          ConditionResult Cond, Stmt *ThenVal,
3402                          SourceLocation ElseLoc, Stmt *ElseVal);
3403   StmtResult BuildIfStmt(SourceLocation IfLoc, bool IsConstexpr,
3404                          Stmt *InitStmt,
3405                          ConditionResult Cond, Stmt *ThenVal,
3406                          SourceLocation ElseLoc, Stmt *ElseVal);
3407   StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc,
3408                                     Stmt *InitStmt,
3409                                     ConditionResult Cond);
3410   StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc,
3411                                            Stmt *Switch, Stmt *Body);
3412   StmtResult ActOnWhileStmt(SourceLocation WhileLoc, ConditionResult Cond,
3413                             Stmt *Body);
3414   StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body,
3415                          SourceLocation WhileLoc, SourceLocation CondLParen,
3416                          Expr *Cond, SourceLocation CondRParen);
3417 
3418   StmtResult ActOnForStmt(SourceLocation ForLoc,
3419                           SourceLocation LParenLoc,
3420                           Stmt *First,
3421                           ConditionResult Second,
3422                           FullExprArg Third,
3423                           SourceLocation RParenLoc,
3424                           Stmt *Body);
3425   ExprResult CheckObjCForCollectionOperand(SourceLocation forLoc,
3426                                            Expr *collection);
3427   StmtResult ActOnObjCForCollectionStmt(SourceLocation ForColLoc,
3428                                         Stmt *First, Expr *collection,
3429                                         SourceLocation RParenLoc);
3430   StmtResult FinishObjCForCollectionStmt(Stmt *ForCollection, Stmt *Body);
3431 
3432   enum BuildForRangeKind {
3433     /// Initial building of a for-range statement.
3434     BFRK_Build,
3435     /// Instantiation or recovery rebuild of a for-range statement. Don't
3436     /// attempt any typo-correction.
3437     BFRK_Rebuild,
3438     /// Determining whether a for-range statement could be built. Avoid any
3439     /// unnecessary or irreversible actions.
3440     BFRK_Check
3441   };
3442 
3443   StmtResult ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc,
3444                                   SourceLocation CoawaitLoc,
3445                                   Stmt *LoopVar,
3446                                   SourceLocation ColonLoc, Expr *Collection,
3447                                   SourceLocation RParenLoc,
3448                                   BuildForRangeKind Kind);
3449   StmtResult BuildCXXForRangeStmt(SourceLocation ForLoc,
3450                                   SourceLocation CoawaitLoc,
3451                                   SourceLocation ColonLoc,
3452                                   Stmt *RangeDecl, Stmt *Begin, Stmt *End,
3453                                   Expr *Cond, Expr *Inc,
3454                                   Stmt *LoopVarDecl,
3455                                   SourceLocation RParenLoc,
3456                                   BuildForRangeKind Kind);
3457   StmtResult FinishCXXForRangeStmt(Stmt *ForRange, Stmt *Body);
3458 
3459   StmtResult ActOnGotoStmt(SourceLocation GotoLoc,
3460                            SourceLocation LabelLoc,
3461                            LabelDecl *TheDecl);
3462   StmtResult ActOnIndirectGotoStmt(SourceLocation GotoLoc,
3463                                    SourceLocation StarLoc,
3464                                    Expr *DestExp);
3465   StmtResult ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope);
3466   StmtResult ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope);
3467 
3468   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
3469                                 CapturedRegionKind Kind, unsigned NumParams);
3470   typedef std::pair<StringRef, QualType> CapturedParamNameType;
3471   void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
3472                                 CapturedRegionKind Kind,
3473                                 ArrayRef<CapturedParamNameType> Params);
3474   StmtResult ActOnCapturedRegionEnd(Stmt *S);
3475   void ActOnCapturedRegionError();
3476   RecordDecl *CreateCapturedStmtRecordDecl(CapturedDecl *&CD,
3477                                            SourceLocation Loc,
3478                                            unsigned NumParams);
3479   VarDecl *getCopyElisionCandidate(QualType ReturnType, Expr *E,
3480                                    bool AllowParamOrMoveConstructible);
3481   bool isCopyElisionCandidate(QualType ReturnType, const VarDecl *VD,
3482                               bool AllowParamOrMoveConstructible);
3483 
3484   StmtResult ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
3485                              Scope *CurScope);
3486   StmtResult BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp);
3487   StmtResult ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp);
3488 
3489   StmtResult ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple,
3490                              bool IsVolatile, unsigned NumOutputs,
3491                              unsigned NumInputs, IdentifierInfo **Names,
3492                              MultiExprArg Constraints, MultiExprArg Exprs,
3493                              Expr *AsmString, MultiExprArg Clobbers,
3494                              SourceLocation RParenLoc);
3495 
3496   ExprResult LookupInlineAsmIdentifier(CXXScopeSpec &SS,
3497                                        SourceLocation TemplateKWLoc,
3498                                        UnqualifiedId &Id,
3499                                        llvm::InlineAsmIdentifierInfo &Info,
3500                                        bool IsUnevaluatedContext);
3501   bool LookupInlineAsmField(StringRef Base, StringRef Member,
3502                             unsigned &Offset, SourceLocation AsmLoc);
3503   ExprResult LookupInlineAsmVarDeclField(Expr *RefExpr, StringRef Member,
3504                                          llvm::InlineAsmIdentifierInfo &Info,
3505                                          SourceLocation AsmLoc);
3506   StmtResult ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
3507                             ArrayRef<Token> AsmToks,
3508                             StringRef AsmString,
3509                             unsigned NumOutputs, unsigned NumInputs,
3510                             ArrayRef<StringRef> Constraints,
3511                             ArrayRef<StringRef> Clobbers,
3512                             ArrayRef<Expr*> Exprs,
3513                             SourceLocation EndLoc);
3514   LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName,
3515                                    SourceLocation Location,
3516                                    bool AlwaysCreate);
3517 
3518   VarDecl *BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType ExceptionType,
3519                                   SourceLocation StartLoc,
3520                                   SourceLocation IdLoc, IdentifierInfo *Id,
3521                                   bool Invalid = false);
3522 
3523   Decl *ActOnObjCExceptionDecl(Scope *S, Declarator &D);
3524 
3525   StmtResult ActOnObjCAtCatchStmt(SourceLocation AtLoc, SourceLocation RParen,
3526                                   Decl *Parm, Stmt *Body);
3527 
3528   StmtResult ActOnObjCAtFinallyStmt(SourceLocation AtLoc, Stmt *Body);
3529 
3530   StmtResult ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try,
3531                                 MultiStmtArg Catch, Stmt *Finally);
3532 
3533   StmtResult BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw);
3534   StmtResult ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw,
3535                                   Scope *CurScope);
3536   ExprResult ActOnObjCAtSynchronizedOperand(SourceLocation atLoc,
3537                                             Expr *operand);
3538   StmtResult ActOnObjCAtSynchronizedStmt(SourceLocation AtLoc,
3539                                          Expr *SynchExpr,
3540                                          Stmt *SynchBody);
3541 
3542   StmtResult ActOnObjCAutoreleasePoolStmt(SourceLocation AtLoc, Stmt *Body);
3543 
3544   VarDecl *BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo,
3545                                      SourceLocation StartLoc,
3546                                      SourceLocation IdLoc,
3547                                      IdentifierInfo *Id);
3548 
3549   Decl *ActOnExceptionDeclarator(Scope *S, Declarator &D);
3550 
3551   StmtResult ActOnCXXCatchBlock(SourceLocation CatchLoc,
3552                                 Decl *ExDecl, Stmt *HandlerBlock);
3553   StmtResult ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock,
3554                               ArrayRef<Stmt *> Handlers);
3555 
3556   StmtResult ActOnSEHTryBlock(bool IsCXXTry, // try (true) or __try (false) ?
3557                               SourceLocation TryLoc, Stmt *TryBlock,
3558                               Stmt *Handler);
3559   StmtResult ActOnSEHExceptBlock(SourceLocation Loc,
3560                                  Expr *FilterExpr,
3561                                  Stmt *Block);
3562   void ActOnStartSEHFinallyBlock();
3563   void ActOnAbortSEHFinallyBlock();
3564   StmtResult ActOnFinishSEHFinallyBlock(SourceLocation Loc, Stmt *Block);
3565   StmtResult ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope);
3566 
3567   void DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock);
3568 
3569   bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const;
3570 
3571   /// \brief If it's a file scoped decl that must warn if not used, keep track
3572   /// of it.
3573   void MarkUnusedFileScopedDecl(const DeclaratorDecl *D);
3574 
3575   /// DiagnoseUnusedExprResult - If the statement passed in is an expression
3576   /// whose result is unused, warn.
3577   void DiagnoseUnusedExprResult(const Stmt *S);
3578   void DiagnoseUnusedNestedTypedefs(const RecordDecl *D);
3579   void DiagnoseUnusedDecl(const NamedDecl *ND);
3580 
3581   /// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null
3582   /// statement as a \p Body, and it is located on the same line.
3583   ///
3584   /// This helps prevent bugs due to typos, such as:
3585   ///     if (condition);
3586   ///       do_stuff();
3587   void DiagnoseEmptyStmtBody(SourceLocation StmtLoc,
3588                              const Stmt *Body,
3589                              unsigned DiagID);
3590 
3591   /// Warn if a for/while loop statement \p S, which is followed by
3592   /// \p PossibleBody, has a suspicious null statement as a body.
3593   void DiagnoseEmptyLoopBody(const Stmt *S,
3594                              const Stmt *PossibleBody);
3595 
3596   /// Warn if a value is moved to itself.
3597   void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr,
3598                         SourceLocation OpLoc);
3599 
3600   /// \brief Warn if we're implicitly casting from a _Nullable pointer type to a
3601   /// _Nonnull one.
3602   void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType,
3603                                            SourceLocation Loc);
3604 
PushParsingDeclaration(sema::DelayedDiagnosticPool & pool)3605   ParsingDeclState PushParsingDeclaration(sema::DelayedDiagnosticPool &pool) {
3606     return DelayedDiagnostics.push(pool);
3607   }
3608   void PopParsingDeclaration(ParsingDeclState state, Decl *decl);
3609 
3610   typedef ProcessingContextState ParsingClassState;
PushParsingClass()3611   ParsingClassState PushParsingClass() {
3612     return DelayedDiagnostics.pushUndelayed();
3613   }
PopParsingClass(ParsingClassState state)3614   void PopParsingClass(ParsingClassState state) {
3615     DelayedDiagnostics.popUndelayed(state);
3616   }
3617 
3618   void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);
3619 
3620   enum AvailabilityDiagnostic { AD_Deprecation, AD_Unavailable, AD_Partial };
3621 
3622   void EmitAvailabilityWarning(AvailabilityDiagnostic AD,
3623                                NamedDecl *D, StringRef Message,
3624                                SourceLocation Loc,
3625                                const ObjCInterfaceDecl *UnknownObjCClass,
3626                                const ObjCPropertyDecl  *ObjCProperty,
3627                                bool ObjCPropertyAccess);
3628 
3629   bool makeUnavailableInSystemHeader(SourceLocation loc,
3630                                      UnavailableAttr::ImplicitReason reason);
3631 
3632   //===--------------------------------------------------------------------===//
3633   // Expression Parsing Callbacks: SemaExpr.cpp.
3634 
3635   bool CanUseDecl(NamedDecl *D, bool TreatUnavailableAsInvalid);
3636   bool DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc,
3637                          const ObjCInterfaceDecl *UnknownObjCClass=nullptr,
3638                          bool ObjCPropertyAccess=false);
3639   void NoteDeletedFunction(FunctionDecl *FD);
3640   void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD);
3641   std::string getDeletedOrUnavailableSuffix(const FunctionDecl *FD);
3642   bool DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *PD,
3643                                         ObjCMethodDecl *Getter,
3644                                         SourceLocation Loc);
3645   void DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc,
3646                              ArrayRef<Expr *> Args);
3647 
3648   void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext,
3649                                        Decl *LambdaContextDecl = nullptr,
3650                                        bool IsDecltype = false);
3651   enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl };
3652   void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext,
3653                                        ReuseLambdaContextDecl_t,
3654                                        bool IsDecltype = false);
3655   void PopExpressionEvaluationContext();
3656 
3657   void DiscardCleanupsInEvaluationContext();
3658 
3659   ExprResult TransformToPotentiallyEvaluated(Expr *E);
3660   ExprResult HandleExprEvaluationContextForTypeof(Expr *E);
3661 
3662   ExprResult ActOnConstantExpression(ExprResult Res);
3663 
3664   // Functions for marking a declaration referenced.  These functions also
3665   // contain the relevant logic for marking if a reference to a function or
3666   // variable is an odr-use (in the C++11 sense).  There are separate variants
3667   // for expressions referring to a decl; these exist because odr-use marking
3668   // needs to be delayed for some constant variables when we build one of the
3669   // named expressions.
3670   //
3671   // MightBeOdrUse indicates whether the use could possibly be an odr-use, and
3672   // should usually be true. This only needs to be set to false if the lack of
3673   // odr-use cannot be determined from the current context (for instance,
3674   // because the name denotes a virtual function and was written without an
3675   // explicit nested-name-specifier).
3676   void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse);
3677   void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func,
3678                               bool MightBeOdrUse = true);
3679   void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var);
3680   void MarkDeclRefReferenced(DeclRefExpr *E);
3681   void MarkMemberReferenced(MemberExpr *E);
3682 
3683   void UpdateMarkingForLValueToRValue(Expr *E);
3684   void CleanupVarDeclMarking();
3685 
3686   enum TryCaptureKind {
3687     TryCapture_Implicit, TryCapture_ExplicitByVal, TryCapture_ExplicitByRef
3688   };
3689 
3690   /// \brief Try to capture the given variable.
3691   ///
3692   /// \param Var The variable to capture.
3693   ///
3694   /// \param Loc The location at which the capture occurs.
3695   ///
3696   /// \param Kind The kind of capture, which may be implicit (for either a
3697   /// block or a lambda), or explicit by-value or by-reference (for a lambda).
3698   ///
3699   /// \param EllipsisLoc The location of the ellipsis, if one is provided in
3700   /// an explicit lambda capture.
3701   ///
3702   /// \param BuildAndDiagnose Whether we are actually supposed to add the
3703   /// captures or diagnose errors. If false, this routine merely check whether
3704   /// the capture can occur without performing the capture itself or complaining
3705   /// if the variable cannot be captured.
3706   ///
3707   /// \param CaptureType Will be set to the type of the field used to capture
3708   /// this variable in the innermost block or lambda. Only valid when the
3709   /// variable can be captured.
3710   ///
3711   /// \param DeclRefType Will be set to the type of a reference to the capture
3712   /// from within the current scope. Only valid when the variable can be
3713   /// captured.
3714   ///
3715   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
3716   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
3717   /// This is useful when enclosing lambdas must speculatively capture
3718   /// variables that may or may not be used in certain specializations of
3719   /// a nested generic lambda.
3720   ///
3721   /// \returns true if an error occurred (i.e., the variable cannot be
3722   /// captured) and false if the capture succeeded.
3723   bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc, TryCaptureKind Kind,
3724                           SourceLocation EllipsisLoc, bool BuildAndDiagnose,
3725                           QualType &CaptureType,
3726                           QualType &DeclRefType,
3727                           const unsigned *const FunctionScopeIndexToStopAt);
3728 
3729   /// \brief Try to capture the given variable.
3730   bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc,
3731                           TryCaptureKind Kind = TryCapture_Implicit,
3732                           SourceLocation EllipsisLoc = SourceLocation());
3733 
3734   /// \brief Checks if the variable must be captured.
3735   bool NeedToCaptureVariable(VarDecl *Var, SourceLocation Loc);
3736 
3737   /// \brief Given a variable, determine the type that a reference to that
3738   /// variable will have in the given scope.
3739   QualType getCapturedDeclRefType(VarDecl *Var, SourceLocation Loc);
3740 
3741   void MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T);
3742   void MarkDeclarationsReferencedInExpr(Expr *E,
3743                                         bool SkipLocalVariables = false);
3744 
3745   /// \brief Try to recover by turning the given expression into a
3746   /// call.  Returns true if recovery was attempted or an error was
3747   /// emitted; this may also leave the ExprResult invalid.
3748   bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
3749                             bool ForceComplain = false,
3750                             bool (*IsPlausibleResult)(QualType) = nullptr);
3751 
3752   /// \brief Figure out if an expression could be turned into a call.
3753   bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
3754                      UnresolvedSetImpl &NonTemplateOverloads);
3755 
3756   /// \brief Conditionally issue a diagnostic based on the current
3757   /// evaluation context.
3758   ///
3759   /// \param Statement If Statement is non-null, delay reporting the
3760   /// diagnostic until the function body is parsed, and then do a basic
3761   /// reachability analysis to determine if the statement is reachable.
3762   /// If it is unreachable, the diagnostic will not be emitted.
3763   bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement,
3764                            const PartialDiagnostic &PD);
3765 
3766   // Primary Expressions.
3767   SourceRange getExprRange(Expr *E) const;
3768 
3769   ExprResult ActOnIdExpression(
3770       Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
3771       UnqualifiedId &Id, bool HasTrailingLParen, bool IsAddressOfOperand,
3772       std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr,
3773       bool IsInlineAsmIdentifier = false, Token *KeywordReplacement = nullptr);
3774 
3775   void DecomposeUnqualifiedId(const UnqualifiedId &Id,
3776                               TemplateArgumentListInfo &Buffer,
3777                               DeclarationNameInfo &NameInfo,
3778                               const TemplateArgumentListInfo *&TemplateArgs);
3779 
3780   bool
3781   DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R,
3782                       std::unique_ptr<CorrectionCandidateCallback> CCC,
3783                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
3784                       ArrayRef<Expr *> Args = None, TypoExpr **Out = nullptr);
3785 
3786   ExprResult LookupInObjCMethod(LookupResult &LookUp, Scope *S,
3787                                 IdentifierInfo *II,
3788                                 bool AllowBuiltinCreation=false);
3789 
3790   ExprResult ActOnDependentIdExpression(const CXXScopeSpec &SS,
3791                                         SourceLocation TemplateKWLoc,
3792                                         const DeclarationNameInfo &NameInfo,
3793                                         bool isAddressOfOperand,
3794                                 const TemplateArgumentListInfo *TemplateArgs);
3795 
3796   ExprResult BuildDeclRefExpr(ValueDecl *D, QualType Ty,
3797                               ExprValueKind VK,
3798                               SourceLocation Loc,
3799                               const CXXScopeSpec *SS = nullptr);
3800   ExprResult
3801   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
3802                    const DeclarationNameInfo &NameInfo,
3803                    const CXXScopeSpec *SS = nullptr,
3804                    NamedDecl *FoundD = nullptr,
3805                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
3806   ExprResult
3807   BuildAnonymousStructUnionMemberReference(
3808       const CXXScopeSpec &SS,
3809       SourceLocation nameLoc,
3810       IndirectFieldDecl *indirectField,
3811       DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_none),
3812       Expr *baseObjectExpr = nullptr,
3813       SourceLocation opLoc = SourceLocation());
3814 
3815   ExprResult BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS,
3816                                              SourceLocation TemplateKWLoc,
3817                                              LookupResult &R,
3818                                 const TemplateArgumentListInfo *TemplateArgs,
3819                                              const Scope *S);
3820   ExprResult BuildImplicitMemberExpr(const CXXScopeSpec &SS,
3821                                      SourceLocation TemplateKWLoc,
3822                                      LookupResult &R,
3823                                 const TemplateArgumentListInfo *TemplateArgs,
3824                                      bool IsDefiniteInstance,
3825                                      const Scope *S);
3826   bool UseArgumentDependentLookup(const CXXScopeSpec &SS,
3827                                   const LookupResult &R,
3828                                   bool HasTrailingLParen);
3829 
3830   ExprResult
3831   BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS,
3832                                     const DeclarationNameInfo &NameInfo,
3833                                     bool IsAddressOfOperand, const Scope *S,
3834                                     TypeSourceInfo **RecoveryTSI = nullptr);
3835 
3836   ExprResult BuildDependentDeclRefExpr(const CXXScopeSpec &SS,
3837                                        SourceLocation TemplateKWLoc,
3838                                 const DeclarationNameInfo &NameInfo,
3839                                 const TemplateArgumentListInfo *TemplateArgs);
3840 
3841   ExprResult BuildDeclarationNameExpr(const CXXScopeSpec &SS,
3842                                       LookupResult &R,
3843                                       bool NeedsADL,
3844                                       bool AcceptInvalidDecl = false);
3845   ExprResult BuildDeclarationNameExpr(
3846       const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D,
3847       NamedDecl *FoundD = nullptr,
3848       const TemplateArgumentListInfo *TemplateArgs = nullptr,
3849       bool AcceptInvalidDecl = false);
3850 
3851   ExprResult BuildLiteralOperatorCall(LookupResult &R,
3852                       DeclarationNameInfo &SuffixInfo,
3853                       ArrayRef<Expr *> Args,
3854                       SourceLocation LitEndLoc,
3855                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
3856 
3857   ExprResult BuildPredefinedExpr(SourceLocation Loc,
3858                                  PredefinedExpr::IdentType IT);
3859   ExprResult ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind);
3860   ExprResult ActOnIntegerConstant(SourceLocation Loc, uint64_t Val);
3861 
3862   bool CheckLoopHintExpr(Expr *E, SourceLocation Loc);
3863 
3864   ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr);
3865   ExprResult ActOnCharacterConstant(const Token &Tok,
3866                                     Scope *UDLScope = nullptr);
3867   ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E);
3868   ExprResult ActOnParenListExpr(SourceLocation L,
3869                                 SourceLocation R,
3870                                 MultiExprArg Val);
3871 
3872   /// ActOnStringLiteral - The specified tokens were lexed as pasted string
3873   /// fragments (e.g. "foo" "bar" L"baz").
3874   ExprResult ActOnStringLiteral(ArrayRef<Token> StringToks,
3875                                 Scope *UDLScope = nullptr);
3876 
3877   ExprResult ActOnGenericSelectionExpr(SourceLocation KeyLoc,
3878                                        SourceLocation DefaultLoc,
3879                                        SourceLocation RParenLoc,
3880                                        Expr *ControllingExpr,
3881                                        ArrayRef<ParsedType> ArgTypes,
3882                                        ArrayRef<Expr *> ArgExprs);
3883   ExprResult CreateGenericSelectionExpr(SourceLocation KeyLoc,
3884                                         SourceLocation DefaultLoc,
3885                                         SourceLocation RParenLoc,
3886                                         Expr *ControllingExpr,
3887                                         ArrayRef<TypeSourceInfo *> Types,
3888                                         ArrayRef<Expr *> Exprs);
3889 
3890   // Binary/Unary Operators.  'Tok' is the token for the operator.
3891   ExprResult CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
3892                                   Expr *InputExpr);
3893   ExprResult BuildUnaryOp(Scope *S, SourceLocation OpLoc,
3894                           UnaryOperatorKind Opc, Expr *Input);
3895   ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
3896                           tok::TokenKind Op, Expr *Input);
3897 
3898   QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc);
3899 
3900   ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo,
3901                                             SourceLocation OpLoc,
3902                                             UnaryExprOrTypeTrait ExprKind,
3903                                             SourceRange R);
3904   ExprResult CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc,
3905                                             UnaryExprOrTypeTrait ExprKind);
3906   ExprResult
3907     ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc,
3908                                   UnaryExprOrTypeTrait ExprKind,
3909                                   bool IsType, void *TyOrEx,
3910                                   SourceRange ArgRange);
3911 
3912   ExprResult CheckPlaceholderExpr(Expr *E);
3913   bool CheckVecStepExpr(Expr *E);
3914 
3915   bool CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind);
3916   bool CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc,
3917                                         SourceRange ExprRange,
3918                                         UnaryExprOrTypeTrait ExprKind);
3919   ExprResult ActOnSizeofParameterPackExpr(Scope *S,
3920                                           SourceLocation OpLoc,
3921                                           IdentifierInfo &Name,
3922                                           SourceLocation NameLoc,
3923                                           SourceLocation RParenLoc);
3924   ExprResult ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc,
3925                                  tok::TokenKind Kind, Expr *Input);
3926 
3927   ExprResult ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc,
3928                                      Expr *Idx, SourceLocation RLoc);
3929   ExprResult CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc,
3930                                              Expr *Idx, SourceLocation RLoc);
3931   ExprResult ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc,
3932                                       Expr *LowerBound, SourceLocation ColonLoc,
3933                                       Expr *Length, SourceLocation RBLoc);
3934 
3935   // This struct is for use by ActOnMemberAccess to allow
3936   // BuildMemberReferenceExpr to be able to reinvoke ActOnMemberAccess after
3937   // changing the access operator from a '.' to a '->' (to see if that is the
3938   // change needed to fix an error about an unknown member, e.g. when the class
3939   // defines a custom operator->).
3940   struct ActOnMemberAccessExtraArgs {
3941     Scope *S;
3942     UnqualifiedId &Id;
3943     Decl *ObjCImpDecl;
3944   };
3945 
3946   ExprResult BuildMemberReferenceExpr(
3947       Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow,
3948       CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
3949       NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo,
3950       const TemplateArgumentListInfo *TemplateArgs,
3951       const Scope *S,
3952       ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
3953 
3954   ExprResult
3955   BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc,
3956                            bool IsArrow, const CXXScopeSpec &SS,
3957                            SourceLocation TemplateKWLoc,
3958                            NamedDecl *FirstQualifierInScope, LookupResult &R,
3959                            const TemplateArgumentListInfo *TemplateArgs,
3960                            const Scope *S,
3961                            bool SuppressQualifierCheck = false,
3962                            ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
3963 
3964   ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow);
3965 
3966   bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType,
3967                                      const CXXScopeSpec &SS,
3968                                      const LookupResult &R);
3969 
3970   ExprResult ActOnDependentMemberExpr(Expr *Base, QualType BaseType,
3971                                       bool IsArrow, SourceLocation OpLoc,
3972                                       const CXXScopeSpec &SS,
3973                                       SourceLocation TemplateKWLoc,
3974                                       NamedDecl *FirstQualifierInScope,
3975                                const DeclarationNameInfo &NameInfo,
3976                                const TemplateArgumentListInfo *TemplateArgs);
3977 
3978   ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base,
3979                                    SourceLocation OpLoc,
3980                                    tok::TokenKind OpKind,
3981                                    CXXScopeSpec &SS,
3982                                    SourceLocation TemplateKWLoc,
3983                                    UnqualifiedId &Member,
3984                                    Decl *ObjCImpDecl);
3985 
3986   void ActOnDefaultCtorInitializers(Decl *CDtorDecl);
3987   bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
3988                                FunctionDecl *FDecl,
3989                                const FunctionProtoType *Proto,
3990                                ArrayRef<Expr *> Args,
3991                                SourceLocation RParenLoc,
3992                                bool ExecConfig = false);
3993   void CheckStaticArrayArgument(SourceLocation CallLoc,
3994                                 ParmVarDecl *Param,
3995                                 const Expr *ArgExpr);
3996 
3997   /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
3998   /// This provides the location of the left/right parens and a list of comma
3999   /// locations.
4000   ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
4001                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
4002                            Expr *ExecConfig = nullptr,
4003                            bool IsExecConfig = false);
4004   ExprResult BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
4005                                    SourceLocation LParenLoc,
4006                                    ArrayRef<Expr *> Arg,
4007                                    SourceLocation RParenLoc,
4008                                    Expr *Config = nullptr,
4009                                    bool IsExecConfig = false);
4010 
4011   ExprResult ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc,
4012                                      MultiExprArg ExecConfig,
4013                                      SourceLocation GGGLoc);
4014 
4015   ExprResult ActOnCastExpr(Scope *S, SourceLocation LParenLoc,
4016                            Declarator &D, ParsedType &Ty,
4017                            SourceLocation RParenLoc, Expr *CastExpr);
4018   ExprResult BuildCStyleCastExpr(SourceLocation LParenLoc,
4019                                  TypeSourceInfo *Ty,
4020                                  SourceLocation RParenLoc,
4021                                  Expr *Op);
4022   CastKind PrepareScalarCast(ExprResult &src, QualType destType);
4023 
4024   /// \brief Build an altivec or OpenCL literal.
4025   ExprResult BuildVectorLiteral(SourceLocation LParenLoc,
4026                                 SourceLocation RParenLoc, Expr *E,
4027                                 TypeSourceInfo *TInfo);
4028 
4029   ExprResult MaybeConvertParenListExprToParenExpr(Scope *S, Expr *ME);
4030 
4031   ExprResult ActOnCompoundLiteral(SourceLocation LParenLoc,
4032                                   ParsedType Ty,
4033                                   SourceLocation RParenLoc,
4034                                   Expr *InitExpr);
4035 
4036   ExprResult BuildCompoundLiteralExpr(SourceLocation LParenLoc,
4037                                       TypeSourceInfo *TInfo,
4038                                       SourceLocation RParenLoc,
4039                                       Expr *LiteralExpr);
4040 
4041   ExprResult ActOnInitList(SourceLocation LBraceLoc,
4042                            MultiExprArg InitArgList,
4043                            SourceLocation RBraceLoc);
4044 
4045   ExprResult ActOnDesignatedInitializer(Designation &Desig,
4046                                         SourceLocation Loc,
4047                                         bool GNUSyntax,
4048                                         ExprResult Init);
4049 
4050 private:
4051   static BinaryOperatorKind ConvertTokenKindToBinaryOpcode(tok::TokenKind Kind);
4052 
4053 public:
4054   ExprResult ActOnBinOp(Scope *S, SourceLocation TokLoc,
4055                         tok::TokenKind Kind, Expr *LHSExpr, Expr *RHSExpr);
4056   ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc,
4057                         BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr);
4058   ExprResult CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc,
4059                                 Expr *LHSExpr, Expr *RHSExpr);
4060 
4061   void DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc);
4062 
4063   /// ActOnConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
4064   /// in the case of a the GNU conditional expr extension.
4065   ExprResult ActOnConditionalOp(SourceLocation QuestionLoc,
4066                                 SourceLocation ColonLoc,
4067                                 Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr);
4068 
4069   /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
4070   ExprResult ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc,
4071                             LabelDecl *TheDecl);
4072 
4073   void ActOnStartStmtExpr();
4074   ExprResult ActOnStmtExpr(SourceLocation LPLoc, Stmt *SubStmt,
4075                            SourceLocation RPLoc); // "({..})"
4076   void ActOnStmtExprError();
4077 
4078   // __builtin_offsetof(type, identifier(.identifier|[expr])*)
4079   struct OffsetOfComponent {
4080     SourceLocation LocStart, LocEnd;
4081     bool isBrackets;  // true if [expr], false if .ident
4082     union {
4083       IdentifierInfo *IdentInfo;
4084       Expr *E;
4085     } U;
4086   };
4087 
4088   /// __builtin_offsetof(type, a.b[123][456].c)
4089   ExprResult BuildBuiltinOffsetOf(SourceLocation BuiltinLoc,
4090                                   TypeSourceInfo *TInfo,
4091                                   ArrayRef<OffsetOfComponent> Components,
4092                                   SourceLocation RParenLoc);
4093   ExprResult ActOnBuiltinOffsetOf(Scope *S,
4094                                   SourceLocation BuiltinLoc,
4095                                   SourceLocation TypeLoc,
4096                                   ParsedType ParsedArgTy,
4097                                   ArrayRef<OffsetOfComponent> Components,
4098                                   SourceLocation RParenLoc);
4099 
4100   // __builtin_choose_expr(constExpr, expr1, expr2)
4101   ExprResult ActOnChooseExpr(SourceLocation BuiltinLoc,
4102                              Expr *CondExpr, Expr *LHSExpr,
4103                              Expr *RHSExpr, SourceLocation RPLoc);
4104 
4105   // __builtin_va_arg(expr, type)
4106   ExprResult ActOnVAArg(SourceLocation BuiltinLoc, Expr *E, ParsedType Ty,
4107                         SourceLocation RPLoc);
4108   ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E,
4109                             TypeSourceInfo *TInfo, SourceLocation RPLoc);
4110 
4111   // __null
4112   ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc);
4113 
4114   bool CheckCaseExpression(Expr *E);
4115 
4116   /// \brief Describes the result of an "if-exists" condition check.
4117   enum IfExistsResult {
4118     /// \brief The symbol exists.
4119     IER_Exists,
4120 
4121     /// \brief The symbol does not exist.
4122     IER_DoesNotExist,
4123 
4124     /// \brief The name is a dependent name, so the results will differ
4125     /// from one instantiation to the next.
4126     IER_Dependent,
4127 
4128     /// \brief An error occurred.
4129     IER_Error
4130   };
4131 
4132   IfExistsResult
4133   CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS,
4134                                const DeclarationNameInfo &TargetNameInfo);
4135 
4136   IfExistsResult
4137   CheckMicrosoftIfExistsSymbol(Scope *S, SourceLocation KeywordLoc,
4138                                bool IsIfExists, CXXScopeSpec &SS,
4139                                UnqualifiedId &Name);
4140 
4141   StmtResult BuildMSDependentExistsStmt(SourceLocation KeywordLoc,
4142                                         bool IsIfExists,
4143                                         NestedNameSpecifierLoc QualifierLoc,
4144                                         DeclarationNameInfo NameInfo,
4145                                         Stmt *Nested);
4146   StmtResult ActOnMSDependentExistsStmt(SourceLocation KeywordLoc,
4147                                         bool IsIfExists,
4148                                         CXXScopeSpec &SS, UnqualifiedId &Name,
4149                                         Stmt *Nested);
4150 
4151   //===------------------------- "Block" Extension ------------------------===//
4152 
4153   /// ActOnBlockStart - This callback is invoked when a block literal is
4154   /// started.
4155   void ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope);
4156 
4157   /// ActOnBlockArguments - This callback allows processing of block arguments.
4158   /// If there are no arguments, this is still invoked.
4159   void ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo,
4160                            Scope *CurScope);
4161 
4162   /// ActOnBlockError - If there is an error parsing a block, this callback
4163   /// is invoked to pop the information about the block from the action impl.
4164   void ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope);
4165 
4166   /// ActOnBlockStmtExpr - This is called when the body of a block statement
4167   /// literal was successfully completed.  ^(int x){...}
4168   ExprResult ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body,
4169                                 Scope *CurScope);
4170 
4171   //===---------------------------- Clang Extensions ----------------------===//
4172 
4173   /// __builtin_convertvector(...)
4174   ExprResult ActOnConvertVectorExpr(Expr *E, ParsedType ParsedDestTy,
4175                                     SourceLocation BuiltinLoc,
4176                                     SourceLocation RParenLoc);
4177 
4178   //===---------------------------- OpenCL Features -----------------------===//
4179 
4180   /// __builtin_astype(...)
4181   ExprResult ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy,
4182                              SourceLocation BuiltinLoc,
4183                              SourceLocation RParenLoc);
4184 
4185   //===---------------------------- C++ Features --------------------------===//
4186 
4187   // Act on C++ namespaces
4188   Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc,
4189                                SourceLocation NamespaceLoc,
4190                                SourceLocation IdentLoc,
4191                                IdentifierInfo *Ident,
4192                                SourceLocation LBrace,
4193                                AttributeList *AttrList,
4194                                UsingDirectiveDecl * &UsingDecl);
4195   void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace);
4196 
4197   NamespaceDecl *getStdNamespace() const;
4198   NamespaceDecl *getOrCreateStdNamespace();
4199 
4200   CXXRecordDecl *getStdBadAlloc() const;
4201 
4202   /// \brief Tests whether Ty is an instance of std::initializer_list and, if
4203   /// it is and Element is not NULL, assigns the element type to Element.
4204   bool isStdInitializerList(QualType Ty, QualType *Element);
4205 
4206   /// \brief Looks for the std::initializer_list template and instantiates it
4207   /// with Element, or emits an error if it's not found.
4208   ///
4209   /// \returns The instantiated template, or null on error.
4210   QualType BuildStdInitializerList(QualType Element, SourceLocation Loc);
4211 
4212   /// \brief Determine whether Ctor is an initializer-list constructor, as
4213   /// defined in [dcl.init.list]p2.
4214   bool isInitListConstructor(const CXXConstructorDecl *Ctor);
4215 
4216   Decl *ActOnUsingDirective(Scope *CurScope,
4217                             SourceLocation UsingLoc,
4218                             SourceLocation NamespcLoc,
4219                             CXXScopeSpec &SS,
4220                             SourceLocation IdentLoc,
4221                             IdentifierInfo *NamespcName,
4222                             AttributeList *AttrList);
4223 
4224   void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir);
4225 
4226   Decl *ActOnNamespaceAliasDef(Scope *CurScope,
4227                                SourceLocation NamespaceLoc,
4228                                SourceLocation AliasLoc,
4229                                IdentifierInfo *Alias,
4230                                CXXScopeSpec &SS,
4231                                SourceLocation IdentLoc,
4232                                IdentifierInfo *Ident);
4233 
4234   void HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow);
4235   bool CheckUsingShadowDecl(UsingDecl *UD, NamedDecl *Target,
4236                             const LookupResult &PreviousDecls,
4237                             UsingShadowDecl *&PrevShadow);
4238   UsingShadowDecl *BuildUsingShadowDecl(Scope *S, UsingDecl *UD,
4239                                         NamedDecl *Target,
4240                                         UsingShadowDecl *PrevDecl);
4241 
4242   bool CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
4243                                    bool HasTypenameKeyword,
4244                                    const CXXScopeSpec &SS,
4245                                    SourceLocation NameLoc,
4246                                    const LookupResult &Previous);
4247   bool CheckUsingDeclQualifier(SourceLocation UsingLoc,
4248                                const CXXScopeSpec &SS,
4249                                const DeclarationNameInfo &NameInfo,
4250                                SourceLocation NameLoc);
4251 
4252   NamedDecl *BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
4253                                    SourceLocation UsingLoc,
4254                                    CXXScopeSpec &SS,
4255                                    DeclarationNameInfo NameInfo,
4256                                    AttributeList *AttrList,
4257                                    bool IsInstantiation,
4258                                    bool HasTypenameKeyword,
4259                                    SourceLocation TypenameLoc);
4260 
4261   bool CheckInheritingConstructorUsingDecl(UsingDecl *UD);
4262 
4263   /// Given a derived-class using shadow declaration for a constructor and the
4264   /// correspnding base class constructor, find or create the implicit
4265   /// synthesized derived class constructor to use for this initialization.
4266   CXXConstructorDecl *
4267   findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor,
4268                             ConstructorUsingShadowDecl *DerivedShadow);
4269 
4270   Decl *ActOnUsingDeclaration(Scope *CurScope,
4271                               AccessSpecifier AS,
4272                               bool HasUsingKeyword,
4273                               SourceLocation UsingLoc,
4274                               CXXScopeSpec &SS,
4275                               UnqualifiedId &Name,
4276                               AttributeList *AttrList,
4277                               bool HasTypenameKeyword,
4278                               SourceLocation TypenameLoc);
4279   Decl *ActOnAliasDeclaration(Scope *CurScope,
4280                               AccessSpecifier AS,
4281                               MultiTemplateParamsArg TemplateParams,
4282                               SourceLocation UsingLoc,
4283                               UnqualifiedId &Name,
4284                               AttributeList *AttrList,
4285                               TypeResult Type,
4286                               Decl *DeclFromDeclSpec);
4287 
4288   /// BuildCXXConstructExpr - Creates a complete call to a constructor,
4289   /// including handling of its default argument expressions.
4290   ///
4291   /// \param ConstructKind - a CXXConstructExpr::ConstructionKind
4292   ExprResult
4293   BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
4294                         NamedDecl *FoundDecl,
4295                         CXXConstructorDecl *Constructor, MultiExprArg Exprs,
4296                         bool HadMultipleCandidates, bool IsListInitialization,
4297                         bool IsStdInitListInitialization,
4298                         bool RequiresZeroInit, unsigned ConstructKind,
4299                         SourceRange ParenRange);
4300 
4301   /// Build a CXXConstructExpr whose constructor has already been resolved if
4302   /// it denotes an inherited constructor.
4303   ExprResult
4304   BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
4305                         CXXConstructorDecl *Constructor, bool Elidable,
4306                         MultiExprArg Exprs,
4307                         bool HadMultipleCandidates, bool IsListInitialization,
4308                         bool IsStdInitListInitialization,
4309                         bool RequiresZeroInit, unsigned ConstructKind,
4310                         SourceRange ParenRange);
4311 
4312   // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if
4313   // the constructor can be elidable?
4314   ExprResult
4315   BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
4316                         NamedDecl *FoundDecl,
4317                         CXXConstructorDecl *Constructor, bool Elidable,
4318                         MultiExprArg Exprs, bool HadMultipleCandidates,
4319                         bool IsListInitialization,
4320                         bool IsStdInitListInitialization, bool RequiresZeroInit,
4321                         unsigned ConstructKind, SourceRange ParenRange);
4322 
4323   ExprResult BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field);
4324 
4325   /// BuildCXXDefaultArgExpr - Creates a CXXDefaultArgExpr, instantiating
4326   /// the default expr if needed.
4327   ExprResult BuildCXXDefaultArgExpr(SourceLocation CallLoc,
4328                                     FunctionDecl *FD,
4329                                     ParmVarDecl *Param);
4330 
4331   /// FinalizeVarWithDestructor - Prepare for calling destructor on the
4332   /// constructed variable.
4333   void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType);
4334 
4335   /// \brief Helper class that collects exception specifications for
4336   /// implicitly-declared special member functions.
4337   class ImplicitExceptionSpecification {
4338     // Pointer to allow copying
4339     Sema *Self;
4340     // We order exception specifications thus:
4341     // noexcept is the most restrictive, but is only used in C++11.
4342     // throw() comes next.
4343     // Then a throw(collected exceptions)
4344     // Finally no specification, which is expressed as noexcept(false).
4345     // throw(...) is used instead if any called function uses it.
4346     ExceptionSpecificationType ComputedEST;
4347     llvm::SmallPtrSet<CanQualType, 4> ExceptionsSeen;
4348     SmallVector<QualType, 4> Exceptions;
4349 
ClearExceptions()4350     void ClearExceptions() {
4351       ExceptionsSeen.clear();
4352       Exceptions.clear();
4353     }
4354 
4355   public:
ImplicitExceptionSpecification(Sema & Self)4356     explicit ImplicitExceptionSpecification(Sema &Self)
4357       : Self(&Self), ComputedEST(EST_BasicNoexcept) {
4358       if (!Self.getLangOpts().CPlusPlus11)
4359         ComputedEST = EST_DynamicNone;
4360     }
4361 
4362     /// \brief Get the computed exception specification type.
getExceptionSpecType()4363     ExceptionSpecificationType getExceptionSpecType() const {
4364       assert(ComputedEST != EST_ComputedNoexcept &&
4365              "noexcept(expr) should not be a possible result");
4366       return ComputedEST;
4367     }
4368 
4369     /// \brief The number of exceptions in the exception specification.
size()4370     unsigned size() const { return Exceptions.size(); }
4371 
4372     /// \brief The set of exceptions in the exception specification.
data()4373     const QualType *data() const { return Exceptions.data(); }
4374 
4375     /// \brief Integrate another called method into the collected data.
4376     void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method);
4377 
4378     /// \brief Integrate an invoked expression into the collected data.
4379     void CalledExpr(Expr *E);
4380 
4381     /// \brief Overwrite an EPI's exception specification with this
4382     /// computed exception specification.
getExceptionSpec()4383     FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const {
4384       FunctionProtoType::ExceptionSpecInfo ESI;
4385       ESI.Type = getExceptionSpecType();
4386       if (ESI.Type == EST_Dynamic) {
4387         ESI.Exceptions = Exceptions;
4388       } else if (ESI.Type == EST_None) {
4389         /// C++11 [except.spec]p14:
4390         ///   The exception-specification is noexcept(false) if the set of
4391         ///   potential exceptions of the special member function contains "any"
4392         ESI.Type = EST_ComputedNoexcept;
4393         ESI.NoexceptExpr = Self->ActOnCXXBoolLiteral(SourceLocation(),
4394                                                      tok::kw_false).get();
4395       }
4396       return ESI;
4397     }
4398   };
4399 
4400   /// \brief Determine what sort of exception specification a defaulted
4401   /// copy constructor of a class will have.
4402   ImplicitExceptionSpecification
4403   ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
4404                                            CXXMethodDecl *MD);
4405 
4406   /// \brief Determine what sort of exception specification a defaulted
4407   /// default constructor of a class will have, and whether the parameter
4408   /// will be const.
4409   ImplicitExceptionSpecification
4410   ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD);
4411 
4412   /// \brief Determine what sort of exception specification a defautled
4413   /// copy assignment operator of a class will have, and whether the
4414   /// parameter will be const.
4415   ImplicitExceptionSpecification
4416   ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD);
4417 
4418   /// \brief Determine what sort of exception specification a defaulted move
4419   /// constructor of a class will have.
4420   ImplicitExceptionSpecification
4421   ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD);
4422 
4423   /// \brief Determine what sort of exception specification a defaulted move
4424   /// assignment operator of a class will have.
4425   ImplicitExceptionSpecification
4426   ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD);
4427 
4428   /// \brief Determine what sort of exception specification a defaulted
4429   /// destructor of a class will have.
4430   ImplicitExceptionSpecification
4431   ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD);
4432 
4433   /// \brief Determine what sort of exception specification an inheriting
4434   /// constructor of a class will have.
4435   ImplicitExceptionSpecification
4436   ComputeInheritingCtorExceptionSpec(SourceLocation Loc,
4437                                      CXXConstructorDecl *CD);
4438 
4439   /// \brief Evaluate the implicit exception specification for a defaulted
4440   /// special member function.
4441   void EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD);
4442 
4443   /// \brief Check the given exception-specification and update the
4444   /// exception specification information with the results.
4445   void checkExceptionSpecification(bool IsTopLevel,
4446                                    ExceptionSpecificationType EST,
4447                                    ArrayRef<ParsedType> DynamicExceptions,
4448                                    ArrayRef<SourceRange> DynamicExceptionRanges,
4449                                    Expr *NoexceptExpr,
4450                                    SmallVectorImpl<QualType> &Exceptions,
4451                                    FunctionProtoType::ExceptionSpecInfo &ESI);
4452 
4453   /// \brief Determine if we're in a case where we need to (incorrectly) eagerly
4454   /// parse an exception specification to work around a libstdc++ bug.
4455   bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D);
4456 
4457   /// \brief Add an exception-specification to the given member function
4458   /// (or member function template). The exception-specification was parsed
4459   /// after the method itself was declared.
4460   void actOnDelayedExceptionSpecification(Decl *Method,
4461          ExceptionSpecificationType EST,
4462          SourceRange SpecificationRange,
4463          ArrayRef<ParsedType> DynamicExceptions,
4464          ArrayRef<SourceRange> DynamicExceptionRanges,
4465          Expr *NoexceptExpr);
4466 
4467   class InheritedConstructorInfo;
4468 
4469   /// \brief Determine if a special member function should have a deleted
4470   /// definition when it is defaulted.
4471   bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
4472                                  InheritedConstructorInfo *ICI = nullptr,
4473                                  bool Diagnose = false);
4474 
4475   /// \brief Declare the implicit default constructor for the given class.
4476   ///
4477   /// \param ClassDecl The class declaration into which the implicit
4478   /// default constructor will be added.
4479   ///
4480   /// \returns The implicitly-declared default constructor.
4481   CXXConstructorDecl *DeclareImplicitDefaultConstructor(
4482                                                      CXXRecordDecl *ClassDecl);
4483 
4484   /// DefineImplicitDefaultConstructor - Checks for feasibility of
4485   /// defining this constructor as the default constructor.
4486   void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
4487                                         CXXConstructorDecl *Constructor);
4488 
4489   /// \brief Declare the implicit destructor for the given class.
4490   ///
4491   /// \param ClassDecl The class declaration into which the implicit
4492   /// destructor will be added.
4493   ///
4494   /// \returns The implicitly-declared destructor.
4495   CXXDestructorDecl *DeclareImplicitDestructor(CXXRecordDecl *ClassDecl);
4496 
4497   /// DefineImplicitDestructor - Checks for feasibility of
4498   /// defining this destructor as the default destructor.
4499   void DefineImplicitDestructor(SourceLocation CurrentLocation,
4500                                 CXXDestructorDecl *Destructor);
4501 
4502   /// \brief Build an exception spec for destructors that don't have one.
4503   ///
4504   /// C++11 says that user-defined destructors with no exception spec get one
4505   /// that looks as if the destructor was implicitly declared.
4506   void AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
4507                                      CXXDestructorDecl *Destructor);
4508 
4509   /// \brief Define the specified inheriting constructor.
4510   void DefineInheritingConstructor(SourceLocation UseLoc,
4511                                    CXXConstructorDecl *Constructor);
4512 
4513   /// \brief Declare the implicit copy constructor for the given class.
4514   ///
4515   /// \param ClassDecl The class declaration into which the implicit
4516   /// copy constructor will be added.
4517   ///
4518   /// \returns The implicitly-declared copy constructor.
4519   CXXConstructorDecl *DeclareImplicitCopyConstructor(CXXRecordDecl *ClassDecl);
4520 
4521   /// DefineImplicitCopyConstructor - Checks for feasibility of
4522   /// defining this constructor as the copy constructor.
4523   void DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
4524                                      CXXConstructorDecl *Constructor);
4525 
4526   /// \brief Declare the implicit move constructor for the given class.
4527   ///
4528   /// \param ClassDecl The Class declaration into which the implicit
4529   /// move constructor will be added.
4530   ///
4531   /// \returns The implicitly-declared move constructor, or NULL if it wasn't
4532   /// declared.
4533   CXXConstructorDecl *DeclareImplicitMoveConstructor(CXXRecordDecl *ClassDecl);
4534 
4535   /// DefineImplicitMoveConstructor - Checks for feasibility of
4536   /// defining this constructor as the move constructor.
4537   void DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
4538                                      CXXConstructorDecl *Constructor);
4539 
4540   /// \brief Declare the implicit copy assignment operator for the given class.
4541   ///
4542   /// \param ClassDecl The class declaration into which the implicit
4543   /// copy assignment operator will be added.
4544   ///
4545   /// \returns The implicitly-declared copy assignment operator.
4546   CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl);
4547 
4548   /// \brief Defines an implicitly-declared copy assignment operator.
4549   void DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
4550                                     CXXMethodDecl *MethodDecl);
4551 
4552   /// \brief Declare the implicit move assignment operator for the given class.
4553   ///
4554   /// \param ClassDecl The Class declaration into which the implicit
4555   /// move assignment operator will be added.
4556   ///
4557   /// \returns The implicitly-declared move assignment operator, or NULL if it
4558   /// wasn't declared.
4559   CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl);
4560 
4561   /// \brief Defines an implicitly-declared move assignment operator.
4562   void DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
4563                                     CXXMethodDecl *MethodDecl);
4564 
4565   /// \brief Force the declaration of any implicitly-declared members of this
4566   /// class.
4567   void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class);
4568 
4569   /// \brief Check a completed declaration of an implicit special member.
4570   void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD);
4571 
4572   /// \brief Determine whether the given function is an implicitly-deleted
4573   /// special member function.
4574   bool isImplicitlyDeleted(FunctionDecl *FD);
4575 
4576   /// \brief Check whether 'this' shows up in the type of a static member
4577   /// function after the (naturally empty) cv-qualifier-seq would be.
4578   ///
4579   /// \returns true if an error occurred.
4580   bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method);
4581 
4582   /// \brief Whether this' shows up in the exception specification of a static
4583   /// member function.
4584   bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method);
4585 
4586   /// \brief Check whether 'this' shows up in the attributes of the given
4587   /// static member function.
4588   ///
4589   /// \returns true if an error occurred.
4590   bool checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method);
4591 
4592   /// MaybeBindToTemporary - If the passed in expression has a record type with
4593   /// a non-trivial destructor, this will return CXXBindTemporaryExpr. Otherwise
4594   /// it simply returns the passed in expression.
4595   ExprResult MaybeBindToTemporary(Expr *E);
4596 
4597   bool CompleteConstructorCall(CXXConstructorDecl *Constructor,
4598                                MultiExprArg ArgsPtr,
4599                                SourceLocation Loc,
4600                                SmallVectorImpl<Expr*> &ConvertedArgs,
4601                                bool AllowExplicit = false,
4602                                bool IsListInitialization = false);
4603 
4604   ParsedType getInheritingConstructorName(CXXScopeSpec &SS,
4605                                           SourceLocation NameLoc,
4606                                           IdentifierInfo &Name);
4607 
4608   ParsedType getDestructorName(SourceLocation TildeLoc,
4609                                IdentifierInfo &II, SourceLocation NameLoc,
4610                                Scope *S, CXXScopeSpec &SS,
4611                                ParsedType ObjectType,
4612                                bool EnteringContext);
4613 
4614   ParsedType getDestructorType(const DeclSpec& DS, ParsedType ObjectType);
4615 
4616   // Checks that reinterpret casts don't have undefined behavior.
4617   void CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType,
4618                                       bool IsDereference, SourceRange Range);
4619 
4620   /// ActOnCXXNamedCast - Parse {dynamic,static,reinterpret,const}_cast's.
4621   ExprResult ActOnCXXNamedCast(SourceLocation OpLoc,
4622                                tok::TokenKind Kind,
4623                                SourceLocation LAngleBracketLoc,
4624                                Declarator &D,
4625                                SourceLocation RAngleBracketLoc,
4626                                SourceLocation LParenLoc,
4627                                Expr *E,
4628                                SourceLocation RParenLoc);
4629 
4630   ExprResult BuildCXXNamedCast(SourceLocation OpLoc,
4631                                tok::TokenKind Kind,
4632                                TypeSourceInfo *Ty,
4633                                Expr *E,
4634                                SourceRange AngleBrackets,
4635                                SourceRange Parens);
4636 
4637   ExprResult BuildCXXTypeId(QualType TypeInfoType,
4638                             SourceLocation TypeidLoc,
4639                             TypeSourceInfo *Operand,
4640                             SourceLocation RParenLoc);
4641   ExprResult BuildCXXTypeId(QualType TypeInfoType,
4642                             SourceLocation TypeidLoc,
4643                             Expr *Operand,
4644                             SourceLocation RParenLoc);
4645 
4646   /// ActOnCXXTypeid - Parse typeid( something ).
4647   ExprResult ActOnCXXTypeid(SourceLocation OpLoc,
4648                             SourceLocation LParenLoc, bool isType,
4649                             void *TyOrExpr,
4650                             SourceLocation RParenLoc);
4651 
4652   ExprResult BuildCXXUuidof(QualType TypeInfoType,
4653                             SourceLocation TypeidLoc,
4654                             TypeSourceInfo *Operand,
4655                             SourceLocation RParenLoc);
4656   ExprResult BuildCXXUuidof(QualType TypeInfoType,
4657                             SourceLocation TypeidLoc,
4658                             Expr *Operand,
4659                             SourceLocation RParenLoc);
4660 
4661   /// ActOnCXXUuidof - Parse __uuidof( something ).
4662   ExprResult ActOnCXXUuidof(SourceLocation OpLoc,
4663                             SourceLocation LParenLoc, bool isType,
4664                             void *TyOrExpr,
4665                             SourceLocation RParenLoc);
4666 
4667   /// \brief Handle a C++1z fold-expression: ( expr op ... op expr ).
4668   ExprResult ActOnCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS,
4669                               tok::TokenKind Operator,
4670                               SourceLocation EllipsisLoc, Expr *RHS,
4671                               SourceLocation RParenLoc);
4672   ExprResult BuildCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS,
4673                               BinaryOperatorKind Operator,
4674                               SourceLocation EllipsisLoc, Expr *RHS,
4675                               SourceLocation RParenLoc);
4676   ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc,
4677                                    BinaryOperatorKind Operator);
4678 
4679   //// ActOnCXXThis -  Parse 'this' pointer.
4680   ExprResult ActOnCXXThis(SourceLocation loc);
4681 
4682   /// \brief Try to retrieve the type of the 'this' pointer.
4683   ///
4684   /// \returns The type of 'this', if possible. Otherwise, returns a NULL type.
4685   QualType getCurrentThisType();
4686 
4687   /// \brief When non-NULL, the C++ 'this' expression is allowed despite the
4688   /// current context not being a non-static member function. In such cases,
4689   /// this provides the type used for 'this'.
4690   QualType CXXThisTypeOverride;
4691 
4692   /// \brief RAII object used to temporarily allow the C++ 'this' expression
4693   /// to be used, with the given qualifiers on the current class type.
4694   class CXXThisScopeRAII {
4695     Sema &S;
4696     QualType OldCXXThisTypeOverride;
4697     bool Enabled;
4698 
4699   public:
4700     /// \brief Introduce a new scope where 'this' may be allowed (when enabled),
4701     /// using the given declaration (which is either a class template or a
4702     /// class) along with the given qualifiers.
4703     /// along with the qualifiers placed on '*this'.
4704     CXXThisScopeRAII(Sema &S, Decl *ContextDecl, unsigned CXXThisTypeQuals,
4705                      bool Enabled = true);
4706 
4707     ~CXXThisScopeRAII();
4708   };
4709 
4710   /// \brief Make sure the value of 'this' is actually available in the current
4711   /// context, if it is a potentially evaluated context.
4712   ///
4713   /// \param Loc The location at which the capture of 'this' occurs.
4714   ///
4715   /// \param Explicit Whether 'this' is explicitly captured in a lambda
4716   /// capture list.
4717   ///
4718   /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
4719   /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
4720   /// This is useful when enclosing lambdas must speculatively capture
4721   /// 'this' that may or may not be used in certain specializations of
4722   /// a nested generic lambda (depending on whether the name resolves to
4723   /// a non-static member function or a static function).
4724   /// \return returns 'true' if failed, 'false' if success.
4725   bool CheckCXXThisCapture(SourceLocation Loc, bool Explicit = false,
4726       bool BuildAndDiagnose = true,
4727       const unsigned *const FunctionScopeIndexToStopAt = nullptr,
4728       bool ByCopy = false);
4729 
4730   /// \brief Determine whether the given type is the type of *this that is used
4731   /// outside of the body of a member function for a type that is currently
4732   /// being defined.
4733   bool isThisOutsideMemberFunctionBody(QualType BaseType);
4734 
4735   /// ActOnCXXBoolLiteral - Parse {true,false} literals.
4736   ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
4737 
4738 
4739   /// ActOnObjCBoolLiteral - Parse {__objc_yes,__objc_no} literals.
4740   ExprResult ActOnObjCBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
4741 
4742   /// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
4743   ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc);
4744 
4745   //// ActOnCXXThrow -  Parse throw expressions.
4746   ExprResult ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *expr);
4747   ExprResult BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
4748                            bool IsThrownVarInScope);
4749   bool CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ThrowTy, Expr *E);
4750 
4751   /// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
4752   /// Can be interpreted either as function-style casting ("int(x)")
4753   /// or class type construction ("ClassType(x,y,z)")
4754   /// or creation of a value-initialized type ("int()").
4755   ExprResult ActOnCXXTypeConstructExpr(ParsedType TypeRep,
4756                                        SourceLocation LParenLoc,
4757                                        MultiExprArg Exprs,
4758                                        SourceLocation RParenLoc);
4759 
4760   ExprResult BuildCXXTypeConstructExpr(TypeSourceInfo *Type,
4761                                        SourceLocation LParenLoc,
4762                                        MultiExprArg Exprs,
4763                                        SourceLocation RParenLoc);
4764 
4765   /// ActOnCXXNew - Parsed a C++ 'new' expression.
4766   ExprResult ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
4767                          SourceLocation PlacementLParen,
4768                          MultiExprArg PlacementArgs,
4769                          SourceLocation PlacementRParen,
4770                          SourceRange TypeIdParens, Declarator &D,
4771                          Expr *Initializer);
4772   ExprResult BuildCXXNew(SourceRange Range, bool UseGlobal,
4773                          SourceLocation PlacementLParen,
4774                          MultiExprArg PlacementArgs,
4775                          SourceLocation PlacementRParen,
4776                          SourceRange TypeIdParens,
4777                          QualType AllocType,
4778                          TypeSourceInfo *AllocTypeInfo,
4779                          Expr *ArraySize,
4780                          SourceRange DirectInitRange,
4781                          Expr *Initializer,
4782                          bool TypeMayContainAuto = true);
4783 
4784   bool CheckAllocatedType(QualType AllocType, SourceLocation Loc,
4785                           SourceRange R);
4786   bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
4787                                bool UseGlobal, QualType AllocType, bool IsArray,
4788                                MultiExprArg PlaceArgs,
4789                                FunctionDecl *&OperatorNew,
4790                                FunctionDecl *&OperatorDelete);
4791   bool FindAllocationOverload(SourceLocation StartLoc, SourceRange Range,
4792                               DeclarationName Name, MultiExprArg Args,
4793                               DeclContext *Ctx,
4794                               bool AllowMissing, FunctionDecl *&Operator,
4795                               bool Diagnose = true);
4796   void DeclareGlobalNewDelete();
4797   void DeclareGlobalAllocationFunction(DeclarationName Name, QualType Return,
4798                                        QualType Param1,
4799                                        QualType Param2 = QualType());
4800 
4801   bool FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
4802                                 DeclarationName Name, FunctionDecl* &Operator,
4803                                 bool Diagnose = true);
4804   FunctionDecl *FindUsualDeallocationFunction(SourceLocation StartLoc,
4805                                               bool CanProvideSize,
4806                                               DeclarationName Name);
4807 
4808   /// ActOnCXXDelete - Parsed a C++ 'delete' expression
4809   ExprResult ActOnCXXDelete(SourceLocation StartLoc,
4810                             bool UseGlobal, bool ArrayForm,
4811                             Expr *Operand);
4812   void CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc,
4813                             bool IsDelete, bool CallCanBeVirtual,
4814                             bool WarnOnNonAbstractTypes,
4815                             SourceLocation DtorLoc);
4816 
4817   ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen,
4818                                Expr *Operand, SourceLocation RParen);
4819   ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
4820                                   SourceLocation RParen);
4821 
4822   /// \brief Parsed one of the type trait support pseudo-functions.
4823   ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
4824                             ArrayRef<ParsedType> Args,
4825                             SourceLocation RParenLoc);
4826   ExprResult BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
4827                             ArrayRef<TypeSourceInfo *> Args,
4828                             SourceLocation RParenLoc);
4829 
4830   /// ActOnArrayTypeTrait - Parsed one of the bianry type trait support
4831   /// pseudo-functions.
4832   ExprResult ActOnArrayTypeTrait(ArrayTypeTrait ATT,
4833                                  SourceLocation KWLoc,
4834                                  ParsedType LhsTy,
4835                                  Expr *DimExpr,
4836                                  SourceLocation RParen);
4837 
4838   ExprResult BuildArrayTypeTrait(ArrayTypeTrait ATT,
4839                                  SourceLocation KWLoc,
4840                                  TypeSourceInfo *TSInfo,
4841                                  Expr *DimExpr,
4842                                  SourceLocation RParen);
4843 
4844   /// ActOnExpressionTrait - Parsed one of the unary type trait support
4845   /// pseudo-functions.
4846   ExprResult ActOnExpressionTrait(ExpressionTrait OET,
4847                                   SourceLocation KWLoc,
4848                                   Expr *Queried,
4849                                   SourceLocation RParen);
4850 
4851   ExprResult BuildExpressionTrait(ExpressionTrait OET,
4852                                   SourceLocation KWLoc,
4853                                   Expr *Queried,
4854                                   SourceLocation RParen);
4855 
4856   ExprResult ActOnStartCXXMemberReference(Scope *S,
4857                                           Expr *Base,
4858                                           SourceLocation OpLoc,
4859                                           tok::TokenKind OpKind,
4860                                           ParsedType &ObjectType,
4861                                           bool &MayBePseudoDestructor);
4862 
4863   ExprResult BuildPseudoDestructorExpr(Expr *Base,
4864                                        SourceLocation OpLoc,
4865                                        tok::TokenKind OpKind,
4866                                        const CXXScopeSpec &SS,
4867                                        TypeSourceInfo *ScopeType,
4868                                        SourceLocation CCLoc,
4869                                        SourceLocation TildeLoc,
4870                                      PseudoDestructorTypeStorage DestroyedType);
4871 
4872   ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
4873                                        SourceLocation OpLoc,
4874                                        tok::TokenKind OpKind,
4875                                        CXXScopeSpec &SS,
4876                                        UnqualifiedId &FirstTypeName,
4877                                        SourceLocation CCLoc,
4878                                        SourceLocation TildeLoc,
4879                                        UnqualifiedId &SecondTypeName);
4880 
4881   ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
4882                                        SourceLocation OpLoc,
4883                                        tok::TokenKind OpKind,
4884                                        SourceLocation TildeLoc,
4885                                        const DeclSpec& DS);
4886 
4887   /// MaybeCreateExprWithCleanups - If the current full-expression
4888   /// requires any cleanups, surround it with a ExprWithCleanups node.
4889   /// Otherwise, just returns the passed-in expression.
4890   Expr *MaybeCreateExprWithCleanups(Expr *SubExpr);
4891   Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt);
4892   ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr);
4893 
4894   MaterializeTemporaryExpr *
4895   CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary,
4896                                  bool BoundToLvalueReference);
4897 
ActOnFinishFullExpr(Expr * Expr)4898   ExprResult ActOnFinishFullExpr(Expr *Expr) {
4899     return ActOnFinishFullExpr(Expr, Expr ? Expr->getExprLoc()
4900                                           : SourceLocation());
4901   }
4902   ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC,
4903                                  bool DiscardedValue = false,
4904                                  bool IsConstexpr = false,
4905                                  bool IsLambdaInitCaptureInitializer = false);
4906   StmtResult ActOnFinishFullStmt(Stmt *Stmt);
4907 
4908   // Marks SS invalid if it represents an incomplete type.
4909   bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC);
4910 
4911   DeclContext *computeDeclContext(QualType T);
4912   DeclContext *computeDeclContext(const CXXScopeSpec &SS,
4913                                   bool EnteringContext = false);
4914   bool isDependentScopeSpecifier(const CXXScopeSpec &SS);
4915   CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS);
4916 
4917   /// \brief The parser has parsed a global nested-name-specifier '::'.
4918   ///
4919   /// \param CCLoc The location of the '::'.
4920   ///
4921   /// \param SS The nested-name-specifier, which will be updated in-place
4922   /// to reflect the parsed nested-name-specifier.
4923   ///
4924   /// \returns true if an error occurred, false otherwise.
4925   bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS);
4926 
4927   /// \brief The parser has parsed a '__super' nested-name-specifier.
4928   ///
4929   /// \param SuperLoc The location of the '__super' keyword.
4930   ///
4931   /// \param ColonColonLoc The location of the '::'.
4932   ///
4933   /// \param SS The nested-name-specifier, which will be updated in-place
4934   /// to reflect the parsed nested-name-specifier.
4935   ///
4936   /// \returns true if an error occurred, false otherwise.
4937   bool ActOnSuperScopeSpecifier(SourceLocation SuperLoc,
4938                                 SourceLocation ColonColonLoc, CXXScopeSpec &SS);
4939 
4940   bool isAcceptableNestedNameSpecifier(const NamedDecl *SD,
4941                                        bool *CanCorrect = nullptr);
4942   NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS);
4943 
4944   bool isNonTypeNestedNameSpecifier(Scope *S, CXXScopeSpec &SS,
4945                                     SourceLocation IdLoc,
4946                                     IdentifierInfo &II,
4947                                     ParsedType ObjectType);
4948 
4949   bool BuildCXXNestedNameSpecifier(Scope *S,
4950                                    IdentifierInfo &Identifier,
4951                                    SourceLocation IdentifierLoc,
4952                                    SourceLocation CCLoc,
4953                                    QualType ObjectType,
4954                                    bool EnteringContext,
4955                                    CXXScopeSpec &SS,
4956                                    NamedDecl *ScopeLookupResult,
4957                                    bool ErrorRecoveryLookup,
4958                                    bool *IsCorrectedToColon = nullptr);
4959 
4960   /// \brief The parser has parsed a nested-name-specifier 'identifier::'.
4961   ///
4962   /// \param S The scope in which this nested-name-specifier occurs.
4963   ///
4964   /// \param Identifier The identifier preceding the '::'.
4965   ///
4966   /// \param IdentifierLoc The location of the identifier.
4967   ///
4968   /// \param CCLoc The location of the '::'.
4969   ///
4970   /// \param ObjectType The type of the object, if we're parsing
4971   /// nested-name-specifier in a member access expression.
4972   ///
4973   /// \param EnteringContext Whether we're entering the context nominated by
4974   /// this nested-name-specifier.
4975   ///
4976   /// \param SS The nested-name-specifier, which is both an input
4977   /// parameter (the nested-name-specifier before this type) and an
4978   /// output parameter (containing the full nested-name-specifier,
4979   /// including this new type).
4980   ///
4981   /// \param ErrorRecoveryLookup If true, then this method is called to improve
4982   /// error recovery. In this case do not emit error message.
4983   ///
4984   /// \param IsCorrectedToColon If not null, suggestions to replace '::' -> ':'
4985   /// are allowed.  The bool value pointed by this parameter is set to 'true'
4986   /// if the identifier is treated as if it was followed by ':', not '::'.
4987   ///
4988   /// \returns true if an error occurred, false otherwise.
4989   bool ActOnCXXNestedNameSpecifier(Scope *S,
4990                                    IdentifierInfo &Identifier,
4991                                    SourceLocation IdentifierLoc,
4992                                    SourceLocation CCLoc,
4993                                    ParsedType ObjectType,
4994                                    bool EnteringContext,
4995                                    CXXScopeSpec &SS,
4996                                    bool ErrorRecoveryLookup = false,
4997                                    bool *IsCorrectedToColon = nullptr);
4998 
4999   ExprResult ActOnDecltypeExpression(Expr *E);
5000 
5001   bool ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS,
5002                                            const DeclSpec &DS,
5003                                            SourceLocation ColonColonLoc);
5004 
5005   bool IsInvalidUnlessNestedName(Scope *S, CXXScopeSpec &SS,
5006                                  IdentifierInfo &Identifier,
5007                                  SourceLocation IdentifierLoc,
5008                                  SourceLocation ColonLoc,
5009                                  ParsedType ObjectType,
5010                                  bool EnteringContext);
5011 
5012   /// \brief The parser has parsed a nested-name-specifier
5013   /// 'template[opt] template-name < template-args >::'.
5014   ///
5015   /// \param S The scope in which this nested-name-specifier occurs.
5016   ///
5017   /// \param SS The nested-name-specifier, which is both an input
5018   /// parameter (the nested-name-specifier before this type) and an
5019   /// output parameter (containing the full nested-name-specifier,
5020   /// including this new type).
5021   ///
5022   /// \param TemplateKWLoc the location of the 'template' keyword, if any.
5023   /// \param TemplateName the template name.
5024   /// \param TemplateNameLoc The location of the template name.
5025   /// \param LAngleLoc The location of the opening angle bracket  ('<').
5026   /// \param TemplateArgs The template arguments.
5027   /// \param RAngleLoc The location of the closing angle bracket  ('>').
5028   /// \param CCLoc The location of the '::'.
5029   ///
5030   /// \param EnteringContext Whether we're entering the context of the
5031   /// nested-name-specifier.
5032   ///
5033   ///
5034   /// \returns true if an error occurred, false otherwise.
5035   bool ActOnCXXNestedNameSpecifier(Scope *S,
5036                                    CXXScopeSpec &SS,
5037                                    SourceLocation TemplateKWLoc,
5038                                    TemplateTy TemplateName,
5039                                    SourceLocation TemplateNameLoc,
5040                                    SourceLocation LAngleLoc,
5041                                    ASTTemplateArgsPtr TemplateArgs,
5042                                    SourceLocation RAngleLoc,
5043                                    SourceLocation CCLoc,
5044                                    bool EnteringContext);
5045 
5046   /// \brief Given a C++ nested-name-specifier, produce an annotation value
5047   /// that the parser can use later to reconstruct the given
5048   /// nested-name-specifier.
5049   ///
5050   /// \param SS A nested-name-specifier.
5051   ///
5052   /// \returns A pointer containing all of the information in the
5053   /// nested-name-specifier \p SS.
5054   void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS);
5055 
5056   /// \brief Given an annotation pointer for a nested-name-specifier, restore
5057   /// the nested-name-specifier structure.
5058   ///
5059   /// \param Annotation The annotation pointer, produced by
5060   /// \c SaveNestedNameSpecifierAnnotation().
5061   ///
5062   /// \param AnnotationRange The source range corresponding to the annotation.
5063   ///
5064   /// \param SS The nested-name-specifier that will be updated with the contents
5065   /// of the annotation pointer.
5066   void RestoreNestedNameSpecifierAnnotation(void *Annotation,
5067                                             SourceRange AnnotationRange,
5068                                             CXXScopeSpec &SS);
5069 
5070   bool ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
5071 
5072   /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global
5073   /// scope or nested-name-specifier) is parsed, part of a declarator-id.
5074   /// After this method is called, according to [C++ 3.4.3p3], names should be
5075   /// looked up in the declarator-id's scope, until the declarator is parsed and
5076   /// ActOnCXXExitDeclaratorScope is called.
5077   /// The 'SS' should be a non-empty valid CXXScopeSpec.
5078   bool ActOnCXXEnterDeclaratorScope(Scope *S, CXXScopeSpec &SS);
5079 
5080   /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously
5081   /// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same
5082   /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.
5083   /// Used to indicate that names should revert to being looked up in the
5084   /// defining scope.
5085   void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
5086 
5087   /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an
5088   /// initializer for the declaration 'Dcl'.
5089   /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
5090   /// static data member of class X, names should be looked up in the scope of
5091   /// class X.
5092   void ActOnCXXEnterDeclInitializer(Scope *S, Decl *Dcl);
5093 
5094   /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
5095   /// initializer for the declaration 'Dcl'.
5096   void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl);
5097 
5098   /// \brief Create a new lambda closure type.
5099   CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange,
5100                                          TypeSourceInfo *Info,
5101                                          bool KnownDependent,
5102                                          LambdaCaptureDefault CaptureDefault);
5103 
5104   /// \brief Start the definition of a lambda expression.
5105   CXXMethodDecl *startLambdaDefinition(CXXRecordDecl *Class,
5106                                        SourceRange IntroducerRange,
5107                                        TypeSourceInfo *MethodType,
5108                                        SourceLocation EndLoc,
5109                                        ArrayRef<ParmVarDecl *> Params,
5110                                        bool IsConstexprSpecified);
5111 
5112   /// \brief Endow the lambda scope info with the relevant properties.
5113   void buildLambdaScope(sema::LambdaScopeInfo *LSI,
5114                         CXXMethodDecl *CallOperator,
5115                         SourceRange IntroducerRange,
5116                         LambdaCaptureDefault CaptureDefault,
5117                         SourceLocation CaptureDefaultLoc,
5118                         bool ExplicitParams,
5119                         bool ExplicitResultType,
5120                         bool Mutable);
5121 
5122   /// \brief Perform initialization analysis of the init-capture and perform
5123   /// any implicit conversions such as an lvalue-to-rvalue conversion if
5124   /// not being used to initialize a reference.
actOnLambdaInitCaptureInitialization(SourceLocation Loc,bool ByRef,IdentifierInfo * Id,LambdaCaptureInitKind InitKind,Expr * & Init)5125   ParsedType actOnLambdaInitCaptureInitialization(
5126       SourceLocation Loc, bool ByRef, IdentifierInfo *Id,
5127       LambdaCaptureInitKind InitKind, Expr *&Init) {
5128     return ParsedType::make(buildLambdaInitCaptureInitialization(
5129         Loc, ByRef, Id, InitKind != LambdaCaptureInitKind::CopyInit, Init));
5130   }
5131   QualType buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef,
5132                                                 IdentifierInfo *Id,
5133                                                 bool DirectInit, Expr *&Init);
5134 
5135   /// \brief Create a dummy variable within the declcontext of the lambda's
5136   ///  call operator, for name lookup purposes for a lambda init capture.
5137   ///
5138   ///  CodeGen handles emission of lambda captures, ignoring these dummy
5139   ///  variables appropriately.
5140   VarDecl *createLambdaInitCaptureVarDecl(SourceLocation Loc,
5141                                           QualType InitCaptureType,
5142                                           IdentifierInfo *Id,
5143                                           unsigned InitStyle, Expr *Init);
5144 
5145   /// \brief Build the implicit field for an init-capture.
5146   FieldDecl *buildInitCaptureField(sema::LambdaScopeInfo *LSI, VarDecl *Var);
5147 
5148   /// \brief Note that we have finished the explicit captures for the
5149   /// given lambda.
5150   void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI);
5151 
5152   /// \brief Introduce the lambda parameters into scope.
5153   void addLambdaParameters(CXXMethodDecl *CallOperator, Scope *CurScope);
5154 
5155   /// \brief Deduce a block or lambda's return type based on the return
5156   /// statements present in the body.
5157   void deduceClosureReturnType(sema::CapturingScopeInfo &CSI);
5158 
5159   /// ActOnStartOfLambdaDefinition - This is called just before we start
5160   /// parsing the body of a lambda; it analyzes the explicit captures and
5161   /// arguments, and sets up various data-structures for the body of the
5162   /// lambda.
5163   void ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
5164                                     Declarator &ParamInfo, Scope *CurScope);
5165 
5166   /// ActOnLambdaError - If there is an error parsing a lambda, this callback
5167   /// is invoked to pop the information about the lambda.
5168   void ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope,
5169                         bool IsInstantiation = false);
5170 
5171   /// ActOnLambdaExpr - This is called when the body of a lambda expression
5172   /// was successfully completed.
5173   ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body,
5174                              Scope *CurScope);
5175 
5176   /// \brief Complete a lambda-expression having processed and attached the
5177   /// lambda body.
5178   ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
5179                              sema::LambdaScopeInfo *LSI);
5180 
5181   /// \brief Define the "body" of the conversion from a lambda object to a
5182   /// function pointer.
5183   ///
5184   /// This routine doesn't actually define a sensible body; rather, it fills
5185   /// in the initialization expression needed to copy the lambda object into
5186   /// the block, and IR generation actually generates the real body of the
5187   /// block pointer conversion.
5188   void DefineImplicitLambdaToFunctionPointerConversion(
5189          SourceLocation CurrentLoc, CXXConversionDecl *Conv);
5190 
5191   /// \brief Define the "body" of the conversion from a lambda object to a
5192   /// block pointer.
5193   ///
5194   /// This routine doesn't actually define a sensible body; rather, it fills
5195   /// in the initialization expression needed to copy the lambda object into
5196   /// the block, and IR generation actually generates the real body of the
5197   /// block pointer conversion.
5198   void DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLoc,
5199                                                     CXXConversionDecl *Conv);
5200 
5201   ExprResult BuildBlockForLambdaConversion(SourceLocation CurrentLocation,
5202                                            SourceLocation ConvLocation,
5203                                            CXXConversionDecl *Conv,
5204                                            Expr *Src);
5205 
5206   // ParseObjCStringLiteral - Parse Objective-C string literals.
5207   ExprResult ParseObjCStringLiteral(SourceLocation *AtLocs,
5208                                     ArrayRef<Expr *> Strings);
5209 
5210   ExprResult BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S);
5211 
5212   /// BuildObjCNumericLiteral - builds an ObjCBoxedExpr AST node for the
5213   /// numeric literal expression. Type of the expression will be "NSNumber *"
5214   /// or "id" if NSNumber is unavailable.
5215   ExprResult BuildObjCNumericLiteral(SourceLocation AtLoc, Expr *Number);
5216   ExprResult ActOnObjCBoolLiteral(SourceLocation AtLoc, SourceLocation ValueLoc,
5217                                   bool Value);
5218   ExprResult BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements);
5219 
5220   /// BuildObjCBoxedExpr - builds an ObjCBoxedExpr AST node for the
5221   /// '@' prefixed parenthesized expression. The type of the expression will
5222   /// either be "NSNumber *", "NSString *" or "NSValue *" depending on the type
5223   /// of ValueType, which is allowed to be a built-in numeric type, "char *",
5224   /// "const char *" or C structure with attribute 'objc_boxable'.
5225   ExprResult BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr);
5226 
5227   ExprResult BuildObjCSubscriptExpression(SourceLocation RB, Expr *BaseExpr,
5228                                           Expr *IndexExpr,
5229                                           ObjCMethodDecl *getterMethod,
5230                                           ObjCMethodDecl *setterMethod);
5231 
5232   ExprResult BuildObjCDictionaryLiteral(SourceRange SR,
5233                                MutableArrayRef<ObjCDictionaryElement> Elements);
5234 
5235   ExprResult BuildObjCEncodeExpression(SourceLocation AtLoc,
5236                                   TypeSourceInfo *EncodedTypeInfo,
5237                                   SourceLocation RParenLoc);
5238   ExprResult BuildCXXMemberCallExpr(Expr *Exp, NamedDecl *FoundDecl,
5239                                     CXXConversionDecl *Method,
5240                                     bool HadMultipleCandidates);
5241 
5242   ExprResult ParseObjCEncodeExpression(SourceLocation AtLoc,
5243                                        SourceLocation EncodeLoc,
5244                                        SourceLocation LParenLoc,
5245                                        ParsedType Ty,
5246                                        SourceLocation RParenLoc);
5247 
5248   /// ParseObjCSelectorExpression - Build selector expression for \@selector
5249   ExprResult ParseObjCSelectorExpression(Selector Sel,
5250                                          SourceLocation AtLoc,
5251                                          SourceLocation SelLoc,
5252                                          SourceLocation LParenLoc,
5253                                          SourceLocation RParenLoc,
5254                                          bool WarnMultipleSelectors);
5255 
5256   /// ParseObjCProtocolExpression - Build protocol expression for \@protocol
5257   ExprResult ParseObjCProtocolExpression(IdentifierInfo * ProtocolName,
5258                                          SourceLocation AtLoc,
5259                                          SourceLocation ProtoLoc,
5260                                          SourceLocation LParenLoc,
5261                                          SourceLocation ProtoIdLoc,
5262                                          SourceLocation RParenLoc);
5263 
5264   //===--------------------------------------------------------------------===//
5265   // C++ Declarations
5266   //
5267   Decl *ActOnStartLinkageSpecification(Scope *S,
5268                                        SourceLocation ExternLoc,
5269                                        Expr *LangStr,
5270                                        SourceLocation LBraceLoc);
5271   Decl *ActOnFinishLinkageSpecification(Scope *S,
5272                                         Decl *LinkageSpec,
5273                                         SourceLocation RBraceLoc);
5274 
5275 
5276   //===--------------------------------------------------------------------===//
5277   // C++ Classes
5278   //
5279   bool isCurrentClassName(const IdentifierInfo &II, Scope *S,
5280                           const CXXScopeSpec *SS = nullptr);
5281   bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS);
5282 
5283   bool ActOnAccessSpecifier(AccessSpecifier Access,
5284                             SourceLocation ASLoc,
5285                             SourceLocation ColonLoc,
5286                             AttributeList *Attrs = nullptr);
5287 
5288   NamedDecl *ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS,
5289                                  Declarator &D,
5290                                  MultiTemplateParamsArg TemplateParameterLists,
5291                                  Expr *BitfieldWidth, const VirtSpecifiers &VS,
5292                                  InClassInitStyle InitStyle);
5293 
5294   void ActOnStartCXXInClassMemberInitializer();
5295   void ActOnFinishCXXInClassMemberInitializer(Decl *VarDecl,
5296                                               SourceLocation EqualLoc,
5297                                               Expr *Init);
5298 
5299   MemInitResult ActOnMemInitializer(Decl *ConstructorD,
5300                                     Scope *S,
5301                                     CXXScopeSpec &SS,
5302                                     IdentifierInfo *MemberOrBase,
5303                                     ParsedType TemplateTypeTy,
5304                                     const DeclSpec &DS,
5305                                     SourceLocation IdLoc,
5306                                     SourceLocation LParenLoc,
5307                                     ArrayRef<Expr *> Args,
5308                                     SourceLocation RParenLoc,
5309                                     SourceLocation EllipsisLoc);
5310 
5311   MemInitResult ActOnMemInitializer(Decl *ConstructorD,
5312                                     Scope *S,
5313                                     CXXScopeSpec &SS,
5314                                     IdentifierInfo *MemberOrBase,
5315                                     ParsedType TemplateTypeTy,
5316                                     const DeclSpec &DS,
5317                                     SourceLocation IdLoc,
5318                                     Expr *InitList,
5319                                     SourceLocation EllipsisLoc);
5320 
5321   MemInitResult BuildMemInitializer(Decl *ConstructorD,
5322                                     Scope *S,
5323                                     CXXScopeSpec &SS,
5324                                     IdentifierInfo *MemberOrBase,
5325                                     ParsedType TemplateTypeTy,
5326                                     const DeclSpec &DS,
5327                                     SourceLocation IdLoc,
5328                                     Expr *Init,
5329                                     SourceLocation EllipsisLoc);
5330 
5331   MemInitResult BuildMemberInitializer(ValueDecl *Member,
5332                                        Expr *Init,
5333                                        SourceLocation IdLoc);
5334 
5335   MemInitResult BuildBaseInitializer(QualType BaseType,
5336                                      TypeSourceInfo *BaseTInfo,
5337                                      Expr *Init,
5338                                      CXXRecordDecl *ClassDecl,
5339                                      SourceLocation EllipsisLoc);
5340 
5341   MemInitResult BuildDelegatingInitializer(TypeSourceInfo *TInfo,
5342                                            Expr *Init,
5343                                            CXXRecordDecl *ClassDecl);
5344 
5345   bool SetDelegatingInitializer(CXXConstructorDecl *Constructor,
5346                                 CXXCtorInitializer *Initializer);
5347 
5348   bool SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
5349                            ArrayRef<CXXCtorInitializer *> Initializers = None);
5350 
5351   void SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation);
5352 
5353 
5354   /// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
5355   /// mark all the non-trivial destructors of its members and bases as
5356   /// referenced.
5357   void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc,
5358                                               CXXRecordDecl *Record);
5359 
5360   /// \brief The list of classes whose vtables have been used within
5361   /// this translation unit, and the source locations at which the
5362   /// first use occurred.
5363   typedef std::pair<CXXRecordDecl*, SourceLocation> VTableUse;
5364 
5365   /// \brief The list of vtables that are required but have not yet been
5366   /// materialized.
5367   SmallVector<VTableUse, 16> VTableUses;
5368 
5369   /// \brief The set of classes whose vtables have been used within
5370   /// this translation unit, and a bit that will be true if the vtable is
5371   /// required to be emitted (otherwise, it should be emitted only if needed
5372   /// by code generation).
5373   llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed;
5374 
5375   /// \brief Load any externally-stored vtable uses.
5376   void LoadExternalVTableUses();
5377 
5378   /// \brief Note that the vtable for the given class was used at the
5379   /// given location.
5380   void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
5381                       bool DefinitionRequired = false);
5382 
5383   /// \brief Mark the exception specifications of all virtual member functions
5384   /// in the given class as needed.
5385   void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
5386                                              const CXXRecordDecl *RD);
5387 
5388   /// MarkVirtualMembersReferenced - Will mark all members of the given
5389   /// CXXRecordDecl referenced.
5390   void MarkVirtualMembersReferenced(SourceLocation Loc,
5391                                     const CXXRecordDecl *RD);
5392 
5393   /// \brief Define all of the vtables that have been used in this
5394   /// translation unit and reference any virtual members used by those
5395   /// vtables.
5396   ///
5397   /// \returns true if any work was done, false otherwise.
5398   bool DefineUsedVTables();
5399 
5400   void AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl);
5401 
5402   void ActOnMemInitializers(Decl *ConstructorDecl,
5403                             SourceLocation ColonLoc,
5404                             ArrayRef<CXXCtorInitializer*> MemInits,
5405                             bool AnyErrors);
5406 
5407   /// \brief Check class-level dllimport/dllexport attribute. The caller must
5408   /// ensure that referenceDLLExportedClassMethods is called some point later
5409   /// when all outer classes of Class are complete.
5410   void checkClassLevelDLLAttribute(CXXRecordDecl *Class);
5411 
5412   void referenceDLLExportedClassMethods();
5413 
5414   void propagateDLLAttrToBaseClassTemplate(
5415       CXXRecordDecl *Class, Attr *ClassAttr,
5416       ClassTemplateSpecializationDecl *BaseTemplateSpec,
5417       SourceLocation BaseLoc);
5418 
5419   void CheckCompletedCXXClass(CXXRecordDecl *Record);
5420   void ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
5421                                          Decl *TagDecl,
5422                                          SourceLocation LBrac,
5423                                          SourceLocation RBrac,
5424                                          AttributeList *AttrList);
5425   void ActOnFinishCXXMemberDecls();
5426   void ActOnFinishCXXNonNestedClass(Decl *D);
5427 
5428   void ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param);
5429   unsigned ActOnReenterTemplateScope(Scope *S, Decl *Template);
5430   void ActOnStartDelayedMemberDeclarations(Scope *S, Decl *Record);
5431   void ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5432   void ActOnDelayedCXXMethodParameter(Scope *S, Decl *Param);
5433   void ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *Record);
5434   void ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5435   void ActOnFinishDelayedMemberInitializers(Decl *Record);
5436   void MarkAsLateParsedTemplate(FunctionDecl *FD, Decl *FnD,
5437                                 CachedTokens &Toks);
5438   void UnmarkAsLateParsedTemplate(FunctionDecl *FD);
5439   bool IsInsideALocalClassWithinATemplateFunction();
5440 
5441   Decl *ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5442                                      Expr *AssertExpr,
5443                                      Expr *AssertMessageExpr,
5444                                      SourceLocation RParenLoc);
5445   Decl *BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5446                                      Expr *AssertExpr,
5447                                      StringLiteral *AssertMessageExpr,
5448                                      SourceLocation RParenLoc,
5449                                      bool Failed);
5450 
5451   FriendDecl *CheckFriendTypeDecl(SourceLocation LocStart,
5452                                   SourceLocation FriendLoc,
5453                                   TypeSourceInfo *TSInfo);
5454   Decl *ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
5455                             MultiTemplateParamsArg TemplateParams);
5456   NamedDecl *ActOnFriendFunctionDecl(Scope *S, Declarator &D,
5457                                      MultiTemplateParamsArg TemplateParams);
5458 
5459   QualType CheckConstructorDeclarator(Declarator &D, QualType R,
5460                                       StorageClass& SC);
5461   void CheckConstructor(CXXConstructorDecl *Constructor);
5462   QualType CheckDestructorDeclarator(Declarator &D, QualType R,
5463                                      StorageClass& SC);
5464   bool CheckDestructor(CXXDestructorDecl *Destructor);
5465   void CheckConversionDeclarator(Declarator &D, QualType &R,
5466                                  StorageClass& SC);
5467   Decl *ActOnConversionDeclarator(CXXConversionDecl *Conversion);
5468 
5469   void CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD);
5470   void CheckExplicitlyDefaultedMemberExceptionSpec(CXXMethodDecl *MD,
5471                                                    const FunctionProtoType *T);
5472   void CheckDelayedMemberExceptionSpecs();
5473 
5474   //===--------------------------------------------------------------------===//
5475   // C++ Derived Classes
5476   //
5477 
5478   /// ActOnBaseSpecifier - Parsed a base specifier
5479   CXXBaseSpecifier *CheckBaseSpecifier(CXXRecordDecl *Class,
5480                                        SourceRange SpecifierRange,
5481                                        bool Virtual, AccessSpecifier Access,
5482                                        TypeSourceInfo *TInfo,
5483                                        SourceLocation EllipsisLoc);
5484 
5485   BaseResult ActOnBaseSpecifier(Decl *classdecl,
5486                                 SourceRange SpecifierRange,
5487                                 ParsedAttributes &Attrs,
5488                                 bool Virtual, AccessSpecifier Access,
5489                                 ParsedType basetype,
5490                                 SourceLocation BaseLoc,
5491                                 SourceLocation EllipsisLoc);
5492 
5493   bool AttachBaseSpecifiers(CXXRecordDecl *Class,
5494                             MutableArrayRef<CXXBaseSpecifier *> Bases);
5495   void ActOnBaseSpecifiers(Decl *ClassDecl,
5496                            MutableArrayRef<CXXBaseSpecifier *> Bases);
5497 
5498   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base);
5499   bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base,
5500                      CXXBasePaths &Paths);
5501 
5502   // FIXME: I don't like this name.
5503   void BuildBasePathArray(const CXXBasePaths &Paths, CXXCastPath &BasePath);
5504 
5505   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5506                                     SourceLocation Loc, SourceRange Range,
5507                                     CXXCastPath *BasePath = nullptr,
5508                                     bool IgnoreAccess = false);
5509   bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5510                                     unsigned InaccessibleBaseID,
5511                                     unsigned AmbigiousBaseConvID,
5512                                     SourceLocation Loc, SourceRange Range,
5513                                     DeclarationName Name,
5514                                     CXXCastPath *BasePath,
5515                                     bool IgnoreAccess = false);
5516 
5517   std::string getAmbiguousPathsDisplayString(CXXBasePaths &Paths);
5518 
5519   bool CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
5520                                          const CXXMethodDecl *Old);
5521 
5522   /// CheckOverridingFunctionReturnType - Checks whether the return types are
5523   /// covariant, according to C++ [class.virtual]p5.
5524   bool CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
5525                                          const CXXMethodDecl *Old);
5526 
5527   /// CheckOverridingFunctionExceptionSpec - Checks whether the exception
5528   /// spec is a subset of base spec.
5529   bool CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
5530                                             const CXXMethodDecl *Old);
5531 
5532   bool CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange);
5533 
5534   /// CheckOverrideControl - Check C++11 override control semantics.
5535   void CheckOverrideControl(NamedDecl *D);
5536 
5537   /// DiagnoseAbsenceOfOverrideControl - Diagnose if 'override' keyword was
5538   /// not used in the declaration of an overriding method.
5539   void DiagnoseAbsenceOfOverrideControl(NamedDecl *D);
5540 
5541   /// CheckForFunctionMarkedFinal - Checks whether a virtual member function
5542   /// overrides a virtual member function marked 'final', according to
5543   /// C++11 [class.virtual]p4.
5544   bool CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
5545                                               const CXXMethodDecl *Old);
5546 
5547 
5548   //===--------------------------------------------------------------------===//
5549   // C++ Access Control
5550   //
5551 
5552   enum AccessResult {
5553     AR_accessible,
5554     AR_inaccessible,
5555     AR_dependent,
5556     AR_delayed
5557   };
5558 
5559   bool SetMemberAccessSpecifier(NamedDecl *MemberDecl,
5560                                 NamedDecl *PrevMemberDecl,
5561                                 AccessSpecifier LexicalAS);
5562 
5563   AccessResult CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E,
5564                                            DeclAccessPair FoundDecl);
5565   AccessResult CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E,
5566                                            DeclAccessPair FoundDecl);
5567   AccessResult CheckAllocationAccess(SourceLocation OperatorLoc,
5568                                      SourceRange PlacementRange,
5569                                      CXXRecordDecl *NamingClass,
5570                                      DeclAccessPair FoundDecl,
5571                                      bool Diagnose = true);
5572   AccessResult CheckConstructorAccess(SourceLocation Loc,
5573                                       CXXConstructorDecl *D,
5574                                       DeclAccessPair FoundDecl,
5575                                       const InitializedEntity &Entity,
5576                                       bool IsCopyBindingRefToTemp = false);
5577   AccessResult CheckConstructorAccess(SourceLocation Loc,
5578                                       CXXConstructorDecl *D,
5579                                       DeclAccessPair FoundDecl,
5580                                       const InitializedEntity &Entity,
5581                                       const PartialDiagnostic &PDiag);
5582   AccessResult CheckDestructorAccess(SourceLocation Loc,
5583                                      CXXDestructorDecl *Dtor,
5584                                      const PartialDiagnostic &PDiag,
5585                                      QualType objectType = QualType());
5586   AccessResult CheckFriendAccess(NamedDecl *D);
5587   AccessResult CheckMemberAccess(SourceLocation UseLoc,
5588                                  CXXRecordDecl *NamingClass,
5589                                  DeclAccessPair Found);
5590   AccessResult CheckMemberOperatorAccess(SourceLocation Loc,
5591                                          Expr *ObjectExpr,
5592                                          Expr *ArgExpr,
5593                                          DeclAccessPair FoundDecl);
5594   AccessResult CheckAddressOfMemberAccess(Expr *OvlExpr,
5595                                           DeclAccessPair FoundDecl);
5596   AccessResult CheckBaseClassAccess(SourceLocation AccessLoc,
5597                                     QualType Base, QualType Derived,
5598                                     const CXXBasePath &Path,
5599                                     unsigned DiagID,
5600                                     bool ForceCheck = false,
5601                                     bool ForceUnprivileged = false);
5602   void CheckLookupAccess(const LookupResult &R);
5603   bool IsSimplyAccessible(NamedDecl *decl, DeclContext *Ctx);
5604   bool isSpecialMemberAccessibleForDeletion(CXXMethodDecl *decl,
5605                                             AccessSpecifier access,
5606                                             QualType objectType);
5607 
5608   void HandleDependentAccessCheck(const DependentDiagnostic &DD,
5609                          const MultiLevelTemplateArgumentList &TemplateArgs);
5610   void PerformDependentDiagnostics(const DeclContext *Pattern,
5611                         const MultiLevelTemplateArgumentList &TemplateArgs);
5612 
5613   void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
5614 
5615   /// \brief When true, access checking violations are treated as SFINAE
5616   /// failures rather than hard errors.
5617   bool AccessCheckingSFINAE;
5618 
5619   enum AbstractDiagSelID {
5620     AbstractNone = -1,
5621     AbstractReturnType,
5622     AbstractParamType,
5623     AbstractVariableType,
5624     AbstractFieldType,
5625     AbstractIvarType,
5626     AbstractSynthesizedIvarType,
5627     AbstractArrayType
5628   };
5629 
5630   bool isAbstractType(SourceLocation Loc, QualType T);
5631   bool RequireNonAbstractType(SourceLocation Loc, QualType T,
5632                               TypeDiagnoser &Diagnoser);
5633   template <typename... Ts>
RequireNonAbstractType(SourceLocation Loc,QualType T,unsigned DiagID,const Ts &...Args)5634   bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned DiagID,
5635                               const Ts &...Args) {
5636     BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
5637     return RequireNonAbstractType(Loc, T, Diagnoser);
5638   }
5639 
5640   void DiagnoseAbstractType(const CXXRecordDecl *RD);
5641 
5642   //===--------------------------------------------------------------------===//
5643   // C++ Overloaded Operators [C++ 13.5]
5644   //
5645 
5646   bool CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl);
5647 
5648   bool CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl);
5649 
5650   //===--------------------------------------------------------------------===//
5651   // C++ Templates [C++ 14]
5652   //
5653   void FilterAcceptableTemplateNames(LookupResult &R,
5654                                      bool AllowFunctionTemplates = true);
5655   bool hasAnyAcceptableTemplateNames(LookupResult &R,
5656                                      bool AllowFunctionTemplates = true);
5657 
5658   void LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
5659                           QualType ObjectType, bool EnteringContext,
5660                           bool &MemberOfUnknownSpecialization);
5661 
5662   TemplateNameKind isTemplateName(Scope *S,
5663                                   CXXScopeSpec &SS,
5664                                   bool hasTemplateKeyword,
5665                                   UnqualifiedId &Name,
5666                                   ParsedType ObjectType,
5667                                   bool EnteringContext,
5668                                   TemplateTy &Template,
5669                                   bool &MemberOfUnknownSpecialization);
5670 
5671   bool DiagnoseUnknownTemplateName(const IdentifierInfo &II,
5672                                    SourceLocation IILoc,
5673                                    Scope *S,
5674                                    const CXXScopeSpec *SS,
5675                                    TemplateTy &SuggestedTemplate,
5676                                    TemplateNameKind &SuggestedKind);
5677 
5678   void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl);
5679   TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl);
5680 
5681   Decl *ActOnTypeParameter(Scope *S, bool Typename,
5682                            SourceLocation EllipsisLoc,
5683                            SourceLocation KeyLoc,
5684                            IdentifierInfo *ParamName,
5685                            SourceLocation ParamNameLoc,
5686                            unsigned Depth, unsigned Position,
5687                            SourceLocation EqualLoc,
5688                            ParsedType DefaultArg);
5689 
5690   QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc);
5691   Decl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
5692                                       unsigned Depth,
5693                                       unsigned Position,
5694                                       SourceLocation EqualLoc,
5695                                       Expr *DefaultArg);
5696   Decl *ActOnTemplateTemplateParameter(Scope *S,
5697                                        SourceLocation TmpLoc,
5698                                        TemplateParameterList *Params,
5699                                        SourceLocation EllipsisLoc,
5700                                        IdentifierInfo *ParamName,
5701                                        SourceLocation ParamNameLoc,
5702                                        unsigned Depth,
5703                                        unsigned Position,
5704                                        SourceLocation EqualLoc,
5705                                        ParsedTemplateArgument DefaultArg);
5706 
5707   TemplateParameterList *
5708   ActOnTemplateParameterList(unsigned Depth,
5709                              SourceLocation ExportLoc,
5710                              SourceLocation TemplateLoc,
5711                              SourceLocation LAngleLoc,
5712                              ArrayRef<Decl *> Params,
5713                              SourceLocation RAngleLoc,
5714                              Expr *RequiresClause);
5715 
5716   /// \brief The context in which we are checking a template parameter list.
5717   enum TemplateParamListContext {
5718     TPC_ClassTemplate,
5719     TPC_VarTemplate,
5720     TPC_FunctionTemplate,
5721     TPC_ClassTemplateMember,
5722     TPC_FriendClassTemplate,
5723     TPC_FriendFunctionTemplate,
5724     TPC_FriendFunctionTemplateDefinition,
5725     TPC_TypeAliasTemplate
5726   };
5727 
5728   bool CheckTemplateParameterList(TemplateParameterList *NewParams,
5729                                   TemplateParameterList *OldParams,
5730                                   TemplateParamListContext TPC);
5731   TemplateParameterList *MatchTemplateParametersToScopeSpecifier(
5732       SourceLocation DeclStartLoc, SourceLocation DeclLoc,
5733       const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId,
5734       ArrayRef<TemplateParameterList *> ParamLists,
5735       bool IsFriend, bool &IsExplicitSpecialization, bool &Invalid);
5736 
5737   DeclResult CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
5738                                 SourceLocation KWLoc, CXXScopeSpec &SS,
5739                                 IdentifierInfo *Name, SourceLocation NameLoc,
5740                                 AttributeList *Attr,
5741                                 TemplateParameterList *TemplateParams,
5742                                 AccessSpecifier AS,
5743                                 SourceLocation ModulePrivateLoc,
5744                                 SourceLocation FriendLoc,
5745                                 unsigned NumOuterTemplateParamLists,
5746                             TemplateParameterList **OuterTemplateParamLists,
5747                                 SkipBodyInfo *SkipBody = nullptr);
5748 
5749   void translateTemplateArguments(const ASTTemplateArgsPtr &In,
5750                                   TemplateArgumentListInfo &Out);
5751 
5752   void NoteAllFoundTemplates(TemplateName Name);
5753 
5754   QualType CheckTemplateIdType(TemplateName Template,
5755                                SourceLocation TemplateLoc,
5756                               TemplateArgumentListInfo &TemplateArgs);
5757 
5758   TypeResult
5759   ActOnTemplateIdType(CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
5760                       TemplateTy Template, SourceLocation TemplateLoc,
5761                       SourceLocation LAngleLoc,
5762                       ASTTemplateArgsPtr TemplateArgs,
5763                       SourceLocation RAngleLoc,
5764                       bool IsCtorOrDtorName = false);
5765 
5766   /// \brief Parsed an elaborated-type-specifier that refers to a template-id,
5767   /// such as \c class T::template apply<U>.
5768   TypeResult ActOnTagTemplateIdType(TagUseKind TUK,
5769                                     TypeSpecifierType TagSpec,
5770                                     SourceLocation TagLoc,
5771                                     CXXScopeSpec &SS,
5772                                     SourceLocation TemplateKWLoc,
5773                                     TemplateTy TemplateD,
5774                                     SourceLocation TemplateLoc,
5775                                     SourceLocation LAngleLoc,
5776                                     ASTTemplateArgsPtr TemplateArgsIn,
5777                                     SourceLocation RAngleLoc);
5778 
5779   DeclResult ActOnVarTemplateSpecialization(
5780       Scope *S, Declarator &D, TypeSourceInfo *DI,
5781       SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams,
5782       StorageClass SC, bool IsPartialSpecialization);
5783 
5784   DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
5785                                 SourceLocation TemplateLoc,
5786                                 SourceLocation TemplateNameLoc,
5787                                 const TemplateArgumentListInfo &TemplateArgs);
5788 
5789   ExprResult CheckVarTemplateId(const CXXScopeSpec &SS,
5790                                 const DeclarationNameInfo &NameInfo,
5791                                 VarTemplateDecl *Template,
5792                                 SourceLocation TemplateLoc,
5793                                 const TemplateArgumentListInfo *TemplateArgs);
5794 
5795   ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS,
5796                                  SourceLocation TemplateKWLoc,
5797                                  LookupResult &R,
5798                                  bool RequiresADL,
5799                                const TemplateArgumentListInfo *TemplateArgs);
5800 
5801   ExprResult BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS,
5802                                           SourceLocation TemplateKWLoc,
5803                                const DeclarationNameInfo &NameInfo,
5804                                const TemplateArgumentListInfo *TemplateArgs);
5805 
5806   TemplateNameKind ActOnDependentTemplateName(Scope *S,
5807                                               CXXScopeSpec &SS,
5808                                               SourceLocation TemplateKWLoc,
5809                                               UnqualifiedId &Name,
5810                                               ParsedType ObjectType,
5811                                               bool EnteringContext,
5812                                               TemplateTy &Template);
5813 
5814   DeclResult
5815   ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK,
5816                                    SourceLocation KWLoc,
5817                                    SourceLocation ModulePrivateLoc,
5818                                    TemplateIdAnnotation &TemplateId,
5819                                    AttributeList *Attr,
5820                                  MultiTemplateParamsArg TemplateParameterLists,
5821                                    SkipBodyInfo *SkipBody = nullptr);
5822 
5823   Decl *ActOnTemplateDeclarator(Scope *S,
5824                                 MultiTemplateParamsArg TemplateParameterLists,
5825                                 Declarator &D);
5826 
5827   bool
5828   CheckSpecializationInstantiationRedecl(SourceLocation NewLoc,
5829                                          TemplateSpecializationKind NewTSK,
5830                                          NamedDecl *PrevDecl,
5831                                          TemplateSpecializationKind PrevTSK,
5832                                          SourceLocation PrevPtOfInstantiation,
5833                                          bool &SuppressNew);
5834 
5835   bool CheckDependentFunctionTemplateSpecialization(FunctionDecl *FD,
5836                     const TemplateArgumentListInfo &ExplicitTemplateArgs,
5837                                                     LookupResult &Previous);
5838 
5839   bool CheckFunctionTemplateSpecialization(FunctionDecl *FD,
5840                          TemplateArgumentListInfo *ExplicitTemplateArgs,
5841                                            LookupResult &Previous);
5842   bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
5843 
5844   DeclResult
5845   ActOnExplicitInstantiation(Scope *S,
5846                              SourceLocation ExternLoc,
5847                              SourceLocation TemplateLoc,
5848                              unsigned TagSpec,
5849                              SourceLocation KWLoc,
5850                              const CXXScopeSpec &SS,
5851                              TemplateTy Template,
5852                              SourceLocation TemplateNameLoc,
5853                              SourceLocation LAngleLoc,
5854                              ASTTemplateArgsPtr TemplateArgs,
5855                              SourceLocation RAngleLoc,
5856                              AttributeList *Attr);
5857 
5858   DeclResult
5859   ActOnExplicitInstantiation(Scope *S,
5860                              SourceLocation ExternLoc,
5861                              SourceLocation TemplateLoc,
5862                              unsigned TagSpec,
5863                              SourceLocation KWLoc,
5864                              CXXScopeSpec &SS,
5865                              IdentifierInfo *Name,
5866                              SourceLocation NameLoc,
5867                              AttributeList *Attr);
5868 
5869   DeclResult ActOnExplicitInstantiation(Scope *S,
5870                                         SourceLocation ExternLoc,
5871                                         SourceLocation TemplateLoc,
5872                                         Declarator &D);
5873 
5874   TemplateArgumentLoc
5875   SubstDefaultTemplateArgumentIfAvailable(TemplateDecl *Template,
5876                                           SourceLocation TemplateLoc,
5877                                           SourceLocation RAngleLoc,
5878                                           Decl *Param,
5879                                           SmallVectorImpl<TemplateArgument>
5880                                             &Converted,
5881                                           bool &HasDefaultArg);
5882 
5883   /// \brief Specifies the context in which a particular template
5884   /// argument is being checked.
5885   enum CheckTemplateArgumentKind {
5886     /// \brief The template argument was specified in the code or was
5887     /// instantiated with some deduced template arguments.
5888     CTAK_Specified,
5889 
5890     /// \brief The template argument was deduced via template argument
5891     /// deduction.
5892     CTAK_Deduced,
5893 
5894     /// \brief The template argument was deduced from an array bound
5895     /// via template argument deduction.
5896     CTAK_DeducedFromArrayBound
5897   };
5898 
5899   bool CheckTemplateArgument(NamedDecl *Param,
5900                              TemplateArgumentLoc &Arg,
5901                              NamedDecl *Template,
5902                              SourceLocation TemplateLoc,
5903                              SourceLocation RAngleLoc,
5904                              unsigned ArgumentPackIndex,
5905                            SmallVectorImpl<TemplateArgument> &Converted,
5906                              CheckTemplateArgumentKind CTAK = CTAK_Specified);
5907 
5908   /// \brief Check that the given template arguments can be be provided to
5909   /// the given template, converting the arguments along the way.
5910   ///
5911   /// \param Template The template to which the template arguments are being
5912   /// provided.
5913   ///
5914   /// \param TemplateLoc The location of the template name in the source.
5915   ///
5916   /// \param TemplateArgs The list of template arguments. If the template is
5917   /// a template template parameter, this function may extend the set of
5918   /// template arguments to also include substituted, defaulted template
5919   /// arguments.
5920   ///
5921   /// \param PartialTemplateArgs True if the list of template arguments is
5922   /// intentionally partial, e.g., because we're checking just the initial
5923   /// set of template arguments.
5924   ///
5925   /// \param Converted Will receive the converted, canonicalized template
5926   /// arguments.
5927   ///
5928   /// \returns true if an error occurred, false otherwise.
5929   bool CheckTemplateArgumentList(TemplateDecl *Template,
5930                                  SourceLocation TemplateLoc,
5931                                  TemplateArgumentListInfo &TemplateArgs,
5932                                  bool PartialTemplateArgs,
5933                            SmallVectorImpl<TemplateArgument> &Converted);
5934 
5935   bool CheckTemplateTypeArgument(TemplateTypeParmDecl *Param,
5936                                  TemplateArgumentLoc &Arg,
5937                            SmallVectorImpl<TemplateArgument> &Converted);
5938 
5939   bool CheckTemplateArgument(TemplateTypeParmDecl *Param,
5940                              TypeSourceInfo *Arg);
5941   ExprResult CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
5942                                    QualType InstantiatedParamType, Expr *Arg,
5943                                    TemplateArgument &Converted,
5944                                CheckTemplateArgumentKind CTAK = CTAK_Specified);
5945   bool CheckTemplateArgument(TemplateTemplateParmDecl *Param,
5946                              TemplateArgumentLoc &Arg,
5947                              unsigned ArgumentPackIndex);
5948 
5949   ExprResult
5950   BuildExpressionFromDeclTemplateArgument(const TemplateArgument &Arg,
5951                                           QualType ParamType,
5952                                           SourceLocation Loc);
5953   ExprResult
5954   BuildExpressionFromIntegralTemplateArgument(const TemplateArgument &Arg,
5955                                               SourceLocation Loc);
5956 
5957   /// \brief Enumeration describing how template parameter lists are compared
5958   /// for equality.
5959   enum TemplateParameterListEqualKind {
5960     /// \brief We are matching the template parameter lists of two templates
5961     /// that might be redeclarations.
5962     ///
5963     /// \code
5964     /// template<typename T> struct X;
5965     /// template<typename T> struct X;
5966     /// \endcode
5967     TPL_TemplateMatch,
5968 
5969     /// \brief We are matching the template parameter lists of two template
5970     /// template parameters as part of matching the template parameter lists
5971     /// of two templates that might be redeclarations.
5972     ///
5973     /// \code
5974     /// template<template<int I> class TT> struct X;
5975     /// template<template<int Value> class Other> struct X;
5976     /// \endcode
5977     TPL_TemplateTemplateParmMatch,
5978 
5979     /// \brief We are matching the template parameter lists of a template
5980     /// template argument against the template parameter lists of a template
5981     /// template parameter.
5982     ///
5983     /// \code
5984     /// template<template<int Value> class Metafun> struct X;
5985     /// template<int Value> struct integer_c;
5986     /// X<integer_c> xic;
5987     /// \endcode
5988     TPL_TemplateTemplateArgumentMatch
5989   };
5990 
5991   bool TemplateParameterListsAreEqual(TemplateParameterList *New,
5992                                       TemplateParameterList *Old,
5993                                       bool Complain,
5994                                       TemplateParameterListEqualKind Kind,
5995                                       SourceLocation TemplateArgLoc
5996                                         = SourceLocation());
5997 
5998   bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams);
5999 
6000   /// \brief Called when the parser has parsed a C++ typename
6001   /// specifier, e.g., "typename T::type".
6002   ///
6003   /// \param S The scope in which this typename type occurs.
6004   /// \param TypenameLoc the location of the 'typename' keyword
6005   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
6006   /// \param II the identifier we're retrieving (e.g., 'type' in the example).
6007   /// \param IdLoc the location of the identifier.
6008   TypeResult
6009   ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
6010                     const CXXScopeSpec &SS, const IdentifierInfo &II,
6011                     SourceLocation IdLoc);
6012 
6013   /// \brief Called when the parser has parsed a C++ typename
6014   /// specifier that ends in a template-id, e.g.,
6015   /// "typename MetaFun::template apply<T1, T2>".
6016   ///
6017   /// \param S The scope in which this typename type occurs.
6018   /// \param TypenameLoc the location of the 'typename' keyword
6019   /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
6020   /// \param TemplateLoc the location of the 'template' keyword, if any.
6021   /// \param TemplateName The template name.
6022   /// \param TemplateNameLoc The location of the template name.
6023   /// \param LAngleLoc The location of the opening angle bracket  ('<').
6024   /// \param TemplateArgs The template arguments.
6025   /// \param RAngleLoc The location of the closing angle bracket  ('>').
6026   TypeResult
6027   ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
6028                     const CXXScopeSpec &SS,
6029                     SourceLocation TemplateLoc,
6030                     TemplateTy TemplateName,
6031                     SourceLocation TemplateNameLoc,
6032                     SourceLocation LAngleLoc,
6033                     ASTTemplateArgsPtr TemplateArgs,
6034                     SourceLocation RAngleLoc);
6035 
6036   QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
6037                              SourceLocation KeywordLoc,
6038                              NestedNameSpecifierLoc QualifierLoc,
6039                              const IdentifierInfo &II,
6040                              SourceLocation IILoc);
6041 
6042   TypeSourceInfo *RebuildTypeInCurrentInstantiation(TypeSourceInfo *T,
6043                                                     SourceLocation Loc,
6044                                                     DeclarationName Name);
6045   bool RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS);
6046 
6047   ExprResult RebuildExprInCurrentInstantiation(Expr *E);
6048   bool RebuildTemplateParamsInCurrentInstantiation(
6049                                                 TemplateParameterList *Params);
6050 
6051   std::string
6052   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
6053                                   const TemplateArgumentList &Args);
6054 
6055   std::string
6056   getTemplateArgumentBindingsText(const TemplateParameterList *Params,
6057                                   const TemplateArgument *Args,
6058                                   unsigned NumArgs);
6059 
6060   //===--------------------------------------------------------------------===//
6061   // C++ Variadic Templates (C++0x [temp.variadic])
6062   //===--------------------------------------------------------------------===//
6063 
6064   /// Determine whether an unexpanded parameter pack might be permitted in this
6065   /// location. Useful for error recovery.
6066   bool isUnexpandedParameterPackPermitted();
6067 
6068   /// \brief The context in which an unexpanded parameter pack is
6069   /// being diagnosed.
6070   ///
6071   /// Note that the values of this enumeration line up with the first
6072   /// argument to the \c err_unexpanded_parameter_pack diagnostic.
6073   enum UnexpandedParameterPackContext {
6074     /// \brief An arbitrary expression.
6075     UPPC_Expression = 0,
6076 
6077     /// \brief The base type of a class type.
6078     UPPC_BaseType,
6079 
6080     /// \brief The type of an arbitrary declaration.
6081     UPPC_DeclarationType,
6082 
6083     /// \brief The type of a data member.
6084     UPPC_DataMemberType,
6085 
6086     /// \brief The size of a bit-field.
6087     UPPC_BitFieldWidth,
6088 
6089     /// \brief The expression in a static assertion.
6090     UPPC_StaticAssertExpression,
6091 
6092     /// \brief The fixed underlying type of an enumeration.
6093     UPPC_FixedUnderlyingType,
6094 
6095     /// \brief The enumerator value.
6096     UPPC_EnumeratorValue,
6097 
6098     /// \brief A using declaration.
6099     UPPC_UsingDeclaration,
6100 
6101     /// \brief A friend declaration.
6102     UPPC_FriendDeclaration,
6103 
6104     /// \brief A declaration qualifier.
6105     UPPC_DeclarationQualifier,
6106 
6107     /// \brief An initializer.
6108     UPPC_Initializer,
6109 
6110     /// \brief A default argument.
6111     UPPC_DefaultArgument,
6112 
6113     /// \brief The type of a non-type template parameter.
6114     UPPC_NonTypeTemplateParameterType,
6115 
6116     /// \brief The type of an exception.
6117     UPPC_ExceptionType,
6118 
6119     /// \brief Partial specialization.
6120     UPPC_PartialSpecialization,
6121 
6122     /// \brief Microsoft __if_exists.
6123     UPPC_IfExists,
6124 
6125     /// \brief Microsoft __if_not_exists.
6126     UPPC_IfNotExists,
6127 
6128     /// \brief Lambda expression.
6129     UPPC_Lambda,
6130 
6131     /// \brief Block expression,
6132     UPPC_Block
6133   };
6134 
6135   /// \brief Diagnose unexpanded parameter packs.
6136   ///
6137   /// \param Loc The location at which we should emit the diagnostic.
6138   ///
6139   /// \param UPPC The context in which we are diagnosing unexpanded
6140   /// parameter packs.
6141   ///
6142   /// \param Unexpanded the set of unexpanded parameter packs.
6143   ///
6144   /// \returns true if an error occurred, false otherwise.
6145   bool DiagnoseUnexpandedParameterPacks(SourceLocation Loc,
6146                                         UnexpandedParameterPackContext UPPC,
6147                                   ArrayRef<UnexpandedParameterPack> Unexpanded);
6148 
6149   /// \brief If the given type contains an unexpanded parameter pack,
6150   /// diagnose the error.
6151   ///
6152   /// \param Loc The source location where a diagnostc should be emitted.
6153   ///
6154   /// \param T The type that is being checked for unexpanded parameter
6155   /// packs.
6156   ///
6157   /// \returns true if an error occurred, false otherwise.
6158   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T,
6159                                        UnexpandedParameterPackContext UPPC);
6160 
6161   /// \brief If the given expression contains an unexpanded parameter
6162   /// pack, diagnose the error.
6163   ///
6164   /// \param E The expression that is being checked for unexpanded
6165   /// parameter packs.
6166   ///
6167   /// \returns true if an error occurred, false otherwise.
6168   bool DiagnoseUnexpandedParameterPack(Expr *E,
6169                        UnexpandedParameterPackContext UPPC = UPPC_Expression);
6170 
6171   /// \brief If the given nested-name-specifier contains an unexpanded
6172   /// parameter pack, diagnose the error.
6173   ///
6174   /// \param SS The nested-name-specifier that is being checked for
6175   /// unexpanded parameter packs.
6176   ///
6177   /// \returns true if an error occurred, false otherwise.
6178   bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS,
6179                                        UnexpandedParameterPackContext UPPC);
6180 
6181   /// \brief If the given name contains an unexpanded parameter pack,
6182   /// diagnose the error.
6183   ///
6184   /// \param NameInfo The name (with source location information) that
6185   /// is being checked for unexpanded parameter packs.
6186   ///
6187   /// \returns true if an error occurred, false otherwise.
6188   bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo,
6189                                        UnexpandedParameterPackContext UPPC);
6190 
6191   /// \brief If the given template name contains an unexpanded parameter pack,
6192   /// diagnose the error.
6193   ///
6194   /// \param Loc The location of the template name.
6195   ///
6196   /// \param Template The template name that is being checked for unexpanded
6197   /// parameter packs.
6198   ///
6199   /// \returns true if an error occurred, false otherwise.
6200   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc,
6201                                        TemplateName Template,
6202                                        UnexpandedParameterPackContext UPPC);
6203 
6204   /// \brief If the given template argument contains an unexpanded parameter
6205   /// pack, diagnose the error.
6206   ///
6207   /// \param Arg The template argument that is being checked for unexpanded
6208   /// parameter packs.
6209   ///
6210   /// \returns true if an error occurred, false otherwise.
6211   bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg,
6212                                        UnexpandedParameterPackContext UPPC);
6213 
6214   /// \brief Collect the set of unexpanded parameter packs within the given
6215   /// template argument.
6216   ///
6217   /// \param Arg The template argument that will be traversed to find
6218   /// unexpanded parameter packs.
6219   void collectUnexpandedParameterPacks(TemplateArgument Arg,
6220                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6221 
6222   /// \brief Collect the set of unexpanded parameter packs within the given
6223   /// template argument.
6224   ///
6225   /// \param Arg The template argument that will be traversed to find
6226   /// unexpanded parameter packs.
6227   void collectUnexpandedParameterPacks(TemplateArgumentLoc Arg,
6228                     SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6229 
6230   /// \brief Collect the set of unexpanded parameter packs within the given
6231   /// type.
6232   ///
6233   /// \param T The type that will be traversed to find
6234   /// unexpanded parameter packs.
6235   void collectUnexpandedParameterPacks(QualType T,
6236                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6237 
6238   /// \brief Collect the set of unexpanded parameter packs within the given
6239   /// type.
6240   ///
6241   /// \param TL The type that will be traversed to find
6242   /// unexpanded parameter packs.
6243   void collectUnexpandedParameterPacks(TypeLoc TL,
6244                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6245 
6246   /// \brief Collect the set of unexpanded parameter packs within the given
6247   /// nested-name-specifier.
6248   ///
6249   /// \param SS The nested-name-specifier that will be traversed to find
6250   /// unexpanded parameter packs.
6251   void collectUnexpandedParameterPacks(CXXScopeSpec &SS,
6252                          SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6253 
6254   /// \brief Collect the set of unexpanded parameter packs within the given
6255   /// name.
6256   ///
6257   /// \param NameInfo The name that will be traversed to find
6258   /// unexpanded parameter packs.
6259   void collectUnexpandedParameterPacks(const DeclarationNameInfo &NameInfo,
6260                          SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6261 
6262   /// \brief Invoked when parsing a template argument followed by an
6263   /// ellipsis, which creates a pack expansion.
6264   ///
6265   /// \param Arg The template argument preceding the ellipsis, which
6266   /// may already be invalid.
6267   ///
6268   /// \param EllipsisLoc The location of the ellipsis.
6269   ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg,
6270                                             SourceLocation EllipsisLoc);
6271 
6272   /// \brief Invoked when parsing a type followed by an ellipsis, which
6273   /// creates a pack expansion.
6274   ///
6275   /// \param Type The type preceding the ellipsis, which will become
6276   /// the pattern of the pack expansion.
6277   ///
6278   /// \param EllipsisLoc The location of the ellipsis.
6279   TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc);
6280 
6281   /// \brief Construct a pack expansion type from the pattern of the pack
6282   /// expansion.
6283   TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern,
6284                                      SourceLocation EllipsisLoc,
6285                                      Optional<unsigned> NumExpansions);
6286 
6287   /// \brief Construct a pack expansion type from the pattern of the pack
6288   /// expansion.
6289   QualType CheckPackExpansion(QualType Pattern,
6290                               SourceRange PatternRange,
6291                               SourceLocation EllipsisLoc,
6292                               Optional<unsigned> NumExpansions);
6293 
6294   /// \brief Invoked when parsing an expression followed by an ellipsis, which
6295   /// creates a pack expansion.
6296   ///
6297   /// \param Pattern The expression preceding the ellipsis, which will become
6298   /// the pattern of the pack expansion.
6299   ///
6300   /// \param EllipsisLoc The location of the ellipsis.
6301   ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc);
6302 
6303   /// \brief Invoked when parsing an expression followed by an ellipsis, which
6304   /// creates a pack expansion.
6305   ///
6306   /// \param Pattern The expression preceding the ellipsis, which will become
6307   /// the pattern of the pack expansion.
6308   ///
6309   /// \param EllipsisLoc The location of the ellipsis.
6310   ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc,
6311                                 Optional<unsigned> NumExpansions);
6312 
6313   /// \brief Determine whether we could expand a pack expansion with the
6314   /// given set of parameter packs into separate arguments by repeatedly
6315   /// transforming the pattern.
6316   ///
6317   /// \param EllipsisLoc The location of the ellipsis that identifies the
6318   /// pack expansion.
6319   ///
6320   /// \param PatternRange The source range that covers the entire pattern of
6321   /// the pack expansion.
6322   ///
6323   /// \param Unexpanded The set of unexpanded parameter packs within the
6324   /// pattern.
6325   ///
6326   /// \param ShouldExpand Will be set to \c true if the transformer should
6327   /// expand the corresponding pack expansions into separate arguments. When
6328   /// set, \c NumExpansions must also be set.
6329   ///
6330   /// \param RetainExpansion Whether the caller should add an unexpanded
6331   /// pack expansion after all of the expanded arguments. This is used
6332   /// when extending explicitly-specified template argument packs per
6333   /// C++0x [temp.arg.explicit]p9.
6334   ///
6335   /// \param NumExpansions The number of separate arguments that will be in
6336   /// the expanded form of the corresponding pack expansion. This is both an
6337   /// input and an output parameter, which can be set by the caller if the
6338   /// number of expansions is known a priori (e.g., due to a prior substitution)
6339   /// and will be set by the callee when the number of expansions is known.
6340   /// The callee must set this value when \c ShouldExpand is \c true; it may
6341   /// set this value in other cases.
6342   ///
6343   /// \returns true if an error occurred (e.g., because the parameter packs
6344   /// are to be instantiated with arguments of different lengths), false
6345   /// otherwise. If false, \c ShouldExpand (and possibly \c NumExpansions)
6346   /// must be set.
6347   bool CheckParameterPacksForExpansion(SourceLocation EllipsisLoc,
6348                                        SourceRange PatternRange,
6349                              ArrayRef<UnexpandedParameterPack> Unexpanded,
6350                              const MultiLevelTemplateArgumentList &TemplateArgs,
6351                                        bool &ShouldExpand,
6352                                        bool &RetainExpansion,
6353                                        Optional<unsigned> &NumExpansions);
6354 
6355   /// \brief Determine the number of arguments in the given pack expansion
6356   /// type.
6357   ///
6358   /// This routine assumes that the number of arguments in the expansion is
6359   /// consistent across all of the unexpanded parameter packs in its pattern.
6360   ///
6361   /// Returns an empty Optional if the type can't be expanded.
6362   Optional<unsigned> getNumArgumentsInExpansion(QualType T,
6363       const MultiLevelTemplateArgumentList &TemplateArgs);
6364 
6365   /// \brief Determine whether the given declarator contains any unexpanded
6366   /// parameter packs.
6367   ///
6368   /// This routine is used by the parser to disambiguate function declarators
6369   /// with an ellipsis prior to the ')', e.g.,
6370   ///
6371   /// \code
6372   ///   void f(T...);
6373   /// \endcode
6374   ///
6375   /// To determine whether we have an (unnamed) function parameter pack or
6376   /// a variadic function.
6377   ///
6378   /// \returns true if the declarator contains any unexpanded parameter packs,
6379   /// false otherwise.
6380   bool containsUnexpandedParameterPacks(Declarator &D);
6381 
6382   /// \brief Returns the pattern of the pack expansion for a template argument.
6383   ///
6384   /// \param OrigLoc The template argument to expand.
6385   ///
6386   /// \param Ellipsis Will be set to the location of the ellipsis.
6387   ///
6388   /// \param NumExpansions Will be set to the number of expansions that will
6389   /// be generated from this pack expansion, if known a priori.
6390   TemplateArgumentLoc getTemplateArgumentPackExpansionPattern(
6391       TemplateArgumentLoc OrigLoc,
6392       SourceLocation &Ellipsis,
6393       Optional<unsigned> &NumExpansions) const;
6394 
6395   //===--------------------------------------------------------------------===//
6396   // C++ Template Argument Deduction (C++ [temp.deduct])
6397   //===--------------------------------------------------------------------===//
6398 
6399   QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType);
6400 
6401   /// \brief Describes the result of template argument deduction.
6402   ///
6403   /// The TemplateDeductionResult enumeration describes the result of
6404   /// template argument deduction, as returned from
6405   /// DeduceTemplateArguments(). The separate TemplateDeductionInfo
6406   /// structure provides additional information about the results of
6407   /// template argument deduction, e.g., the deduced template argument
6408   /// list (if successful) or the specific template parameters or
6409   /// deduced arguments that were involved in the failure.
6410   enum TemplateDeductionResult {
6411     /// \brief Template argument deduction was successful.
6412     TDK_Success = 0,
6413     /// \brief The declaration was invalid; do nothing.
6414     TDK_Invalid,
6415     /// \brief Template argument deduction exceeded the maximum template
6416     /// instantiation depth (which has already been diagnosed).
6417     TDK_InstantiationDepth,
6418     /// \brief Template argument deduction did not deduce a value
6419     /// for every template parameter.
6420     TDK_Incomplete,
6421     /// \brief Template argument deduction produced inconsistent
6422     /// deduced values for the given template parameter.
6423     TDK_Inconsistent,
6424     /// \brief Template argument deduction failed due to inconsistent
6425     /// cv-qualifiers on a template parameter type that would
6426     /// otherwise be deduced, e.g., we tried to deduce T in "const T"
6427     /// but were given a non-const "X".
6428     TDK_Underqualified,
6429     /// \brief Substitution of the deduced template argument values
6430     /// resulted in an error.
6431     TDK_SubstitutionFailure,
6432     /// \brief After substituting deduced template arguments, a dependent
6433     /// parameter type did not match the corresponding argument.
6434     TDK_DeducedMismatch,
6435     /// \brief A non-depnedent component of the parameter did not match the
6436     /// corresponding component of the argument.
6437     TDK_NonDeducedMismatch,
6438     /// \brief When performing template argument deduction for a function
6439     /// template, there were too many call arguments.
6440     TDK_TooManyArguments,
6441     /// \brief When performing template argument deduction for a function
6442     /// template, there were too few call arguments.
6443     TDK_TooFewArguments,
6444     /// \brief The explicitly-specified template arguments were not valid
6445     /// template arguments for the given template.
6446     TDK_InvalidExplicitArguments,
6447     /// \brief The arguments included an overloaded function name that could
6448     /// not be resolved to a suitable function.
6449     TDK_FailedOverloadResolution,
6450     /// \brief Deduction failed; that's all we know.
6451     TDK_MiscellaneousDeductionFailure
6452   };
6453 
6454   TemplateDeductionResult
6455   DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
6456                           const TemplateArgumentList &TemplateArgs,
6457                           sema::TemplateDeductionInfo &Info);
6458 
6459   TemplateDeductionResult
6460   DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial,
6461                           const TemplateArgumentList &TemplateArgs,
6462                           sema::TemplateDeductionInfo &Info);
6463 
6464   TemplateDeductionResult SubstituteExplicitTemplateArguments(
6465       FunctionTemplateDecl *FunctionTemplate,
6466       TemplateArgumentListInfo &ExplicitTemplateArgs,
6467       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
6468       SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType,
6469       sema::TemplateDeductionInfo &Info);
6470 
6471   /// brief A function argument from which we performed template argument
6472   // deduction for a call.
6473   struct OriginalCallArg {
OriginalCallArgOriginalCallArg6474     OriginalCallArg(QualType OriginalParamType,
6475                     unsigned ArgIdx,
6476                     QualType OriginalArgType)
6477       : OriginalParamType(OriginalParamType), ArgIdx(ArgIdx),
6478         OriginalArgType(OriginalArgType) { }
6479 
6480     QualType OriginalParamType;
6481     unsigned ArgIdx;
6482     QualType OriginalArgType;
6483   };
6484 
6485   TemplateDeductionResult
6486   FinishTemplateArgumentDeduction(FunctionTemplateDecl *FunctionTemplate,
6487                       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
6488                                   unsigned NumExplicitlySpecified,
6489                                   FunctionDecl *&Specialization,
6490                                   sema::TemplateDeductionInfo &Info,
6491            SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs = nullptr,
6492                                   bool PartialOverloading = false);
6493 
6494   TemplateDeductionResult
6495   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
6496                           TemplateArgumentListInfo *ExplicitTemplateArgs,
6497                           ArrayRef<Expr *> Args,
6498                           FunctionDecl *&Specialization,
6499                           sema::TemplateDeductionInfo &Info,
6500                           bool PartialOverloading = false);
6501 
6502   TemplateDeductionResult
6503   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
6504                           TemplateArgumentListInfo *ExplicitTemplateArgs,
6505                           QualType ArgFunctionType,
6506                           FunctionDecl *&Specialization,
6507                           sema::TemplateDeductionInfo &Info,
6508                           bool InOverloadResolution = false);
6509 
6510   TemplateDeductionResult
6511   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
6512                           QualType ToType,
6513                           CXXConversionDecl *&Specialization,
6514                           sema::TemplateDeductionInfo &Info);
6515 
6516   TemplateDeductionResult
6517   DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
6518                           TemplateArgumentListInfo *ExplicitTemplateArgs,
6519                           FunctionDecl *&Specialization,
6520                           sema::TemplateDeductionInfo &Info,
6521                           bool InOverloadResolution = false);
6522 
6523   /// \brief Substitute Replacement for \p auto in \p TypeWithAuto
6524   QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement);
6525   /// \brief Substitute Replacement for auto in TypeWithAuto
6526   TypeSourceInfo* SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
6527                                           QualType Replacement);
6528 
6529   /// \brief Result type of DeduceAutoType.
6530   enum DeduceAutoResult {
6531     DAR_Succeeded,
6532     DAR_Failed,
6533     DAR_FailedAlreadyDiagnosed
6534   };
6535 
6536   DeduceAutoResult DeduceAutoType(TypeSourceInfo *AutoType, Expr *&Initializer,
6537                                   QualType &Result);
6538   DeduceAutoResult DeduceAutoType(TypeLoc AutoTypeLoc, Expr *&Initializer,
6539                                   QualType &Result);
6540   void DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init);
6541   bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc,
6542                         bool Diagnose = true);
6543 
6544   QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name,
6545                                         QualType Type, TypeSourceInfo *TSI,
6546                                         SourceRange Range, bool DirectInit,
6547                                         Expr *Init);
6548 
6549   TypeLoc getReturnTypeLoc(FunctionDecl *FD) const;
6550 
6551   bool DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD,
6552                                         SourceLocation ReturnLoc,
6553                                         Expr *&RetExpr, AutoType *AT);
6554 
6555   FunctionTemplateDecl *getMoreSpecializedTemplate(FunctionTemplateDecl *FT1,
6556                                                    FunctionTemplateDecl *FT2,
6557                                                    SourceLocation Loc,
6558                                            TemplatePartialOrderingContext TPOC,
6559                                                    unsigned NumCallArguments1,
6560                                                    unsigned NumCallArguments2);
6561   UnresolvedSetIterator
6562   getMostSpecialized(UnresolvedSetIterator SBegin, UnresolvedSetIterator SEnd,
6563                      TemplateSpecCandidateSet &FailedCandidates,
6564                      SourceLocation Loc,
6565                      const PartialDiagnostic &NoneDiag,
6566                      const PartialDiagnostic &AmbigDiag,
6567                      const PartialDiagnostic &CandidateDiag,
6568                      bool Complain = true, QualType TargetType = QualType());
6569 
6570   ClassTemplatePartialSpecializationDecl *
6571   getMoreSpecializedPartialSpecialization(
6572                                   ClassTemplatePartialSpecializationDecl *PS1,
6573                                   ClassTemplatePartialSpecializationDecl *PS2,
6574                                   SourceLocation Loc);
6575 
6576   VarTemplatePartialSpecializationDecl *getMoreSpecializedPartialSpecialization(
6577       VarTemplatePartialSpecializationDecl *PS1,
6578       VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc);
6579 
6580   void MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs,
6581                                   bool OnlyDeduced,
6582                                   unsigned Depth,
6583                                   llvm::SmallBitVector &Used);
MarkDeducedTemplateParameters(const FunctionTemplateDecl * FunctionTemplate,llvm::SmallBitVector & Deduced)6584   void MarkDeducedTemplateParameters(
6585                                   const FunctionTemplateDecl *FunctionTemplate,
6586                                   llvm::SmallBitVector &Deduced) {
6587     return MarkDeducedTemplateParameters(Context, FunctionTemplate, Deduced);
6588   }
6589   static void MarkDeducedTemplateParameters(ASTContext &Ctx,
6590                                   const FunctionTemplateDecl *FunctionTemplate,
6591                                   llvm::SmallBitVector &Deduced);
6592 
6593   //===--------------------------------------------------------------------===//
6594   // C++ Template Instantiation
6595   //
6596 
6597   MultiLevelTemplateArgumentList
6598   getTemplateInstantiationArgs(NamedDecl *D,
6599                                const TemplateArgumentList *Innermost = nullptr,
6600                                bool RelativeToPrimary = false,
6601                                const FunctionDecl *Pattern = nullptr);
6602 
6603   /// \brief A template instantiation that is currently in progress.
6604   struct ActiveTemplateInstantiation {
6605     /// \brief The kind of template instantiation we are performing
6606     enum InstantiationKind {
6607       /// We are instantiating a template declaration. The entity is
6608       /// the declaration we're instantiating (e.g., a CXXRecordDecl).
6609       TemplateInstantiation,
6610 
6611       /// We are instantiating a default argument for a template
6612       /// parameter. The Entity is the template, and
6613       /// TemplateArgs/NumTemplateArguments provides the template
6614       /// arguments as specified.
6615       /// FIXME: Use a TemplateArgumentList
6616       DefaultTemplateArgumentInstantiation,
6617 
6618       /// We are instantiating a default argument for a function.
6619       /// The Entity is the ParmVarDecl, and TemplateArgs/NumTemplateArgs
6620       /// provides the template arguments as specified.
6621       DefaultFunctionArgumentInstantiation,
6622 
6623       /// We are substituting explicit template arguments provided for
6624       /// a function template. The entity is a FunctionTemplateDecl.
6625       ExplicitTemplateArgumentSubstitution,
6626 
6627       /// We are substituting template argument determined as part of
6628       /// template argument deduction for either a class template
6629       /// partial specialization or a function template. The
6630       /// Entity is either a ClassTemplatePartialSpecializationDecl or
6631       /// a FunctionTemplateDecl.
6632       DeducedTemplateArgumentSubstitution,
6633 
6634       /// We are substituting prior template arguments into a new
6635       /// template parameter. The template parameter itself is either a
6636       /// NonTypeTemplateParmDecl or a TemplateTemplateParmDecl.
6637       PriorTemplateArgumentSubstitution,
6638 
6639       /// We are checking the validity of a default template argument that
6640       /// has been used when naming a template-id.
6641       DefaultTemplateArgumentChecking,
6642 
6643       /// We are instantiating the exception specification for a function
6644       /// template which was deferred until it was needed.
6645       ExceptionSpecInstantiation
6646     } Kind;
6647 
6648     /// \brief The point of instantiation within the source code.
6649     SourceLocation PointOfInstantiation;
6650 
6651     /// \brief The template (or partial specialization) in which we are
6652     /// performing the instantiation, for substitutions of prior template
6653     /// arguments.
6654     NamedDecl *Template;
6655 
6656     /// \brief The entity that is being instantiated.
6657     Decl *Entity;
6658 
6659     /// \brief The list of template arguments we are substituting, if they
6660     /// are not part of the entity.
6661     const TemplateArgument *TemplateArgs;
6662 
6663     /// \brief The number of template arguments in TemplateArgs.
6664     unsigned NumTemplateArgs;
6665 
template_argumentsActiveTemplateInstantiation6666     ArrayRef<TemplateArgument> template_arguments() const {
6667       return {TemplateArgs, NumTemplateArgs};
6668     }
6669 
6670     /// \brief The template deduction info object associated with the
6671     /// substitution or checking of explicit or deduced template arguments.
6672     sema::TemplateDeductionInfo *DeductionInfo;
6673 
6674     /// \brief The source range that covers the construct that cause
6675     /// the instantiation, e.g., the template-id that causes a class
6676     /// template instantiation.
6677     SourceRange InstantiationRange;
6678 
ActiveTemplateInstantiationActiveTemplateInstantiation6679     ActiveTemplateInstantiation()
6680       : Kind(TemplateInstantiation), Template(nullptr), Entity(nullptr),
6681         TemplateArgs(nullptr), NumTemplateArgs(0), DeductionInfo(nullptr) {}
6682 
6683     /// \brief Determines whether this template is an actual instantiation
6684     /// that should be counted toward the maximum instantiation depth.
6685     bool isInstantiationRecord() const;
6686 
6687     friend bool operator==(const ActiveTemplateInstantiation &X,
6688                            const ActiveTemplateInstantiation &Y) {
6689       if (X.Kind != Y.Kind)
6690         return false;
6691 
6692       if (X.Entity != Y.Entity)
6693         return false;
6694 
6695       switch (X.Kind) {
6696       case TemplateInstantiation:
6697       case ExceptionSpecInstantiation:
6698         return true;
6699 
6700       case PriorTemplateArgumentSubstitution:
6701       case DefaultTemplateArgumentChecking:
6702         return X.Template == Y.Template && X.TemplateArgs == Y.TemplateArgs;
6703 
6704       case DefaultTemplateArgumentInstantiation:
6705       case ExplicitTemplateArgumentSubstitution:
6706       case DeducedTemplateArgumentSubstitution:
6707       case DefaultFunctionArgumentInstantiation:
6708         return X.TemplateArgs == Y.TemplateArgs;
6709 
6710       }
6711 
6712       llvm_unreachable("Invalid InstantiationKind!");
6713     }
6714 
6715     friend bool operator!=(const ActiveTemplateInstantiation &X,
6716                            const ActiveTemplateInstantiation &Y) {
6717       return !(X == Y);
6718     }
6719   };
6720 
6721   /// \brief List of active template instantiations.
6722   ///
6723   /// This vector is treated as a stack. As one template instantiation
6724   /// requires another template instantiation, additional
6725   /// instantiations are pushed onto the stack up to a
6726   /// user-configurable limit LangOptions::InstantiationDepth.
6727   SmallVector<ActiveTemplateInstantiation, 16>
6728     ActiveTemplateInstantiations;
6729 
6730   /// \brief Extra modules inspected when performing a lookup during a template
6731   /// instantiation. Computed lazily.
6732   SmallVector<Module*, 16> ActiveTemplateInstantiationLookupModules;
6733 
6734   /// \brief Cache of additional modules that should be used for name lookup
6735   /// within the current template instantiation. Computed lazily; use
6736   /// getLookupModules() to get a complete set.
6737   llvm::DenseSet<Module*> LookupModulesCache;
6738 
6739   /// \brief Get the set of additional modules that should be checked during
6740   /// name lookup. A module and its imports become visible when instanting a
6741   /// template defined within it.
6742   llvm::DenseSet<Module*> &getLookupModules();
6743 
6744   /// \brief Map from the most recent declaration of a namespace to the most
6745   /// recent visible declaration of that namespace.
6746   llvm::DenseMap<NamedDecl*, NamedDecl*> VisibleNamespaceCache;
6747 
6748   /// \brief Whether we are in a SFINAE context that is not associated with
6749   /// template instantiation.
6750   ///
6751   /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside
6752   /// of a template instantiation or template argument deduction.
6753   bool InNonInstantiationSFINAEContext;
6754 
6755   /// \brief The number of ActiveTemplateInstantiation entries in
6756   /// \c ActiveTemplateInstantiations that are not actual instantiations and,
6757   /// therefore, should not be counted as part of the instantiation depth.
6758   unsigned NonInstantiationEntries;
6759 
6760   /// \brief The last template from which a template instantiation
6761   /// error or warning was produced.
6762   ///
6763   /// This value is used to suppress printing of redundant template
6764   /// instantiation backtraces when there are multiple errors in the
6765   /// same instantiation. FIXME: Does this belong in Sema? It's tough
6766   /// to implement it anywhere else.
6767   ActiveTemplateInstantiation LastTemplateInstantiationErrorContext;
6768 
6769   /// \brief The current index into pack expansion arguments that will be
6770   /// used for substitution of parameter packs.
6771   ///
6772   /// The pack expansion index will be -1 to indicate that parameter packs
6773   /// should be instantiated as themselves. Otherwise, the index specifies
6774   /// which argument within the parameter pack will be used for substitution.
6775   int ArgumentPackSubstitutionIndex;
6776 
6777   /// \brief RAII object used to change the argument pack substitution index
6778   /// within a \c Sema object.
6779   ///
6780   /// See \c ArgumentPackSubstitutionIndex for more information.
6781   class ArgumentPackSubstitutionIndexRAII {
6782     Sema &Self;
6783     int OldSubstitutionIndex;
6784 
6785   public:
ArgumentPackSubstitutionIndexRAII(Sema & Self,int NewSubstitutionIndex)6786     ArgumentPackSubstitutionIndexRAII(Sema &Self, int NewSubstitutionIndex)
6787       : Self(Self), OldSubstitutionIndex(Self.ArgumentPackSubstitutionIndex) {
6788       Self.ArgumentPackSubstitutionIndex = NewSubstitutionIndex;
6789     }
6790 
~ArgumentPackSubstitutionIndexRAII()6791     ~ArgumentPackSubstitutionIndexRAII() {
6792       Self.ArgumentPackSubstitutionIndex = OldSubstitutionIndex;
6793     }
6794   };
6795 
6796   friend class ArgumentPackSubstitutionRAII;
6797 
6798   /// \brief For each declaration that involved template argument deduction, the
6799   /// set of diagnostics that were suppressed during that template argument
6800   /// deduction.
6801   ///
6802   /// FIXME: Serialize this structure to the AST file.
6803   typedef llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1> >
6804     SuppressedDiagnosticsMap;
6805   SuppressedDiagnosticsMap SuppressedDiagnostics;
6806 
6807   /// \brief A stack object to be created when performing template
6808   /// instantiation.
6809   ///
6810   /// Construction of an object of type \c InstantiatingTemplate
6811   /// pushes the current instantiation onto the stack of active
6812   /// instantiations. If the size of this stack exceeds the maximum
6813   /// number of recursive template instantiations, construction
6814   /// produces an error and evaluates true.
6815   ///
6816   /// Destruction of this object will pop the named instantiation off
6817   /// the stack.
6818   struct InstantiatingTemplate {
6819     /// \brief Note that we are instantiating a class template,
6820     /// function template, variable template, alias template,
6821     /// or a member thereof.
6822     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6823                           Decl *Entity,
6824                           SourceRange InstantiationRange = SourceRange());
6825 
6826     struct ExceptionSpecification {};
6827     /// \brief Note that we are instantiating an exception specification
6828     /// of a function template.
6829     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6830                           FunctionDecl *Entity, ExceptionSpecification,
6831                           SourceRange InstantiationRange = SourceRange());
6832 
6833     /// \brief Note that we are instantiating a default argument in a
6834     /// template-id.
6835     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6836                           TemplateDecl *Template,
6837                           ArrayRef<TemplateArgument> TemplateArgs,
6838                           SourceRange InstantiationRange = SourceRange());
6839 
6840     /// \brief Note that we are instantiating a default argument in a
6841     /// template-id.
6842     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6843                           FunctionTemplateDecl *FunctionTemplate,
6844                           ArrayRef<TemplateArgument> TemplateArgs,
6845                           ActiveTemplateInstantiation::InstantiationKind Kind,
6846                           sema::TemplateDeductionInfo &DeductionInfo,
6847                           SourceRange InstantiationRange = SourceRange());
6848 
6849     /// \brief Note that we are instantiating as part of template
6850     /// argument deduction for a class template partial
6851     /// specialization.
6852     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6853                           ClassTemplatePartialSpecializationDecl *PartialSpec,
6854                           ArrayRef<TemplateArgument> TemplateArgs,
6855                           sema::TemplateDeductionInfo &DeductionInfo,
6856                           SourceRange InstantiationRange = SourceRange());
6857 
6858     /// \brief Note that we are instantiating as part of template
6859     /// argument deduction for a variable template partial
6860     /// specialization.
6861     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6862                           VarTemplatePartialSpecializationDecl *PartialSpec,
6863                           ArrayRef<TemplateArgument> TemplateArgs,
6864                           sema::TemplateDeductionInfo &DeductionInfo,
6865                           SourceRange InstantiationRange = SourceRange());
6866 
6867     /// \brief Note that we are instantiating a default argument for a function
6868     /// parameter.
6869     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6870                           ParmVarDecl *Param,
6871                           ArrayRef<TemplateArgument> TemplateArgs,
6872                           SourceRange InstantiationRange = SourceRange());
6873 
6874     /// \brief Note that we are substituting prior template arguments into a
6875     /// non-type parameter.
6876     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6877                           NamedDecl *Template,
6878                           NonTypeTemplateParmDecl *Param,
6879                           ArrayRef<TemplateArgument> TemplateArgs,
6880                           SourceRange InstantiationRange);
6881 
6882     /// \brief Note that we are substituting prior template arguments into a
6883     /// template template parameter.
6884     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6885                           NamedDecl *Template,
6886                           TemplateTemplateParmDecl *Param,
6887                           ArrayRef<TemplateArgument> TemplateArgs,
6888                           SourceRange InstantiationRange);
6889 
6890     /// \brief Note that we are checking the default template argument
6891     /// against the template parameter for a given template-id.
6892     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
6893                           TemplateDecl *Template,
6894                           NamedDecl *Param,
6895                           ArrayRef<TemplateArgument> TemplateArgs,
6896                           SourceRange InstantiationRange);
6897 
6898 
6899     /// \brief Note that we have finished instantiating this template.
6900     void Clear();
6901 
~InstantiatingTemplateInstantiatingTemplate6902     ~InstantiatingTemplate() { Clear(); }
6903 
6904     /// \brief Determines whether we have exceeded the maximum
6905     /// recursive template instantiations.
isInvalidInstantiatingTemplate6906     bool isInvalid() const { return Invalid; }
6907 
6908   private:
6909     Sema &SemaRef;
6910     bool Invalid;
6911     bool SavedInNonInstantiationSFINAEContext;
6912     bool CheckInstantiationDepth(SourceLocation PointOfInstantiation,
6913                                  SourceRange InstantiationRange);
6914 
6915     InstantiatingTemplate(
6916         Sema &SemaRef, ActiveTemplateInstantiation::InstantiationKind Kind,
6917         SourceLocation PointOfInstantiation, SourceRange InstantiationRange,
6918         Decl *Entity, NamedDecl *Template = nullptr,
6919         ArrayRef<TemplateArgument> TemplateArgs = None,
6920         sema::TemplateDeductionInfo *DeductionInfo = nullptr);
6921 
6922     InstantiatingTemplate(const InstantiatingTemplate&) = delete;
6923 
6924     InstantiatingTemplate&
6925     operator=(const InstantiatingTemplate&) = delete;
6926   };
6927 
6928   void PrintInstantiationStack();
6929 
6930   /// \brief Determines whether we are currently in a context where
6931   /// template argument substitution failures are not considered
6932   /// errors.
6933   ///
6934   /// \returns An empty \c Optional if we're not in a SFINAE context.
6935   /// Otherwise, contains a pointer that, if non-NULL, contains the nearest
6936   /// template-deduction context object, which can be used to capture
6937   /// diagnostics that will be suppressed.
6938   Optional<sema::TemplateDeductionInfo *> isSFINAEContext() const;
6939 
6940   /// \brief Determines whether we are currently in a context that
6941   /// is not evaluated as per C++ [expr] p5.
isUnevaluatedContext()6942   bool isUnevaluatedContext() const {
6943     assert(!ExprEvalContexts.empty() &&
6944            "Must be in an expression evaluation context");
6945     return ExprEvalContexts.back().isUnevaluated();
6946   }
6947 
6948   /// \brief RAII class used to determine whether SFINAE has
6949   /// trapped any errors that occur during template argument
6950   /// deduction.
6951   class SFINAETrap {
6952     Sema &SemaRef;
6953     unsigned PrevSFINAEErrors;
6954     bool PrevInNonInstantiationSFINAEContext;
6955     bool PrevAccessCheckingSFINAE;
6956 
6957   public:
6958     explicit SFINAETrap(Sema &SemaRef, bool AccessCheckingSFINAE = false)
SemaRef(SemaRef)6959       : SemaRef(SemaRef), PrevSFINAEErrors(SemaRef.NumSFINAEErrors),
6960         PrevInNonInstantiationSFINAEContext(
6961                                       SemaRef.InNonInstantiationSFINAEContext),
6962         PrevAccessCheckingSFINAE(SemaRef.AccessCheckingSFINAE)
6963     {
6964       if (!SemaRef.isSFINAEContext())
6965         SemaRef.InNonInstantiationSFINAEContext = true;
6966       SemaRef.AccessCheckingSFINAE = AccessCheckingSFINAE;
6967     }
6968 
~SFINAETrap()6969     ~SFINAETrap() {
6970       SemaRef.NumSFINAEErrors = PrevSFINAEErrors;
6971       SemaRef.InNonInstantiationSFINAEContext
6972         = PrevInNonInstantiationSFINAEContext;
6973       SemaRef.AccessCheckingSFINAE = PrevAccessCheckingSFINAE;
6974     }
6975 
6976     /// \brief Determine whether any SFINAE errors have been trapped.
hasErrorOccurred()6977     bool hasErrorOccurred() const {
6978       return SemaRef.NumSFINAEErrors > PrevSFINAEErrors;
6979     }
6980   };
6981 
6982   /// \brief RAII class used to indicate that we are performing provisional
6983   /// semantic analysis to determine the validity of a construct, so
6984   /// typo-correction and diagnostics in the immediate context (not within
6985   /// implicitly-instantiated templates) should be suppressed.
6986   class TentativeAnalysisScope {
6987     Sema &SemaRef;
6988     // FIXME: Using a SFINAETrap for this is a hack.
6989     SFINAETrap Trap;
6990     bool PrevDisableTypoCorrection;
6991   public:
TentativeAnalysisScope(Sema & SemaRef)6992     explicit TentativeAnalysisScope(Sema &SemaRef)
6993         : SemaRef(SemaRef), Trap(SemaRef, true),
6994           PrevDisableTypoCorrection(SemaRef.DisableTypoCorrection) {
6995       SemaRef.DisableTypoCorrection = true;
6996     }
~TentativeAnalysisScope()6997     ~TentativeAnalysisScope() {
6998       SemaRef.DisableTypoCorrection = PrevDisableTypoCorrection;
6999     }
7000   };
7001 
7002   /// \brief The current instantiation scope used to store local
7003   /// variables.
7004   LocalInstantiationScope *CurrentInstantiationScope;
7005 
7006   /// \brief Tracks whether we are in a context where typo correction is
7007   /// disabled.
7008   bool DisableTypoCorrection;
7009 
7010   /// \brief The number of typos corrected by CorrectTypo.
7011   unsigned TyposCorrected;
7012 
7013   typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet;
7014   typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations;
7015 
7016   /// \brief A cache containing identifiers for which typo correction failed and
7017   /// their locations, so that repeated attempts to correct an identifier in a
7018   /// given location are ignored if typo correction already failed for it.
7019   IdentifierSourceLocations TypoCorrectionFailures;
7020 
7021   /// \brief Worker object for performing CFG-based warnings.
7022   sema::AnalysisBasedWarnings AnalysisWarnings;
7023   threadSafety::BeforeSet *ThreadSafetyDeclCache;
7024 
7025   /// \brief An entity for which implicit template instantiation is required.
7026   ///
7027   /// The source location associated with the declaration is the first place in
7028   /// the source code where the declaration was "used". It is not necessarily
7029   /// the point of instantiation (which will be either before or after the
7030   /// namespace-scope declaration that triggered this implicit instantiation),
7031   /// However, it is the location that diagnostics should generally refer to,
7032   /// because users will need to know what code triggered the instantiation.
7033   typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation;
7034 
7035   /// \brief The queue of implicit template instantiations that are required
7036   /// but have not yet been performed.
7037   std::deque<PendingImplicitInstantiation> PendingInstantiations;
7038 
7039   class SavePendingInstantiationsAndVTableUsesRAII {
7040   public:
SavePendingInstantiationsAndVTableUsesRAII(Sema & S,bool Enabled)7041     SavePendingInstantiationsAndVTableUsesRAII(Sema &S, bool Enabled)
7042         : S(S), Enabled(Enabled) {
7043       if (!Enabled) return;
7044 
7045       SavedPendingInstantiations.swap(S.PendingInstantiations);
7046       SavedVTableUses.swap(S.VTableUses);
7047     }
7048 
~SavePendingInstantiationsAndVTableUsesRAII()7049     ~SavePendingInstantiationsAndVTableUsesRAII() {
7050       if (!Enabled) return;
7051 
7052       // Restore the set of pending vtables.
7053       assert(S.VTableUses.empty() &&
7054              "VTableUses should be empty before it is discarded.");
7055       S.VTableUses.swap(SavedVTableUses);
7056 
7057       // Restore the set of pending implicit instantiations.
7058       assert(S.PendingInstantiations.empty() &&
7059              "PendingInstantiations should be empty before it is discarded.");
7060       S.PendingInstantiations.swap(SavedPendingInstantiations);
7061     }
7062 
7063   private:
7064     Sema &S;
7065     SmallVector<VTableUse, 16> SavedVTableUses;
7066     std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
7067     bool Enabled;
7068   };
7069 
7070   /// \brief The queue of implicit template instantiations that are required
7071   /// and must be performed within the current local scope.
7072   ///
7073   /// This queue is only used for member functions of local classes in
7074   /// templates, which must be instantiated in the same scope as their
7075   /// enclosing function, so that they can reference function-local
7076   /// types, static variables, enumerators, etc.
7077   std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations;
7078 
7079   class SavePendingLocalImplicitInstantiationsRAII {
7080   public:
SavePendingLocalImplicitInstantiationsRAII(Sema & S)7081     SavePendingLocalImplicitInstantiationsRAII(Sema &S): S(S) {
7082       SavedPendingLocalImplicitInstantiations.swap(
7083           S.PendingLocalImplicitInstantiations);
7084     }
7085 
~SavePendingLocalImplicitInstantiationsRAII()7086     ~SavePendingLocalImplicitInstantiationsRAII() {
7087       assert(S.PendingLocalImplicitInstantiations.empty() &&
7088              "there shouldn't be any pending local implicit instantiations");
7089       SavedPendingLocalImplicitInstantiations.swap(
7090           S.PendingLocalImplicitInstantiations);
7091     }
7092 
7093   private:
7094     Sema &S;
7095     std::deque<PendingImplicitInstantiation>
7096     SavedPendingLocalImplicitInstantiations;
7097   };
7098 
7099   /// A helper class for building up ExtParameterInfos.
7100   class ExtParameterInfoBuilder {
7101     SmallVector<FunctionProtoType::ExtParameterInfo, 16> Infos;
7102     bool HasInteresting = false;
7103 
7104   public:
7105     /// Set the ExtParameterInfo for the parameter at the given index,
7106     ///
set(unsigned index,FunctionProtoType::ExtParameterInfo info)7107     void set(unsigned index, FunctionProtoType::ExtParameterInfo info) {
7108       assert(Infos.size() <= index);
7109       Infos.resize(index);
7110       Infos.push_back(info);
7111 
7112       if (!HasInteresting)
7113         HasInteresting = (info != FunctionProtoType::ExtParameterInfo());
7114     }
7115 
7116     /// Return a pointer (suitable for setting in an ExtProtoInfo) to the
7117     /// ExtParameterInfo array we've built up.
7118     const FunctionProtoType::ExtParameterInfo *
getPointerOrNull(unsigned numParams)7119     getPointerOrNull(unsigned numParams) {
7120       if (!HasInteresting) return nullptr;
7121       Infos.resize(numParams);
7122       return Infos.data();
7123     }
7124   };
7125 
7126   void PerformPendingInstantiations(bool LocalOnly = false);
7127 
7128   TypeSourceInfo *SubstType(TypeSourceInfo *T,
7129                             const MultiLevelTemplateArgumentList &TemplateArgs,
7130                             SourceLocation Loc, DeclarationName Entity);
7131 
7132   QualType SubstType(QualType T,
7133                      const MultiLevelTemplateArgumentList &TemplateArgs,
7134                      SourceLocation Loc, DeclarationName Entity);
7135 
7136   TypeSourceInfo *SubstType(TypeLoc TL,
7137                             const MultiLevelTemplateArgumentList &TemplateArgs,
7138                             SourceLocation Loc, DeclarationName Entity);
7139 
7140   TypeSourceInfo *SubstFunctionDeclType(TypeSourceInfo *T,
7141                             const MultiLevelTemplateArgumentList &TemplateArgs,
7142                                         SourceLocation Loc,
7143                                         DeclarationName Entity,
7144                                         CXXRecordDecl *ThisContext,
7145                                         unsigned ThisTypeQuals);
7146   void SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto,
7147                           const MultiLevelTemplateArgumentList &Args);
7148   ParmVarDecl *SubstParmVarDecl(ParmVarDecl *D,
7149                             const MultiLevelTemplateArgumentList &TemplateArgs,
7150                                 int indexAdjustment,
7151                                 Optional<unsigned> NumExpansions,
7152                                 bool ExpectParameterPack);
7153   bool SubstParmTypes(SourceLocation Loc, ArrayRef<ParmVarDecl *> Params,
7154                       const FunctionProtoType::ExtParameterInfo *ExtParamInfos,
7155                       const MultiLevelTemplateArgumentList &TemplateArgs,
7156                       SmallVectorImpl<QualType> &ParamTypes,
7157                       SmallVectorImpl<ParmVarDecl *> *OutParams,
7158                       ExtParameterInfoBuilder &ParamInfos);
7159   ExprResult SubstExpr(Expr *E,
7160                        const MultiLevelTemplateArgumentList &TemplateArgs);
7161 
7162   /// \brief Substitute the given template arguments into a list of
7163   /// expressions, expanding pack expansions if required.
7164   ///
7165   /// \param Exprs The list of expressions to substitute into.
7166   ///
7167   /// \param IsCall Whether this is some form of call, in which case
7168   /// default arguments will be dropped.
7169   ///
7170   /// \param TemplateArgs The set of template arguments to substitute.
7171   ///
7172   /// \param Outputs Will receive all of the substituted arguments.
7173   ///
7174   /// \returns true if an error occurred, false otherwise.
7175   bool SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall,
7176                   const MultiLevelTemplateArgumentList &TemplateArgs,
7177                   SmallVectorImpl<Expr *> &Outputs);
7178 
7179   StmtResult SubstStmt(Stmt *S,
7180                        const MultiLevelTemplateArgumentList &TemplateArgs);
7181 
7182   Decl *SubstDecl(Decl *D, DeclContext *Owner,
7183                   const MultiLevelTemplateArgumentList &TemplateArgs);
7184 
7185   ExprResult SubstInitializer(Expr *E,
7186                        const MultiLevelTemplateArgumentList &TemplateArgs,
7187                        bool CXXDirectInit);
7188 
7189   bool
7190   SubstBaseSpecifiers(CXXRecordDecl *Instantiation,
7191                       CXXRecordDecl *Pattern,
7192                       const MultiLevelTemplateArgumentList &TemplateArgs);
7193 
7194   bool
7195   InstantiateClass(SourceLocation PointOfInstantiation,
7196                    CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
7197                    const MultiLevelTemplateArgumentList &TemplateArgs,
7198                    TemplateSpecializationKind TSK,
7199                    bool Complain = true);
7200 
7201   bool InstantiateEnum(SourceLocation PointOfInstantiation,
7202                        EnumDecl *Instantiation, EnumDecl *Pattern,
7203                        const MultiLevelTemplateArgumentList &TemplateArgs,
7204                        TemplateSpecializationKind TSK);
7205 
7206   bool InstantiateInClassInitializer(
7207       SourceLocation PointOfInstantiation, FieldDecl *Instantiation,
7208       FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs);
7209 
7210   struct LateInstantiatedAttribute {
7211     const Attr *TmplAttr;
7212     LocalInstantiationScope *Scope;
7213     Decl *NewDecl;
7214 
LateInstantiatedAttributeLateInstantiatedAttribute7215     LateInstantiatedAttribute(const Attr *A, LocalInstantiationScope *S,
7216                               Decl *D)
7217       : TmplAttr(A), Scope(S), NewDecl(D)
7218     { }
7219   };
7220   typedef SmallVector<LateInstantiatedAttribute, 16> LateInstantiatedAttrVec;
7221 
7222   void InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
7223                         const Decl *Pattern, Decl *Inst,
7224                         LateInstantiatedAttrVec *LateAttrs = nullptr,
7225                         LocalInstantiationScope *OuterMostScope = nullptr);
7226 
7227   bool
7228   InstantiateClassTemplateSpecialization(SourceLocation PointOfInstantiation,
7229                            ClassTemplateSpecializationDecl *ClassTemplateSpec,
7230                            TemplateSpecializationKind TSK,
7231                            bool Complain = true);
7232 
7233   void InstantiateClassMembers(SourceLocation PointOfInstantiation,
7234                                CXXRecordDecl *Instantiation,
7235                             const MultiLevelTemplateArgumentList &TemplateArgs,
7236                                TemplateSpecializationKind TSK);
7237 
7238   void InstantiateClassTemplateSpecializationMembers(
7239                                           SourceLocation PointOfInstantiation,
7240                            ClassTemplateSpecializationDecl *ClassTemplateSpec,
7241                                                 TemplateSpecializationKind TSK);
7242 
7243   NestedNameSpecifierLoc
7244   SubstNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
7245                            const MultiLevelTemplateArgumentList &TemplateArgs);
7246 
7247   DeclarationNameInfo
7248   SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
7249                            const MultiLevelTemplateArgumentList &TemplateArgs);
7250   TemplateName
7251   SubstTemplateName(NestedNameSpecifierLoc QualifierLoc, TemplateName Name,
7252                     SourceLocation Loc,
7253                     const MultiLevelTemplateArgumentList &TemplateArgs);
7254   bool Subst(const TemplateArgumentLoc *Args, unsigned NumArgs,
7255              TemplateArgumentListInfo &Result,
7256              const MultiLevelTemplateArgumentList &TemplateArgs);
7257 
7258   void InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
7259                                 FunctionDecl *Function);
7260   void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
7261                                      FunctionDecl *Function,
7262                                      bool Recursive = false,
7263                                      bool DefinitionRequired = false,
7264                                      bool AtEndOfTU = false);
7265   VarTemplateSpecializationDecl *BuildVarTemplateInstantiation(
7266       VarTemplateDecl *VarTemplate, VarDecl *FromVar,
7267       const TemplateArgumentList &TemplateArgList,
7268       const TemplateArgumentListInfo &TemplateArgsInfo,
7269       SmallVectorImpl<TemplateArgument> &Converted,
7270       SourceLocation PointOfInstantiation, void *InsertPos,
7271       LateInstantiatedAttrVec *LateAttrs = nullptr,
7272       LocalInstantiationScope *StartingScope = nullptr);
7273   VarTemplateSpecializationDecl *CompleteVarTemplateSpecializationDecl(
7274       VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
7275       const MultiLevelTemplateArgumentList &TemplateArgs);
7276   void
7277   BuildVariableInstantiation(VarDecl *NewVar, VarDecl *OldVar,
7278                              const MultiLevelTemplateArgumentList &TemplateArgs,
7279                              LateInstantiatedAttrVec *LateAttrs,
7280                              DeclContext *Owner,
7281                              LocalInstantiationScope *StartingScope,
7282                              bool InstantiatingVarTemplate = false);
7283   void InstantiateVariableInitializer(
7284       VarDecl *Var, VarDecl *OldVar,
7285       const MultiLevelTemplateArgumentList &TemplateArgs);
7286   void InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
7287                                      VarDecl *Var, bool Recursive = false,
7288                                      bool DefinitionRequired = false,
7289                                      bool AtEndOfTU = false);
7290   void InstantiateStaticDataMemberDefinition(
7291                                      SourceLocation PointOfInstantiation,
7292                                      VarDecl *Var,
7293                                      bool Recursive = false,
7294                                      bool DefinitionRequired = false);
7295 
7296   void InstantiateMemInitializers(CXXConstructorDecl *New,
7297                                   const CXXConstructorDecl *Tmpl,
7298                             const MultiLevelTemplateArgumentList &TemplateArgs);
7299 
7300   NamedDecl *FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
7301                           const MultiLevelTemplateArgumentList &TemplateArgs);
7302   DeclContext *FindInstantiatedContext(SourceLocation Loc, DeclContext *DC,
7303                           const MultiLevelTemplateArgumentList &TemplateArgs);
7304 
7305   // Objective-C declarations.
7306   enum ObjCContainerKind {
7307     OCK_None = -1,
7308     OCK_Interface = 0,
7309     OCK_Protocol,
7310     OCK_Category,
7311     OCK_ClassExtension,
7312     OCK_Implementation,
7313     OCK_CategoryImplementation
7314   };
7315   ObjCContainerKind getObjCContainerKind() const;
7316 
7317   DeclResult actOnObjCTypeParam(Scope *S,
7318                                 ObjCTypeParamVariance variance,
7319                                 SourceLocation varianceLoc,
7320                                 unsigned index,
7321                                 IdentifierInfo *paramName,
7322                                 SourceLocation paramLoc,
7323                                 SourceLocation colonLoc,
7324                                 ParsedType typeBound);
7325 
7326   ObjCTypeParamList *actOnObjCTypeParamList(Scope *S, SourceLocation lAngleLoc,
7327                                             ArrayRef<Decl *> typeParams,
7328                                             SourceLocation rAngleLoc);
7329   void popObjCTypeParamList(Scope *S, ObjCTypeParamList *typeParamList);
7330 
7331   Decl *ActOnStartClassInterface(Scope *S,
7332                                  SourceLocation AtInterfaceLoc,
7333                                  IdentifierInfo *ClassName,
7334                                  SourceLocation ClassLoc,
7335                                  ObjCTypeParamList *typeParamList,
7336                                  IdentifierInfo *SuperName,
7337                                  SourceLocation SuperLoc,
7338                                  ArrayRef<ParsedType> SuperTypeArgs,
7339                                  SourceRange SuperTypeArgsRange,
7340                                  Decl * const *ProtoRefs,
7341                                  unsigned NumProtoRefs,
7342                                  const SourceLocation *ProtoLocs,
7343                                  SourceLocation EndProtoLoc,
7344                                  AttributeList *AttrList);
7345 
7346   void ActOnSuperClassOfClassInterface(Scope *S,
7347                                        SourceLocation AtInterfaceLoc,
7348                                        ObjCInterfaceDecl *IDecl,
7349                                        IdentifierInfo *ClassName,
7350                                        SourceLocation ClassLoc,
7351                                        IdentifierInfo *SuperName,
7352                                        SourceLocation SuperLoc,
7353                                        ArrayRef<ParsedType> SuperTypeArgs,
7354                                        SourceRange SuperTypeArgsRange);
7355 
7356   void ActOnTypedefedProtocols(SmallVectorImpl<Decl *> &ProtocolRefs,
7357                                IdentifierInfo *SuperName,
7358                                SourceLocation SuperLoc);
7359 
7360   Decl *ActOnCompatibilityAlias(
7361                     SourceLocation AtCompatibilityAliasLoc,
7362                     IdentifierInfo *AliasName,  SourceLocation AliasLocation,
7363                     IdentifierInfo *ClassName, SourceLocation ClassLocation);
7364 
7365   bool CheckForwardProtocolDeclarationForCircularDependency(
7366     IdentifierInfo *PName,
7367     SourceLocation &PLoc, SourceLocation PrevLoc,
7368     const ObjCList<ObjCProtocolDecl> &PList);
7369 
7370   Decl *ActOnStartProtocolInterface(
7371                     SourceLocation AtProtoInterfaceLoc,
7372                     IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc,
7373                     Decl * const *ProtoRefNames, unsigned NumProtoRefs,
7374                     const SourceLocation *ProtoLocs,
7375                     SourceLocation EndProtoLoc,
7376                     AttributeList *AttrList);
7377 
7378   Decl *ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc,
7379                                     IdentifierInfo *ClassName,
7380                                     SourceLocation ClassLoc,
7381                                     ObjCTypeParamList *typeParamList,
7382                                     IdentifierInfo *CategoryName,
7383                                     SourceLocation CategoryLoc,
7384                                     Decl * const *ProtoRefs,
7385                                     unsigned NumProtoRefs,
7386                                     const SourceLocation *ProtoLocs,
7387                                     SourceLocation EndProtoLoc);
7388 
7389   Decl *ActOnStartClassImplementation(
7390                     SourceLocation AtClassImplLoc,
7391                     IdentifierInfo *ClassName, SourceLocation ClassLoc,
7392                     IdentifierInfo *SuperClassname,
7393                     SourceLocation SuperClassLoc);
7394 
7395   Decl *ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc,
7396                                          IdentifierInfo *ClassName,
7397                                          SourceLocation ClassLoc,
7398                                          IdentifierInfo *CatName,
7399                                          SourceLocation CatLoc);
7400 
7401   DeclGroupPtrTy ActOnFinishObjCImplementation(Decl *ObjCImpDecl,
7402                                                ArrayRef<Decl *> Decls);
7403 
7404   DeclGroupPtrTy ActOnForwardClassDeclaration(SourceLocation Loc,
7405                    IdentifierInfo **IdentList,
7406                    SourceLocation *IdentLocs,
7407                    ArrayRef<ObjCTypeParamList *> TypeParamLists,
7408                    unsigned NumElts);
7409 
7410   DeclGroupPtrTy ActOnForwardProtocolDeclaration(SourceLocation AtProtoclLoc,
7411                                         ArrayRef<IdentifierLocPair> IdentList,
7412                                         AttributeList *attrList);
7413 
7414   void FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer,
7415                                ArrayRef<IdentifierLocPair> ProtocolId,
7416                                SmallVectorImpl<Decl *> &Protocols);
7417 
7418   void DiagnoseTypeArgsAndProtocols(IdentifierInfo *ProtocolId,
7419                                     SourceLocation ProtocolLoc,
7420                                     IdentifierInfo *TypeArgId,
7421                                     SourceLocation TypeArgLoc,
7422                                     bool SelectProtocolFirst = false);
7423 
7424   /// Given a list of identifiers (and their locations), resolve the
7425   /// names to either Objective-C protocol qualifiers or type
7426   /// arguments, as appropriate.
7427   void actOnObjCTypeArgsOrProtocolQualifiers(
7428          Scope *S,
7429          ParsedType baseType,
7430          SourceLocation lAngleLoc,
7431          ArrayRef<IdentifierInfo *> identifiers,
7432          ArrayRef<SourceLocation> identifierLocs,
7433          SourceLocation rAngleLoc,
7434          SourceLocation &typeArgsLAngleLoc,
7435          SmallVectorImpl<ParsedType> &typeArgs,
7436          SourceLocation &typeArgsRAngleLoc,
7437          SourceLocation &protocolLAngleLoc,
7438          SmallVectorImpl<Decl *> &protocols,
7439          SourceLocation &protocolRAngleLoc,
7440          bool warnOnIncompleteProtocols);
7441 
7442   /// Build a an Objective-C protocol-qualified 'id' type where no
7443   /// base type was specified.
7444   TypeResult actOnObjCProtocolQualifierType(
7445                SourceLocation lAngleLoc,
7446                ArrayRef<Decl *> protocols,
7447                ArrayRef<SourceLocation> protocolLocs,
7448                SourceLocation rAngleLoc);
7449 
7450   /// Build a specialized and/or protocol-qualified Objective-C type.
7451   TypeResult actOnObjCTypeArgsAndProtocolQualifiers(
7452                Scope *S,
7453                SourceLocation Loc,
7454                ParsedType BaseType,
7455                SourceLocation TypeArgsLAngleLoc,
7456                ArrayRef<ParsedType> TypeArgs,
7457                SourceLocation TypeArgsRAngleLoc,
7458                SourceLocation ProtocolLAngleLoc,
7459                ArrayRef<Decl *> Protocols,
7460                ArrayRef<SourceLocation> ProtocolLocs,
7461                SourceLocation ProtocolRAngleLoc);
7462 
7463   /// Build an Objective-C object pointer type.
7464   QualType BuildObjCObjectType(QualType BaseType,
7465                                SourceLocation Loc,
7466                                SourceLocation TypeArgsLAngleLoc,
7467                                ArrayRef<TypeSourceInfo *> TypeArgs,
7468                                SourceLocation TypeArgsRAngleLoc,
7469                                SourceLocation ProtocolLAngleLoc,
7470                                ArrayRef<ObjCProtocolDecl *> Protocols,
7471                                ArrayRef<SourceLocation> ProtocolLocs,
7472                                SourceLocation ProtocolRAngleLoc,
7473                                bool FailOnError = false);
7474 
7475   /// Check the application of the Objective-C '__kindof' qualifier to
7476   /// the given type.
7477   bool checkObjCKindOfType(QualType &type, SourceLocation loc);
7478 
7479   /// Ensure attributes are consistent with type.
7480   /// \param [in, out] Attributes The attributes to check; they will
7481   /// be modified to be consistent with \p PropertyTy.
7482   void CheckObjCPropertyAttributes(Decl *PropertyPtrTy,
7483                                    SourceLocation Loc,
7484                                    unsigned &Attributes,
7485                                    bool propertyInPrimaryClass);
7486 
7487   /// Process the specified property declaration and create decls for the
7488   /// setters and getters as needed.
7489   /// \param property The property declaration being processed
7490   void ProcessPropertyDecl(ObjCPropertyDecl *property);
7491 
7492 
7493   void DiagnosePropertyMismatch(ObjCPropertyDecl *Property,
7494                                 ObjCPropertyDecl *SuperProperty,
7495                                 const IdentifierInfo *Name,
7496                                 bool OverridingProtocolProperty);
7497 
7498   void DiagnoseClassExtensionDupMethods(ObjCCategoryDecl *CAT,
7499                                         ObjCInterfaceDecl *ID);
7500 
7501   Decl *ActOnAtEnd(Scope *S, SourceRange AtEnd,
7502                    ArrayRef<Decl *> allMethods = None,
7503                    ArrayRef<DeclGroupPtrTy> allTUVars = None);
7504 
7505   Decl *ActOnProperty(Scope *S, SourceLocation AtLoc,
7506                       SourceLocation LParenLoc,
7507                       FieldDeclarator &FD, ObjCDeclSpec &ODS,
7508                       Selector GetterSel, Selector SetterSel,
7509                       tok::ObjCKeywordKind MethodImplKind,
7510                       DeclContext *lexicalDC = nullptr);
7511 
7512   Decl *ActOnPropertyImplDecl(Scope *S,
7513                               SourceLocation AtLoc,
7514                               SourceLocation PropertyLoc,
7515                               bool ImplKind,
7516                               IdentifierInfo *PropertyId,
7517                               IdentifierInfo *PropertyIvar,
7518                               SourceLocation PropertyIvarLoc,
7519                               ObjCPropertyQueryKind QueryKind);
7520 
7521   enum ObjCSpecialMethodKind {
7522     OSMK_None,
7523     OSMK_Alloc,
7524     OSMK_New,
7525     OSMK_Copy,
7526     OSMK_RetainingInit,
7527     OSMK_NonRetainingInit
7528   };
7529 
7530   struct ObjCArgInfo {
7531     IdentifierInfo *Name;
7532     SourceLocation NameLoc;
7533     // The Type is null if no type was specified, and the DeclSpec is invalid
7534     // in this case.
7535     ParsedType Type;
7536     ObjCDeclSpec DeclSpec;
7537 
7538     /// ArgAttrs - Attribute list for this argument.
7539     AttributeList *ArgAttrs;
7540   };
7541 
7542   Decl *ActOnMethodDeclaration(
7543     Scope *S,
7544     SourceLocation BeginLoc, // location of the + or -.
7545     SourceLocation EndLoc,   // location of the ; or {.
7546     tok::TokenKind MethodType,
7547     ObjCDeclSpec &ReturnQT, ParsedType ReturnType,
7548     ArrayRef<SourceLocation> SelectorLocs, Selector Sel,
7549     // optional arguments. The number of types/arguments is obtained
7550     // from the Sel.getNumArgs().
7551     ObjCArgInfo *ArgInfo,
7552     DeclaratorChunk::ParamInfo *CParamInfo, unsigned CNumArgs, // c-style args
7553     AttributeList *AttrList, tok::ObjCKeywordKind MethodImplKind,
7554     bool isVariadic, bool MethodDefinition);
7555 
7556   ObjCMethodDecl *LookupMethodInQualifiedType(Selector Sel,
7557                                               const ObjCObjectPointerType *OPT,
7558                                               bool IsInstance);
7559   ObjCMethodDecl *LookupMethodInObjectType(Selector Sel, QualType Ty,
7560                                            bool IsInstance);
7561 
7562   bool CheckARCMethodDecl(ObjCMethodDecl *method);
7563   bool inferObjCARCLifetime(ValueDecl *decl);
7564 
7565   ExprResult
7566   HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT,
7567                             Expr *BaseExpr,
7568                             SourceLocation OpLoc,
7569                             DeclarationName MemberName,
7570                             SourceLocation MemberLoc,
7571                             SourceLocation SuperLoc, QualType SuperType,
7572                             bool Super);
7573 
7574   ExprResult
7575   ActOnClassPropertyRefExpr(IdentifierInfo &receiverName,
7576                             IdentifierInfo &propertyName,
7577                             SourceLocation receiverNameLoc,
7578                             SourceLocation propertyNameLoc);
7579 
7580   ObjCMethodDecl *tryCaptureObjCSelf(SourceLocation Loc);
7581 
7582   /// \brief Describes the kind of message expression indicated by a message
7583   /// send that starts with an identifier.
7584   enum ObjCMessageKind {
7585     /// \brief The message is sent to 'super'.
7586     ObjCSuperMessage,
7587     /// \brief The message is an instance message.
7588     ObjCInstanceMessage,
7589     /// \brief The message is a class message, and the identifier is a type
7590     /// name.
7591     ObjCClassMessage
7592   };
7593 
7594   ObjCMessageKind getObjCMessageKind(Scope *S,
7595                                      IdentifierInfo *Name,
7596                                      SourceLocation NameLoc,
7597                                      bool IsSuper,
7598                                      bool HasTrailingDot,
7599                                      ParsedType &ReceiverType);
7600 
7601   ExprResult ActOnSuperMessage(Scope *S, SourceLocation SuperLoc,
7602                                Selector Sel,
7603                                SourceLocation LBracLoc,
7604                                ArrayRef<SourceLocation> SelectorLocs,
7605                                SourceLocation RBracLoc,
7606                                MultiExprArg Args);
7607 
7608   ExprResult BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,
7609                                QualType ReceiverType,
7610                                SourceLocation SuperLoc,
7611                                Selector Sel,
7612                                ObjCMethodDecl *Method,
7613                                SourceLocation LBracLoc,
7614                                ArrayRef<SourceLocation> SelectorLocs,
7615                                SourceLocation RBracLoc,
7616                                MultiExprArg Args,
7617                                bool isImplicit = false);
7618 
7619   ExprResult BuildClassMessageImplicit(QualType ReceiverType,
7620                                        bool isSuperReceiver,
7621                                        SourceLocation Loc,
7622                                        Selector Sel,
7623                                        ObjCMethodDecl *Method,
7624                                        MultiExprArg Args);
7625 
7626   ExprResult ActOnClassMessage(Scope *S,
7627                                ParsedType Receiver,
7628                                Selector Sel,
7629                                SourceLocation LBracLoc,
7630                                ArrayRef<SourceLocation> SelectorLocs,
7631                                SourceLocation RBracLoc,
7632                                MultiExprArg Args);
7633 
7634   ExprResult BuildInstanceMessage(Expr *Receiver,
7635                                   QualType ReceiverType,
7636                                   SourceLocation SuperLoc,
7637                                   Selector Sel,
7638                                   ObjCMethodDecl *Method,
7639                                   SourceLocation LBracLoc,
7640                                   ArrayRef<SourceLocation> SelectorLocs,
7641                                   SourceLocation RBracLoc,
7642                                   MultiExprArg Args,
7643                                   bool isImplicit = false);
7644 
7645   ExprResult BuildInstanceMessageImplicit(Expr *Receiver,
7646                                           QualType ReceiverType,
7647                                           SourceLocation Loc,
7648                                           Selector Sel,
7649                                           ObjCMethodDecl *Method,
7650                                           MultiExprArg Args);
7651 
7652   ExprResult ActOnInstanceMessage(Scope *S,
7653                                   Expr *Receiver,
7654                                   Selector Sel,
7655                                   SourceLocation LBracLoc,
7656                                   ArrayRef<SourceLocation> SelectorLocs,
7657                                   SourceLocation RBracLoc,
7658                                   MultiExprArg Args);
7659 
7660   ExprResult BuildObjCBridgedCast(SourceLocation LParenLoc,
7661                                   ObjCBridgeCastKind Kind,
7662                                   SourceLocation BridgeKeywordLoc,
7663                                   TypeSourceInfo *TSInfo,
7664                                   Expr *SubExpr);
7665 
7666   ExprResult ActOnObjCBridgedCast(Scope *S,
7667                                   SourceLocation LParenLoc,
7668                                   ObjCBridgeCastKind Kind,
7669                                   SourceLocation BridgeKeywordLoc,
7670                                   ParsedType Type,
7671                                   SourceLocation RParenLoc,
7672                                   Expr *SubExpr);
7673 
7674   void CheckTollFreeBridgeCast(QualType castType, Expr *castExpr);
7675 
7676   void CheckObjCBridgeRelatedCast(QualType castType, Expr *castExpr);
7677 
7678   bool CheckTollFreeBridgeStaticCast(QualType castType, Expr *castExpr,
7679                                      CastKind &Kind);
7680 
7681   bool checkObjCBridgeRelatedComponents(SourceLocation Loc,
7682                                         QualType DestType, QualType SrcType,
7683                                         ObjCInterfaceDecl *&RelatedClass,
7684                                         ObjCMethodDecl *&ClassMethod,
7685                                         ObjCMethodDecl *&InstanceMethod,
7686                                         TypedefNameDecl *&TDNDecl,
7687                                         bool CfToNs, bool Diagnose = true);
7688 
7689   bool CheckObjCBridgeRelatedConversions(SourceLocation Loc,
7690                                          QualType DestType, QualType SrcType,
7691                                          Expr *&SrcExpr, bool Diagnose = true);
7692 
7693   bool ConversionToObjCStringLiteralCheck(QualType DstType, Expr *&SrcExpr,
7694                                           bool Diagnose = true);
7695 
7696   bool checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall);
7697 
7698   /// \brief Check whether the given new method is a valid override of the
7699   /// given overridden method, and set any properties that should be inherited.
7700   void CheckObjCMethodOverride(ObjCMethodDecl *NewMethod,
7701                                const ObjCMethodDecl *Overridden);
7702 
7703   /// \brief Describes the compatibility of a result type with its method.
7704   enum ResultTypeCompatibilityKind {
7705     RTC_Compatible,
7706     RTC_Incompatible,
7707     RTC_Unknown
7708   };
7709 
7710   void CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod,
7711                                 ObjCInterfaceDecl *CurrentClass,
7712                                 ResultTypeCompatibilityKind RTC);
7713 
7714   enum PragmaOptionsAlignKind {
7715     POAK_Native,  // #pragma options align=native
7716     POAK_Natural, // #pragma options align=natural
7717     POAK_Packed,  // #pragma options align=packed
7718     POAK_Power,   // #pragma options align=power
7719     POAK_Mac68k,  // #pragma options align=mac68k
7720     POAK_Reset    // #pragma options align=reset
7721   };
7722 
7723   /// ActOnPragmaOptionsAlign - Called on well formed \#pragma options align.
7724   void ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind,
7725                                SourceLocation PragmaLoc);
7726 
7727   /// ActOnPragmaPack - Called on well formed \#pragma pack(...).
7728   void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action,
7729                        StringRef SlotLabel, Expr *Alignment);
7730 
7731   /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off].
7732   void ActOnPragmaMSStruct(PragmaMSStructKind Kind);
7733 
7734   /// ActOnPragmaMSComment - Called on well formed
7735   /// \#pragma comment(kind, "arg").
7736   void ActOnPragmaMSComment(SourceLocation CommentLoc, PragmaMSCommentKind Kind,
7737                             StringRef Arg);
7738 
7739   /// ActOnPragmaMSPointersToMembers - called on well formed \#pragma
7740   /// pointers_to_members(representation method[, general purpose
7741   /// representation]).
7742   void ActOnPragmaMSPointersToMembers(
7743       LangOptions::PragmaMSPointersToMembersKind Kind,
7744       SourceLocation PragmaLoc);
7745 
7746   /// \brief Called on well formed \#pragma vtordisp().
7747   void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action,
7748                              SourceLocation PragmaLoc,
7749                              MSVtorDispAttr::Mode Value);
7750 
7751   enum PragmaSectionKind {
7752     PSK_DataSeg,
7753     PSK_BSSSeg,
7754     PSK_ConstSeg,
7755     PSK_CodeSeg,
7756   };
7757 
7758   bool UnifySection(StringRef SectionName,
7759                     int SectionFlags,
7760                     DeclaratorDecl *TheDecl);
7761   bool UnifySection(StringRef SectionName,
7762                     int SectionFlags,
7763                     SourceLocation PragmaSectionLocation);
7764 
7765   /// \brief Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg.
7766   void ActOnPragmaMSSeg(SourceLocation PragmaLocation,
7767                         PragmaMsStackAction Action,
7768                         llvm::StringRef StackSlotLabel,
7769                         StringLiteral *SegmentName,
7770                         llvm::StringRef PragmaName);
7771 
7772   /// \brief Called on well formed \#pragma section().
7773   void ActOnPragmaMSSection(SourceLocation PragmaLocation,
7774                             int SectionFlags, StringLiteral *SegmentName);
7775 
7776   /// \brief Called on well-formed \#pragma init_seg().
7777   void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation,
7778                             StringLiteral *SegmentName);
7779 
7780   /// \brief Called on #pragma clang __debug dump II
7781   void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II);
7782 
7783   /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch
7784   void ActOnPragmaDetectMismatch(SourceLocation Loc, StringRef Name,
7785                                  StringRef Value);
7786 
7787   /// ActOnPragmaUnused - Called on well-formed '\#pragma unused'.
7788   void ActOnPragmaUnused(const Token &Identifier,
7789                          Scope *curScope,
7790                          SourceLocation PragmaLoc);
7791 
7792   /// ActOnPragmaVisibility - Called on well formed \#pragma GCC visibility... .
7793   void ActOnPragmaVisibility(const IdentifierInfo* VisType,
7794                              SourceLocation PragmaLoc);
7795 
7796   NamedDecl *DeclClonePragmaWeak(NamedDecl *ND, IdentifierInfo *II,
7797                                  SourceLocation Loc);
7798   void DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, WeakInfo &W);
7799 
7800   /// ActOnPragmaWeakID - Called on well formed \#pragma weak ident.
7801   void ActOnPragmaWeakID(IdentifierInfo* WeakName,
7802                          SourceLocation PragmaLoc,
7803                          SourceLocation WeakNameLoc);
7804 
7805   /// ActOnPragmaRedefineExtname - Called on well formed
7806   /// \#pragma redefine_extname oldname newname.
7807   void ActOnPragmaRedefineExtname(IdentifierInfo* WeakName,
7808                                   IdentifierInfo* AliasName,
7809                                   SourceLocation PragmaLoc,
7810                                   SourceLocation WeakNameLoc,
7811                                   SourceLocation AliasNameLoc);
7812 
7813   /// ActOnPragmaWeakAlias - Called on well formed \#pragma weak ident = ident.
7814   void ActOnPragmaWeakAlias(IdentifierInfo* WeakName,
7815                             IdentifierInfo* AliasName,
7816                             SourceLocation PragmaLoc,
7817                             SourceLocation WeakNameLoc,
7818                             SourceLocation AliasNameLoc);
7819 
7820   /// ActOnPragmaFPContract - Called on well formed
7821   /// \#pragma {STDC,OPENCL} FP_CONTRACT
7822   void ActOnPragmaFPContract(tok::OnOffSwitch OOS);
7823 
7824   /// AddAlignmentAttributesForRecord - Adds any needed alignment attributes to
7825   /// a the record decl, to handle '\#pragma pack' and '\#pragma options align'.
7826   void AddAlignmentAttributesForRecord(RecordDecl *RD);
7827 
7828   /// AddMsStructLayoutForRecord - Adds ms_struct layout attribute to record.
7829   void AddMsStructLayoutForRecord(RecordDecl *RD);
7830 
7831   /// FreePackedContext - Deallocate and null out PackContext.
7832   void FreePackedContext();
7833 
7834   /// PushNamespaceVisibilityAttr - Note that we've entered a
7835   /// namespace with a visibility attribute.
7836   void PushNamespaceVisibilityAttr(const VisibilityAttr *Attr,
7837                                    SourceLocation Loc);
7838 
7839   /// AddPushedVisibilityAttribute - If '\#pragma GCC visibility' was used,
7840   /// add an appropriate visibility attribute.
7841   void AddPushedVisibilityAttribute(Decl *RD);
7842 
7843   /// PopPragmaVisibility - Pop the top element of the visibility stack; used
7844   /// for '\#pragma GCC visibility' and visibility attributes on namespaces.
7845   void PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc);
7846 
7847   /// FreeVisContext - Deallocate and null out VisContext.
7848   void FreeVisContext();
7849 
7850   /// AddCFAuditedAttribute - Check whether we're currently within
7851   /// '\#pragma clang arc_cf_code_audited' and, if so, consider adding
7852   /// the appropriate attribute.
7853   void AddCFAuditedAttribute(Decl *D);
7854 
7855   /// \brief Called on well formed \#pragma clang optimize.
7856   void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc);
7857 
7858   /// \brief Get the location for the currently active "\#pragma clang optimize
7859   /// off". If this location is invalid, then the state of the pragma is "on".
getOptimizeOffPragmaLocation()7860   SourceLocation getOptimizeOffPragmaLocation() const {
7861     return OptimizeOffPragmaLocation;
7862   }
7863 
7864   /// \brief Only called on function definitions; if there is a pragma in scope
7865   /// with the effect of a range-based optnone, consider marking the function
7866   /// with attribute optnone.
7867   void AddRangeBasedOptnone(FunctionDecl *FD);
7868 
7869   /// \brief Adds the 'optnone' attribute to the function declaration if there
7870   /// are no conflicts; Loc represents the location causing the 'optnone'
7871   /// attribute to be added (usually because of a pragma).
7872   void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc);
7873 
7874   /// AddAlignedAttr - Adds an aligned attribute to a particular declaration.
7875   void AddAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E,
7876                       unsigned SpellingListIndex, bool IsPackExpansion);
7877   void AddAlignedAttr(SourceRange AttrRange, Decl *D, TypeSourceInfo *T,
7878                       unsigned SpellingListIndex, bool IsPackExpansion);
7879 
7880   /// AddAssumeAlignedAttr - Adds an assume_aligned attribute to a particular
7881   /// declaration.
7882   void AddAssumeAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E, Expr *OE,
7883                             unsigned SpellingListIndex);
7884 
7885   /// AddAlignValueAttr - Adds an align_value attribute to a particular
7886   /// declaration.
7887   void AddAlignValueAttr(SourceRange AttrRange, Decl *D, Expr *E,
7888                          unsigned SpellingListIndex);
7889 
7890   /// AddLaunchBoundsAttr - Adds a launch_bounds attribute to a particular
7891   /// declaration.
7892   void AddLaunchBoundsAttr(SourceRange AttrRange, Decl *D, Expr *MaxThreads,
7893                            Expr *MinBlocks, unsigned SpellingListIndex);
7894 
7895   /// AddModeAttr - Adds a mode attribute to a particular declaration.
7896   void AddModeAttr(SourceRange AttrRange, Decl *D, IdentifierInfo *Name,
7897                    unsigned SpellingListIndex, bool InInstantiation = false);
7898 
7899   void AddParameterABIAttr(SourceRange AttrRange, Decl *D,
7900                            ParameterABI ABI, unsigned SpellingListIndex);
7901 
7902   void AddNSConsumedAttr(SourceRange AttrRange, Decl *D,
7903                          unsigned SpellingListIndex, bool isNSConsumed,
7904                          bool isTemplateInstantiation);
7905 
7906   //===--------------------------------------------------------------------===//
7907   // C++ Coroutines TS
7908   //
7909   ExprResult ActOnCoawaitExpr(Scope *S, SourceLocation KwLoc, Expr *E);
7910   ExprResult ActOnCoyieldExpr(Scope *S, SourceLocation KwLoc, Expr *E);
7911   StmtResult ActOnCoreturnStmt(SourceLocation KwLoc, Expr *E);
7912 
7913   ExprResult BuildCoawaitExpr(SourceLocation KwLoc, Expr *E);
7914   ExprResult BuildCoyieldExpr(SourceLocation KwLoc, Expr *E);
7915   StmtResult BuildCoreturnStmt(SourceLocation KwLoc, Expr *E);
7916 
7917   void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body);
7918 
7919   //===--------------------------------------------------------------------===//
7920   // OpenMP directives and clauses.
7921   //
7922 private:
7923   void *VarDataSharingAttributesStack;
7924   /// Set to true inside '#pragma omp declare target' region.
7925   bool IsInOpenMPDeclareTargetContext = false;
7926   /// \brief Initialization of data-sharing attributes stack.
7927   void InitDataSharingAttributesStack();
7928   void DestroyDataSharingAttributesStack();
7929   ExprResult
7930   VerifyPositiveIntegerConstantInClause(Expr *Op, OpenMPClauseKind CKind,
7931                                         bool StrictlyPositive = true);
7932   /// Returns OpenMP nesting level for current directive.
7933   unsigned getOpenMPNestingLevel() const;
7934 
7935 public:
7936   /// \brief Return true if the provided declaration \a VD should be captured by
7937   /// reference.
7938   /// \param Level Relative level of nested OpenMP construct for that the check
7939   /// is performed.
7940   bool IsOpenMPCapturedByRef(ValueDecl *D, unsigned Level);
7941 
7942   /// \brief Check if the specified variable is used in one of the private
7943   /// clauses (private, firstprivate, lastprivate, reduction etc.) in OpenMP
7944   /// constructs.
7945   VarDecl *IsOpenMPCapturedDecl(ValueDecl *D);
7946   ExprResult getOpenMPCapturedExpr(VarDecl *Capture, ExprValueKind VK,
7947                                    ExprObjectKind OK, SourceLocation Loc);
7948 
7949   /// \brief Check if the specified variable is used in 'private' clause.
7950   /// \param Level Relative level of nested OpenMP construct for that the check
7951   /// is performed.
7952   bool isOpenMPPrivateDecl(ValueDecl *D, unsigned Level);
7953 
7954   /// \brief Check if the specified variable is captured  by 'target' directive.
7955   /// \param Level Relative level of nested OpenMP construct for that the check
7956   /// is performed.
7957   bool isOpenMPTargetCapturedDecl(ValueDecl *D, unsigned Level);
7958 
7959   ExprResult PerformOpenMPImplicitIntegerConversion(SourceLocation OpLoc,
7960                                                     Expr *Op);
7961   /// \brief Called on start of new data sharing attribute block.
7962   void StartOpenMPDSABlock(OpenMPDirectiveKind K,
7963                            const DeclarationNameInfo &DirName, Scope *CurScope,
7964                            SourceLocation Loc);
7965   /// \brief Start analysis of clauses.
7966   void StartOpenMPClause(OpenMPClauseKind K);
7967   /// \brief End analysis of clauses.
7968   void EndOpenMPClause();
7969   /// \brief Called on end of data sharing attribute block.
7970   void EndOpenMPDSABlock(Stmt *CurDirective);
7971 
7972   /// \brief Check if the current region is an OpenMP loop region and if it is,
7973   /// mark loop control variable, used in \p Init for loop initialization, as
7974   /// private by default.
7975   /// \param Init First part of the for loop.
7976   void ActOnOpenMPLoopInitialization(SourceLocation ForLoc, Stmt *Init);
7977 
7978   // OpenMP directives and clauses.
7979   /// \brief Called on correct id-expression from the '#pragma omp
7980   /// threadprivate'.
7981   ExprResult ActOnOpenMPIdExpression(Scope *CurScope,
7982                                      CXXScopeSpec &ScopeSpec,
7983                                      const DeclarationNameInfo &Id);
7984   /// \brief Called on well-formed '#pragma omp threadprivate'.
7985   DeclGroupPtrTy ActOnOpenMPThreadprivateDirective(
7986                                      SourceLocation Loc,
7987                                      ArrayRef<Expr *> VarList);
7988   /// \brief Builds a new OpenMPThreadPrivateDecl and checks its correctness.
7989   OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(
7990                                      SourceLocation Loc,
7991                                      ArrayRef<Expr *> VarList);
7992   /// \brief Check if the specified type is allowed to be used in 'omp declare
7993   /// reduction' construct.
7994   QualType ActOnOpenMPDeclareReductionType(SourceLocation TyLoc,
7995                                            TypeResult ParsedType);
7996   /// \brief Called on start of '#pragma omp declare reduction'.
7997   DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveStart(
7998       Scope *S, DeclContext *DC, DeclarationName Name,
7999       ArrayRef<std::pair<QualType, SourceLocation>> ReductionTypes,
8000       AccessSpecifier AS, Decl *PrevDeclInScope = nullptr);
8001   /// \brief Initialize declare reduction construct initializer.
8002   void ActOnOpenMPDeclareReductionCombinerStart(Scope *S, Decl *D);
8003   /// \brief Finish current declare reduction construct initializer.
8004   void ActOnOpenMPDeclareReductionCombinerEnd(Decl *D, Expr *Combiner);
8005   /// \brief Initialize declare reduction construct initializer.
8006   void ActOnOpenMPDeclareReductionInitializerStart(Scope *S, Decl *D);
8007   /// \brief Finish current declare reduction construct initializer.
8008   void ActOnOpenMPDeclareReductionInitializerEnd(Decl *D, Expr *Initializer);
8009   /// \brief Called at the end of '#pragma omp declare reduction'.
8010   DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveEnd(
8011       Scope *S, DeclGroupPtrTy DeclReductions, bool IsValid);
8012 
8013   /// Called on the start of target region i.e. '#pragma omp declare target'.
8014   bool ActOnStartOpenMPDeclareTargetDirective(SourceLocation Loc);
8015   /// Called at the end of target region i.e. '#pragme omp end declare target'.
8016   void ActOnFinishOpenMPDeclareTargetDirective();
8017   /// Called on correct id-expression from the '#pragma omp declare target'.
8018   void ActOnOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec,
8019                                     const DeclarationNameInfo &Id,
8020                                     OMPDeclareTargetDeclAttr::MapTypeTy MT,
8021                                     NamedDeclSetType &SameDirectiveDecls);
8022   /// Check declaration inside target region.
8023   void checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D);
8024   /// Return true inside OpenMP target region.
isInOpenMPDeclareTargetContext()8025   bool isInOpenMPDeclareTargetContext() const {
8026     return IsInOpenMPDeclareTargetContext;
8027   }
8028 
8029   /// \brief Initialization of captured region for OpenMP region.
8030   void ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, Scope *CurScope);
8031   /// \brief End of OpenMP region.
8032   ///
8033   /// \param S Statement associated with the current OpenMP region.
8034   /// \param Clauses List of clauses for the current OpenMP region.
8035   ///
8036   /// \returns Statement for finished OpenMP region.
8037   StmtResult ActOnOpenMPRegionEnd(StmtResult S, ArrayRef<OMPClause *> Clauses);
8038   StmtResult ActOnOpenMPExecutableDirective(
8039       OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName,
8040       OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses,
8041       Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc);
8042   /// \brief Called on well-formed '\#pragma omp parallel' after parsing
8043   /// of the  associated statement.
8044   StmtResult ActOnOpenMPParallelDirective(ArrayRef<OMPClause *> Clauses,
8045                                           Stmt *AStmt,
8046                                           SourceLocation StartLoc,
8047                                           SourceLocation EndLoc);
8048   /// \brief Called on well-formed '\#pragma omp simd' after parsing
8049   /// of the associated statement.
8050   StmtResult ActOnOpenMPSimdDirective(
8051       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8052       SourceLocation EndLoc,
8053       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8054   /// \brief Called on well-formed '\#pragma omp for' after parsing
8055   /// of the associated statement.
8056   StmtResult ActOnOpenMPForDirective(
8057       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8058       SourceLocation EndLoc,
8059       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8060   /// \brief Called on well-formed '\#pragma omp for simd' after parsing
8061   /// of the associated statement.
8062   StmtResult ActOnOpenMPForSimdDirective(
8063       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8064       SourceLocation EndLoc,
8065       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8066   /// \brief Called on well-formed '\#pragma omp sections' after parsing
8067   /// of the associated statement.
8068   StmtResult ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses,
8069                                           Stmt *AStmt, SourceLocation StartLoc,
8070                                           SourceLocation EndLoc);
8071   /// \brief Called on well-formed '\#pragma omp section' after parsing of the
8072   /// associated statement.
8073   StmtResult ActOnOpenMPSectionDirective(Stmt *AStmt, SourceLocation StartLoc,
8074                                          SourceLocation EndLoc);
8075   /// \brief Called on well-formed '\#pragma omp single' after parsing of the
8076   /// associated statement.
8077   StmtResult ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses,
8078                                         Stmt *AStmt, SourceLocation StartLoc,
8079                                         SourceLocation EndLoc);
8080   /// \brief Called on well-formed '\#pragma omp master' after parsing of the
8081   /// associated statement.
8082   StmtResult ActOnOpenMPMasterDirective(Stmt *AStmt, SourceLocation StartLoc,
8083                                         SourceLocation EndLoc);
8084   /// \brief Called on well-formed '\#pragma omp critical' after parsing of the
8085   /// associated statement.
8086   StmtResult ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName,
8087                                           ArrayRef<OMPClause *> Clauses,
8088                                           Stmt *AStmt, SourceLocation StartLoc,
8089                                           SourceLocation EndLoc);
8090   /// \brief Called on well-formed '\#pragma omp parallel for' after parsing
8091   /// of the  associated statement.
8092   StmtResult ActOnOpenMPParallelForDirective(
8093       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8094       SourceLocation EndLoc,
8095       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8096   /// \brief Called on well-formed '\#pragma omp parallel for simd' after
8097   /// parsing of the  associated statement.
8098   StmtResult ActOnOpenMPParallelForSimdDirective(
8099       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8100       SourceLocation EndLoc,
8101       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8102   /// \brief Called on well-formed '\#pragma omp parallel sections' after
8103   /// parsing of the  associated statement.
8104   StmtResult ActOnOpenMPParallelSectionsDirective(ArrayRef<OMPClause *> Clauses,
8105                                                   Stmt *AStmt,
8106                                                   SourceLocation StartLoc,
8107                                                   SourceLocation EndLoc);
8108   /// \brief Called on well-formed '\#pragma omp task' after parsing of the
8109   /// associated statement.
8110   StmtResult ActOnOpenMPTaskDirective(ArrayRef<OMPClause *> Clauses,
8111                                       Stmt *AStmt, SourceLocation StartLoc,
8112                                       SourceLocation EndLoc);
8113   /// \brief Called on well-formed '\#pragma omp taskyield'.
8114   StmtResult ActOnOpenMPTaskyieldDirective(SourceLocation StartLoc,
8115                                            SourceLocation EndLoc);
8116   /// \brief Called on well-formed '\#pragma omp barrier'.
8117   StmtResult ActOnOpenMPBarrierDirective(SourceLocation StartLoc,
8118                                          SourceLocation EndLoc);
8119   /// \brief Called on well-formed '\#pragma omp taskwait'.
8120   StmtResult ActOnOpenMPTaskwaitDirective(SourceLocation StartLoc,
8121                                           SourceLocation EndLoc);
8122   /// \brief Called on well-formed '\#pragma omp taskgroup'.
8123   StmtResult ActOnOpenMPTaskgroupDirective(Stmt *AStmt, SourceLocation StartLoc,
8124                                            SourceLocation EndLoc);
8125   /// \brief Called on well-formed '\#pragma omp flush'.
8126   StmtResult ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses,
8127                                        SourceLocation StartLoc,
8128                                        SourceLocation EndLoc);
8129   /// \brief Called on well-formed '\#pragma omp ordered' after parsing of the
8130   /// associated statement.
8131   StmtResult ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses,
8132                                          Stmt *AStmt, SourceLocation StartLoc,
8133                                          SourceLocation EndLoc);
8134   /// \brief Called on well-formed '\#pragma omp atomic' after parsing of the
8135   /// associated statement.
8136   StmtResult ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
8137                                         Stmt *AStmt, SourceLocation StartLoc,
8138                                         SourceLocation EndLoc);
8139   /// \brief Called on well-formed '\#pragma omp target' after parsing of the
8140   /// associated statement.
8141   StmtResult ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses,
8142                                         Stmt *AStmt, SourceLocation StartLoc,
8143                                         SourceLocation EndLoc);
8144   /// \brief Called on well-formed '\#pragma omp target data' after parsing of
8145   /// the associated statement.
8146   StmtResult ActOnOpenMPTargetDataDirective(ArrayRef<OMPClause *> Clauses,
8147                                             Stmt *AStmt, SourceLocation StartLoc,
8148                                             SourceLocation EndLoc);
8149   /// \brief Called on well-formed '\#pragma omp target enter data' after
8150   /// parsing of the associated statement.
8151   StmtResult ActOnOpenMPTargetEnterDataDirective(ArrayRef<OMPClause *> Clauses,
8152                                                  SourceLocation StartLoc,
8153                                                  SourceLocation EndLoc);
8154   /// \brief Called on well-formed '\#pragma omp target exit data' after
8155   /// parsing of the associated statement.
8156   StmtResult ActOnOpenMPTargetExitDataDirective(ArrayRef<OMPClause *> Clauses,
8157                                                 SourceLocation StartLoc,
8158                                                 SourceLocation EndLoc);
8159   /// \brief Called on well-formed '\#pragma omp target parallel' after
8160   /// parsing of the associated statement.
8161   StmtResult ActOnOpenMPTargetParallelDirective(ArrayRef<OMPClause *> Clauses,
8162                                                 Stmt *AStmt,
8163                                                 SourceLocation StartLoc,
8164                                                 SourceLocation EndLoc);
8165   /// \brief Called on well-formed '\#pragma omp target parallel for' after
8166   /// parsing of the  associated statement.
8167   StmtResult ActOnOpenMPTargetParallelForDirective(
8168       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8169       SourceLocation EndLoc,
8170       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8171   /// \brief Called on well-formed '\#pragma omp teams' after parsing of the
8172   /// associated statement.
8173   StmtResult ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses,
8174                                        Stmt *AStmt, SourceLocation StartLoc,
8175                                        SourceLocation EndLoc);
8176   /// \brief Called on well-formed '\#pragma omp cancellation point'.
8177   StmtResult
8178   ActOnOpenMPCancellationPointDirective(SourceLocation StartLoc,
8179                                         SourceLocation EndLoc,
8180                                         OpenMPDirectiveKind CancelRegion);
8181   /// \brief Called on well-formed '\#pragma omp cancel'.
8182   StmtResult ActOnOpenMPCancelDirective(ArrayRef<OMPClause *> Clauses,
8183                                         SourceLocation StartLoc,
8184                                         SourceLocation EndLoc,
8185                                         OpenMPDirectiveKind CancelRegion);
8186   /// \brief Called on well-formed '\#pragma omp taskloop' after parsing of the
8187   /// associated statement.
8188   StmtResult ActOnOpenMPTaskLoopDirective(
8189       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8190       SourceLocation EndLoc,
8191       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8192   /// \brief Called on well-formed '\#pragma omp taskloop simd' after parsing of
8193   /// the associated statement.
8194   StmtResult ActOnOpenMPTaskLoopSimdDirective(
8195       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8196       SourceLocation EndLoc,
8197       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8198   /// \brief Called on well-formed '\#pragma omp distribute' after parsing
8199   /// of the associated statement.
8200   StmtResult ActOnOpenMPDistributeDirective(
8201       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8202       SourceLocation EndLoc,
8203       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8204   /// \brief Called on well-formed '\#pragma omp target update'.
8205   StmtResult ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses,
8206                                               SourceLocation StartLoc,
8207                                               SourceLocation EndLoc);
8208   /// \brief Called on well-formed '\#pragma omp distribute parallel for' after
8209   /// parsing of the associated statement.
8210   StmtResult ActOnOpenMPDistributeParallelForDirective(
8211       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8212       SourceLocation EndLoc,
8213       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8214   /// \brief Called on well-formed '\#pragma omp distribute parallel for simd'
8215   /// after parsing of the associated statement.
8216   StmtResult ActOnOpenMPDistributeParallelForSimdDirective(
8217       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8218       SourceLocation EndLoc,
8219       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8220   /// \brief Called on well-formed '\#pragma omp distribute simd' after
8221   /// parsing of the associated statement.
8222   StmtResult ActOnOpenMPDistributeSimdDirective(
8223       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8224       SourceLocation EndLoc,
8225       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8226   /// \brief Called on well-formed '\#pragma omp target parallel for simd' after
8227   /// parsing of the associated statement.
8228   StmtResult ActOnOpenMPTargetParallelForSimdDirective(
8229       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8230       SourceLocation EndLoc,
8231       llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8232 
8233   /// Checks correctness of linear modifiers.
8234   bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind,
8235                                  SourceLocation LinLoc);
8236   /// Checks that the specified declaration matches requirements for the linear
8237   /// decls.
8238   bool CheckOpenMPLinearDecl(ValueDecl *D, SourceLocation ELoc,
8239                              OpenMPLinearClauseKind LinKind, QualType Type);
8240 
8241   /// \brief Called on well-formed '\#pragma omp declare simd' after parsing of
8242   /// the associated method/function.
8243   DeclGroupPtrTy ActOnOpenMPDeclareSimdDirective(
8244       DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS,
8245       Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds,
8246       ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears,
8247       ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR);
8248 
8249   OMPClause *ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind,
8250                                          Expr *Expr,
8251                                          SourceLocation StartLoc,
8252                                          SourceLocation LParenLoc,
8253                                          SourceLocation EndLoc);
8254   /// \brief Called on well-formed 'if' clause.
8255   OMPClause *ActOnOpenMPIfClause(OpenMPDirectiveKind NameModifier,
8256                                  Expr *Condition, SourceLocation StartLoc,
8257                                  SourceLocation LParenLoc,
8258                                  SourceLocation NameModifierLoc,
8259                                  SourceLocation ColonLoc,
8260                                  SourceLocation EndLoc);
8261   /// \brief Called on well-formed 'final' clause.
8262   OMPClause *ActOnOpenMPFinalClause(Expr *Condition, SourceLocation StartLoc,
8263                                     SourceLocation LParenLoc,
8264                                     SourceLocation EndLoc);
8265   /// \brief Called on well-formed 'num_threads' clause.
8266   OMPClause *ActOnOpenMPNumThreadsClause(Expr *NumThreads,
8267                                          SourceLocation StartLoc,
8268                                          SourceLocation LParenLoc,
8269                                          SourceLocation EndLoc);
8270   /// \brief Called on well-formed 'safelen' clause.
8271   OMPClause *ActOnOpenMPSafelenClause(Expr *Length,
8272                                       SourceLocation StartLoc,
8273                                       SourceLocation LParenLoc,
8274                                       SourceLocation EndLoc);
8275   /// \brief Called on well-formed 'simdlen' clause.
8276   OMPClause *ActOnOpenMPSimdlenClause(Expr *Length, SourceLocation StartLoc,
8277                                       SourceLocation LParenLoc,
8278                                       SourceLocation EndLoc);
8279   /// \brief Called on well-formed 'collapse' clause.
8280   OMPClause *ActOnOpenMPCollapseClause(Expr *NumForLoops,
8281                                        SourceLocation StartLoc,
8282                                        SourceLocation LParenLoc,
8283                                        SourceLocation EndLoc);
8284   /// \brief Called on well-formed 'ordered' clause.
8285   OMPClause *
8286   ActOnOpenMPOrderedClause(SourceLocation StartLoc, SourceLocation EndLoc,
8287                            SourceLocation LParenLoc = SourceLocation(),
8288                            Expr *NumForLoops = nullptr);
8289   /// \brief Called on well-formed 'grainsize' clause.
8290   OMPClause *ActOnOpenMPGrainsizeClause(Expr *Size, SourceLocation StartLoc,
8291                                         SourceLocation LParenLoc,
8292                                         SourceLocation EndLoc);
8293   /// \brief Called on well-formed 'num_tasks' clause.
8294   OMPClause *ActOnOpenMPNumTasksClause(Expr *NumTasks, SourceLocation StartLoc,
8295                                        SourceLocation LParenLoc,
8296                                        SourceLocation EndLoc);
8297   /// \brief Called on well-formed 'hint' clause.
8298   OMPClause *ActOnOpenMPHintClause(Expr *Hint, SourceLocation StartLoc,
8299                                    SourceLocation LParenLoc,
8300                                    SourceLocation EndLoc);
8301 
8302   OMPClause *ActOnOpenMPSimpleClause(OpenMPClauseKind Kind,
8303                                      unsigned Argument,
8304                                      SourceLocation ArgumentLoc,
8305                                      SourceLocation StartLoc,
8306                                      SourceLocation LParenLoc,
8307                                      SourceLocation EndLoc);
8308   /// \brief Called on well-formed 'default' clause.
8309   OMPClause *ActOnOpenMPDefaultClause(OpenMPDefaultClauseKind Kind,
8310                                       SourceLocation KindLoc,
8311                                       SourceLocation StartLoc,
8312                                       SourceLocation LParenLoc,
8313                                       SourceLocation EndLoc);
8314   /// \brief Called on well-formed 'proc_bind' clause.
8315   OMPClause *ActOnOpenMPProcBindClause(OpenMPProcBindClauseKind Kind,
8316                                        SourceLocation KindLoc,
8317                                        SourceLocation StartLoc,
8318                                        SourceLocation LParenLoc,
8319                                        SourceLocation EndLoc);
8320 
8321   OMPClause *ActOnOpenMPSingleExprWithArgClause(
8322       OpenMPClauseKind Kind, ArrayRef<unsigned> Arguments, Expr *Expr,
8323       SourceLocation StartLoc, SourceLocation LParenLoc,
8324       ArrayRef<SourceLocation> ArgumentsLoc, SourceLocation DelimLoc,
8325       SourceLocation EndLoc);
8326   /// \brief Called on well-formed 'schedule' clause.
8327   OMPClause *ActOnOpenMPScheduleClause(
8328       OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2,
8329       OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc,
8330       SourceLocation LParenLoc, SourceLocation M1Loc, SourceLocation M2Loc,
8331       SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc);
8332 
8333   OMPClause *ActOnOpenMPClause(OpenMPClauseKind Kind, SourceLocation StartLoc,
8334                                SourceLocation EndLoc);
8335   /// \brief Called on well-formed 'nowait' clause.
8336   OMPClause *ActOnOpenMPNowaitClause(SourceLocation StartLoc,
8337                                      SourceLocation EndLoc);
8338   /// \brief Called on well-formed 'untied' clause.
8339   OMPClause *ActOnOpenMPUntiedClause(SourceLocation StartLoc,
8340                                      SourceLocation EndLoc);
8341   /// \brief Called on well-formed 'mergeable' clause.
8342   OMPClause *ActOnOpenMPMergeableClause(SourceLocation StartLoc,
8343                                         SourceLocation EndLoc);
8344   /// \brief Called on well-formed 'read' clause.
8345   OMPClause *ActOnOpenMPReadClause(SourceLocation StartLoc,
8346                                    SourceLocation EndLoc);
8347   /// \brief Called on well-formed 'write' clause.
8348   OMPClause *ActOnOpenMPWriteClause(SourceLocation StartLoc,
8349                                     SourceLocation EndLoc);
8350   /// \brief Called on well-formed 'update' clause.
8351   OMPClause *ActOnOpenMPUpdateClause(SourceLocation StartLoc,
8352                                      SourceLocation EndLoc);
8353   /// \brief Called on well-formed 'capture' clause.
8354   OMPClause *ActOnOpenMPCaptureClause(SourceLocation StartLoc,
8355                                       SourceLocation EndLoc);
8356   /// \brief Called on well-formed 'seq_cst' clause.
8357   OMPClause *ActOnOpenMPSeqCstClause(SourceLocation StartLoc,
8358                                      SourceLocation EndLoc);
8359   /// \brief Called on well-formed 'threads' clause.
8360   OMPClause *ActOnOpenMPThreadsClause(SourceLocation StartLoc,
8361                                       SourceLocation EndLoc);
8362   /// \brief Called on well-formed 'simd' clause.
8363   OMPClause *ActOnOpenMPSIMDClause(SourceLocation StartLoc,
8364                                    SourceLocation EndLoc);
8365   /// \brief Called on well-formed 'nogroup' clause.
8366   OMPClause *ActOnOpenMPNogroupClause(SourceLocation StartLoc,
8367                                       SourceLocation EndLoc);
8368 
8369   OMPClause *ActOnOpenMPVarListClause(
8370       OpenMPClauseKind Kind, ArrayRef<Expr *> Vars, Expr *TailExpr,
8371       SourceLocation StartLoc, SourceLocation LParenLoc,
8372       SourceLocation ColonLoc, SourceLocation EndLoc,
8373       CXXScopeSpec &ReductionIdScopeSpec,
8374       const DeclarationNameInfo &ReductionId, OpenMPDependClauseKind DepKind,
8375       OpenMPLinearClauseKind LinKind, OpenMPMapClauseKind MapTypeModifier,
8376       OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
8377       SourceLocation DepLinMapLoc);
8378   /// \brief Called on well-formed 'private' clause.
8379   OMPClause *ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList,
8380                                       SourceLocation StartLoc,
8381                                       SourceLocation LParenLoc,
8382                                       SourceLocation EndLoc);
8383   /// \brief Called on well-formed 'firstprivate' clause.
8384   OMPClause *ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList,
8385                                            SourceLocation StartLoc,
8386                                            SourceLocation LParenLoc,
8387                                            SourceLocation EndLoc);
8388   /// \brief Called on well-formed 'lastprivate' clause.
8389   OMPClause *ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList,
8390                                           SourceLocation StartLoc,
8391                                           SourceLocation LParenLoc,
8392                                           SourceLocation EndLoc);
8393   /// \brief Called on well-formed 'shared' clause.
8394   OMPClause *ActOnOpenMPSharedClause(ArrayRef<Expr *> VarList,
8395                                      SourceLocation StartLoc,
8396                                      SourceLocation LParenLoc,
8397                                      SourceLocation EndLoc);
8398   /// \brief Called on well-formed 'reduction' clause.
8399   OMPClause *ActOnOpenMPReductionClause(
8400       ArrayRef<Expr *> VarList, SourceLocation StartLoc,
8401       SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc,
8402       CXXScopeSpec &ReductionIdScopeSpec,
8403       const DeclarationNameInfo &ReductionId,
8404       ArrayRef<Expr *> UnresolvedReductions = llvm::None);
8405   /// \brief Called on well-formed 'linear' clause.
8406   OMPClause *
8407   ActOnOpenMPLinearClause(ArrayRef<Expr *> VarList, Expr *Step,
8408                           SourceLocation StartLoc, SourceLocation LParenLoc,
8409                           OpenMPLinearClauseKind LinKind, SourceLocation LinLoc,
8410                           SourceLocation ColonLoc, SourceLocation EndLoc);
8411   /// \brief Called on well-formed 'aligned' clause.
8412   OMPClause *ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList,
8413                                       Expr *Alignment,
8414                                       SourceLocation StartLoc,
8415                                       SourceLocation LParenLoc,
8416                                       SourceLocation ColonLoc,
8417                                       SourceLocation EndLoc);
8418   /// \brief Called on well-formed 'copyin' clause.
8419   OMPClause *ActOnOpenMPCopyinClause(ArrayRef<Expr *> VarList,
8420                                      SourceLocation StartLoc,
8421                                      SourceLocation LParenLoc,
8422                                      SourceLocation EndLoc);
8423   /// \brief Called on well-formed 'copyprivate' clause.
8424   OMPClause *ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList,
8425                                           SourceLocation StartLoc,
8426                                           SourceLocation LParenLoc,
8427                                           SourceLocation EndLoc);
8428   /// \brief Called on well-formed 'flush' pseudo clause.
8429   OMPClause *ActOnOpenMPFlushClause(ArrayRef<Expr *> VarList,
8430                                     SourceLocation StartLoc,
8431                                     SourceLocation LParenLoc,
8432                                     SourceLocation EndLoc);
8433   /// \brief Called on well-formed 'depend' clause.
8434   OMPClause *
8435   ActOnOpenMPDependClause(OpenMPDependClauseKind DepKind, SourceLocation DepLoc,
8436                           SourceLocation ColonLoc, ArrayRef<Expr *> VarList,
8437                           SourceLocation StartLoc, SourceLocation LParenLoc,
8438                           SourceLocation EndLoc);
8439   /// \brief Called on well-formed 'device' clause.
8440   OMPClause *ActOnOpenMPDeviceClause(Expr *Device, SourceLocation StartLoc,
8441                                      SourceLocation LParenLoc,
8442                                      SourceLocation EndLoc);
8443   /// \brief Called on well-formed 'map' clause.
8444   OMPClause *
8445   ActOnOpenMPMapClause(OpenMPMapClauseKind MapTypeModifier,
8446                        OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
8447                        SourceLocation MapLoc, SourceLocation ColonLoc,
8448                        ArrayRef<Expr *> VarList, SourceLocation StartLoc,
8449                        SourceLocation LParenLoc, SourceLocation EndLoc);
8450   /// \brief Called on well-formed 'num_teams' clause.
8451   OMPClause *ActOnOpenMPNumTeamsClause(Expr *NumTeams, SourceLocation StartLoc,
8452                                        SourceLocation LParenLoc,
8453                                        SourceLocation EndLoc);
8454   /// \brief Called on well-formed 'thread_limit' clause.
8455   OMPClause *ActOnOpenMPThreadLimitClause(Expr *ThreadLimit,
8456                                           SourceLocation StartLoc,
8457                                           SourceLocation LParenLoc,
8458                                           SourceLocation EndLoc);
8459   /// \brief Called on well-formed 'priority' clause.
8460   OMPClause *ActOnOpenMPPriorityClause(Expr *Priority, SourceLocation StartLoc,
8461                                        SourceLocation LParenLoc,
8462                                        SourceLocation EndLoc);
8463   /// \brief Called on well-formed 'dist_schedule' clause.
8464   OMPClause *ActOnOpenMPDistScheduleClause(
8465       OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize,
8466       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KindLoc,
8467       SourceLocation CommaLoc, SourceLocation EndLoc);
8468   /// \brief Called on well-formed 'defaultmap' clause.
8469   OMPClause *ActOnOpenMPDefaultmapClause(
8470       OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind,
8471       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc,
8472       SourceLocation KindLoc, SourceLocation EndLoc);
8473   /// \brief Called on well-formed 'to' clause.
8474   OMPClause *ActOnOpenMPToClause(ArrayRef<Expr *> VarList,
8475                                  SourceLocation StartLoc,
8476                                  SourceLocation LParenLoc,
8477                                  SourceLocation EndLoc);
8478   /// \brief Called on well-formed 'from' clause.
8479   OMPClause *ActOnOpenMPFromClause(ArrayRef<Expr *> VarList,
8480                                    SourceLocation StartLoc,
8481                                    SourceLocation LParenLoc,
8482                                    SourceLocation EndLoc);
8483   /// Called on well-formed 'use_device_ptr' clause.
8484   OMPClause *ActOnOpenMPUseDevicePtrClause(ArrayRef<Expr *> VarList,
8485                                            SourceLocation StartLoc,
8486                                            SourceLocation LParenLoc,
8487                                            SourceLocation EndLoc);
8488   /// Called on well-formed 'is_device_ptr' clause.
8489   OMPClause *ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList,
8490                                           SourceLocation StartLoc,
8491                                           SourceLocation LParenLoc,
8492                                           SourceLocation EndLoc);
8493 
8494   /// \brief The kind of conversion being performed.
8495   enum CheckedConversionKind {
8496     /// \brief An implicit conversion.
8497     CCK_ImplicitConversion,
8498     /// \brief A C-style cast.
8499     CCK_CStyleCast,
8500     /// \brief A functional-style cast.
8501     CCK_FunctionalCast,
8502     /// \brief A cast other than a C-style cast.
8503     CCK_OtherCast
8504   };
8505 
8506   /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit
8507   /// cast.  If there is already an implicit cast, merge into the existing one.
8508   /// If isLvalue, the result of the cast is an lvalue.
8509   ExprResult ImpCastExprToType(Expr *E, QualType Type, CastKind CK,
8510                                ExprValueKind VK = VK_RValue,
8511                                const CXXCastPath *BasePath = nullptr,
8512                                CheckedConversionKind CCK
8513                                   = CCK_ImplicitConversion);
8514 
8515   /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
8516   /// to the conversion from scalar type ScalarTy to the Boolean type.
8517   static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy);
8518 
8519   /// IgnoredValueConversions - Given that an expression's result is
8520   /// syntactically ignored, perform any conversions that are
8521   /// required.
8522   ExprResult IgnoredValueConversions(Expr *E);
8523 
8524   // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts
8525   // functions and arrays to their respective pointers (C99 6.3.2.1).
8526   ExprResult UsualUnaryConversions(Expr *E);
8527 
8528   /// CallExprUnaryConversions - a special case of an unary conversion
8529   /// performed on a function designator of a call expression.
8530   ExprResult CallExprUnaryConversions(Expr *E);
8531 
8532   // DefaultFunctionArrayConversion - converts functions and arrays
8533   // to their respective pointers (C99 6.3.2.1).
8534   ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose = true);
8535 
8536   // DefaultFunctionArrayLvalueConversion - converts functions and
8537   // arrays to their respective pointers and performs the
8538   // lvalue-to-rvalue conversion.
8539   ExprResult DefaultFunctionArrayLvalueConversion(Expr *E,
8540                                                   bool Diagnose = true);
8541 
8542   // DefaultLvalueConversion - performs lvalue-to-rvalue conversion on
8543   // the operand.  This is DefaultFunctionArrayLvalueConversion,
8544   // except that it assumes the operand isn't of function or array
8545   // type.
8546   ExprResult DefaultLvalueConversion(Expr *E);
8547 
8548   // DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that
8549   // do not have a prototype. Integer promotions are performed on each
8550   // argument, and arguments that have type float are promoted to double.
8551   ExprResult DefaultArgumentPromotion(Expr *E);
8552 
8553   // Used for emitting the right warning by DefaultVariadicArgumentPromotion
8554   enum VariadicCallType {
8555     VariadicFunction,
8556     VariadicBlock,
8557     VariadicMethod,
8558     VariadicConstructor,
8559     VariadicDoesNotApply
8560   };
8561 
8562   VariadicCallType getVariadicCallType(FunctionDecl *FDecl,
8563                                        const FunctionProtoType *Proto,
8564                                        Expr *Fn);
8565 
8566   // Used for determining in which context a type is allowed to be passed to a
8567   // vararg function.
8568   enum VarArgKind {
8569     VAK_Valid,
8570     VAK_ValidInCXX11,
8571     VAK_Undefined,
8572     VAK_MSVCUndefined,
8573     VAK_Invalid
8574   };
8575 
8576   // Determines which VarArgKind fits an expression.
8577   VarArgKind isValidVarArgType(const QualType &Ty);
8578 
8579   /// Check to see if the given expression is a valid argument to a variadic
8580   /// function, issuing a diagnostic if not.
8581   void checkVariadicArgument(const Expr *E, VariadicCallType CT);
8582 
8583   /// Check to see if a given expression could have '.c_str()' called on it.
8584   bool hasCStrMethod(const Expr *E);
8585 
8586   /// GatherArgumentsForCall - Collector argument expressions for various
8587   /// form of call prototypes.
8588   bool GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl,
8589                               const FunctionProtoType *Proto,
8590                               unsigned FirstParam, ArrayRef<Expr *> Args,
8591                               SmallVectorImpl<Expr *> &AllArgs,
8592                               VariadicCallType CallType = VariadicDoesNotApply,
8593                               bool AllowExplicit = false,
8594                               bool IsListInitialization = false);
8595 
8596   // DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but
8597   // will create a runtime trap if the resulting type is not a POD type.
8598   ExprResult DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT,
8599                                               FunctionDecl *FDecl);
8600 
8601   // UsualArithmeticConversions - performs the UsualUnaryConversions on it's
8602   // operands and then handles various conversions that are common to binary
8603   // operators (C99 6.3.1.8). If both operands aren't arithmetic, this
8604   // routine returns the first non-arithmetic type found. The client is
8605   // responsible for emitting appropriate error diagnostics.
8606   QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS,
8607                                       bool IsCompAssign = false);
8608 
8609   /// AssignConvertType - All of the 'assignment' semantic checks return this
8610   /// enum to indicate whether the assignment was allowed.  These checks are
8611   /// done for simple assignments, as well as initialization, return from
8612   /// function, argument passing, etc.  The query is phrased in terms of a
8613   /// source and destination type.
8614   enum AssignConvertType {
8615     /// Compatible - the types are compatible according to the standard.
8616     Compatible,
8617 
8618     /// PointerToInt - The assignment converts a pointer to an int, which we
8619     /// accept as an extension.
8620     PointerToInt,
8621 
8622     /// IntToPointer - The assignment converts an int to a pointer, which we
8623     /// accept as an extension.
8624     IntToPointer,
8625 
8626     /// FunctionVoidPointer - The assignment is between a function pointer and
8627     /// void*, which the standard doesn't allow, but we accept as an extension.
8628     FunctionVoidPointer,
8629 
8630     /// IncompatiblePointer - The assignment is between two pointers types that
8631     /// are not compatible, but we accept them as an extension.
8632     IncompatiblePointer,
8633 
8634     /// IncompatiblePointer - The assignment is between two pointers types which
8635     /// point to integers which have a different sign, but are otherwise
8636     /// identical. This is a subset of the above, but broken out because it's by
8637     /// far the most common case of incompatible pointers.
8638     IncompatiblePointerSign,
8639 
8640     /// CompatiblePointerDiscardsQualifiers - The assignment discards
8641     /// c/v/r qualifiers, which we accept as an extension.
8642     CompatiblePointerDiscardsQualifiers,
8643 
8644     /// IncompatiblePointerDiscardsQualifiers - The assignment
8645     /// discards qualifiers that we don't permit to be discarded,
8646     /// like address spaces.
8647     IncompatiblePointerDiscardsQualifiers,
8648 
8649     /// IncompatibleNestedPointerQualifiers - The assignment is between two
8650     /// nested pointer types, and the qualifiers other than the first two
8651     /// levels differ e.g. char ** -> const char **, but we accept them as an
8652     /// extension.
8653     IncompatibleNestedPointerQualifiers,
8654 
8655     /// IncompatibleVectors - The assignment is between two vector types that
8656     /// have the same size, which we accept as an extension.
8657     IncompatibleVectors,
8658 
8659     /// IntToBlockPointer - The assignment converts an int to a block
8660     /// pointer. We disallow this.
8661     IntToBlockPointer,
8662 
8663     /// IncompatibleBlockPointer - The assignment is between two block
8664     /// pointers types that are not compatible.
8665     IncompatibleBlockPointer,
8666 
8667     /// IncompatibleObjCQualifiedId - The assignment is between a qualified
8668     /// id type and something else (that is incompatible with it). For example,
8669     /// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol.
8670     IncompatibleObjCQualifiedId,
8671 
8672     /// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an
8673     /// object with __weak qualifier.
8674     IncompatibleObjCWeakRef,
8675 
8676     /// Incompatible - We reject this conversion outright, it is invalid to
8677     /// represent it in the AST.
8678     Incompatible
8679   };
8680 
8681   /// DiagnoseAssignmentResult - Emit a diagnostic, if required, for the
8682   /// assignment conversion type specified by ConvTy.  This returns true if the
8683   /// conversion was invalid or false if the conversion was accepted.
8684   bool DiagnoseAssignmentResult(AssignConvertType ConvTy,
8685                                 SourceLocation Loc,
8686                                 QualType DstType, QualType SrcType,
8687                                 Expr *SrcExpr, AssignmentAction Action,
8688                                 bool *Complained = nullptr);
8689 
8690   /// IsValueInFlagEnum - Determine if a value is allowed as part of a flag
8691   /// enum. If AllowMask is true, then we also allow the complement of a valid
8692   /// value, to be used as a mask.
8693   bool IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
8694                          bool AllowMask) const;
8695 
8696   /// DiagnoseAssignmentEnum - Warn if assignment to enum is a constant
8697   /// integer not in the range of enum values.
8698   void DiagnoseAssignmentEnum(QualType DstType, QualType SrcType,
8699                               Expr *SrcExpr);
8700 
8701   /// CheckAssignmentConstraints - Perform type checking for assignment,
8702   /// argument passing, variable initialization, and function return values.
8703   /// C99 6.5.16.
8704   AssignConvertType CheckAssignmentConstraints(SourceLocation Loc,
8705                                                QualType LHSType,
8706                                                QualType RHSType);
8707 
8708   /// Check assignment constraints and optionally prepare for a conversion of
8709   /// the RHS to the LHS type. The conversion is prepared for if ConvertRHS
8710   /// is true.
8711   AssignConvertType CheckAssignmentConstraints(QualType LHSType,
8712                                                ExprResult &RHS,
8713                                                CastKind &Kind,
8714                                                bool ConvertRHS = true);
8715 
8716   // CheckSingleAssignmentConstraints - Currently used by
8717   // CheckAssignmentOperands, and ActOnReturnStmt. Prior to type checking,
8718   // this routine performs the default function/array converions, if ConvertRHS
8719   // is true.
8720   AssignConvertType CheckSingleAssignmentConstraints(QualType LHSType,
8721                                                      ExprResult &RHS,
8722                                                      bool Diagnose = true,
8723                                                      bool DiagnoseCFAudited = false,
8724                                                      bool ConvertRHS = true);
8725 
8726   // \brief If the lhs type is a transparent union, check whether we
8727   // can initialize the transparent union with the given expression.
8728   AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType,
8729                                                              ExprResult &RHS);
8730 
8731   bool IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType);
8732 
8733   bool CheckExceptionSpecCompatibility(Expr *From, QualType ToType);
8734 
8735   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
8736                                        AssignmentAction Action,
8737                                        bool AllowExplicit = false);
8738   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
8739                                        AssignmentAction Action,
8740                                        bool AllowExplicit,
8741                                        ImplicitConversionSequence& ICS);
8742   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
8743                                        const ImplicitConversionSequence& ICS,
8744                                        AssignmentAction Action,
8745                                        CheckedConversionKind CCK
8746                                           = CCK_ImplicitConversion);
8747   ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
8748                                        const StandardConversionSequence& SCS,
8749                                        AssignmentAction Action,
8750                                        CheckedConversionKind CCK);
8751 
8752   /// the following "Check" methods will return a valid/converted QualType
8753   /// or a null QualType (indicating an error diagnostic was issued).
8754 
8755   /// type checking binary operators (subroutines of CreateBuiltinBinOp).
8756   QualType InvalidOperands(SourceLocation Loc, ExprResult &LHS,
8757                            ExprResult &RHS);
8758   QualType CheckPointerToMemberOperands( // C++ 5.5
8759     ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK,
8760     SourceLocation OpLoc, bool isIndirect);
8761   QualType CheckMultiplyDivideOperands( // C99 6.5.5
8762     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign,
8763     bool IsDivide);
8764   QualType CheckRemainderOperands( // C99 6.5.5
8765     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
8766     bool IsCompAssign = false);
8767   QualType CheckAdditionOperands( // C99 6.5.6
8768     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
8769     BinaryOperatorKind Opc, QualType* CompLHSTy = nullptr);
8770   QualType CheckSubtractionOperands( // C99 6.5.6
8771     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
8772     QualType* CompLHSTy = nullptr);
8773   QualType CheckShiftOperands( // C99 6.5.7
8774     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
8775     BinaryOperatorKind Opc, bool IsCompAssign = false);
8776   QualType CheckCompareOperands( // C99 6.5.8/9
8777     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
8778     BinaryOperatorKind Opc, bool isRelational);
8779   QualType CheckBitwiseOperands( // C99 6.5.[10...12]
8780     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
8781     bool IsCompAssign = false);
8782   QualType CheckLogicalOperands( // C99 6.5.[13,14]
8783     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
8784     BinaryOperatorKind Opc);
8785   // CheckAssignmentOperands is used for both simple and compound assignment.
8786   // For simple assignment, pass both expressions and a null converted type.
8787   // For compound assignment, pass both expressions and the converted type.
8788   QualType CheckAssignmentOperands( // C99 6.5.16.[1,2]
8789     Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType);
8790 
8791   ExprResult checkPseudoObjectIncDec(Scope *S, SourceLocation OpLoc,
8792                                      UnaryOperatorKind Opcode, Expr *Op);
8793   ExprResult checkPseudoObjectAssignment(Scope *S, SourceLocation OpLoc,
8794                                          BinaryOperatorKind Opcode,
8795                                          Expr *LHS, Expr *RHS);
8796   ExprResult checkPseudoObjectRValue(Expr *E);
8797   Expr *recreateSyntacticForm(PseudoObjectExpr *E);
8798 
8799   QualType CheckConditionalOperands( // C99 6.5.15
8800     ExprResult &Cond, ExprResult &LHS, ExprResult &RHS,
8801     ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc);
8802   QualType CXXCheckConditionalOperands( // C++ 5.16
8803     ExprResult &cond, ExprResult &lhs, ExprResult &rhs,
8804     ExprValueKind &VK, ExprObjectKind &OK, SourceLocation questionLoc);
8805   QualType FindCompositePointerType(SourceLocation Loc, Expr *&E1, Expr *&E2,
8806                                     bool *NonStandardCompositeType = nullptr);
8807   QualType FindCompositePointerType(SourceLocation Loc,
8808                                     ExprResult &E1, ExprResult &E2,
8809                                     bool *NonStandardCompositeType = nullptr) {
8810     Expr *E1Tmp = E1.get(), *E2Tmp = E2.get();
8811     QualType Composite = FindCompositePointerType(Loc, E1Tmp, E2Tmp,
8812                                                   NonStandardCompositeType);
8813     E1 = E1Tmp;
8814     E2 = E2Tmp;
8815     return Composite;
8816   }
8817 
8818   QualType FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS,
8819                                         SourceLocation QuestionLoc);
8820 
8821   bool DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr,
8822                                   SourceLocation QuestionLoc);
8823 
8824   void DiagnoseAlwaysNonNullPointer(Expr *E,
8825                                     Expr::NullPointerConstantKind NullType,
8826                                     bool IsEqual, SourceRange Range);
8827 
8828   /// type checking for vector binary operators.
8829   QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS,
8830                                SourceLocation Loc, bool IsCompAssign,
8831                                bool AllowBothBool, bool AllowBoolConversion);
8832   QualType GetSignedVectorType(QualType V);
8833   QualType CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS,
8834                                       SourceLocation Loc, bool isRelational);
8835   QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS,
8836                                       SourceLocation Loc);
8837 
8838   bool areLaxCompatibleVectorTypes(QualType srcType, QualType destType);
8839   bool isLaxVectorConversion(QualType srcType, QualType destType);
8840 
8841   /// type checking declaration initializers (C99 6.7.8)
8842   bool CheckForConstantInitializer(Expr *e, QualType t);
8843 
8844   // type checking C++ declaration initializers (C++ [dcl.init]).
8845 
8846   /// ReferenceCompareResult - Expresses the result of comparing two
8847   /// types (cv1 T1 and cv2 T2) to determine their compatibility for the
8848   /// purposes of initialization by reference (C++ [dcl.init.ref]p4).
8849   enum ReferenceCompareResult {
8850     /// Ref_Incompatible - The two types are incompatible, so direct
8851     /// reference binding is not possible.
8852     Ref_Incompatible = 0,
8853     /// Ref_Related - The two types are reference-related, which means
8854     /// that their unqualified forms (T1 and T2) are either the same
8855     /// or T1 is a base class of T2.
8856     Ref_Related,
8857     /// Ref_Compatible_With_Added_Qualification - The two types are
8858     /// reference-compatible with added qualification, meaning that
8859     /// they are reference-compatible and the qualifiers on T1 (cv1)
8860     /// are greater than the qualifiers on T2 (cv2).
8861     Ref_Compatible_With_Added_Qualification,
8862     /// Ref_Compatible - The two types are reference-compatible and
8863     /// have equivalent qualifiers (cv1 == cv2).
8864     Ref_Compatible
8865   };
8866 
8867   ReferenceCompareResult CompareReferenceRelationship(SourceLocation Loc,
8868                                                       QualType T1, QualType T2,
8869                                                       bool &DerivedToBase,
8870                                                       bool &ObjCConversion,
8871                                                 bool &ObjCLifetimeConversion);
8872 
8873   ExprResult checkUnknownAnyCast(SourceRange TypeRange, QualType CastType,
8874                                  Expr *CastExpr, CastKind &CastKind,
8875                                  ExprValueKind &VK, CXXCastPath &Path);
8876 
8877   /// \brief Force an expression with unknown-type to an expression of the
8878   /// given type.
8879   ExprResult forceUnknownAnyToType(Expr *E, QualType ToType);
8880 
8881   /// \brief Type-check an expression that's being passed to an
8882   /// __unknown_anytype parameter.
8883   ExprResult checkUnknownAnyArg(SourceLocation callLoc,
8884                                 Expr *result, QualType &paramType);
8885 
8886   // CheckVectorCast - check type constraints for vectors.
8887   // Since vectors are an extension, there are no C standard reference for this.
8888   // We allow casting between vectors and integer datatypes of the same size.
8889   // returns true if the cast is invalid
8890   bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty,
8891                        CastKind &Kind);
8892 
8893   /// \brief Prepare `SplattedExpr` for a vector splat operation, adding
8894   /// implicit casts if necessary.
8895   ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr);
8896 
8897   // CheckExtVectorCast - check type constraints for extended vectors.
8898   // Since vectors are an extension, there are no C standard reference for this.
8899   // We allow casting between vectors and integer datatypes of the same size,
8900   // or vectors and the element type of that vector.
8901   // returns the cast expr
8902   ExprResult CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr,
8903                                 CastKind &Kind);
8904 
8905   ExprResult BuildCXXFunctionalCastExpr(TypeSourceInfo *TInfo,
8906                                         SourceLocation LParenLoc,
8907                                         Expr *CastExpr,
8908                                         SourceLocation RParenLoc);
8909 
8910   enum ARCConversionResult { ACR_okay, ACR_unbridged, ACR_error };
8911 
8912   /// \brief Checks for invalid conversions and casts between
8913   /// retainable pointers and other pointer kinds.
8914   ARCConversionResult CheckObjCARCConversion(SourceRange castRange,
8915                                              QualType castType, Expr *&op,
8916                                              CheckedConversionKind CCK,
8917                                              bool Diagnose = true,
8918                                              bool DiagnoseCFAudited = false,
8919                                              BinaryOperatorKind Opc = BO_PtrMemD
8920                                              );
8921 
8922   Expr *stripARCUnbridgedCast(Expr *e);
8923   void diagnoseARCUnbridgedCast(Expr *e);
8924 
8925   bool CheckObjCARCUnavailableWeakConversion(QualType castType,
8926                                              QualType ExprType);
8927 
8928   /// checkRetainCycles - Check whether an Objective-C message send
8929   /// might create an obvious retain cycle.
8930   void checkRetainCycles(ObjCMessageExpr *msg);
8931   void checkRetainCycles(Expr *receiver, Expr *argument);
8932   void checkRetainCycles(VarDecl *Var, Expr *Init);
8933 
8934   /// checkUnsafeAssigns - Check whether +1 expr is being assigned
8935   /// to weak/__unsafe_unretained type.
8936   bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS);
8937 
8938   /// checkUnsafeExprAssigns - Check whether +1 expr is being assigned
8939   /// to weak/__unsafe_unretained expression.
8940   void checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS);
8941 
8942   /// CheckMessageArgumentTypes - Check types in an Obj-C message send.
8943   /// \param Method - May be null.
8944   /// \param [out] ReturnType - The return type of the send.
8945   /// \return true iff there were any incompatible types.
8946   bool CheckMessageArgumentTypes(QualType ReceiverType,
8947                                  MultiExprArg Args, Selector Sel,
8948                                  ArrayRef<SourceLocation> SelectorLocs,
8949                                  ObjCMethodDecl *Method, bool isClassMessage,
8950                                  bool isSuperMessage,
8951                                  SourceLocation lbrac, SourceLocation rbrac,
8952                                  SourceRange RecRange,
8953                                  QualType &ReturnType, ExprValueKind &VK);
8954 
8955   /// \brief Determine the result of a message send expression based on
8956   /// the type of the receiver, the method expected to receive the message,
8957   /// and the form of the message send.
8958   QualType getMessageSendResultType(QualType ReceiverType,
8959                                     ObjCMethodDecl *Method,
8960                                     bool isClassMessage, bool isSuperMessage);
8961 
8962   /// \brief If the given expression involves a message send to a method
8963   /// with a related result type, emit a note describing what happened.
8964   void EmitRelatedResultTypeNote(const Expr *E);
8965 
8966   /// \brief Given that we had incompatible pointer types in a return
8967   /// statement, check whether we're in a method with a related result
8968   /// type, and if so, emit a note describing what happened.
8969   void EmitRelatedResultTypeNoteForReturn(QualType destType);
8970 
8971   class ConditionResult {
8972     Decl *ConditionVar;
8973     FullExprArg Condition;
8974     bool Invalid;
8975     bool HasKnownValue;
8976     bool KnownValue;
8977 
8978     friend class Sema;
ConditionResult(Sema & S,Decl * ConditionVar,FullExprArg Condition,bool IsConstexpr)8979     ConditionResult(Sema &S, Decl *ConditionVar, FullExprArg Condition,
8980                     bool IsConstexpr)
8981         : ConditionVar(ConditionVar), Condition(Condition), Invalid(false),
8982           HasKnownValue(IsConstexpr && Condition.get() &&
8983                         !Condition.get()->isValueDependent()),
8984           KnownValue(HasKnownValue &&
8985                      !!Condition.get()->EvaluateKnownConstInt(S.Context)) {}
ConditionResult(bool Invalid)8986     explicit ConditionResult(bool Invalid)
8987         : ConditionVar(nullptr), Condition(nullptr), Invalid(Invalid),
8988           HasKnownValue(false), KnownValue(false) {}
8989 
8990   public:
ConditionResult()8991     ConditionResult() : ConditionResult(false) {}
isInvalid()8992     bool isInvalid() const { return Invalid; }
get()8993     std::pair<VarDecl *, Expr *> get() const {
8994       return std::make_pair(cast_or_null<VarDecl>(ConditionVar),
8995                             Condition.get());
8996     }
getKnownValue()8997     llvm::Optional<bool> getKnownValue() const {
8998       if (!HasKnownValue)
8999         return None;
9000       return KnownValue;
9001     }
9002   };
ConditionError()9003   static ConditionResult ConditionError() { return ConditionResult(true); }
9004 
9005   enum class ConditionKind {
9006     Boolean,     ///< A boolean condition, from 'if', 'while', 'for', or 'do'.
9007     ConstexprIf, ///< A constant boolean condition from 'if constexpr'.
9008     Switch       ///< An integral condition for a 'switch' statement.
9009   };
9010 
9011   ConditionResult ActOnCondition(Scope *S, SourceLocation Loc,
9012                                  Expr *SubExpr, ConditionKind CK);
9013 
9014   ConditionResult ActOnConditionVariable(Decl *ConditionVar,
9015                                          SourceLocation StmtLoc,
9016                                          ConditionKind CK);
9017 
9018   DeclResult ActOnCXXConditionDeclaration(Scope *S, Declarator &D);
9019 
9020   ExprResult CheckConditionVariable(VarDecl *ConditionVar,
9021                                     SourceLocation StmtLoc,
9022                                     ConditionKind CK);
9023   ExprResult CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond);
9024 
9025   /// CheckBooleanCondition - Diagnose problems involving the use of
9026   /// the given expression as a boolean condition (e.g. in an if
9027   /// statement).  Also performs the standard function and array
9028   /// decays, possibly changing the input variable.
9029   ///
9030   /// \param Loc - A location associated with the condition, e.g. the
9031   /// 'if' keyword.
9032   /// \return true iff there were any errors
9033   ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E,
9034                                    bool IsConstexpr = false);
9035 
9036   /// DiagnoseAssignmentAsCondition - Given that an expression is
9037   /// being used as a boolean condition, warn if it's an assignment.
9038   void DiagnoseAssignmentAsCondition(Expr *E);
9039 
9040   /// \brief Redundant parentheses over an equality comparison can indicate
9041   /// that the user intended an assignment used as condition.
9042   void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE);
9043 
9044   /// CheckCXXBooleanCondition - Returns true if conversion to bool is invalid.
9045   ExprResult CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr = false);
9046 
9047   /// ConvertIntegerToTypeWarnOnOverflow - Convert the specified APInt to have
9048   /// the specified width and sign.  If an overflow occurs, detect it and emit
9049   /// the specified diagnostic.
9050   void ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &OldVal,
9051                                           unsigned NewWidth, bool NewSign,
9052                                           SourceLocation Loc, unsigned DiagID);
9053 
9054   /// Checks that the Objective-C declaration is declared in the global scope.
9055   /// Emits an error and marks the declaration as invalid if it's not declared
9056   /// in the global scope.
9057   bool CheckObjCDeclScope(Decl *D);
9058 
9059   /// \brief Abstract base class used for diagnosing integer constant
9060   /// expression violations.
9061   class VerifyICEDiagnoser {
9062   public:
9063     bool Suppress;
9064 
Suppress(Suppress)9065     VerifyICEDiagnoser(bool Suppress = false) : Suppress(Suppress) { }
9066 
9067     virtual void diagnoseNotICE(Sema &S, SourceLocation Loc, SourceRange SR) =0;
9068     virtual void diagnoseFold(Sema &S, SourceLocation Loc, SourceRange SR);
~VerifyICEDiagnoser()9069     virtual ~VerifyICEDiagnoser() { }
9070   };
9071 
9072   /// VerifyIntegerConstantExpression - Verifies that an expression is an ICE,
9073   /// and reports the appropriate diagnostics. Returns false on success.
9074   /// Can optionally return the value of the expression.
9075   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
9076                                              VerifyICEDiagnoser &Diagnoser,
9077                                              bool AllowFold = true);
9078   ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
9079                                              unsigned DiagID,
9080                                              bool AllowFold = true);
9081   ExprResult VerifyIntegerConstantExpression(Expr *E,
9082                                              llvm::APSInt *Result = nullptr);
9083 
9084   /// VerifyBitField - verifies that a bit field expression is an ICE and has
9085   /// the correct width, and that the field type is valid.
9086   /// Returns false on success.
9087   /// Can optionally return whether the bit-field is of width 0
9088   ExprResult VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName,
9089                             QualType FieldTy, bool IsMsStruct,
9090                             Expr *BitWidth, bool *ZeroWidth = nullptr);
9091 
9092   enum CUDAFunctionTarget {
9093     CFT_Device,
9094     CFT_Global,
9095     CFT_Host,
9096     CFT_HostDevice,
9097     CFT_InvalidTarget
9098   };
9099 
9100   CUDAFunctionTarget IdentifyCUDATarget(const FunctionDecl *D);
9101 
9102   // CUDA function call preference. Must be ordered numerically from
9103   // worst to best.
9104   enum CUDAFunctionPreference {
9105     CFP_Never,      // Invalid caller/callee combination.
9106     CFP_WrongSide,  // Calls from host-device to host or device
9107                     // function that do not match current compilation
9108                     // mode. Only in effect if
9109                     // LangOpts.CUDADisableTargetCallChecks is true.
9110     CFP_HostDevice, // Any calls to host/device functions.
9111     CFP_SameSide,   // Calls from host-device to host or device
9112                     // function matching current compilation mode.
9113     CFP_Native,     // host-to-host or device-to-device calls.
9114   };
9115 
9116   /// Identifies relative preference of a given Caller/Callee
9117   /// combination, based on their host/device attributes.
9118   /// \param Caller function which needs address of \p Callee.
9119   ///               nullptr in case of global context.
9120   /// \param Callee target function
9121   ///
9122   /// \returns preference value for particular Caller/Callee combination.
9123   CUDAFunctionPreference IdentifyCUDAPreference(const FunctionDecl *Caller,
9124                                                 const FunctionDecl *Callee);
9125 
9126   /// Determines whether Caller may invoke Callee, based on their CUDA
9127   /// host/device attributes.  Returns true if the call is not allowed.
CheckCUDATarget(const FunctionDecl * Caller,const FunctionDecl * Callee)9128   bool CheckCUDATarget(const FunctionDecl *Caller, const FunctionDecl *Callee) {
9129     return IdentifyCUDAPreference(Caller, Callee) == CFP_Never;
9130   }
9131 
9132   /// May add implicit CUDAHostAttr and CUDADeviceAttr attributes to FD,
9133   /// depending on FD and the current compilation settings.
9134   void maybeAddCUDAHostDeviceAttrs(Scope *S, FunctionDecl *FD,
9135                                    const LookupResult &Previous);
9136 
9137   /// Finds a function in \p Matches with highest calling priority
9138   /// from \p Caller context and erases all functions with lower
9139   /// calling priority.
9140   void EraseUnwantedCUDAMatches(const FunctionDecl *Caller,
9141                                 SmallVectorImpl<FunctionDecl *> &Matches);
9142   void EraseUnwantedCUDAMatches(const FunctionDecl *Caller,
9143                                 SmallVectorImpl<DeclAccessPair> &Matches);
9144   void EraseUnwantedCUDAMatches(
9145       const FunctionDecl *Caller,
9146       SmallVectorImpl<std::pair<DeclAccessPair, FunctionDecl *>> &Matches);
9147 
9148   /// Given a implicit special member, infer its CUDA target from the
9149   /// calls it needs to make to underlying base/field special members.
9150   /// \param ClassDecl the class for which the member is being created.
9151   /// \param CSM the kind of special member.
9152   /// \param MemberDecl the special member itself.
9153   /// \param ConstRHS true if this is a copy operation with a const object on
9154   ///        its RHS.
9155   /// \param Diagnose true if this call should emit diagnostics.
9156   /// \return true if there was an error inferring.
9157   /// The result of this call is implicit CUDA target attribute(s) attached to
9158   /// the member declaration.
9159   bool inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl,
9160                                                CXXSpecialMember CSM,
9161                                                CXXMethodDecl *MemberDecl,
9162                                                bool ConstRHS,
9163                                                bool Diagnose);
9164 
9165   /// \return true if \p CD can be considered empty according to CUDA
9166   /// (E.2.3.1 in CUDA 7.5 Programming guide).
9167   bool isEmptyCudaConstructor(SourceLocation Loc, CXXConstructorDecl *CD);
9168   bool isEmptyCudaDestructor(SourceLocation Loc, CXXDestructorDecl *CD);
9169 
9170   /// \name Code completion
9171   //@{
9172   /// \brief Describes the context in which code completion occurs.
9173   enum ParserCompletionContext {
9174     /// \brief Code completion occurs at top-level or namespace context.
9175     PCC_Namespace,
9176     /// \brief Code completion occurs within a class, struct, or union.
9177     PCC_Class,
9178     /// \brief Code completion occurs within an Objective-C interface, protocol,
9179     /// or category.
9180     PCC_ObjCInterface,
9181     /// \brief Code completion occurs within an Objective-C implementation or
9182     /// category implementation
9183     PCC_ObjCImplementation,
9184     /// \brief Code completion occurs within the list of instance variables
9185     /// in an Objective-C interface, protocol, category, or implementation.
9186     PCC_ObjCInstanceVariableList,
9187     /// \brief Code completion occurs following one or more template
9188     /// headers.
9189     PCC_Template,
9190     /// \brief Code completion occurs following one or more template
9191     /// headers within a class.
9192     PCC_MemberTemplate,
9193     /// \brief Code completion occurs within an expression.
9194     PCC_Expression,
9195     /// \brief Code completion occurs within a statement, which may
9196     /// also be an expression or a declaration.
9197     PCC_Statement,
9198     /// \brief Code completion occurs at the beginning of the
9199     /// initialization statement (or expression) in a for loop.
9200     PCC_ForInit,
9201     /// \brief Code completion occurs within the condition of an if,
9202     /// while, switch, or for statement.
9203     PCC_Condition,
9204     /// \brief Code completion occurs within the body of a function on a
9205     /// recovery path, where we do not have a specific handle on our position
9206     /// in the grammar.
9207     PCC_RecoveryInFunction,
9208     /// \brief Code completion occurs where only a type is permitted.
9209     PCC_Type,
9210     /// \brief Code completion occurs in a parenthesized expression, which
9211     /// might also be a type cast.
9212     PCC_ParenthesizedExpression,
9213     /// \brief Code completion occurs within a sequence of declaration
9214     /// specifiers within a function, method, or block.
9215     PCC_LocalDeclarationSpecifiers
9216   };
9217 
9218   void CodeCompleteModuleImport(SourceLocation ImportLoc, ModuleIdPath Path);
9219   void CodeCompleteOrdinaryName(Scope *S,
9220                                 ParserCompletionContext CompletionContext);
9221   void CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
9222                             bool AllowNonIdentifiers,
9223                             bool AllowNestedNameSpecifiers);
9224 
9225   struct CodeCompleteExpressionData;
9226   void CodeCompleteExpression(Scope *S,
9227                               const CodeCompleteExpressionData &Data);
9228   void CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
9229                                        SourceLocation OpLoc,
9230                                        bool IsArrow);
9231   void CodeCompletePostfixExpression(Scope *S, ExprResult LHS);
9232   void CodeCompleteTag(Scope *S, unsigned TagSpec);
9233   void CodeCompleteTypeQualifiers(DeclSpec &DS);
9234   void CodeCompleteBracketDeclarator(Scope *S);
9235   void CodeCompleteCase(Scope *S);
9236   void CodeCompleteCall(Scope *S, Expr *Fn, ArrayRef<Expr *> Args);
9237   void CodeCompleteConstructor(Scope *S, QualType Type, SourceLocation Loc,
9238                                ArrayRef<Expr *> Args);
9239   void CodeCompleteInitializer(Scope *S, Decl *D);
9240   void CodeCompleteReturn(Scope *S);
9241   void CodeCompleteAfterIf(Scope *S);
9242   void CodeCompleteAssignmentRHS(Scope *S, Expr *LHS);
9243 
9244   void CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
9245                                bool EnteringContext);
9246   void CodeCompleteUsing(Scope *S);
9247   void CodeCompleteUsingDirective(Scope *S);
9248   void CodeCompleteNamespaceDecl(Scope *S);
9249   void CodeCompleteNamespaceAliasDecl(Scope *S);
9250   void CodeCompleteOperatorName(Scope *S);
9251   void CodeCompleteConstructorInitializer(
9252                                 Decl *Constructor,
9253                                 ArrayRef<CXXCtorInitializer *> Initializers);
9254 
9255   void CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro,
9256                                     bool AfterAmpersand);
9257 
9258   void CodeCompleteObjCAtDirective(Scope *S);
9259   void CodeCompleteObjCAtVisibility(Scope *S);
9260   void CodeCompleteObjCAtStatement(Scope *S);
9261   void CodeCompleteObjCAtExpression(Scope *S);
9262   void CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS);
9263   void CodeCompleteObjCPropertyGetter(Scope *S);
9264   void CodeCompleteObjCPropertySetter(Scope *S);
9265   void CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
9266                                    bool IsParameter);
9267   void CodeCompleteObjCMessageReceiver(Scope *S);
9268   void CodeCompleteObjCSuperMessage(Scope *S, SourceLocation SuperLoc,
9269                                     ArrayRef<IdentifierInfo *> SelIdents,
9270                                     bool AtArgumentExpression);
9271   void CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver,
9272                                     ArrayRef<IdentifierInfo *> SelIdents,
9273                                     bool AtArgumentExpression,
9274                                     bool IsSuper = false);
9275   void CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver,
9276                                        ArrayRef<IdentifierInfo *> SelIdents,
9277                                        bool AtArgumentExpression,
9278                                        ObjCInterfaceDecl *Super = nullptr);
9279   void CodeCompleteObjCForCollection(Scope *S,
9280                                      DeclGroupPtrTy IterationVar);
9281   void CodeCompleteObjCSelector(Scope *S,
9282                                 ArrayRef<IdentifierInfo *> SelIdents);
9283   void CodeCompleteObjCProtocolReferences(
9284                                          ArrayRef<IdentifierLocPair> Protocols);
9285   void CodeCompleteObjCProtocolDecl(Scope *S);
9286   void CodeCompleteObjCInterfaceDecl(Scope *S);
9287   void CodeCompleteObjCSuperclass(Scope *S,
9288                                   IdentifierInfo *ClassName,
9289                                   SourceLocation ClassNameLoc);
9290   void CodeCompleteObjCImplementationDecl(Scope *S);
9291   void CodeCompleteObjCInterfaceCategory(Scope *S,
9292                                          IdentifierInfo *ClassName,
9293                                          SourceLocation ClassNameLoc);
9294   void CodeCompleteObjCImplementationCategory(Scope *S,
9295                                               IdentifierInfo *ClassName,
9296                                               SourceLocation ClassNameLoc);
9297   void CodeCompleteObjCPropertyDefinition(Scope *S);
9298   void CodeCompleteObjCPropertySynthesizeIvar(Scope *S,
9299                                               IdentifierInfo *PropertyName);
9300   void CodeCompleteObjCMethodDecl(Scope *S,
9301                                   bool IsInstanceMethod,
9302                                   ParsedType ReturnType);
9303   void CodeCompleteObjCMethodDeclSelector(Scope *S,
9304                                           bool IsInstanceMethod,
9305                                           bool AtParameterName,
9306                                           ParsedType ReturnType,
9307                                           ArrayRef<IdentifierInfo *> SelIdents);
9308   void CodeCompletePreprocessorDirective(bool InConditional);
9309   void CodeCompleteInPreprocessorConditionalExclusion(Scope *S);
9310   void CodeCompletePreprocessorMacroName(bool IsDefinition);
9311   void CodeCompletePreprocessorExpression();
9312   void CodeCompletePreprocessorMacroArgument(Scope *S,
9313                                              IdentifierInfo *Macro,
9314                                              MacroInfo *MacroInfo,
9315                                              unsigned Argument);
9316   void CodeCompleteNaturalLanguage();
9317   void GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator,
9318                                    CodeCompletionTUInfo &CCTUInfo,
9319                   SmallVectorImpl<CodeCompletionResult> &Results);
9320   //@}
9321 
9322   //===--------------------------------------------------------------------===//
9323   // Extra semantic analysis beyond the C type system
9324 
9325 public:
9326   SourceLocation getLocationOfStringLiteralByte(const StringLiteral *SL,
9327                                                 unsigned ByteNo) const;
9328 
9329 private:
9330   void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
9331                         const ArraySubscriptExpr *ASE=nullptr,
9332                         bool AllowOnePastEnd=true, bool IndexNegated=false);
9333   void CheckArrayAccess(const Expr *E);
9334   // Used to grab the relevant information from a FormatAttr and a
9335   // FunctionDeclaration.
9336   struct FormatStringInfo {
9337     unsigned FormatIdx;
9338     unsigned FirstDataArg;
9339     bool HasVAListArg;
9340   };
9341 
9342   static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember,
9343                                   FormatStringInfo *FSI);
9344   bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,
9345                          const FunctionProtoType *Proto);
9346   bool CheckObjCMethodCall(ObjCMethodDecl *Method, SourceLocation loc,
9347                            ArrayRef<const Expr *> Args);
9348   bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
9349                         const FunctionProtoType *Proto);
9350   bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto);
9351   void CheckConstructorCall(FunctionDecl *FDecl,
9352                             ArrayRef<const Expr *> Args,
9353                             const FunctionProtoType *Proto,
9354                             SourceLocation Loc);
9355 
9356   void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
9357                  ArrayRef<const Expr *> Args, bool IsMemberFunction,
9358                  SourceLocation Loc, SourceRange Range,
9359                  VariadicCallType CallType);
9360 
9361   bool CheckObjCString(Expr *Arg);
9362 
9363   ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl,
9364                                       unsigned BuiltinID, CallExpr *TheCall);
9365 
9366   bool CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall,
9367                                     unsigned MaxWidth);
9368   bool CheckNeonBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
9369   bool CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
9370 
9371   bool CheckAArch64BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
9372   bool CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
9373   bool CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
9374   bool CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
9375   bool CheckPPCBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
9376 
9377   bool SemaBuiltinVAStartImpl(CallExpr *TheCall);
9378   bool SemaBuiltinVAStart(CallExpr *TheCall);
9379   bool SemaBuiltinMSVAStart(CallExpr *TheCall);
9380   bool SemaBuiltinVAStartARM(CallExpr *Call);
9381   bool SemaBuiltinUnorderedCompare(CallExpr *TheCall);
9382   bool SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs);
9383 
9384 public:
9385   // Used by C++ template instantiation.
9386   ExprResult SemaBuiltinShuffleVector(CallExpr *TheCall);
9387   ExprResult SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo,
9388                                    SourceLocation BuiltinLoc,
9389                                    SourceLocation RParenLoc);
9390 
9391 private:
9392   bool SemaBuiltinPrefetch(CallExpr *TheCall);
9393   bool SemaBuiltinAssume(CallExpr *TheCall);
9394   bool SemaBuiltinAssumeAligned(CallExpr *TheCall);
9395   bool SemaBuiltinLongjmp(CallExpr *TheCall);
9396   bool SemaBuiltinSetjmp(CallExpr *TheCall);
9397   ExprResult SemaBuiltinAtomicOverloaded(ExprResult TheCallResult);
9398   ExprResult SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult);
9399   ExprResult SemaAtomicOpsOverloaded(ExprResult TheCallResult,
9400                                      AtomicExpr::AtomicOp Op);
9401   bool SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum,
9402                               llvm::APSInt &Result);
9403   bool SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum,
9404                                    int Low, int High);
9405   bool SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall,
9406                                 int ArgNum, unsigned ExpectedFieldNum,
9407                                 bool AllowName);
9408 public:
9409   enum FormatStringType {
9410     FST_Scanf,
9411     FST_Printf,
9412     FST_NSString,
9413     FST_Strftime,
9414     FST_Strfmon,
9415     FST_Kprintf,
9416     FST_FreeBSDKPrintf,
9417     FST_OSTrace,
9418     FST_Unknown
9419   };
9420   static FormatStringType GetFormatStringType(const FormatAttr *Format);
9421 
9422   bool FormatStringHasSArg(const StringLiteral *FExpr);
9423 
9424   static bool GetFormatNSStringIdx(const FormatAttr *Format, unsigned &Idx);
9425 
9426 private:
9427   bool CheckFormatArguments(const FormatAttr *Format,
9428                             ArrayRef<const Expr *> Args,
9429                             bool IsCXXMember,
9430                             VariadicCallType CallType,
9431                             SourceLocation Loc, SourceRange Range,
9432                             llvm::SmallBitVector &CheckedVarArgs);
9433   bool CheckFormatArguments(ArrayRef<const Expr *> Args,
9434                             bool HasVAListArg, unsigned format_idx,
9435                             unsigned firstDataArg, FormatStringType Type,
9436                             VariadicCallType CallType,
9437                             SourceLocation Loc, SourceRange range,
9438                             llvm::SmallBitVector &CheckedVarArgs);
9439 
9440   void CheckAbsoluteValueFunction(const CallExpr *Call,
9441                                   const FunctionDecl *FDecl,
9442                                   IdentifierInfo *FnInfo);
9443 
9444   void CheckMemaccessArguments(const CallExpr *Call,
9445                                unsigned BId,
9446                                IdentifierInfo *FnName);
9447 
9448   void CheckStrlcpycatArguments(const CallExpr *Call,
9449                                 IdentifierInfo *FnName);
9450 
9451   void CheckStrncatArguments(const CallExpr *Call,
9452                              IdentifierInfo *FnName);
9453 
9454   void CheckReturnValExpr(Expr *RetValExp, QualType lhsType,
9455                           SourceLocation ReturnLoc,
9456                           bool isObjCMethod = false,
9457                           const AttrVec *Attrs = nullptr,
9458                           const FunctionDecl *FD = nullptr);
9459 
9460   void CheckFloatComparison(SourceLocation Loc, Expr* LHS, Expr* RHS);
9461   void CheckImplicitConversions(Expr *E, SourceLocation CC = SourceLocation());
9462   void CheckBoolLikeConversion(Expr *E, SourceLocation CC);
9463   void CheckForIntOverflow(Expr *E);
9464   void CheckUnsequencedOperations(Expr *E);
9465 
9466   /// \brief Perform semantic checks on a completed expression. This will either
9467   /// be a full-expression or a default argument expression.
9468   void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(),
9469                           bool IsConstexpr = false);
9470 
9471   void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field,
9472                                    Expr *Init);
9473 
9474   /// \brief Check if the given expression contains 'break' or 'continue'
9475   /// statement that produces control flow different from GCC.
9476   void CheckBreakContinueBinding(Expr *E);
9477 
9478   /// \brief Check whether receiver is mutable ObjC container which
9479   /// attempts to add itself into the container
9480   void CheckObjCCircularContainer(ObjCMessageExpr *Message);
9481 
9482   void AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE);
9483   void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc,
9484                                  bool DeleteWasArrayForm);
9485 public:
9486   /// \brief Register a magic integral constant to be used as a type tag.
9487   void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind,
9488                                   uint64_t MagicValue, QualType Type,
9489                                   bool LayoutCompatible, bool MustBeNull);
9490 
9491   struct TypeTagData {
TypeTagDataTypeTagData9492     TypeTagData() {}
9493 
TypeTagDataTypeTagData9494     TypeTagData(QualType Type, bool LayoutCompatible, bool MustBeNull) :
9495         Type(Type), LayoutCompatible(LayoutCompatible),
9496         MustBeNull(MustBeNull)
9497     {}
9498 
9499     QualType Type;
9500 
9501     /// If true, \c Type should be compared with other expression's types for
9502     /// layout-compatibility.
9503     unsigned LayoutCompatible : 1;
9504     unsigned MustBeNull : 1;
9505   };
9506 
9507   /// A pair of ArgumentKind identifier and magic value.  This uniquely
9508   /// identifies the magic value.
9509   typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue;
9510 
9511 private:
9512   /// \brief A map from magic value to type information.
9513   std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>>
9514       TypeTagForDatatypeMagicValues;
9515 
9516   /// \brief Peform checks on a call of a function with argument_with_type_tag
9517   /// or pointer_with_type_tag attributes.
9518   void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr,
9519                                 const Expr * const *ExprArgs);
9520 
9521   /// \brief The parser's current scope.
9522   ///
9523   /// The parser maintains this state here.
9524   Scope *CurScope;
9525 
9526   mutable IdentifierInfo *Ident_super;
9527   mutable IdentifierInfo *Ident___float128;
9528 
9529   /// Nullability type specifiers.
9530   IdentifierInfo *Ident__Nonnull = nullptr;
9531   IdentifierInfo *Ident__Nullable = nullptr;
9532   IdentifierInfo *Ident__Null_unspecified = nullptr;
9533 
9534   IdentifierInfo *Ident_NSError = nullptr;
9535 
9536 protected:
9537   friend class Parser;
9538   friend class InitializationSequence;
9539   friend class ASTReader;
9540   friend class ASTDeclReader;
9541   friend class ASTWriter;
9542 
9543 public:
9544   /// Retrieve the keyword associated
9545   IdentifierInfo *getNullabilityKeyword(NullabilityKind nullability);
9546 
9547   /// The struct behind the CFErrorRef pointer.
9548   RecordDecl *CFError = nullptr;
9549 
9550   /// Retrieve the identifier "NSError".
9551   IdentifierInfo *getNSErrorIdent();
9552 
9553   /// \brief Retrieve the parser's current scope.
9554   ///
9555   /// This routine must only be used when it is certain that semantic analysis
9556   /// and the parser are in precisely the same context, which is not the case
9557   /// when, e.g., we are performing any kind of template instantiation.
9558   /// Therefore, the only safe places to use this scope are in the parser
9559   /// itself and in routines directly invoked from the parser and *never* from
9560   /// template substitution or instantiation.
getCurScope()9561   Scope *getCurScope() const { return CurScope; }
9562 
incrementMSManglingNumber()9563   void incrementMSManglingNumber() const {
9564     return CurScope->incrementMSManglingNumber();
9565   }
9566 
9567   IdentifierInfo *getSuperIdentifier() const;
9568   IdentifierInfo *getFloat128Identifier() const;
9569 
9570   Decl *getObjCDeclContext() const;
9571 
getCurLexicalContext()9572   DeclContext *getCurLexicalContext() const {
9573     return OriginalLexicalContext ? OriginalLexicalContext : CurContext;
9574   }
9575 
9576   AvailabilityResult getCurContextAvailability() const;
9577 
getCurObjCLexicalContext()9578   const DeclContext *getCurObjCLexicalContext() const {
9579     const DeclContext *DC = getCurLexicalContext();
9580     // A category implicitly has the attribute of the interface.
9581     if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(DC))
9582       DC = CatD->getClassInterface();
9583     return DC;
9584   }
9585 
9586   /// \brief To be used for checking whether the arguments being passed to
9587   /// function exceeds the number of parameters expected for it.
9588   static bool TooManyArguments(size_t NumParams, size_t NumArgs,
9589                                bool PartialOverloading = false) {
9590     // We check whether we're just after a comma in code-completion.
9591     if (NumArgs > 0 && PartialOverloading)
9592       return NumArgs + 1 > NumParams; // If so, we view as an extra argument.
9593     return NumArgs > NumParams;
9594   }
9595 
9596   // Emitting members of dllexported classes is delayed until the class
9597   // (including field initializers) is fully parsed.
9598   SmallVector<CXXRecordDecl*, 4> DelayedDllExportClasses;
9599 };
9600 
9601 /// \brief RAII object that enters a new expression evaluation context.
9602 class EnterExpressionEvaluationContext {
9603   Sema &Actions;
9604   bool Entered = true;
9605 
9606 public:
9607   EnterExpressionEvaluationContext(Sema &Actions,
9608                                    Sema::ExpressionEvaluationContext NewContext,
9609                                    Decl *LambdaContextDecl = nullptr,
9610                                    bool IsDecltype = false,
9611                                    bool ShouldEnter = true)
Actions(Actions)9612       : Actions(Actions), Entered(ShouldEnter) {
9613     if (Entered)
9614       Actions.PushExpressionEvaluationContext(NewContext, LambdaContextDecl,
9615                                               IsDecltype);
9616   }
9617   EnterExpressionEvaluationContext(Sema &Actions,
9618                                    Sema::ExpressionEvaluationContext NewContext,
9619                                    Sema::ReuseLambdaContextDecl_t,
9620                                    bool IsDecltype = false)
Actions(Actions)9621     : Actions(Actions) {
9622     Actions.PushExpressionEvaluationContext(NewContext,
9623                                             Sema::ReuseLambdaContextDecl,
9624                                             IsDecltype);
9625   }
9626 
~EnterExpressionEvaluationContext()9627   ~EnterExpressionEvaluationContext() {
9628     if (Entered)
9629       Actions.PopExpressionEvaluationContext();
9630   }
9631 };
9632 
9633 DeductionFailureInfo
9634 MakeDeductionFailureInfo(ASTContext &Context, Sema::TemplateDeductionResult TDK,
9635                          sema::TemplateDeductionInfo &Info);
9636 
9637 /// \brief Contains a late templated function.
9638 /// Will be parsed at the end of the translation unit, used by Sema & Parser.
9639 struct LateParsedTemplate {
9640   CachedTokens Toks;
9641   /// \brief The template function declaration to be late parsed.
9642   Decl *D;
9643 };
9644 
9645 } // end namespace clang
9646 
9647 #endif
9648