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