xref: /llvm-project-15.0.7/clang/lib/Sema/Sema.cpp (revision 6491076e)
1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the actions class which performs semantic analysis and
10 // builds an AST out of a parse stream.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/AST/ASTContext.h"
15 #include "clang/AST/ASTDiagnostic.h"
16 #include "clang/AST/DeclCXX.h"
17 #include "clang/AST/DeclFriend.h"
18 #include "clang/AST/DeclObjC.h"
19 #include "clang/AST/Expr.h"
20 #include "clang/AST/ExprCXX.h"
21 #include "clang/AST/PrettyDeclStackTrace.h"
22 #include "clang/AST/StmtCXX.h"
23 #include "clang/Basic/DiagnosticOptions.h"
24 #include "clang/Basic/PartialDiagnostic.h"
25 #include "clang/Basic/TargetInfo.h"
26 #include "clang/Lex/HeaderSearch.h"
27 #include "clang/Lex/Preprocessor.h"
28 #include "clang/Sema/CXXFieldCollector.h"
29 #include "clang/Sema/DelayedDiagnostic.h"
30 #include "clang/Sema/ExternalSemaSource.h"
31 #include "clang/Sema/Initialization.h"
32 #include "clang/Sema/MultiplexExternalSemaSource.h"
33 #include "clang/Sema/ObjCMethodList.h"
34 #include "clang/Sema/Scope.h"
35 #include "clang/Sema/ScopeInfo.h"
36 #include "clang/Sema/SemaConsumer.h"
37 #include "clang/Sema/SemaInternal.h"
38 #include "clang/Sema/TemplateDeduction.h"
39 #include "clang/Sema/TemplateInstCallback.h"
40 #include "llvm/ADT/DenseMap.h"
41 #include "llvm/ADT/SmallSet.h"
42 #include "llvm/Support/TimeProfiler.h"
43 
44 using namespace clang;
45 using namespace sema;
46 
47 SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) {
48   return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts);
49 }
50 
51 ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); }
52 
53 PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context,
54                                        const Preprocessor &PP) {
55   PrintingPolicy Policy = Context.getPrintingPolicy();
56   // In diagnostics, we print _Bool as bool if the latter is defined as the
57   // former.
58   Policy.Bool = Context.getLangOpts().Bool;
59   if (!Policy.Bool) {
60     if (const MacroInfo *BoolMacro = PP.getMacroInfo(Context.getBoolName())) {
61       Policy.Bool = BoolMacro->isObjectLike() &&
62                     BoolMacro->getNumTokens() == 1 &&
63                     BoolMacro->getReplacementToken(0).is(tok::kw__Bool);
64     }
65   }
66 
67   return Policy;
68 }
69 
70 void Sema::ActOnTranslationUnitScope(Scope *S) {
71   TUScope = S;
72   PushDeclContext(S, Context.getTranslationUnitDecl());
73 }
74 
75 namespace clang {
76 namespace sema {
77 
78 class SemaPPCallbacks : public PPCallbacks {
79   Sema *S = nullptr;
80   llvm::SmallVector<SourceLocation, 8> IncludeStack;
81 
82 public:
83   void set(Sema &S) { this->S = &S; }
84 
85   void reset() { S = nullptr; }
86 
87   virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
88                            SrcMgr::CharacteristicKind FileType,
89                            FileID PrevFID) override {
90     if (!S)
91       return;
92     switch (Reason) {
93     case EnterFile: {
94       SourceManager &SM = S->getSourceManager();
95       SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc));
96       if (IncludeLoc.isValid()) {
97         if (llvm::timeTraceProfilerEnabled()) {
98           const FileEntry *FE = SM.getFileEntryForID(SM.getFileID(Loc));
99           llvm::timeTraceProfilerBegin(
100               "Source", FE != nullptr ? FE->getName() : StringRef("<unknown>"));
101         }
102 
103         IncludeStack.push_back(IncludeLoc);
104         S->DiagnoseNonDefaultPragmaPack(
105             Sema::PragmaPackDiagnoseKind::NonDefaultStateAtInclude, IncludeLoc);
106       }
107       break;
108     }
109     case ExitFile:
110       if (!IncludeStack.empty()) {
111         if (llvm::timeTraceProfilerEnabled())
112           llvm::timeTraceProfilerEnd();
113 
114         S->DiagnoseNonDefaultPragmaPack(
115             Sema::PragmaPackDiagnoseKind::ChangedStateAtExit,
116             IncludeStack.pop_back_val());
117       }
118       break;
119     default:
120       break;
121     }
122   }
123 };
124 
125 } // end namespace sema
126 } // end namespace clang
127 
128 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
129            TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter)
130     : ExternalSource(nullptr), isMultiplexExternalSource(false),
131       FPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp),
132       Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()),
133       SourceMgr(PP.getSourceManager()), CollectStats(false),
134       CodeCompleter(CodeCompleter), CurContext(nullptr),
135       OriginalLexicalContext(nullptr), MSStructPragmaOn(false),
136       MSPointerToMemberRepresentationMethod(
137           LangOpts.getMSPointerToMemberRepresentationMethod()),
138       VtorDispStack(MSVtorDispAttr::Mode(LangOpts.VtorDispMode)), PackStack(0),
139       DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr),
140       CodeSegStack(nullptr), CurInitSeg(nullptr), VisContext(nullptr),
141       PragmaAttributeCurrentTargetDecl(nullptr),
142       IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr),
143       LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp),
144       StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr),
145       StdCoroutineTraitsCache(nullptr), CXXTypeInfoDecl(nullptr),
146       MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), NSValueDecl(nullptr),
147       NSStringDecl(nullptr), StringWithUTF8StringMethod(nullptr),
148       ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr),
149       ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr),
150       DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false),
151       TUKind(TUKind), NumSFINAEErrors(0),
152       FullyCheckedComparisonCategories(
153           static_cast<unsigned>(ComparisonCategoryType::Last) + 1),
154       AccessCheckingSFINAE(false), InNonInstantiationSFINAEContext(false),
155       NonInstantiationEntries(0), ArgumentPackSubstitutionIndex(-1),
156       CurrentInstantiationScope(nullptr), DisableTypoCorrection(false),
157       TyposCorrected(0), AnalysisWarnings(*this),
158       ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr),
159       CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) {
160   TUScope = nullptr;
161   isConstantEvaluatedOverride = false;
162 
163   LoadedExternalKnownNamespaces = false;
164   for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I)
165     NSNumberLiteralMethods[I] = nullptr;
166 
167   if (getLangOpts().ObjC)
168     NSAPIObj.reset(new NSAPI(Context));
169 
170   if (getLangOpts().CPlusPlus)
171     FieldCollector.reset(new CXXFieldCollector());
172 
173   // Tell diagnostics how to render things from the AST library.
174   Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context);
175 
176   ExprEvalContexts.emplace_back(
177       ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{},
178       nullptr, ExpressionEvaluationContextRecord::EK_Other);
179 
180   // Initialization of data sharing attributes stack for OpenMP
181   InitDataSharingAttributesStack();
182 
183   std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
184       llvm::make_unique<sema::SemaPPCallbacks>();
185   SemaPPCallbackHandler = Callbacks.get();
186   PP.addPPCallbacks(std::move(Callbacks));
187   SemaPPCallbackHandler->set(*this);
188 }
189 
190 void Sema::addImplicitTypedef(StringRef Name, QualType T) {
191   DeclarationName DN = &Context.Idents.get(Name);
192   if (IdResolver.begin(DN) == IdResolver.end())
193     PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope);
194 }
195 
196 void Sema::Initialize() {
197   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
198     SC->InitializeSema(*this);
199 
200   // Tell the external Sema source about this Sema object.
201   if (ExternalSemaSource *ExternalSema
202       = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
203     ExternalSema->InitializeSema(*this);
204 
205   // This needs to happen after ExternalSemaSource::InitializeSema(this) or we
206   // will not be able to merge any duplicate __va_list_tag decls correctly.
207   VAListTagName = PP.getIdentifierInfo("__va_list_tag");
208 
209   if (!TUScope)
210     return;
211 
212   // Initialize predefined 128-bit integer types, if needed.
213   if (Context.getTargetInfo().hasInt128Type()) {
214     // If either of the 128-bit integer types are unavailable to name lookup,
215     // define them now.
216     DeclarationName Int128 = &Context.Idents.get("__int128_t");
217     if (IdResolver.begin(Int128) == IdResolver.end())
218       PushOnScopeChains(Context.getInt128Decl(), TUScope);
219 
220     DeclarationName UInt128 = &Context.Idents.get("__uint128_t");
221     if (IdResolver.begin(UInt128) == IdResolver.end())
222       PushOnScopeChains(Context.getUInt128Decl(), TUScope);
223   }
224 
225 
226   // Initialize predefined Objective-C types:
227   if (getLangOpts().ObjC) {
228     // If 'SEL' does not yet refer to any declarations, make it refer to the
229     // predefined 'SEL'.
230     DeclarationName SEL = &Context.Idents.get("SEL");
231     if (IdResolver.begin(SEL) == IdResolver.end())
232       PushOnScopeChains(Context.getObjCSelDecl(), TUScope);
233 
234     // If 'id' does not yet refer to any declarations, make it refer to the
235     // predefined 'id'.
236     DeclarationName Id = &Context.Idents.get("id");
237     if (IdResolver.begin(Id) == IdResolver.end())
238       PushOnScopeChains(Context.getObjCIdDecl(), TUScope);
239 
240     // Create the built-in typedef for 'Class'.
241     DeclarationName Class = &Context.Idents.get("Class");
242     if (IdResolver.begin(Class) == IdResolver.end())
243       PushOnScopeChains(Context.getObjCClassDecl(), TUScope);
244 
245     // Create the built-in forward declaratino for 'Protocol'.
246     DeclarationName Protocol = &Context.Idents.get("Protocol");
247     if (IdResolver.begin(Protocol) == IdResolver.end())
248       PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope);
249   }
250 
251   // Create the internal type for the *StringMakeConstantString builtins.
252   DeclarationName ConstantString = &Context.Idents.get("__NSConstantString");
253   if (IdResolver.begin(ConstantString) == IdResolver.end())
254     PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope);
255 
256   // Initialize Microsoft "predefined C++ types".
257   if (getLangOpts().MSVCCompat) {
258     if (getLangOpts().CPlusPlus &&
259         IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end())
260       PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class),
261                         TUScope);
262 
263     addImplicitTypedef("size_t", Context.getSizeType());
264   }
265 
266   // Initialize predefined OpenCL types and supported extensions and (optional)
267   // core features.
268   if (getLangOpts().OpenCL) {
269     getOpenCLOptions().addSupport(
270         Context.getTargetInfo().getSupportedOpenCLOpts());
271     getOpenCLOptions().enableSupportedCore(getLangOpts());
272     addImplicitTypedef("sampler_t", Context.OCLSamplerTy);
273     addImplicitTypedef("event_t", Context.OCLEventTy);
274     if (getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) {
275       addImplicitTypedef("clk_event_t", Context.OCLClkEventTy);
276       addImplicitTypedef("queue_t", Context.OCLQueueTy);
277       addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy);
278       addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy));
279       addImplicitTypedef("atomic_uint",
280                          Context.getAtomicType(Context.UnsignedIntTy));
281       auto AtomicLongT = Context.getAtomicType(Context.LongTy);
282       addImplicitTypedef("atomic_long", AtomicLongT);
283       auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy);
284       addImplicitTypedef("atomic_ulong", AtomicULongT);
285       addImplicitTypedef("atomic_float",
286                          Context.getAtomicType(Context.FloatTy));
287       auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy);
288       addImplicitTypedef("atomic_double", AtomicDoubleT);
289       // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as
290       // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide.
291       addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy));
292       auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType());
293       addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT);
294       auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType());
295       addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT);
296       auto AtomicSizeT = Context.getAtomicType(Context.getSizeType());
297       addImplicitTypedef("atomic_size_t", AtomicSizeT);
298       auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType());
299       addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT);
300 
301       // OpenCL v2.0 s6.13.11.6:
302       // - The atomic_long and atomic_ulong types are supported if the
303       //   cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics
304       //   extensions are supported.
305       // - The atomic_double type is only supported if double precision
306       //   is supported and the cl_khr_int64_base_atomics and
307       //   cl_khr_int64_extended_atomics extensions are supported.
308       // - If the device address space is 64-bits, the data types
309       //   atomic_intptr_t, atomic_uintptr_t, atomic_size_t and
310       //   atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and
311       //   cl_khr_int64_extended_atomics extensions are supported.
312       std::vector<QualType> Atomic64BitTypes;
313       Atomic64BitTypes.push_back(AtomicLongT);
314       Atomic64BitTypes.push_back(AtomicULongT);
315       Atomic64BitTypes.push_back(AtomicDoubleT);
316       if (Context.getTypeSize(AtomicSizeT) == 64) {
317         Atomic64BitTypes.push_back(AtomicSizeT);
318         Atomic64BitTypes.push_back(AtomicIntPtrT);
319         Atomic64BitTypes.push_back(AtomicUIntPtrT);
320         Atomic64BitTypes.push_back(AtomicPtrDiffT);
321       }
322       for (auto &I : Atomic64BitTypes)
323         setOpenCLExtensionForType(I,
324             "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
325 
326       setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64");
327     }
328 
329     setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64");
330 
331 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \
332     setOpenCLExtensionForType(Context.Id, Ext);
333 #include "clang/Basic/OpenCLImageTypes.def"
334 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
335     addImplicitTypedef(#ExtType, Context.Id##Ty); \
336     setOpenCLExtensionForType(Context.Id##Ty, #Ext);
337 #include "clang/Basic/OpenCLExtensionTypes.def"
338     };
339 
340   if (Context.getTargetInfo().hasBuiltinMSVaList()) {
341     DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list");
342     if (IdResolver.begin(MSVaList) == IdResolver.end())
343       PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope);
344   }
345 
346   DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list");
347   if (IdResolver.begin(BuiltinVaList) == IdResolver.end())
348     PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope);
349 }
350 
351 Sema::~Sema() {
352   if (VisContext) FreeVisContext();
353 
354   // Kill all the active scopes.
355   for (sema::FunctionScopeInfo *FSI : FunctionScopes)
356     delete FSI;
357 
358   // Tell the SemaConsumer to forget about us; we're going out of scope.
359   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
360     SC->ForgetSema();
361 
362   // Detach from the external Sema source.
363   if (ExternalSemaSource *ExternalSema
364         = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
365     ExternalSema->ForgetSema();
366 
367   // If Sema's ExternalSource is the multiplexer - we own it.
368   if (isMultiplexExternalSource)
369     delete ExternalSource;
370 
371   threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache);
372 
373   // Destroys data sharing attributes stack for OpenMP
374   DestroyDataSharingAttributesStack();
375 
376   // Detach from the PP callback handler which outlives Sema since it's owned
377   // by the preprocessor.
378   SemaPPCallbackHandler->reset();
379 
380   assert(DelayedTypos.empty() && "Uncorrected typos!");
381 }
382 
383 /// makeUnavailableInSystemHeader - There is an error in the current
384 /// context.  If we're still in a system header, and we can plausibly
385 /// make the relevant declaration unavailable instead of erroring, do
386 /// so and return true.
387 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
388                                       UnavailableAttr::ImplicitReason reason) {
389   // If we're not in a function, it's an error.
390   FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
391   if (!fn) return false;
392 
393   // If we're in template instantiation, it's an error.
394   if (inTemplateInstantiation())
395     return false;
396 
397   // If that function's not in a system header, it's an error.
398   if (!Context.getSourceManager().isInSystemHeader(loc))
399     return false;
400 
401   // If the function is already unavailable, it's not an error.
402   if (fn->hasAttr<UnavailableAttr>()) return true;
403 
404   fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc));
405   return true;
406 }
407 
408 ASTMutationListener *Sema::getASTMutationListener() const {
409   return getASTConsumer().GetASTMutationListener();
410 }
411 
412 ///Registers an external source. If an external source already exists,
413 /// creates a multiplex external source and appends to it.
414 ///
415 ///\param[in] E - A non-null external sema source.
416 ///
417 void Sema::addExternalSource(ExternalSemaSource *E) {
418   assert(E && "Cannot use with NULL ptr");
419 
420   if (!ExternalSource) {
421     ExternalSource = E;
422     return;
423   }
424 
425   if (isMultiplexExternalSource)
426     static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E);
427   else {
428     ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E);
429     isMultiplexExternalSource = true;
430   }
431 }
432 
433 /// Print out statistics about the semantic analysis.
434 void Sema::PrintStats() const {
435   llvm::errs() << "\n*** Semantic Analysis Stats:\n";
436   llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
437 
438   BumpAlloc.PrintStats();
439   AnalysisWarnings.PrintStats();
440 }
441 
442 void Sema::diagnoseNullableToNonnullConversion(QualType DstType,
443                                                QualType SrcType,
444                                                SourceLocation Loc) {
445   Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context);
446   if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable)
447     return;
448 
449   Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context);
450   if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull)
451     return;
452 
453   Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
454 }
455 
456 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) {
457   if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant,
458                       E->getBeginLoc()))
459     return;
460   // nullptr only exists from C++11 on, so don't warn on its absence earlier.
461   if (!getLangOpts().CPlusPlus11)
462     return;
463 
464   if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
465     return;
466   if (E->IgnoreParenImpCasts()->getType()->isNullPtrType())
467     return;
468 
469   // If it is a macro from system header, and if the macro name is not "NULL",
470   // do not warn.
471   SourceLocation MaybeMacroLoc = E->getBeginLoc();
472   if (Diags.getSuppressSystemWarnings() &&
473       SourceMgr.isInSystemMacro(MaybeMacroLoc) &&
474       !findMacroSpelling(MaybeMacroLoc, "NULL"))
475     return;
476 
477   Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant)
478       << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr");
479 }
480 
481 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
482 /// If there is already an implicit cast, merge into the existing one.
483 /// The result is of the given category.
484 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
485                                    CastKind Kind, ExprValueKind VK,
486                                    const CXXCastPath *BasePath,
487                                    CheckedConversionKind CCK) {
488 #ifndef NDEBUG
489   if (VK == VK_RValue && !E->isRValue()) {
490     switch (Kind) {
491     default:
492       llvm_unreachable("can't implicitly cast lvalue to rvalue with this cast "
493                        "kind");
494     case CK_Dependent:
495     case CK_LValueToRValue:
496     case CK_ArrayToPointerDecay:
497     case CK_FunctionToPointerDecay:
498     case CK_ToVoid:
499     case CK_NonAtomicToAtomic:
500       break;
501     }
502   }
503   assert((VK == VK_RValue || Kind == CK_Dependent || !E->isRValue()) &&
504          "can't cast rvalue to lvalue");
505 #endif
506 
507   diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getBeginLoc());
508   diagnoseZeroToNullptrConversion(Kind, E);
509 
510   QualType ExprTy = Context.getCanonicalType(E->getType());
511   QualType TypeTy = Context.getCanonicalType(Ty);
512 
513   if (ExprTy == TypeTy)
514     return E;
515 
516   // C++1z [conv.array]: The temporary materialization conversion is applied.
517   // We also use this to fuel C++ DR1213, which applies to C++11 onwards.
518   if (Kind == CK_ArrayToPointerDecay && getLangOpts().CPlusPlus &&
519       E->getValueKind() == VK_RValue) {
520     // The temporary is an lvalue in C++98 and an xvalue otherwise.
521     ExprResult Materialized = CreateMaterializeTemporaryExpr(
522         E->getType(), E, !getLangOpts().CPlusPlus11);
523     if (Materialized.isInvalid())
524       return ExprError();
525     E = Materialized.get();
526   }
527 
528   if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) {
529     if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
530       ImpCast->setType(Ty);
531       ImpCast->setValueKind(VK);
532       return E;
533     }
534   }
535 
536   return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK);
537 }
538 
539 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
540 /// to the conversion from scalar type ScalarTy to the Boolean type.
541 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) {
542   switch (ScalarTy->getScalarTypeKind()) {
543   case Type::STK_Bool: return CK_NoOp;
544   case Type::STK_CPointer: return CK_PointerToBoolean;
545   case Type::STK_BlockPointer: return CK_PointerToBoolean;
546   case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean;
547   case Type::STK_MemberPointer: return CK_MemberPointerToBoolean;
548   case Type::STK_Integral: return CK_IntegralToBoolean;
549   case Type::STK_Floating: return CK_FloatingToBoolean;
550   case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean;
551   case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean;
552   case Type::STK_FixedPoint: return CK_FixedPointToBoolean;
553   }
554   llvm_unreachable("unknown scalar type kind");
555 }
556 
557 /// Used to prune the decls of Sema's UnusedFileScopedDecls vector.
558 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
559   if (D->getMostRecentDecl()->isUsed())
560     return true;
561 
562   if (D->isExternallyVisible())
563     return true;
564 
565   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
566     // If this is a function template and none of its specializations is used,
567     // we should warn.
568     if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate())
569       for (const auto *Spec : Template->specializations())
570         if (ShouldRemoveFromUnused(SemaRef, Spec))
571           return true;
572 
573     // UnusedFileScopedDecls stores the first declaration.
574     // The declaration may have become definition so check again.
575     const FunctionDecl *DeclToCheck;
576     if (FD->hasBody(DeclToCheck))
577       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
578 
579     // Later redecls may add new information resulting in not having to warn,
580     // so check again.
581     DeclToCheck = FD->getMostRecentDecl();
582     if (DeclToCheck != FD)
583       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
584   }
585 
586   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
587     // If a variable usable in constant expressions is referenced,
588     // don't warn if it isn't used: if the value of a variable is required
589     // for the computation of a constant expression, it doesn't make sense to
590     // warn even if the variable isn't odr-used.  (isReferenced doesn't
591     // precisely reflect that, but it's a decent approximation.)
592     if (VD->isReferenced() &&
593         VD->mightBeUsableInConstantExpressions(SemaRef->Context))
594       return true;
595 
596     if (VarTemplateDecl *Template = VD->getDescribedVarTemplate())
597       // If this is a variable template and none of its specializations is used,
598       // we should warn.
599       for (const auto *Spec : Template->specializations())
600         if (ShouldRemoveFromUnused(SemaRef, Spec))
601           return true;
602 
603     // UnusedFileScopedDecls stores the first declaration.
604     // The declaration may have become definition so check again.
605     const VarDecl *DeclToCheck = VD->getDefinition();
606     if (DeclToCheck)
607       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
608 
609     // Later redecls may add new information resulting in not having to warn,
610     // so check again.
611     DeclToCheck = VD->getMostRecentDecl();
612     if (DeclToCheck != VD)
613       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
614   }
615 
616   return false;
617 }
618 
619 static bool isFunctionOrVarDeclExternC(NamedDecl *ND) {
620   if (auto *FD = dyn_cast<FunctionDecl>(ND))
621     return FD->isExternC();
622   return cast<VarDecl>(ND)->isExternC();
623 }
624 
625 /// Determine whether ND is an external-linkage function or variable whose
626 /// type has no linkage.
627 bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) {
628   // Note: it's not quite enough to check whether VD has UniqueExternalLinkage,
629   // because we also want to catch the case where its type has VisibleNoLinkage,
630   // which does not affect the linkage of VD.
631   return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() &&
632          !isExternalFormalLinkage(VD->getType()->getLinkage()) &&
633          !isFunctionOrVarDeclExternC(VD);
634 }
635 
636 /// Obtains a sorted list of functions and variables that are undefined but
637 /// ODR-used.
638 void Sema::getUndefinedButUsed(
639     SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) {
640   for (const auto &UndefinedUse : UndefinedButUsed) {
641     NamedDecl *ND = UndefinedUse.first;
642 
643     // Ignore attributes that have become invalid.
644     if (ND->isInvalidDecl()) continue;
645 
646     // __attribute__((weakref)) is basically a definition.
647     if (ND->hasAttr<WeakRefAttr>()) continue;
648 
649     if (isa<CXXDeductionGuideDecl>(ND))
650       continue;
651 
652     if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) {
653       // An exported function will always be emitted when defined, so even if
654       // the function is inline, it doesn't have to be emitted in this TU. An
655       // imported function implies that it has been exported somewhere else.
656       continue;
657     }
658 
659     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) {
660       if (FD->isDefined())
661         continue;
662       if (FD->isExternallyVisible() &&
663           !isExternalWithNoLinkageType(FD) &&
664           !FD->getMostRecentDecl()->isInlined() &&
665           !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
666         continue;
667       if (FD->getBuiltinID())
668         continue;
669     } else {
670       auto *VD = cast<VarDecl>(ND);
671       if (VD->hasDefinition() != VarDecl::DeclarationOnly)
672         continue;
673       if (VD->isExternallyVisible() &&
674           !isExternalWithNoLinkageType(VD) &&
675           !VD->getMostRecentDecl()->isInline() &&
676           !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
677         continue;
678 
679       // Skip VarDecls that lack formal definitions but which we know are in
680       // fact defined somewhere.
681       if (VD->isKnownToBeDefined())
682         continue;
683     }
684 
685     Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
686   }
687 }
688 
689 /// checkUndefinedButUsed - Check for undefined objects with internal linkage
690 /// or that are inline.
691 static void checkUndefinedButUsed(Sema &S) {
692   if (S.UndefinedButUsed.empty()) return;
693 
694   // Collect all the still-undefined entities with internal linkage.
695   SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined;
696   S.getUndefinedButUsed(Undefined);
697   if (Undefined.empty()) return;
698 
699   for (auto Undef : Undefined) {
700     ValueDecl *VD = cast<ValueDecl>(Undef.first);
701     SourceLocation UseLoc = Undef.second;
702 
703     if (S.isExternalWithNoLinkageType(VD)) {
704       // C++ [basic.link]p8:
705       //   A type without linkage shall not be used as the type of a variable
706       //   or function with external linkage unless
707       //    -- the entity has C language linkage
708       //    -- the entity is not odr-used or is defined in the same TU
709       //
710       // As an extension, accept this in cases where the type is externally
711       // visible, since the function or variable actually can be defined in
712       // another translation unit in that case.
713       S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage())
714                                     ? diag::ext_undefined_internal_type
715                                     : diag::err_undefined_internal_type)
716         << isa<VarDecl>(VD) << VD;
717     } else if (!VD->isExternallyVisible()) {
718       // FIXME: We can promote this to an error. The function or variable can't
719       // be defined anywhere else, so the program must necessarily violate the
720       // one definition rule.
721       S.Diag(VD->getLocation(), diag::warn_undefined_internal)
722         << isa<VarDecl>(VD) << VD;
723     } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {
724       (void)FD;
725       assert(FD->getMostRecentDecl()->isInlined() &&
726              "used object requires definition but isn't inline or internal?");
727       // FIXME: This is ill-formed; we should reject.
728       S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD;
729     } else {
730       assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
731              "used var requires definition but isn't inline or internal?");
732       S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;
733     }
734     if (UseLoc.isValid())
735       S.Diag(UseLoc, diag::note_used_here);
736   }
737 
738   S.UndefinedButUsed.clear();
739 }
740 
741 void Sema::LoadExternalWeakUndeclaredIdentifiers() {
742   if (!ExternalSource)
743     return;
744 
745   SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs;
746   ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs);
747   for (auto &WeakID : WeakIDs)
748     WeakUndeclaredIdentifiers.insert(WeakID);
749 }
750 
751 
752 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap;
753 
754 /// Returns true, if all methods and nested classes of the given
755 /// CXXRecordDecl are defined in this translation unit.
756 ///
757 /// Should only be called from ActOnEndOfTranslationUnit so that all
758 /// definitions are actually read.
759 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD,
760                                             RecordCompleteMap &MNCComplete) {
761   RecordCompleteMap::iterator Cache = MNCComplete.find(RD);
762   if (Cache != MNCComplete.end())
763     return Cache->second;
764   if (!RD->isCompleteDefinition())
765     return false;
766   bool Complete = true;
767   for (DeclContext::decl_iterator I = RD->decls_begin(),
768                                   E = RD->decls_end();
769        I != E && Complete; ++I) {
770     if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I))
771       Complete = M->isDefined() || M->isDefaulted() ||
772                  (M->isPure() && !isa<CXXDestructorDecl>(M));
773     else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I))
774       // If the template function is marked as late template parsed at this
775       // point, it has not been instantiated and therefore we have not
776       // performed semantic analysis on it yet, so we cannot know if the type
777       // can be considered complete.
778       Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
779                   F->getTemplatedDecl()->isDefined();
780     else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
781       if (R->isInjectedClassName())
782         continue;
783       if (R->hasDefinition())
784         Complete = MethodsAndNestedClassesComplete(R->getDefinition(),
785                                                    MNCComplete);
786       else
787         Complete = false;
788     }
789   }
790   MNCComplete[RD] = Complete;
791   return Complete;
792 }
793 
794 /// Returns true, if the given CXXRecordDecl is fully defined in this
795 /// translation unit, i.e. all methods are defined or pure virtual and all
796 /// friends, friend functions and nested classes are fully defined in this
797 /// translation unit.
798 ///
799 /// Should only be called from ActOnEndOfTranslationUnit so that all
800 /// definitions are actually read.
801 static bool IsRecordFullyDefined(const CXXRecordDecl *RD,
802                                  RecordCompleteMap &RecordsComplete,
803                                  RecordCompleteMap &MNCComplete) {
804   RecordCompleteMap::iterator Cache = RecordsComplete.find(RD);
805   if (Cache != RecordsComplete.end())
806     return Cache->second;
807   bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete);
808   for (CXXRecordDecl::friend_iterator I = RD->friend_begin(),
809                                       E = RD->friend_end();
810        I != E && Complete; ++I) {
811     // Check if friend classes and methods are complete.
812     if (TypeSourceInfo *TSI = (*I)->getFriendType()) {
813       // Friend classes are available as the TypeSourceInfo of the FriendDecl.
814       if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
815         Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete);
816       else
817         Complete = false;
818     } else {
819       // Friend functions are available through the NamedDecl of FriendDecl.
820       if (const FunctionDecl *FD =
821           dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
822         Complete = FD->isDefined();
823       else
824         // This is a template friend, give up.
825         Complete = false;
826     }
827   }
828   RecordsComplete[RD] = Complete;
829   return Complete;
830 }
831 
832 void Sema::emitAndClearUnusedLocalTypedefWarnings() {
833   if (ExternalSource)
834     ExternalSource->ReadUnusedLocalTypedefNameCandidates(
835         UnusedLocalTypedefNameCandidates);
836   for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {
837     if (TD->isReferenced())
838       continue;
839     Diag(TD->getLocation(), diag::warn_unused_local_typedef)
840         << isa<TypeAliasDecl>(TD) << TD->getDeclName();
841   }
842   UnusedLocalTypedefNameCandidates.clear();
843 }
844 
845 /// This is called before the very first declaration in the translation unit
846 /// is parsed. Note that the ASTContext may have already injected some
847 /// declarations.
848 void Sema::ActOnStartOfTranslationUnit() {
849   if (getLangOpts().ModulesTS &&
850       (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface ||
851        getLangOpts().getCompilingModule() == LangOptions::CMK_None)) {
852     // We start in an implied global module fragment.
853     SourceLocation StartOfTU =
854         SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
855     ActOnGlobalModuleFragmentDecl(StartOfTU);
856     ModuleScopes.back().ImplicitGlobalModuleFragment = true;
857   }
858 }
859 
860 void Sema::ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind) {
861   // No explicit actions are required at the end of the global module fragment.
862   if (Kind == TUFragmentKind::Global)
863     return;
864 
865   // Transfer late parsed template instantiations over to the pending template
866   // instantiation list. During normal compilation, the late template parser
867   // will be installed and instantiating these templates will succeed.
868   //
869   // If we are building a TU prefix for serialization, it is also safe to
870   // transfer these over, even though they are not parsed. The end of the TU
871   // should be outside of any eager template instantiation scope, so when this
872   // AST is deserialized, these templates will not be parsed until the end of
873   // the combined TU.
874   PendingInstantiations.insert(PendingInstantiations.end(),
875                                LateParsedInstantiations.begin(),
876                                LateParsedInstantiations.end());
877   LateParsedInstantiations.clear();
878 
879   // If DefinedUsedVTables ends up marking any virtual member functions it
880   // might lead to more pending template instantiations, which we then need
881   // to instantiate.
882   DefineUsedVTables();
883 
884   // C++: Perform implicit template instantiations.
885   //
886   // FIXME: When we perform these implicit instantiations, we do not
887   // carefully keep track of the point of instantiation (C++ [temp.point]).
888   // This means that name lookup that occurs within the template
889   // instantiation will always happen at the end of the translation unit,
890   // so it will find some names that are not required to be found. This is
891   // valid, but we could do better by diagnosing if an instantiation uses a
892   // name that was not visible at its first point of instantiation.
893   if (ExternalSource) {
894     // Load pending instantiations from the external source.
895     SmallVector<PendingImplicitInstantiation, 4> Pending;
896     ExternalSource->ReadPendingInstantiations(Pending);
897     for (auto PII : Pending)
898       if (auto Func = dyn_cast<FunctionDecl>(PII.first))
899         Func->setInstantiationIsPending(true);
900     PendingInstantiations.insert(PendingInstantiations.begin(),
901                                  Pending.begin(), Pending.end());
902   }
903 
904   {
905     llvm::TimeTraceScope TimeScope("PerformPendingInstantiations",
906                                    StringRef(""));
907     PerformPendingInstantiations();
908   }
909 
910   assert(LateParsedInstantiations.empty() &&
911          "end of TU template instantiation should not create more "
912          "late-parsed templates");
913 }
914 
915 /// ActOnEndOfTranslationUnit - This is called at the very end of the
916 /// translation unit when EOF is reached and all but the top-level scope is
917 /// popped.
918 void Sema::ActOnEndOfTranslationUnit() {
919   assert(DelayedDiagnostics.getCurrentPool() == nullptr
920          && "reached end of translation unit with a pool attached?");
921 
922   // If code completion is enabled, don't perform any end-of-translation-unit
923   // work.
924   if (PP.isCodeCompletionEnabled())
925     return;
926 
927   // Complete translation units and modules define vtables and perform implicit
928   // instantiations. PCH files do not.
929   if (TUKind != TU_Prefix) {
930     DiagnoseUseOfUnimplementedSelectors();
931 
932     ActOnEndOfTranslationUnitFragment(
933         !ModuleScopes.empty() && ModuleScopes.back().Module->Kind ==
934                                      Module::PrivateModuleFragment
935             ? TUFragmentKind::Private
936             : TUFragmentKind::Normal);
937 
938     if (LateTemplateParserCleanup)
939       LateTemplateParserCleanup(OpaqueParser);
940 
941     CheckDelayedMemberExceptionSpecs();
942   } else {
943     // If we are building a TU prefix for serialization, it is safe to transfer
944     // these over, even though they are not parsed. The end of the TU should be
945     // outside of any eager template instantiation scope, so when this AST is
946     // deserialized, these templates will not be parsed until the end of the
947     // combined TU.
948     PendingInstantiations.insert(PendingInstantiations.end(),
949                                  LateParsedInstantiations.begin(),
950                                  LateParsedInstantiations.end());
951     LateParsedInstantiations.clear();
952   }
953 
954   DiagnoseUnterminatedPragmaPack();
955   DiagnoseUnterminatedPragmaAttribute();
956 
957   // All delayed member exception specs should be checked or we end up accepting
958   // incompatible declarations.
959   assert(DelayedOverridingExceptionSpecChecks.empty());
960   assert(DelayedEquivalentExceptionSpecChecks.empty());
961 
962   // All dllexport classes should have been processed already.
963   assert(DelayedDllExportClasses.empty());
964 
965   // Remove file scoped decls that turned out to be used.
966   UnusedFileScopedDecls.erase(
967       std::remove_if(UnusedFileScopedDecls.begin(nullptr, true),
968                      UnusedFileScopedDecls.end(),
969                      [this](const DeclaratorDecl *DD) {
970                        return ShouldRemoveFromUnused(this, DD);
971                      }),
972       UnusedFileScopedDecls.end());
973 
974   if (TUKind == TU_Prefix) {
975     // Translation unit prefixes don't need any of the checking below.
976     if (!PP.isIncrementalProcessingEnabled())
977       TUScope = nullptr;
978     return;
979   }
980 
981   // Check for #pragma weak identifiers that were never declared
982   LoadExternalWeakUndeclaredIdentifiers();
983   for (auto WeakID : WeakUndeclaredIdentifiers) {
984     if (WeakID.second.getUsed())
985       continue;
986 
987     Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(),
988                                       LookupOrdinaryName);
989     if (PrevDecl != nullptr &&
990         !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
991       Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
992           << "'weak'" << ExpectedVariableOrFunction;
993     else
994       Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
995           << WeakID.first;
996   }
997 
998   if (LangOpts.CPlusPlus11 &&
999       !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))
1000     CheckDelegatingCtorCycles();
1001 
1002   if (!Diags.hasErrorOccurred()) {
1003     if (ExternalSource)
1004       ExternalSource->ReadUndefinedButUsed(UndefinedButUsed);
1005     checkUndefinedButUsed(*this);
1006   }
1007 
1008   // A global-module-fragment is only permitted within a module unit.
1009   bool DiagnosedMissingModuleDeclaration = false;
1010   if (!ModuleScopes.empty() &&
1011       ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment &&
1012       !ModuleScopes.back().ImplicitGlobalModuleFragment) {
1013     Diag(ModuleScopes.back().BeginLoc,
1014          diag::err_module_declaration_missing_after_global_module_introducer);
1015     DiagnosedMissingModuleDeclaration = true;
1016   }
1017 
1018   if (TUKind == TU_Module) {
1019     // If we are building a module interface unit, we need to have seen the
1020     // module declaration by now.
1021     if (getLangOpts().getCompilingModule() ==
1022             LangOptions::CMK_ModuleInterface &&
1023         (ModuleScopes.empty() ||
1024          !ModuleScopes.back().Module->isModulePurview()) &&
1025         !DiagnosedMissingModuleDeclaration) {
1026       // FIXME: Make a better guess as to where to put the module declaration.
1027       Diag(getSourceManager().getLocForStartOfFile(
1028                getSourceManager().getMainFileID()),
1029            diag::err_module_declaration_missing);
1030     }
1031 
1032     // If we are building a module, resolve all of the exported declarations
1033     // now.
1034     if (Module *CurrentModule = PP.getCurrentModule()) {
1035       ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
1036 
1037       SmallVector<Module *, 2> Stack;
1038       Stack.push_back(CurrentModule);
1039       while (!Stack.empty()) {
1040         Module *Mod = Stack.pop_back_val();
1041 
1042         // Resolve the exported declarations and conflicts.
1043         // FIXME: Actually complain, once we figure out how to teach the
1044         // diagnostic client to deal with complaints in the module map at this
1045         // point.
1046         ModMap.resolveExports(Mod, /*Complain=*/false);
1047         ModMap.resolveUses(Mod, /*Complain=*/false);
1048         ModMap.resolveConflicts(Mod, /*Complain=*/false);
1049 
1050         // Queue the submodules, so their exports will also be resolved.
1051         Stack.append(Mod->submodule_begin(), Mod->submodule_end());
1052       }
1053     }
1054 
1055     // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for
1056     // modules when they are built, not every time they are used.
1057     emitAndClearUnusedLocalTypedefWarnings();
1058   }
1059 
1060   // C99 6.9.2p2:
1061   //   A declaration of an identifier for an object that has file
1062   //   scope without an initializer, and without a storage-class
1063   //   specifier or with the storage-class specifier static,
1064   //   constitutes a tentative definition. If a translation unit
1065   //   contains one or more tentative definitions for an identifier,
1066   //   and the translation unit contains no external definition for
1067   //   that identifier, then the behavior is exactly as if the
1068   //   translation unit contains a file scope declaration of that
1069   //   identifier, with the composite type as of the end of the
1070   //   translation unit, with an initializer equal to 0.
1071   llvm::SmallSet<VarDecl *, 32> Seen;
1072   for (TentativeDefinitionsType::iterator
1073             T = TentativeDefinitions.begin(ExternalSource),
1074          TEnd = TentativeDefinitions.end();
1075        T != TEnd; ++T) {
1076     VarDecl *VD = (*T)->getActingDefinition();
1077 
1078     // If the tentative definition was completed, getActingDefinition() returns
1079     // null. If we've already seen this variable before, insert()'s second
1080     // return value is false.
1081     if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second)
1082       continue;
1083 
1084     if (const IncompleteArrayType *ArrayT
1085         = Context.getAsIncompleteArrayType(VD->getType())) {
1086       // Set the length of the array to 1 (C99 6.9.2p5).
1087       Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
1088       llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
1089       QualType T = Context.getConstantArrayType(ArrayT->getElementType(),
1090                                                 One, ArrayType::Normal, 0);
1091       VD->setType(T);
1092     } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
1093                                    diag::err_tentative_def_incomplete_type))
1094       VD->setInvalidDecl();
1095 
1096     // No initialization is performed for a tentative definition.
1097     CheckCompleteVariableDeclaration(VD);
1098 
1099     // Notify the consumer that we've completed a tentative definition.
1100     if (!VD->isInvalidDecl())
1101       Consumer.CompleteTentativeDefinition(VD);
1102   }
1103 
1104   // If there were errors, disable 'unused' warnings since they will mostly be
1105   // noise. Don't warn for a use from a module: either we should warn on all
1106   // file-scope declarations in modules or not at all, but whether the
1107   // declaration is used is immaterial.
1108   if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {
1109     // Output warning for unused file scoped decls.
1110     for (UnusedFileScopedDeclsType::iterator
1111            I = UnusedFileScopedDecls.begin(ExternalSource),
1112            E = UnusedFileScopedDecls.end(); I != E; ++I) {
1113       if (ShouldRemoveFromUnused(this, *I))
1114         continue;
1115 
1116       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1117         const FunctionDecl *DiagD;
1118         if (!FD->hasBody(DiagD))
1119           DiagD = FD;
1120         if (DiagD->isDeleted())
1121           continue; // Deleted functions are supposed to be unused.
1122         if (DiagD->isReferenced()) {
1123           if (isa<CXXMethodDecl>(DiagD))
1124             Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
1125                   << DiagD->getDeclName();
1126           else {
1127             if (FD->getStorageClass() == SC_Static &&
1128                 !FD->isInlineSpecified() &&
1129                 !SourceMgr.isInMainFile(
1130                    SourceMgr.getExpansionLoc(FD->getLocation())))
1131               Diag(DiagD->getLocation(),
1132                    diag::warn_unneeded_static_internal_decl)
1133                   << DiagD->getDeclName();
1134             else
1135               Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1136                    << /*function*/0 << DiagD->getDeclName();
1137           }
1138         } else {
1139           if (FD->getDescribedFunctionTemplate())
1140             Diag(DiagD->getLocation(), diag::warn_unused_template)
1141               << /*function*/0 << DiagD->getDeclName();
1142           else
1143             Diag(DiagD->getLocation(),
1144                  isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
1145                                            : diag::warn_unused_function)
1146               << DiagD->getDeclName();
1147         }
1148       } else {
1149         const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
1150         if (!DiagD)
1151           DiagD = cast<VarDecl>(*I);
1152         if (DiagD->isReferenced()) {
1153           Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1154                 << /*variable*/1 << DiagD->getDeclName();
1155         } else if (DiagD->getType().isConstQualified()) {
1156           const SourceManager &SM = SourceMgr;
1157           if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) ||
1158               !PP.getLangOpts().IsHeaderFile)
1159             Diag(DiagD->getLocation(), diag::warn_unused_const_variable)
1160                 << DiagD->getDeclName();
1161         } else {
1162           if (DiagD->getDescribedVarTemplate())
1163             Diag(DiagD->getLocation(), diag::warn_unused_template)
1164               << /*variable*/1 << DiagD->getDeclName();
1165           else
1166             Diag(DiagD->getLocation(), diag::warn_unused_variable)
1167               << DiagD->getDeclName();
1168         }
1169       }
1170     }
1171 
1172     emitAndClearUnusedLocalTypedefWarnings();
1173   }
1174 
1175   if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) {
1176     // FIXME: Load additional unused private field candidates from the external
1177     // source.
1178     RecordCompleteMap RecordsComplete;
1179     RecordCompleteMap MNCComplete;
1180     for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(),
1181          E = UnusedPrivateFields.end(); I != E; ++I) {
1182       const NamedDecl *D = *I;
1183       const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
1184       if (RD && !RD->isUnion() &&
1185           IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) {
1186         Diag(D->getLocation(), diag::warn_unused_private_field)
1187               << D->getDeclName();
1188       }
1189     }
1190   }
1191 
1192   if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {
1193     if (ExternalSource)
1194       ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs);
1195     for (const auto &DeletedFieldInfo : DeleteExprs) {
1196       for (const auto &DeleteExprLoc : DeletedFieldInfo.second) {
1197         AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first,
1198                                   DeleteExprLoc.second);
1199       }
1200     }
1201   }
1202 
1203   // Check we've noticed that we're no longer parsing the initializer for every
1204   // variable. If we miss cases, then at best we have a performance issue and
1205   // at worst a rejects-valid bug.
1206   assert(ParsingInitForAutoVars.empty() &&
1207          "Didn't unmark var as having its initializer parsed");
1208 
1209   if (!PP.isIncrementalProcessingEnabled())
1210     TUScope = nullptr;
1211 }
1212 
1213 
1214 //===----------------------------------------------------------------------===//
1215 // Helper functions.
1216 //===----------------------------------------------------------------------===//
1217 
1218 DeclContext *Sema::getFunctionLevelDeclContext() {
1219   DeclContext *DC = CurContext;
1220 
1221   while (true) {
1222     if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) {
1223       DC = DC->getParent();
1224     } else if (isa<CXXMethodDecl>(DC) &&
1225                cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1226                cast<CXXRecordDecl>(DC->getParent())->isLambda()) {
1227       DC = DC->getParent()->getParent();
1228     }
1229     else break;
1230   }
1231 
1232   return DC;
1233 }
1234 
1235 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
1236 /// to the function decl for the function being parsed.  If we're currently
1237 /// in a 'block', this returns the containing context.
1238 FunctionDecl *Sema::getCurFunctionDecl() {
1239   DeclContext *DC = getFunctionLevelDeclContext();
1240   return dyn_cast<FunctionDecl>(DC);
1241 }
1242 
1243 ObjCMethodDecl *Sema::getCurMethodDecl() {
1244   DeclContext *DC = getFunctionLevelDeclContext();
1245   while (isa<RecordDecl>(DC))
1246     DC = DC->getParent();
1247   return dyn_cast<ObjCMethodDecl>(DC);
1248 }
1249 
1250 NamedDecl *Sema::getCurFunctionOrMethodDecl() {
1251   DeclContext *DC = getFunctionLevelDeclContext();
1252   if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1253     return cast<NamedDecl>(DC);
1254   return nullptr;
1255 }
1256 
1257 void Sema::EmitCurrentDiagnostic(unsigned DiagID) {
1258   // FIXME: It doesn't make sense to me that DiagID is an incoming argument here
1259   // and yet we also use the current diag ID on the DiagnosticsEngine. This has
1260   // been made more painfully obvious by the refactor that introduced this
1261   // function, but it is possible that the incoming argument can be
1262   // eliminated. If it truly cannot be (for example, there is some reentrancy
1263   // issue I am not seeing yet), then there should at least be a clarifying
1264   // comment somewhere.
1265   if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) {
1266     switch (DiagnosticIDs::getDiagnosticSFINAEResponse(
1267               Diags.getCurrentDiagID())) {
1268     case DiagnosticIDs::SFINAE_Report:
1269       // We'll report the diagnostic below.
1270       break;
1271 
1272     case DiagnosticIDs::SFINAE_SubstitutionFailure:
1273       // Count this failure so that we know that template argument deduction
1274       // has failed.
1275       ++NumSFINAEErrors;
1276 
1277       // Make a copy of this suppressed diagnostic and store it with the
1278       // template-deduction information.
1279       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1280         Diagnostic DiagInfo(&Diags);
1281         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1282                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1283       }
1284 
1285       Diags.setLastDiagnosticIgnored();
1286       Diags.Clear();
1287       return;
1288 
1289     case DiagnosticIDs::SFINAE_AccessControl: {
1290       // Per C++ Core Issue 1170, access control is part of SFINAE.
1291       // Additionally, the AccessCheckingSFINAE flag can be used to temporarily
1292       // make access control a part of SFINAE for the purposes of checking
1293       // type traits.
1294       if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11)
1295         break;
1296 
1297       SourceLocation Loc = Diags.getCurrentDiagLoc();
1298 
1299       // Suppress this diagnostic.
1300       ++NumSFINAEErrors;
1301 
1302       // Make a copy of this suppressed diagnostic and store it with the
1303       // template-deduction information.
1304       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1305         Diagnostic DiagInfo(&Diags);
1306         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1307                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1308       }
1309 
1310       Diags.setLastDiagnosticIgnored();
1311       Diags.Clear();
1312 
1313       // Now the diagnostic state is clear, produce a C++98 compatibility
1314       // warning.
1315       Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1316 
1317       // The last diagnostic which Sema produced was ignored. Suppress any
1318       // notes attached to it.
1319       Diags.setLastDiagnosticIgnored();
1320       return;
1321     }
1322 
1323     case DiagnosticIDs::SFINAE_Suppress:
1324       // Make a copy of this suppressed diagnostic and store it with the
1325       // template-deduction information;
1326       if (*Info) {
1327         Diagnostic DiagInfo(&Diags);
1328         (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
1329                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1330       }
1331 
1332       // Suppress this diagnostic.
1333       Diags.setLastDiagnosticIgnored();
1334       Diags.Clear();
1335       return;
1336     }
1337   }
1338 
1339   // Copy the diagnostic printing policy over the ASTContext printing policy.
1340   // TODO: Stop doing that.  See: https://reviews.llvm.org/D45093#1090292
1341   Context.setPrintingPolicy(getPrintingPolicy());
1342 
1343   // Emit the diagnostic.
1344   if (!Diags.EmitCurrentDiagnostic())
1345     return;
1346 
1347   // If this is not a note, and we're in a template instantiation
1348   // that is different from the last template instantiation where
1349   // we emitted an error, print a template instantiation
1350   // backtrace.
1351   if (!DiagnosticIDs::isBuiltinNote(DiagID))
1352     PrintContextStack();
1353 }
1354 
1355 Sema::SemaDiagnosticBuilder
1356 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
1357   SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
1358   PD.Emit(Builder);
1359 
1360   return Builder;
1361 }
1362 
1363 // Print notes showing how we can reach FD starting from an a priori
1364 // known-callable function.
1365 static void emitCallStackNotes(Sema &S, FunctionDecl *FD) {
1366   auto FnIt = S.DeviceKnownEmittedFns.find(FD);
1367   while (FnIt != S.DeviceKnownEmittedFns.end()) {
1368     DiagnosticBuilder Builder(
1369         S.Diags.Report(FnIt->second.Loc, diag::note_called_by));
1370     Builder << FnIt->second.FD;
1371     Builder.setForceEmit();
1372 
1373     FnIt = S.DeviceKnownEmittedFns.find(FnIt->second.FD);
1374   }
1375 }
1376 
1377 // Emit any deferred diagnostics for FD and erase them from the map in which
1378 // they're stored.
1379 static void emitDeferredDiags(Sema &S, FunctionDecl *FD) {
1380   auto It = S.DeviceDeferredDiags.find(FD);
1381   if (It == S.DeviceDeferredDiags.end())
1382     return;
1383   bool HasWarningOrError = false;
1384   for (PartialDiagnosticAt &PDAt : It->second) {
1385     const SourceLocation &Loc = PDAt.first;
1386     const PartialDiagnostic &PD = PDAt.second;
1387     HasWarningOrError |= S.getDiagnostics().getDiagnosticLevel(
1388                              PD.getDiagID(), Loc) >= DiagnosticsEngine::Warning;
1389     DiagnosticBuilder Builder(S.Diags.Report(Loc, PD.getDiagID()));
1390     Builder.setForceEmit();
1391     PD.Emit(Builder);
1392   }
1393   S.DeviceDeferredDiags.erase(It);
1394 
1395   // FIXME: Should this be called after every warning/error emitted in the loop
1396   // above, instead of just once per function?  That would be consistent with
1397   // how we handle immediate errors, but it also seems like a bit much.
1398   if (HasWarningOrError)
1399     emitCallStackNotes(S, FD);
1400 }
1401 
1402 // In CUDA, there are some constructs which may appear in semantically-valid
1403 // code, but trigger errors if we ever generate code for the function in which
1404 // they appear.  Essentially every construct you're not allowed to use on the
1405 // device falls into this category, because you are allowed to use these
1406 // constructs in a __host__ __device__ function, but only if that function is
1407 // never codegen'ed on the device.
1408 //
1409 // To handle semantic checking for these constructs, we keep track of the set of
1410 // functions we know will be emitted, either because we could tell a priori that
1411 // they would be emitted, or because they were transitively called by a
1412 // known-emitted function.
1413 //
1414 // We also keep a partial call graph of which not-known-emitted functions call
1415 // which other not-known-emitted functions.
1416 //
1417 // When we see something which is illegal if the current function is emitted
1418 // (usually by way of CUDADiagIfDeviceCode, CUDADiagIfHostCode, or
1419 // CheckCUDACall), we first check if the current function is known-emitted.  If
1420 // so, we immediately output the diagnostic.
1421 //
1422 // Otherwise, we "defer" the diagnostic.  It sits in Sema::DeviceDeferredDiags
1423 // until we discover that the function is known-emitted, at which point we take
1424 // it out of this map and emit the diagnostic.
1425 
1426 Sema::DeviceDiagBuilder::DeviceDiagBuilder(Kind K, SourceLocation Loc,
1427                                            unsigned DiagID, FunctionDecl *Fn,
1428                                            Sema &S)
1429     : S(S), Loc(Loc), DiagID(DiagID), Fn(Fn),
1430       ShowCallStack(K == K_ImmediateWithCallStack || K == K_Deferred) {
1431   switch (K) {
1432   case K_Nop:
1433     break;
1434   case K_Immediate:
1435   case K_ImmediateWithCallStack:
1436     ImmediateDiag.emplace(S.Diag(Loc, DiagID));
1437     break;
1438   case K_Deferred:
1439     assert(Fn && "Must have a function to attach the deferred diag to.");
1440     auto &Diags = S.DeviceDeferredDiags[Fn];
1441     PartialDiagId.emplace(Diags.size());
1442     Diags.emplace_back(Loc, S.PDiag(DiagID));
1443     break;
1444   }
1445 }
1446 
1447 Sema::DeviceDiagBuilder::DeviceDiagBuilder(DeviceDiagBuilder &&D)
1448     : S(D.S), Loc(D.Loc), DiagID(D.DiagID), Fn(D.Fn),
1449       ShowCallStack(D.ShowCallStack), ImmediateDiag(D.ImmediateDiag),
1450       PartialDiagId(D.PartialDiagId) {
1451   // Clean the previous diagnostics.
1452   D.ShowCallStack = false;
1453   D.ImmediateDiag.reset();
1454   D.PartialDiagId.reset();
1455 }
1456 
1457 Sema::DeviceDiagBuilder::~DeviceDiagBuilder() {
1458   if (ImmediateDiag) {
1459     // Emit our diagnostic and, if it was a warning or error, output a callstack
1460     // if Fn isn't a priori known-emitted.
1461     bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel(
1462                                 DiagID, Loc) >= DiagnosticsEngine::Warning;
1463     ImmediateDiag.reset(); // Emit the immediate diag.
1464     if (IsWarningOrError && ShowCallStack)
1465       emitCallStackNotes(S, Fn);
1466   } else {
1467     assert((!PartialDiagId || ShowCallStack) &&
1468            "Must always show call stack for deferred diags.");
1469   }
1470 }
1471 
1472 // Indicate that this function (and thus everything it transtively calls) will
1473 // be codegen'ed, and emit any deferred diagnostics on this function and its
1474 // (transitive) callees.
1475 void Sema::markKnownEmitted(
1476     Sema &S, FunctionDecl *OrigCaller, FunctionDecl *OrigCallee,
1477     SourceLocation OrigLoc,
1478     const llvm::function_ref<bool(Sema &, FunctionDecl *)> IsKnownEmitted) {
1479   // Nothing to do if we already know that FD is emitted.
1480   if (IsKnownEmitted(S, OrigCallee)) {
1481     assert(!S.DeviceCallGraph.count(OrigCallee));
1482     return;
1483   }
1484 
1485   // We've just discovered that OrigCallee is known-emitted.  Walk our call
1486   // graph to see what else we can now discover also must be emitted.
1487 
1488   struct CallInfo {
1489     FunctionDecl *Caller;
1490     FunctionDecl *Callee;
1491     SourceLocation Loc;
1492   };
1493   llvm::SmallVector<CallInfo, 4> Worklist = {{OrigCaller, OrigCallee, OrigLoc}};
1494   llvm::SmallSet<CanonicalDeclPtr<FunctionDecl>, 4> Seen;
1495   Seen.insert(OrigCallee);
1496   while (!Worklist.empty()) {
1497     CallInfo C = Worklist.pop_back_val();
1498     assert(!IsKnownEmitted(S, C.Callee) &&
1499            "Worklist should not contain known-emitted functions.");
1500     S.DeviceKnownEmittedFns[C.Callee] = {C.Caller, C.Loc};
1501     emitDeferredDiags(S, C.Callee);
1502 
1503     // If this is a template instantiation, explore its callgraph as well:
1504     // Non-dependent calls are part of the template's callgraph, while dependent
1505     // calls are part of to the instantiation's call graph.
1506     if (auto *Templ = C.Callee->getPrimaryTemplate()) {
1507       FunctionDecl *TemplFD = Templ->getAsFunction();
1508       if (!Seen.count(TemplFD) && !S.DeviceKnownEmittedFns.count(TemplFD)) {
1509         Seen.insert(TemplFD);
1510         Worklist.push_back(
1511             {/* Caller = */ C.Caller, /* Callee = */ TemplFD, C.Loc});
1512       }
1513     }
1514 
1515     // Add all functions called by Callee to our worklist.
1516     auto CGIt = S.DeviceCallGraph.find(C.Callee);
1517     if (CGIt == S.DeviceCallGraph.end())
1518       continue;
1519 
1520     for (std::pair<CanonicalDeclPtr<FunctionDecl>, SourceLocation> FDLoc :
1521          CGIt->second) {
1522       FunctionDecl *NewCallee = FDLoc.first;
1523       SourceLocation CallLoc = FDLoc.second;
1524       if (Seen.count(NewCallee) || IsKnownEmitted(S, NewCallee))
1525         continue;
1526       Seen.insert(NewCallee);
1527       Worklist.push_back(
1528           {/* Caller = */ C.Callee, /* Callee = */ NewCallee, CallLoc});
1529     }
1530 
1531     // C.Callee is now known-emitted, so we no longer need to maintain its list
1532     // of callees in DeviceCallGraph.
1533     S.DeviceCallGraph.erase(CGIt);
1534   }
1535 }
1536 
1537 Sema::DeviceDiagBuilder Sema::targetDiag(SourceLocation Loc, unsigned DiagID) {
1538   if (LangOpts.OpenMP && LangOpts.OpenMPIsDevice)
1539     return diagIfOpenMPDeviceCode(Loc, DiagID);
1540   if (getLangOpts().CUDA)
1541     return getLangOpts().CUDAIsDevice ? CUDADiagIfDeviceCode(Loc, DiagID)
1542                                       : CUDADiagIfHostCode(Loc, DiagID);
1543   return DeviceDiagBuilder(DeviceDiagBuilder::K_Immediate, Loc, DiagID,
1544                            getCurFunctionDecl(), *this);
1545 }
1546 
1547 /// Looks through the macro-expansion chain for the given
1548 /// location, looking for a macro expansion with the given name.
1549 /// If one is found, returns true and sets the location to that
1550 /// expansion loc.
1551 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) {
1552   SourceLocation loc = locref;
1553   if (!loc.isMacroID()) return false;
1554 
1555   // There's no good way right now to look at the intermediate
1556   // expansions, so just jump to the expansion location.
1557   loc = getSourceManager().getExpansionLoc(loc);
1558 
1559   // If that's written with the name, stop here.
1560   SmallVector<char, 16> buffer;
1561   if (getPreprocessor().getSpelling(loc, buffer) == name) {
1562     locref = loc;
1563     return true;
1564   }
1565   return false;
1566 }
1567 
1568 /// Determines the active Scope associated with the given declaration
1569 /// context.
1570 ///
1571 /// This routine maps a declaration context to the active Scope object that
1572 /// represents that declaration context in the parser. It is typically used
1573 /// from "scope-less" code (e.g., template instantiation, lazy creation of
1574 /// declarations) that injects a name for name-lookup purposes and, therefore,
1575 /// must update the Scope.
1576 ///
1577 /// \returns The scope corresponding to the given declaraion context, or NULL
1578 /// if no such scope is open.
1579 Scope *Sema::getScopeForContext(DeclContext *Ctx) {
1580 
1581   if (!Ctx)
1582     return nullptr;
1583 
1584   Ctx = Ctx->getPrimaryContext();
1585   for (Scope *S = getCurScope(); S; S = S->getParent()) {
1586     // Ignore scopes that cannot have declarations. This is important for
1587     // out-of-line definitions of static class members.
1588     if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
1589       if (DeclContext *Entity = S->getEntity())
1590         if (Ctx == Entity->getPrimaryContext())
1591           return S;
1592   }
1593 
1594   return nullptr;
1595 }
1596 
1597 /// Enter a new function scope
1598 void Sema::PushFunctionScope() {
1599   if (FunctionScopes.empty() && CachedFunctionScope) {
1600     // Use CachedFunctionScope to avoid allocating memory when possible.
1601     CachedFunctionScope->Clear();
1602     FunctionScopes.push_back(CachedFunctionScope.release());
1603   } else {
1604     FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
1605   }
1606   if (LangOpts.OpenMP)
1607     pushOpenMPFunctionRegion();
1608 }
1609 
1610 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
1611   FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
1612                                               BlockScope, Block));
1613 }
1614 
1615 LambdaScopeInfo *Sema::PushLambdaScope() {
1616   LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics());
1617   FunctionScopes.push_back(LSI);
1618   return LSI;
1619 }
1620 
1621 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) {
1622   if (LambdaScopeInfo *const LSI = getCurLambda()) {
1623     LSI->AutoTemplateParameterDepth = Depth;
1624     return;
1625   }
1626   llvm_unreachable(
1627       "Remove assertion if intentionally called in a non-lambda context.");
1628 }
1629 
1630 // Check that the type of the VarDecl has an accessible copy constructor and
1631 // resolve its destructor's exception specification.
1632 static void checkEscapingByref(VarDecl *VD, Sema &S) {
1633   QualType T = VD->getType();
1634   EnterExpressionEvaluationContext scope(
1635       S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
1636   SourceLocation Loc = VD->getLocation();
1637   Expr *VarRef =
1638       new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc);
1639   ExprResult Result = S.PerformMoveOrCopyInitialization(
1640       InitializedEntity::InitializeBlock(Loc, T, false), VD, VD->getType(),
1641       VarRef, /*AllowNRVO=*/true);
1642   if (!Result.isInvalid()) {
1643     Result = S.MaybeCreateExprWithCleanups(Result);
1644     Expr *Init = Result.getAs<Expr>();
1645     S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init));
1646   }
1647 
1648   // The destructor's exception specification is needed when IRGen generates
1649   // block copy/destroy functions. Resolve it here.
1650   if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1651     if (CXXDestructorDecl *DD = RD->getDestructor()) {
1652       auto *FPT = DD->getType()->getAs<FunctionProtoType>();
1653       S.ResolveExceptionSpec(Loc, FPT);
1654     }
1655 }
1656 
1657 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) {
1658   // Set the EscapingByref flag of __block variables captured by
1659   // escaping blocks.
1660   for (const BlockDecl *BD : FSI.Blocks) {
1661     for (const BlockDecl::Capture &BC : BD->captures()) {
1662       VarDecl *VD = BC.getVariable();
1663       if (VD->hasAttr<BlocksAttr>()) {
1664         // Nothing to do if this is a __block variable captured by a
1665         // non-escaping block.
1666         if (BD->doesNotEscape())
1667           continue;
1668         VD->setEscapingByref();
1669       }
1670       // Check whether the captured variable is or contains an object of
1671       // non-trivial C union type.
1672       QualType CapType = BC.getVariable()->getType();
1673       if (CapType.hasNonTrivialToPrimitiveDestructCUnion() ||
1674           CapType.hasNonTrivialToPrimitiveCopyCUnion())
1675         S.checkNonTrivialCUnion(BC.getVariable()->getType(),
1676                                 BD->getCaretLocation(),
1677                                 Sema::NTCUC_BlockCapture,
1678                                 Sema::NTCUK_Destruct|Sema::NTCUK_Copy);
1679     }
1680   }
1681 
1682   for (VarDecl *VD : FSI.ByrefBlockVars) {
1683     // __block variables might require us to capture a copy-initializer.
1684     if (!VD->isEscapingByref())
1685       continue;
1686     // It's currently invalid to ever have a __block variable with an
1687     // array type; should we diagnose that here?
1688     // Regardless, we don't want to ignore array nesting when
1689     // constructing this copy.
1690     if (VD->getType()->isStructureOrClassType())
1691       checkEscapingByref(VD, S);
1692   }
1693 }
1694 
1695 /// Pop a function (or block or lambda or captured region) scope from the stack.
1696 ///
1697 /// \param WP The warning policy to use for CFG-based warnings, or null if such
1698 ///        warnings should not be produced.
1699 /// \param D The declaration corresponding to this function scope, if producing
1700 ///        CFG-based warnings.
1701 /// \param BlockType The type of the block expression, if D is a BlockDecl.
1702 Sema::PoppedFunctionScopePtr
1703 Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP,
1704                            const Decl *D, QualType BlockType) {
1705   assert(!FunctionScopes.empty() && "mismatched push/pop!");
1706 
1707   markEscapingByrefs(*FunctionScopes.back(), *this);
1708 
1709   PoppedFunctionScopePtr Scope(FunctionScopes.pop_back_val(),
1710                                PoppedFunctionScopeDeleter(this));
1711 
1712   if (LangOpts.OpenMP)
1713     popOpenMPFunctionRegion(Scope.get());
1714 
1715   // Issue any analysis-based warnings.
1716   if (WP && D)
1717     AnalysisWarnings.IssueWarnings(*WP, Scope.get(), D, BlockType);
1718   else
1719     for (const auto &PUD : Scope->PossiblyUnreachableDiags)
1720       Diag(PUD.Loc, PUD.PD);
1721 
1722   return Scope;
1723 }
1724 
1725 void Sema::PoppedFunctionScopeDeleter::
1726 operator()(sema::FunctionScopeInfo *Scope) const {
1727   // Stash the function scope for later reuse if it's for a normal function.
1728   if (Scope->isPlainFunction() && !Self->CachedFunctionScope)
1729     Self->CachedFunctionScope.reset(Scope);
1730   else
1731     delete Scope;
1732 }
1733 
1734 void Sema::PushCompoundScope(bool IsStmtExpr) {
1735   getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr));
1736 }
1737 
1738 void Sema::PopCompoundScope() {
1739   FunctionScopeInfo *CurFunction = getCurFunction();
1740   assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop");
1741 
1742   CurFunction->CompoundScopes.pop_back();
1743 }
1744 
1745 /// Determine whether any errors occurred within this function/method/
1746 /// block.
1747 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
1748   return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
1749 }
1750 
1751 void Sema::setFunctionHasBranchIntoScope() {
1752   if (!FunctionScopes.empty())
1753     FunctionScopes.back()->setHasBranchIntoScope();
1754 }
1755 
1756 void Sema::setFunctionHasBranchProtectedScope() {
1757   if (!FunctionScopes.empty())
1758     FunctionScopes.back()->setHasBranchProtectedScope();
1759 }
1760 
1761 void Sema::setFunctionHasIndirectGoto() {
1762   if (!FunctionScopes.empty())
1763     FunctionScopes.back()->setHasIndirectGoto();
1764 }
1765 
1766 BlockScopeInfo *Sema::getCurBlock() {
1767   if (FunctionScopes.empty())
1768     return nullptr;
1769 
1770   auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back());
1771   if (CurBSI && CurBSI->TheDecl &&
1772       !CurBSI->TheDecl->Encloses(CurContext)) {
1773     // We have switched contexts due to template instantiation.
1774     assert(!CodeSynthesisContexts.empty());
1775     return nullptr;
1776   }
1777 
1778   return CurBSI;
1779 }
1780 
1781 FunctionScopeInfo *Sema::getEnclosingFunction() const {
1782   if (FunctionScopes.empty())
1783     return nullptr;
1784 
1785   for (int e = FunctionScopes.size() - 1; e >= 0; --e) {
1786     if (isa<sema::BlockScopeInfo>(FunctionScopes[e]))
1787       continue;
1788     return FunctionScopes[e];
1789   }
1790   return nullptr;
1791 }
1792 
1793 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) {
1794   if (FunctionScopes.empty())
1795     return nullptr;
1796 
1797   auto I = FunctionScopes.rbegin();
1798   if (IgnoreNonLambdaCapturingScope) {
1799     auto E = FunctionScopes.rend();
1800     while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1801       ++I;
1802     if (I == E)
1803       return nullptr;
1804   }
1805   auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I);
1806   if (CurLSI && CurLSI->Lambda &&
1807       !CurLSI->Lambda->Encloses(CurContext)) {
1808     // We have switched contexts due to template instantiation.
1809     assert(!CodeSynthesisContexts.empty());
1810     return nullptr;
1811   }
1812 
1813   return CurLSI;
1814 }
1815 // We have a generic lambda if we parsed auto parameters, or we have
1816 // an associated template parameter list.
1817 LambdaScopeInfo *Sema::getCurGenericLambda() {
1818   if (LambdaScopeInfo *LSI =  getCurLambda()) {
1819     return (LSI->TemplateParams.size() ||
1820                     LSI->GLTemplateParameterList) ? LSI : nullptr;
1821   }
1822   return nullptr;
1823 }
1824 
1825 
1826 void Sema::ActOnComment(SourceRange Comment) {
1827   if (!LangOpts.RetainCommentsFromSystemHeaders &&
1828       SourceMgr.isInSystemHeader(Comment.getBegin()))
1829     return;
1830   RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false);
1831   if (RC.isAlmostTrailingComment()) {
1832     SourceRange MagicMarkerRange(Comment.getBegin(),
1833                                  Comment.getBegin().getLocWithOffset(3));
1834     StringRef MagicMarkerText;
1835     switch (RC.getKind()) {
1836     case RawComment::RCK_OrdinaryBCPL:
1837       MagicMarkerText = "///<";
1838       break;
1839     case RawComment::RCK_OrdinaryC:
1840       MagicMarkerText = "/**<";
1841       break;
1842     default:
1843       llvm_unreachable("if this is an almost Doxygen comment, "
1844                        "it should be ordinary");
1845     }
1846     Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1847       FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText);
1848   }
1849   Context.addComment(RC);
1850 }
1851 
1852 // Pin this vtable to this file.
1853 ExternalSemaSource::~ExternalSemaSource() {}
1854 
1855 void ExternalSemaSource::ReadMethodPool(Selector Sel) { }
1856 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { }
1857 
1858 void ExternalSemaSource::ReadKnownNamespaces(
1859                            SmallVectorImpl<NamespaceDecl *> &Namespaces) {
1860 }
1861 
1862 void ExternalSemaSource::ReadUndefinedButUsed(
1863     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1864 
1865 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector<
1866     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {}
1867 
1868 /// Figure out if an expression could be turned into a call.
1869 ///
1870 /// Use this when trying to recover from an error where the programmer may have
1871 /// written just the name of a function instead of actually calling it.
1872 ///
1873 /// \param E - The expression to examine.
1874 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
1875 ///  with no arguments, this parameter is set to the type returned by such a
1876 ///  call; otherwise, it is set to an empty QualType.
1877 /// \param OverloadSet - If the expression is an overloaded function
1878 ///  name, this parameter is populated with the decls of the various overloads.
1879 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
1880                          UnresolvedSetImpl &OverloadSet) {
1881   ZeroArgCallReturnTy = QualType();
1882   OverloadSet.clear();
1883 
1884   const OverloadExpr *Overloads = nullptr;
1885   bool IsMemExpr = false;
1886   if (E.getType() == Context.OverloadTy) {
1887     OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E));
1888 
1889     // Ignore overloads that are pointer-to-member constants.
1890     if (FR.HasFormOfMemberPointer)
1891       return false;
1892 
1893     Overloads = FR.Expression;
1894   } else if (E.getType() == Context.BoundMemberTy) {
1895     Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens());
1896     IsMemExpr = true;
1897   }
1898 
1899   bool Ambiguous = false;
1900   bool IsMV = false;
1901 
1902   if (Overloads) {
1903     for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
1904          DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
1905       OverloadSet.addDecl(*it);
1906 
1907       // Check whether the function is a non-template, non-member which takes no
1908       // arguments.
1909       if (IsMemExpr)
1910         continue;
1911       if (const FunctionDecl *OverloadDecl
1912             = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
1913         if (OverloadDecl->getMinRequiredArguments() == 0) {
1914           if (!ZeroArgCallReturnTy.isNull() && !Ambiguous &&
1915               (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() ||
1916                           OverloadDecl->isCPUSpecificMultiVersion()))) {
1917             ZeroArgCallReturnTy = QualType();
1918             Ambiguous = true;
1919           } else {
1920             ZeroArgCallReturnTy = OverloadDecl->getReturnType();
1921             IsMV = OverloadDecl->isCPUDispatchMultiVersion() ||
1922                    OverloadDecl->isCPUSpecificMultiVersion();
1923           }
1924         }
1925       }
1926     }
1927 
1928     // If it's not a member, use better machinery to try to resolve the call
1929     if (!IsMemExpr)
1930       return !ZeroArgCallReturnTy.isNull();
1931   }
1932 
1933   // Attempt to call the member with no arguments - this will correctly handle
1934   // member templates with defaults/deduction of template arguments, overloads
1935   // with default arguments, etc.
1936   if (IsMemExpr && !E.isTypeDependent()) {
1937     bool Suppress = getDiagnostics().getSuppressAllDiagnostics();
1938     getDiagnostics().setSuppressAllDiagnostics(true);
1939     ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(),
1940                                              None, SourceLocation());
1941     getDiagnostics().setSuppressAllDiagnostics(Suppress);
1942     if (R.isUsable()) {
1943       ZeroArgCallReturnTy = R.get()->getType();
1944       return true;
1945     }
1946     return false;
1947   }
1948 
1949   if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) {
1950     if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
1951       if (Fun->getMinRequiredArguments() == 0)
1952         ZeroArgCallReturnTy = Fun->getReturnType();
1953       return true;
1954     }
1955   }
1956 
1957   // We don't have an expression that's convenient to get a FunctionDecl from,
1958   // but we can at least check if the type is "function of 0 arguments".
1959   QualType ExprTy = E.getType();
1960   const FunctionType *FunTy = nullptr;
1961   QualType PointeeTy = ExprTy->getPointeeType();
1962   if (!PointeeTy.isNull())
1963     FunTy = PointeeTy->getAs<FunctionType>();
1964   if (!FunTy)
1965     FunTy = ExprTy->getAs<FunctionType>();
1966 
1967   if (const FunctionProtoType *FPT =
1968       dyn_cast_or_null<FunctionProtoType>(FunTy)) {
1969     if (FPT->getNumParams() == 0)
1970       ZeroArgCallReturnTy = FunTy->getReturnType();
1971     return true;
1972   }
1973   return false;
1974 }
1975 
1976 /// Give notes for a set of overloads.
1977 ///
1978 /// A companion to tryExprAsCall. In cases when the name that the programmer
1979 /// wrote was an overloaded function, we may be able to make some guesses about
1980 /// plausible overloads based on their return types; such guesses can be handed
1981 /// off to this method to be emitted as notes.
1982 ///
1983 /// \param Overloads - The overloads to note.
1984 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
1985 ///  -fshow-overloads=best, this is the location to attach to the note about too
1986 ///  many candidates. Typically this will be the location of the original
1987 ///  ill-formed expression.
1988 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads,
1989                           const SourceLocation FinalNoteLoc) {
1990   int ShownOverloads = 0;
1991   int SuppressedOverloads = 0;
1992   for (UnresolvedSetImpl::iterator It = Overloads.begin(),
1993        DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
1994     // FIXME: Magic number for max shown overloads stolen from
1995     // OverloadCandidateSet::NoteCandidates.
1996     if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) {
1997       ++SuppressedOverloads;
1998       continue;
1999     }
2000 
2001     NamedDecl *Fn = (*It)->getUnderlyingDecl();
2002     // Don't print overloads for non-default multiversioned functions.
2003     if (const auto *FD = Fn->getAsFunction()) {
2004       if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() &&
2005           !FD->getAttr<TargetAttr>()->isDefaultVersion())
2006         continue;
2007     }
2008     S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);
2009     ++ShownOverloads;
2010   }
2011 
2012   if (SuppressedOverloads)
2013     S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
2014       << SuppressedOverloads;
2015 }
2016 
2017 static void notePlausibleOverloads(Sema &S, SourceLocation Loc,
2018                                    const UnresolvedSetImpl &Overloads,
2019                                    bool (*IsPlausibleResult)(QualType)) {
2020   if (!IsPlausibleResult)
2021     return noteOverloads(S, Overloads, Loc);
2022 
2023   UnresolvedSet<2> PlausibleOverloads;
2024   for (OverloadExpr::decls_iterator It = Overloads.begin(),
2025          DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
2026     const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
2027     QualType OverloadResultTy = OverloadDecl->getReturnType();
2028     if (IsPlausibleResult(OverloadResultTy))
2029       PlausibleOverloads.addDecl(It.getDecl());
2030   }
2031   noteOverloads(S, PlausibleOverloads, Loc);
2032 }
2033 
2034 /// Determine whether the given expression can be called by just
2035 /// putting parentheses after it.  Notably, expressions with unary
2036 /// operators can't be because the unary operator will start parsing
2037 /// outside the call.
2038 static bool IsCallableWithAppend(Expr *E) {
2039   E = E->IgnoreImplicit();
2040   return (!isa<CStyleCastExpr>(E) &&
2041           !isa<UnaryOperator>(E) &&
2042           !isa<BinaryOperator>(E) &&
2043           !isa<CXXOperatorCallExpr>(E));
2044 }
2045 
2046 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) {
2047   if (const auto *UO = dyn_cast<UnaryOperator>(E))
2048     E = UO->getSubExpr();
2049 
2050   if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
2051     if (ULE->getNumDecls() == 0)
2052       return false;
2053 
2054     const NamedDecl *ND = *ULE->decls_begin();
2055     if (const auto *FD = dyn_cast<FunctionDecl>(ND))
2056       return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion();
2057   }
2058   return false;
2059 }
2060 
2061 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
2062                                 bool ForceComplain,
2063                                 bool (*IsPlausibleResult)(QualType)) {
2064   SourceLocation Loc = E.get()->getExprLoc();
2065   SourceRange Range = E.get()->getSourceRange();
2066 
2067   QualType ZeroArgCallTy;
2068   UnresolvedSet<4> Overloads;
2069   if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
2070       !ZeroArgCallTy.isNull() &&
2071       (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
2072     // At this point, we know E is potentially callable with 0
2073     // arguments and that it returns something of a reasonable type,
2074     // so we can emit a fixit and carry on pretending that E was
2075     // actually a CallExpr.
2076     SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
2077     bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2078     Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range
2079                   << (IsCallableWithAppend(E.get())
2080                           ? FixItHint::CreateInsertion(ParenInsertionLoc, "()")
2081                           : FixItHint());
2082     if (!IsMV)
2083       notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2084 
2085     // FIXME: Try this before emitting the fixit, and suppress diagnostics
2086     // while doing so.
2087     E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None,
2088                       Range.getEnd().getLocWithOffset(1));
2089     return true;
2090   }
2091 
2092   if (!ForceComplain) return false;
2093 
2094   bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2095   Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range;
2096   if (!IsMV)
2097     notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2098   E = ExprError();
2099   return true;
2100 }
2101 
2102 IdentifierInfo *Sema::getSuperIdentifier() const {
2103   if (!Ident_super)
2104     Ident_super = &Context.Idents.get("super");
2105   return Ident_super;
2106 }
2107 
2108 IdentifierInfo *Sema::getFloat128Identifier() const {
2109   if (!Ident___float128)
2110     Ident___float128 = &Context.Idents.get("__float128");
2111   return Ident___float128;
2112 }
2113 
2114 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD,
2115                                    CapturedRegionKind K) {
2116   CapturingScopeInfo *CSI = new CapturedRegionScopeInfo(
2117       getDiagnostics(), S, CD, RD, CD->getContextParam(), K,
2118       (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0);
2119   CSI->ReturnType = Context.VoidTy;
2120   FunctionScopes.push_back(CSI);
2121 }
2122 
2123 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() {
2124   if (FunctionScopes.empty())
2125     return nullptr;
2126 
2127   return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back());
2128 }
2129 
2130 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
2131 Sema::getMismatchingDeleteExpressions() const {
2132   return DeleteExprs;
2133 }
2134 
2135 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) {
2136   if (ExtStr.empty())
2137     return;
2138   llvm::SmallVector<StringRef, 1> Exts;
2139   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2140   auto CanT = T.getCanonicalType().getTypePtr();
2141   for (auto &I : Exts)
2142     OpenCLTypeExtMap[CanT].insert(I.str());
2143 }
2144 
2145 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) {
2146   llvm::SmallVector<StringRef, 1> Exts;
2147   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2148   if (Exts.empty())
2149     return;
2150   for (auto &I : Exts)
2151     OpenCLDeclExtMap[FD].insert(I.str());
2152 }
2153 
2154 void Sema::setCurrentOpenCLExtensionForType(QualType T) {
2155   if (CurrOpenCLExtension.empty())
2156     return;
2157   setOpenCLExtensionForType(T, CurrOpenCLExtension);
2158 }
2159 
2160 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) {
2161   if (CurrOpenCLExtension.empty())
2162     return;
2163   setOpenCLExtensionForDecl(D, CurrOpenCLExtension);
2164 }
2165 
2166 std::string Sema::getOpenCLExtensionsFromDeclExtMap(FunctionDecl *FD) {
2167   if (!OpenCLDeclExtMap.empty())
2168     return getOpenCLExtensionsFromExtMap(FD, OpenCLDeclExtMap);
2169 
2170   return "";
2171 }
2172 
2173 std::string Sema::getOpenCLExtensionsFromTypeExtMap(FunctionType *FT) {
2174   if (!OpenCLTypeExtMap.empty())
2175     return getOpenCLExtensionsFromExtMap(FT, OpenCLTypeExtMap);
2176 
2177   return "";
2178 }
2179 
2180 template <typename T, typename MapT>
2181 std::string Sema::getOpenCLExtensionsFromExtMap(T *FDT, MapT &Map) {
2182   std::string ExtensionNames = "";
2183   auto Loc = Map.find(FDT);
2184 
2185   for (auto const& I : Loc->second) {
2186     ExtensionNames += I;
2187     ExtensionNames += " ";
2188   }
2189   ExtensionNames.pop_back();
2190 
2191   return ExtensionNames;
2192 }
2193 
2194 bool Sema::isOpenCLDisabledDecl(Decl *FD) {
2195   auto Loc = OpenCLDeclExtMap.find(FD);
2196   if (Loc == OpenCLDeclExtMap.end())
2197     return false;
2198   for (auto &I : Loc->second) {
2199     if (!getOpenCLOptions().isEnabled(I))
2200       return true;
2201   }
2202   return false;
2203 }
2204 
2205 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT>
2206 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
2207                                          DiagInfoT DiagInfo, MapT &Map,
2208                                          unsigned Selector,
2209                                          SourceRange SrcRange) {
2210   auto Loc = Map.find(D);
2211   if (Loc == Map.end())
2212     return false;
2213   bool Disabled = false;
2214   for (auto &I : Loc->second) {
2215     if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) {
2216       Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
2217                                                          << I << SrcRange;
2218       Disabled = true;
2219     }
2220   }
2221   return Disabled;
2222 }
2223 
2224 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) {
2225   // Check extensions for declared types.
2226   Decl *Decl = nullptr;
2227   if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr()))
2228     Decl = TypedefT->getDecl();
2229   if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr()))
2230     Decl = TagT->getDecl();
2231   auto Loc = DS.getTypeSpecTypeLoc();
2232 
2233   // Check extensions for vector types.
2234   // e.g. double4 is not allowed when cl_khr_fp64 is absent.
2235   if (QT->isExtVectorType()) {
2236     auto TypePtr = QT->castAs<ExtVectorType>()->getElementType().getTypePtr();
2237     return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap);
2238   }
2239 
2240   if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
2241     return true;
2242 
2243   // Check extensions for builtin types.
2244   return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc,
2245                                        QT, OpenCLTypeExtMap);
2246 }
2247 
2248 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) {
2249   IdentifierInfo *FnName = D.getIdentifier();
2250   return checkOpenCLDisabledTypeOrDecl(&D, E.getBeginLoc(), FnName,
2251                                        OpenCLDeclExtMap, 1, D.getSourceRange());
2252 }
2253