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