xref: /llvm-project-15.0.7/clang/lib/Sema/Sema.cpp (revision e181de7f)
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 
162   LoadedExternalKnownNamespaces = false;
163   for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I)
164     NSNumberLiteralMethods[I] = nullptr;
165 
166   if (getLangOpts().ObjC)
167     NSAPIObj.reset(new NSAPI(Context));
168 
169   if (getLangOpts().CPlusPlus)
170     FieldCollector.reset(new CXXFieldCollector());
171 
172   // Tell diagnostics how to render things from the AST library.
173   Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context);
174 
175   ExprEvalContexts.emplace_back(
176       ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{},
177       nullptr, ExpressionEvaluationContextRecord::EK_Other);
178 
179   PreallocatedFunctionScope.reset(new FunctionScopeInfo(Diags));
180 
181   // Initialization of data sharing attributes stack for OpenMP
182   InitDataSharingAttributesStack();
183 
184   std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
185       llvm::make_unique<sema::SemaPPCallbacks>();
186   SemaPPCallbackHandler = Callbacks.get();
187   PP.addPPCallbacks(std::move(Callbacks));
188   SemaPPCallbackHandler->set(*this);
189 }
190 
191 void Sema::addImplicitTypedef(StringRef Name, QualType T) {
192   DeclarationName DN = &Context.Idents.get(Name);
193   if (IdResolver.begin(DN) == IdResolver.end())
194     PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope);
195 }
196 
197 void Sema::Initialize() {
198   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
199     SC->InitializeSema(*this);
200 
201   // Tell the external Sema source about this Sema object.
202   if (ExternalSemaSource *ExternalSema
203       = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
204     ExternalSema->InitializeSema(*this);
205 
206   // This needs to happen after ExternalSemaSource::InitializeSema(this) or we
207   // will not be able to merge any duplicate __va_list_tag decls correctly.
208   VAListTagName = PP.getIdentifierInfo("__va_list_tag");
209 
210   if (!TUScope)
211     return;
212 
213   // Initialize predefined 128-bit integer types, if needed.
214   if (Context.getTargetInfo().hasInt128Type()) {
215     // If either of the 128-bit integer types are unavailable to name lookup,
216     // define them now.
217     DeclarationName Int128 = &Context.Idents.get("__int128_t");
218     if (IdResolver.begin(Int128) == IdResolver.end())
219       PushOnScopeChains(Context.getInt128Decl(), TUScope);
220 
221     DeclarationName UInt128 = &Context.Idents.get("__uint128_t");
222     if (IdResolver.begin(UInt128) == IdResolver.end())
223       PushOnScopeChains(Context.getUInt128Decl(), TUScope);
224   }
225 
226 
227   // Initialize predefined Objective-C types:
228   if (getLangOpts().ObjC) {
229     // If 'SEL' does not yet refer to any declarations, make it refer to the
230     // predefined 'SEL'.
231     DeclarationName SEL = &Context.Idents.get("SEL");
232     if (IdResolver.begin(SEL) == IdResolver.end())
233       PushOnScopeChains(Context.getObjCSelDecl(), TUScope);
234 
235     // If 'id' does not yet refer to any declarations, make it refer to the
236     // predefined 'id'.
237     DeclarationName Id = &Context.Idents.get("id");
238     if (IdResolver.begin(Id) == IdResolver.end())
239       PushOnScopeChains(Context.getObjCIdDecl(), TUScope);
240 
241     // Create the built-in typedef for 'Class'.
242     DeclarationName Class = &Context.Idents.get("Class");
243     if (IdResolver.begin(Class) == IdResolver.end())
244       PushOnScopeChains(Context.getObjCClassDecl(), TUScope);
245 
246     // Create the built-in forward declaratino for 'Protocol'.
247     DeclarationName Protocol = &Context.Idents.get("Protocol");
248     if (IdResolver.begin(Protocol) == IdResolver.end())
249       PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope);
250   }
251 
252   // Create the internal type for the *StringMakeConstantString builtins.
253   DeclarationName ConstantString = &Context.Idents.get("__NSConstantString");
254   if (IdResolver.begin(ConstantString) == IdResolver.end())
255     PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope);
256 
257   // Initialize Microsoft "predefined C++ types".
258   if (getLangOpts().MSVCCompat) {
259     if (getLangOpts().CPlusPlus &&
260         IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end())
261       PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class),
262                         TUScope);
263 
264     addImplicitTypedef("size_t", Context.getSizeType());
265   }
266 
267   // Initialize predefined OpenCL types and supported extensions and (optional)
268   // core features.
269   if (getLangOpts().OpenCL) {
270     getOpenCLOptions().addSupport(
271         Context.getTargetInfo().getSupportedOpenCLOpts());
272     getOpenCLOptions().enableSupportedCore(getLangOpts());
273     addImplicitTypedef("sampler_t", Context.OCLSamplerTy);
274     addImplicitTypedef("event_t", Context.OCLEventTy);
275     if (getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) {
276       addImplicitTypedef("clk_event_t", Context.OCLClkEventTy);
277       addImplicitTypedef("queue_t", Context.OCLQueueTy);
278       addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy);
279       addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy));
280       addImplicitTypedef("atomic_uint",
281                          Context.getAtomicType(Context.UnsignedIntTy));
282       auto AtomicLongT = Context.getAtomicType(Context.LongTy);
283       addImplicitTypedef("atomic_long", AtomicLongT);
284       auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy);
285       addImplicitTypedef("atomic_ulong", AtomicULongT);
286       addImplicitTypedef("atomic_float",
287                          Context.getAtomicType(Context.FloatTy));
288       auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy);
289       addImplicitTypedef("atomic_double", AtomicDoubleT);
290       // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as
291       // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide.
292       addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy));
293       auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType());
294       addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT);
295       auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType());
296       addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT);
297       auto AtomicSizeT = Context.getAtomicType(Context.getSizeType());
298       addImplicitTypedef("atomic_size_t", AtomicSizeT);
299       auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType());
300       addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT);
301 
302       // OpenCL v2.0 s6.13.11.6:
303       // - The atomic_long and atomic_ulong types are supported if the
304       //   cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics
305       //   extensions are supported.
306       // - The atomic_double type is only supported if double precision
307       //   is supported and the cl_khr_int64_base_atomics and
308       //   cl_khr_int64_extended_atomics extensions are supported.
309       // - If the device address space is 64-bits, the data types
310       //   atomic_intptr_t, atomic_uintptr_t, atomic_size_t and
311       //   atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and
312       //   cl_khr_int64_extended_atomics extensions are supported.
313       std::vector<QualType> Atomic64BitTypes;
314       Atomic64BitTypes.push_back(AtomicLongT);
315       Atomic64BitTypes.push_back(AtomicULongT);
316       Atomic64BitTypes.push_back(AtomicDoubleT);
317       if (Context.getTypeSize(AtomicSizeT) == 64) {
318         Atomic64BitTypes.push_back(AtomicSizeT);
319         Atomic64BitTypes.push_back(AtomicIntPtrT);
320         Atomic64BitTypes.push_back(AtomicUIntPtrT);
321         Atomic64BitTypes.push_back(AtomicPtrDiffT);
322       }
323       for (auto &I : Atomic64BitTypes)
324         setOpenCLExtensionForType(I,
325             "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
326 
327       setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64");
328     }
329 
330     setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64");
331 
332 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \
333     setOpenCLExtensionForType(Context.Id, Ext);
334 #include "clang/Basic/OpenCLImageTypes.def"
335 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
336     addImplicitTypedef(#ExtType, Context.Id##Ty); \
337     setOpenCLExtensionForType(Context.Id##Ty, #Ext);
338 #include "clang/Basic/OpenCLExtensionTypes.def"
339     };
340 
341   if (Context.getTargetInfo().hasBuiltinMSVaList()) {
342     DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list");
343     if (IdResolver.begin(MSVaList) == IdResolver.end())
344       PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope);
345   }
346 
347   DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list");
348   if (IdResolver.begin(BuiltinVaList) == IdResolver.end())
349     PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope);
350 }
351 
352 Sema::~Sema() {
353   if (VisContext) FreeVisContext();
354 
355   // Kill all the active scopes.
356   for (sema::FunctionScopeInfo *FSI : FunctionScopes)
357     if (FSI != PreallocatedFunctionScope.get())
358       delete FSI;
359 
360   // Tell the SemaConsumer to forget about us; we're going out of scope.
361   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
362     SC->ForgetSema();
363 
364   // Detach from the external Sema source.
365   if (ExternalSemaSource *ExternalSema
366         = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
367     ExternalSema->ForgetSema();
368 
369   // If Sema's ExternalSource is the multiplexer - we own it.
370   if (isMultiplexExternalSource)
371     delete ExternalSource;
372 
373   threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache);
374 
375   // Destroys data sharing attributes stack for OpenMP
376   DestroyDataSharingAttributesStack();
377 
378   // Detach from the PP callback handler which outlives Sema since it's owned
379   // by the preprocessor.
380   SemaPPCallbackHandler->reset();
381 
382   assert(DelayedTypos.empty() && "Uncorrected typos!");
383 }
384 
385 /// makeUnavailableInSystemHeader - There is an error in the current
386 /// context.  If we're still in a system header, and we can plausibly
387 /// make the relevant declaration unavailable instead of erroring, do
388 /// so and return true.
389 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
390                                       UnavailableAttr::ImplicitReason reason) {
391   // If we're not in a function, it's an error.
392   FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
393   if (!fn) return false;
394 
395   // If we're in template instantiation, it's an error.
396   if (inTemplateInstantiation())
397     return false;
398 
399   // If that function's not in a system header, it's an error.
400   if (!Context.getSourceManager().isInSystemHeader(loc))
401     return false;
402 
403   // If the function is already unavailable, it's not an error.
404   if (fn->hasAttr<UnavailableAttr>()) return true;
405 
406   fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc));
407   return true;
408 }
409 
410 ASTMutationListener *Sema::getASTMutationListener() const {
411   return getASTConsumer().GetASTMutationListener();
412 }
413 
414 ///Registers an external source. If an external source already exists,
415 /// creates a multiplex external source and appends to it.
416 ///
417 ///\param[in] E - A non-null external sema source.
418 ///
419 void Sema::addExternalSource(ExternalSemaSource *E) {
420   assert(E && "Cannot use with NULL ptr");
421 
422   if (!ExternalSource) {
423     ExternalSource = E;
424     return;
425   }
426 
427   if (isMultiplexExternalSource)
428     static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E);
429   else {
430     ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E);
431     isMultiplexExternalSource = true;
432   }
433 }
434 
435 /// Print out statistics about the semantic analysis.
436 void Sema::PrintStats() const {
437   llvm::errs() << "\n*** Semantic Analysis Stats:\n";
438   llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
439 
440   BumpAlloc.PrintStats();
441   AnalysisWarnings.PrintStats();
442 }
443 
444 void Sema::diagnoseNullableToNonnullConversion(QualType DstType,
445                                                QualType SrcType,
446                                                SourceLocation Loc) {
447   Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context);
448   if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable)
449     return;
450 
451   Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context);
452   if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull)
453     return;
454 
455   Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
456 }
457 
458 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) {
459   if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant,
460                       E->getBeginLoc()))
461     return;
462   // nullptr only exists from C++11 on, so don't warn on its absence earlier.
463   if (!getLangOpts().CPlusPlus11)
464     return;
465 
466   if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
467     return;
468   if (E->IgnoreParenImpCasts()->getType()->isNullPtrType())
469     return;
470 
471   // If it is a macro from system header, and if the macro name is not "NULL",
472   // do not warn.
473   SourceLocation MaybeMacroLoc = E->getBeginLoc();
474   if (Diags.getSuppressSystemWarnings() &&
475       SourceMgr.isInSystemMacro(MaybeMacroLoc) &&
476       !findMacroSpelling(MaybeMacroLoc, "NULL"))
477     return;
478 
479   Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant)
480       << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr");
481 }
482 
483 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
484 /// If there is already an implicit cast, merge into the existing one.
485 /// The result is of the given category.
486 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
487                                    CastKind Kind, ExprValueKind VK,
488                                    const CXXCastPath *BasePath,
489                                    CheckedConversionKind CCK) {
490 #ifndef NDEBUG
491   if (VK == VK_RValue && !E->isRValue()) {
492     switch (Kind) {
493     default:
494       llvm_unreachable("can't implicitly cast lvalue to rvalue with this cast "
495                        "kind");
496     case CK_LValueToRValue:
497     case CK_ArrayToPointerDecay:
498     case CK_FunctionToPointerDecay:
499     case CK_ToVoid:
500     case CK_NonAtomicToAtomic:
501       break;
502     }
503   }
504   assert((VK == VK_RValue || !E->isRValue()) && "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->isUsableInConstantExpressions(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   assert(DelayedDefaultedMemberExceptionSpecs.empty());
962 
963   // All dllexport classes should have been processed already.
964   assert(DelayedDllExportClasses.empty());
965 
966   // Remove file scoped decls that turned out to be used.
967   UnusedFileScopedDecls.erase(
968       std::remove_if(UnusedFileScopedDecls.begin(nullptr, true),
969                      UnusedFileScopedDecls.end(),
970                      [this](const DeclaratorDecl *DD) {
971                        return ShouldRemoveFromUnused(this, DD);
972                      }),
973       UnusedFileScopedDecls.end());
974 
975   if (TUKind == TU_Prefix) {
976     // Translation unit prefixes don't need any of the checking below.
977     if (!PP.isIncrementalProcessingEnabled())
978       TUScope = nullptr;
979     return;
980   }
981 
982   // Check for #pragma weak identifiers that were never declared
983   LoadExternalWeakUndeclaredIdentifiers();
984   for (auto WeakID : WeakUndeclaredIdentifiers) {
985     if (WeakID.second.getUsed())
986       continue;
987 
988     Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(),
989                                       LookupOrdinaryName);
990     if (PrevDecl != nullptr &&
991         !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
992       Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
993           << "'weak'" << ExpectedVariableOrFunction;
994     else
995       Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
996           << WeakID.first;
997   }
998 
999   if (LangOpts.CPlusPlus11 &&
1000       !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))
1001     CheckDelegatingCtorCycles();
1002 
1003   if (!Diags.hasErrorOccurred()) {
1004     if (ExternalSource)
1005       ExternalSource->ReadUndefinedButUsed(UndefinedButUsed);
1006     checkUndefinedButUsed(*this);
1007   }
1008 
1009   // A global-module-fragment is only permitted within a module unit.
1010   bool DiagnosedMissingModuleDeclaration = false;
1011   if (!ModuleScopes.empty() &&
1012       ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment &&
1013       !ModuleScopes.back().ImplicitGlobalModuleFragment) {
1014     Diag(ModuleScopes.back().BeginLoc,
1015          diag::err_module_declaration_missing_after_global_module_introducer);
1016     DiagnosedMissingModuleDeclaration = true;
1017   }
1018 
1019   if (TUKind == TU_Module) {
1020     // If we are building a module interface unit, we need to have seen the
1021     // module declaration by now.
1022     if (getLangOpts().getCompilingModule() ==
1023             LangOptions::CMK_ModuleInterface &&
1024         (ModuleScopes.empty() ||
1025          !ModuleScopes.back().Module->isModulePurview()) &&
1026         !DiagnosedMissingModuleDeclaration) {
1027       // FIXME: Make a better guess as to where to put the module declaration.
1028       Diag(getSourceManager().getLocForStartOfFile(
1029                getSourceManager().getMainFileID()),
1030            diag::err_module_declaration_missing);
1031     }
1032 
1033     // If we are building a module, resolve all of the exported declarations
1034     // now.
1035     if (Module *CurrentModule = PP.getCurrentModule()) {
1036       ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
1037 
1038       SmallVector<Module *, 2> Stack;
1039       Stack.push_back(CurrentModule);
1040       while (!Stack.empty()) {
1041         Module *Mod = Stack.pop_back_val();
1042 
1043         // Resolve the exported declarations and conflicts.
1044         // FIXME: Actually complain, once we figure out how to teach the
1045         // diagnostic client to deal with complaints in the module map at this
1046         // point.
1047         ModMap.resolveExports(Mod, /*Complain=*/false);
1048         ModMap.resolveUses(Mod, /*Complain=*/false);
1049         ModMap.resolveConflicts(Mod, /*Complain=*/false);
1050 
1051         // Queue the submodules, so their exports will also be resolved.
1052         Stack.append(Mod->submodule_begin(), Mod->submodule_end());
1053       }
1054     }
1055 
1056     // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for
1057     // modules when they are built, not every time they are used.
1058     emitAndClearUnusedLocalTypedefWarnings();
1059   }
1060 
1061   // C99 6.9.2p2:
1062   //   A declaration of an identifier for an object that has file
1063   //   scope without an initializer, and without a storage-class
1064   //   specifier or with the storage-class specifier static,
1065   //   constitutes a tentative definition. If a translation unit
1066   //   contains one or more tentative definitions for an identifier,
1067   //   and the translation unit contains no external definition for
1068   //   that identifier, then the behavior is exactly as if the
1069   //   translation unit contains a file scope declaration of that
1070   //   identifier, with the composite type as of the end of the
1071   //   translation unit, with an initializer equal to 0.
1072   llvm::SmallSet<VarDecl *, 32> Seen;
1073   for (TentativeDefinitionsType::iterator
1074             T = TentativeDefinitions.begin(ExternalSource),
1075          TEnd = TentativeDefinitions.end();
1076        T != TEnd; ++T) {
1077     VarDecl *VD = (*T)->getActingDefinition();
1078 
1079     // If the tentative definition was completed, getActingDefinition() returns
1080     // null. If we've already seen this variable before, insert()'s second
1081     // return value is false.
1082     if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second)
1083       continue;
1084 
1085     if (const IncompleteArrayType *ArrayT
1086         = Context.getAsIncompleteArrayType(VD->getType())) {
1087       // Set the length of the array to 1 (C99 6.9.2p5).
1088       Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
1089       llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
1090       QualType T = Context.getConstantArrayType(ArrayT->getElementType(),
1091                                                 One, ArrayType::Normal, 0);
1092       VD->setType(T);
1093     } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
1094                                    diag::err_tentative_def_incomplete_type))
1095       VD->setInvalidDecl();
1096 
1097     // No initialization is performed for a tentative definition.
1098     CheckCompleteVariableDeclaration(VD);
1099 
1100     // Notify the consumer that we've completed a tentative definition.
1101     if (!VD->isInvalidDecl())
1102       Consumer.CompleteTentativeDefinition(VD);
1103   }
1104 
1105   // If there were errors, disable 'unused' warnings since they will mostly be
1106   // noise. Don't warn for a use from a module: either we should warn on all
1107   // file-scope declarations in modules or not at all, but whether the
1108   // declaration is used is immaterial.
1109   if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {
1110     // Output warning for unused file scoped decls.
1111     for (UnusedFileScopedDeclsType::iterator
1112            I = UnusedFileScopedDecls.begin(ExternalSource),
1113            E = UnusedFileScopedDecls.end(); I != E; ++I) {
1114       if (ShouldRemoveFromUnused(this, *I))
1115         continue;
1116 
1117       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1118         const FunctionDecl *DiagD;
1119         if (!FD->hasBody(DiagD))
1120           DiagD = FD;
1121         if (DiagD->isDeleted())
1122           continue; // Deleted functions are supposed to be unused.
1123         if (DiagD->isReferenced()) {
1124           if (isa<CXXMethodDecl>(DiagD))
1125             Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
1126                   << DiagD->getDeclName();
1127           else {
1128             if (FD->getStorageClass() == SC_Static &&
1129                 !FD->isInlineSpecified() &&
1130                 !SourceMgr.isInMainFile(
1131                    SourceMgr.getExpansionLoc(FD->getLocation())))
1132               Diag(DiagD->getLocation(),
1133                    diag::warn_unneeded_static_internal_decl)
1134                   << DiagD->getDeclName();
1135             else
1136               Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1137                    << /*function*/0 << DiagD->getDeclName();
1138           }
1139         } else {
1140           if (FD->getDescribedFunctionTemplate())
1141             Diag(DiagD->getLocation(), diag::warn_unused_template)
1142               << /*function*/0 << DiagD->getDeclName();
1143           else
1144             Diag(DiagD->getLocation(),
1145                  isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
1146                                            : diag::warn_unused_function)
1147               << DiagD->getDeclName();
1148         }
1149       } else {
1150         const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
1151         if (!DiagD)
1152           DiagD = cast<VarDecl>(*I);
1153         if (DiagD->isReferenced()) {
1154           Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1155                 << /*variable*/1 << DiagD->getDeclName();
1156         } else if (DiagD->getType().isConstQualified()) {
1157           const SourceManager &SM = SourceMgr;
1158           if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) ||
1159               !PP.getLangOpts().IsHeaderFile)
1160             Diag(DiagD->getLocation(), diag::warn_unused_const_variable)
1161                 << DiagD->getDeclName();
1162         } else {
1163           if (DiagD->getDescribedVarTemplate())
1164             Diag(DiagD->getLocation(), diag::warn_unused_template)
1165               << /*variable*/1 << DiagD->getDeclName();
1166           else
1167             Diag(DiagD->getLocation(), diag::warn_unused_variable)
1168               << DiagD->getDeclName();
1169         }
1170       }
1171     }
1172 
1173     emitAndClearUnusedLocalTypedefWarnings();
1174   }
1175 
1176   if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) {
1177     // FIXME: Load additional unused private field candidates from the external
1178     // source.
1179     RecordCompleteMap RecordsComplete;
1180     RecordCompleteMap MNCComplete;
1181     for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(),
1182          E = UnusedPrivateFields.end(); I != E; ++I) {
1183       const NamedDecl *D = *I;
1184       const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
1185       if (RD && !RD->isUnion() &&
1186           IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) {
1187         Diag(D->getLocation(), diag::warn_unused_private_field)
1188               << D->getDeclName();
1189       }
1190     }
1191   }
1192 
1193   if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {
1194     if (ExternalSource)
1195       ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs);
1196     for (const auto &DeletedFieldInfo : DeleteExprs) {
1197       for (const auto &DeleteExprLoc : DeletedFieldInfo.second) {
1198         AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first,
1199                                   DeleteExprLoc.second);
1200       }
1201     }
1202   }
1203 
1204   // Check we've noticed that we're no longer parsing the initializer for every
1205   // variable. If we miss cases, then at best we have a performance issue and
1206   // at worst a rejects-valid bug.
1207   assert(ParsingInitForAutoVars.empty() &&
1208          "Didn't unmark var as having its initializer parsed");
1209 
1210   if (!PP.isIncrementalProcessingEnabled())
1211     TUScope = nullptr;
1212 }
1213 
1214 
1215 //===----------------------------------------------------------------------===//
1216 // Helper functions.
1217 //===----------------------------------------------------------------------===//
1218 
1219 DeclContext *Sema::getFunctionLevelDeclContext() {
1220   DeclContext *DC = CurContext;
1221 
1222   while (true) {
1223     if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) {
1224       DC = DC->getParent();
1225     } else if (isa<CXXMethodDecl>(DC) &&
1226                cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1227                cast<CXXRecordDecl>(DC->getParent())->isLambda()) {
1228       DC = DC->getParent()->getParent();
1229     }
1230     else break;
1231   }
1232 
1233   return DC;
1234 }
1235 
1236 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
1237 /// to the function decl for the function being parsed.  If we're currently
1238 /// in a 'block', this returns the containing context.
1239 FunctionDecl *Sema::getCurFunctionDecl() {
1240   DeclContext *DC = getFunctionLevelDeclContext();
1241   return dyn_cast<FunctionDecl>(DC);
1242 }
1243 
1244 ObjCMethodDecl *Sema::getCurMethodDecl() {
1245   DeclContext *DC = getFunctionLevelDeclContext();
1246   while (isa<RecordDecl>(DC))
1247     DC = DC->getParent();
1248   return dyn_cast<ObjCMethodDecl>(DC);
1249 }
1250 
1251 NamedDecl *Sema::getCurFunctionOrMethodDecl() {
1252   DeclContext *DC = getFunctionLevelDeclContext();
1253   if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1254     return cast<NamedDecl>(DC);
1255   return nullptr;
1256 }
1257 
1258 void Sema::EmitCurrentDiagnostic(unsigned DiagID) {
1259   // FIXME: It doesn't make sense to me that DiagID is an incoming argument here
1260   // and yet we also use the current diag ID on the DiagnosticsEngine. This has
1261   // been made more painfully obvious by the refactor that introduced this
1262   // function, but it is possible that the incoming argument can be
1263   // eliminated. If it truly cannot be (for example, there is some reentrancy
1264   // issue I am not seeing yet), then there should at least be a clarifying
1265   // comment somewhere.
1266   if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) {
1267     switch (DiagnosticIDs::getDiagnosticSFINAEResponse(
1268               Diags.getCurrentDiagID())) {
1269     case DiagnosticIDs::SFINAE_Report:
1270       // We'll report the diagnostic below.
1271       break;
1272 
1273     case DiagnosticIDs::SFINAE_SubstitutionFailure:
1274       // Count this failure so that we know that template argument deduction
1275       // has failed.
1276       ++NumSFINAEErrors;
1277 
1278       // Make a copy of this suppressed diagnostic and store it with the
1279       // template-deduction information.
1280       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1281         Diagnostic DiagInfo(&Diags);
1282         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1283                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1284       }
1285 
1286       Diags.setLastDiagnosticIgnored();
1287       Diags.Clear();
1288       return;
1289 
1290     case DiagnosticIDs::SFINAE_AccessControl: {
1291       // Per C++ Core Issue 1170, access control is part of SFINAE.
1292       // Additionally, the AccessCheckingSFINAE flag can be used to temporarily
1293       // make access control a part of SFINAE for the purposes of checking
1294       // type traits.
1295       if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11)
1296         break;
1297 
1298       SourceLocation Loc = Diags.getCurrentDiagLoc();
1299 
1300       // Suppress this diagnostic.
1301       ++NumSFINAEErrors;
1302 
1303       // Make a copy of this suppressed diagnostic and store it with the
1304       // template-deduction information.
1305       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1306         Diagnostic DiagInfo(&Diags);
1307         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1308                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1309       }
1310 
1311       Diags.setLastDiagnosticIgnored();
1312       Diags.Clear();
1313 
1314       // Now the diagnostic state is clear, produce a C++98 compatibility
1315       // warning.
1316       Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1317 
1318       // The last diagnostic which Sema produced was ignored. Suppress any
1319       // notes attached to it.
1320       Diags.setLastDiagnosticIgnored();
1321       return;
1322     }
1323 
1324     case DiagnosticIDs::SFINAE_Suppress:
1325       // Make a copy of this suppressed diagnostic and store it with the
1326       // template-deduction information;
1327       if (*Info) {
1328         Diagnostic DiagInfo(&Diags);
1329         (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
1330                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1331       }
1332 
1333       // Suppress this diagnostic.
1334       Diags.setLastDiagnosticIgnored();
1335       Diags.Clear();
1336       return;
1337     }
1338   }
1339 
1340   // Copy the diagnostic printing policy over the ASTContext printing policy.
1341   // TODO: Stop doing that.  See: https://reviews.llvm.org/D45093#1090292
1342   Context.setPrintingPolicy(getPrintingPolicy());
1343 
1344   // Emit the diagnostic.
1345   if (!Diags.EmitCurrentDiagnostic())
1346     return;
1347 
1348   // If this is not a note, and we're in a template instantiation
1349   // that is different from the last template instantiation where
1350   // we emitted an error, print a template instantiation
1351   // backtrace.
1352   if (!DiagnosticIDs::isBuiltinNote(DiagID))
1353     PrintContextStack();
1354 }
1355 
1356 Sema::SemaDiagnosticBuilder
1357 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
1358   SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
1359   PD.Emit(Builder);
1360 
1361   return Builder;
1362 }
1363 
1364 // Print notes showing how we can reach FD starting from an a priori
1365 // known-callable function.
1366 static void emitCallStackNotes(Sema &S, FunctionDecl *FD) {
1367   auto FnIt = S.DeviceKnownEmittedFns.find(FD);
1368   while (FnIt != S.DeviceKnownEmittedFns.end()) {
1369     DiagnosticBuilder Builder(
1370         S.Diags.Report(FnIt->second.Loc, diag::note_called_by));
1371     Builder << FnIt->second.FD;
1372     Builder.setForceEmit();
1373 
1374     FnIt = S.DeviceKnownEmittedFns.find(FnIt->second.FD);
1375   }
1376 }
1377 
1378 // Emit any deferred diagnostics for FD and erase them from the map in which
1379 // they're stored.
1380 static void emitDeferredDiags(Sema &S, FunctionDecl *FD) {
1381   auto It = S.DeviceDeferredDiags.find(FD);
1382   if (It == S.DeviceDeferredDiags.end())
1383     return;
1384   bool HasWarningOrError = false;
1385   for (PartialDiagnosticAt &PDAt : It->second) {
1386     const SourceLocation &Loc = PDAt.first;
1387     const PartialDiagnostic &PD = PDAt.second;
1388     HasWarningOrError |= S.getDiagnostics().getDiagnosticLevel(
1389                              PD.getDiagID(), Loc) >= DiagnosticsEngine::Warning;
1390     DiagnosticBuilder Builder(S.Diags.Report(Loc, PD.getDiagID()));
1391     Builder.setForceEmit();
1392     PD.Emit(Builder);
1393   }
1394   S.DeviceDeferredDiags.erase(It);
1395 
1396   // FIXME: Should this be called after every warning/error emitted in the loop
1397   // above, instead of just once per function?  That would be consistent with
1398   // how we handle immediate errors, but it also seems like a bit much.
1399   if (HasWarningOrError)
1400     emitCallStackNotes(S, FD);
1401 }
1402 
1403 // In CUDA, there are some constructs which may appear in semantically-valid
1404 // code, but trigger errors if we ever generate code for the function in which
1405 // they appear.  Essentially every construct you're not allowed to use on the
1406 // device falls into this category, because you are allowed to use these
1407 // constructs in a __host__ __device__ function, but only if that function is
1408 // never codegen'ed on the device.
1409 //
1410 // To handle semantic checking for these constructs, we keep track of the set of
1411 // functions we know will be emitted, either because we could tell a priori that
1412 // they would be emitted, or because they were transitively called by a
1413 // known-emitted function.
1414 //
1415 // We also keep a partial call graph of which not-known-emitted functions call
1416 // which other not-known-emitted functions.
1417 //
1418 // When we see something which is illegal if the current function is emitted
1419 // (usually by way of CUDADiagIfDeviceCode, CUDADiagIfHostCode, or
1420 // CheckCUDACall), we first check if the current function is known-emitted.  If
1421 // so, we immediately output the diagnostic.
1422 //
1423 // Otherwise, we "defer" the diagnostic.  It sits in Sema::DeviceDeferredDiags
1424 // until we discover that the function is known-emitted, at which point we take
1425 // it out of this map and emit the diagnostic.
1426 
1427 Sema::DeviceDiagBuilder::DeviceDiagBuilder(Kind K, SourceLocation Loc,
1428                                            unsigned DiagID, FunctionDecl *Fn,
1429                                            Sema &S)
1430     : S(S), Loc(Loc), DiagID(DiagID), Fn(Fn),
1431       ShowCallStack(K == K_ImmediateWithCallStack || K == K_Deferred) {
1432   switch (K) {
1433   case K_Nop:
1434     break;
1435   case K_Immediate:
1436   case K_ImmediateWithCallStack:
1437     ImmediateDiag.emplace(S.Diag(Loc, DiagID));
1438     break;
1439   case K_Deferred:
1440     assert(Fn && "Must have a function to attach the deferred diag to.");
1441     auto &Diags = S.DeviceDeferredDiags[Fn];
1442     PartialDiagId.emplace(Diags.size());
1443     Diags.emplace_back(Loc, S.PDiag(DiagID));
1444     break;
1445   }
1446 }
1447 
1448 Sema::DeviceDiagBuilder::DeviceDiagBuilder(DeviceDiagBuilder &&D)
1449     : S(D.S), Loc(D.Loc), DiagID(D.DiagID), Fn(D.Fn),
1450       ShowCallStack(D.ShowCallStack), ImmediateDiag(D.ImmediateDiag),
1451       PartialDiagId(D.PartialDiagId) {
1452   // Clean the previous diagnostics.
1453   D.ShowCallStack = false;
1454   D.ImmediateDiag.reset();
1455   D.PartialDiagId.reset();
1456 }
1457 
1458 Sema::DeviceDiagBuilder::~DeviceDiagBuilder() {
1459   if (ImmediateDiag) {
1460     // Emit our diagnostic and, if it was a warning or error, output a callstack
1461     // if Fn isn't a priori known-emitted.
1462     bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel(
1463                                 DiagID, Loc) >= DiagnosticsEngine::Warning;
1464     ImmediateDiag.reset(); // Emit the immediate diag.
1465     if (IsWarningOrError && ShowCallStack)
1466       emitCallStackNotes(S, Fn);
1467   } else {
1468     assert((!PartialDiagId || ShowCallStack) &&
1469            "Must always show call stack for deferred diags.");
1470   }
1471 }
1472 
1473 // Indicate that this function (and thus everything it transtively calls) will
1474 // be codegen'ed, and emit any deferred diagnostics on this function and its
1475 // (transitive) callees.
1476 void Sema::markKnownEmitted(
1477     Sema &S, FunctionDecl *OrigCaller, FunctionDecl *OrigCallee,
1478     SourceLocation OrigLoc,
1479     const llvm::function_ref<bool(Sema &, FunctionDecl *)> IsKnownEmitted) {
1480   // Nothing to do if we already know that FD is emitted.
1481   if (IsKnownEmitted(S, OrigCallee)) {
1482     assert(!S.DeviceCallGraph.count(OrigCallee));
1483     return;
1484   }
1485 
1486   // We've just discovered that OrigCallee is known-emitted.  Walk our call
1487   // graph to see what else we can now discover also must be emitted.
1488 
1489   struct CallInfo {
1490     FunctionDecl *Caller;
1491     FunctionDecl *Callee;
1492     SourceLocation Loc;
1493   };
1494   llvm::SmallVector<CallInfo, 4> Worklist = {{OrigCaller, OrigCallee, OrigLoc}};
1495   llvm::SmallSet<CanonicalDeclPtr<FunctionDecl>, 4> Seen;
1496   Seen.insert(OrigCallee);
1497   while (!Worklist.empty()) {
1498     CallInfo C = Worklist.pop_back_val();
1499     assert(!IsKnownEmitted(S, C.Callee) &&
1500            "Worklist should not contain known-emitted functions.");
1501     S.DeviceKnownEmittedFns[C.Callee] = {C.Caller, C.Loc};
1502     emitDeferredDiags(S, C.Callee);
1503 
1504     // If this is a template instantiation, explore its callgraph as well:
1505     // Non-dependent calls are part of the template's callgraph, while dependent
1506     // calls are part of to the instantiation's call graph.
1507     if (auto *Templ = C.Callee->getPrimaryTemplate()) {
1508       FunctionDecl *TemplFD = Templ->getAsFunction();
1509       if (!Seen.count(TemplFD) && !S.DeviceKnownEmittedFns.count(TemplFD)) {
1510         Seen.insert(TemplFD);
1511         Worklist.push_back(
1512             {/* Caller = */ C.Caller, /* Callee = */ TemplFD, C.Loc});
1513       }
1514     }
1515 
1516     // Add all functions called by Callee to our worklist.
1517     auto CGIt = S.DeviceCallGraph.find(C.Callee);
1518     if (CGIt == S.DeviceCallGraph.end())
1519       continue;
1520 
1521     for (std::pair<CanonicalDeclPtr<FunctionDecl>, SourceLocation> FDLoc :
1522          CGIt->second) {
1523       FunctionDecl *NewCallee = FDLoc.first;
1524       SourceLocation CallLoc = FDLoc.second;
1525       if (Seen.count(NewCallee) || IsKnownEmitted(S, NewCallee))
1526         continue;
1527       Seen.insert(NewCallee);
1528       Worklist.push_back(
1529           {/* Caller = */ C.Callee, /* Callee = */ NewCallee, CallLoc});
1530     }
1531 
1532     // C.Callee is now known-emitted, so we no longer need to maintain its list
1533     // of callees in DeviceCallGraph.
1534     S.DeviceCallGraph.erase(CGIt);
1535   }
1536 }
1537 
1538 Sema::DeviceDiagBuilder Sema::targetDiag(SourceLocation Loc, unsigned DiagID) {
1539   if (LangOpts.OpenMP && LangOpts.OpenMPIsDevice)
1540     return diagIfOpenMPDeviceCode(Loc, DiagID);
1541   if (getLangOpts().CUDA)
1542     return getLangOpts().CUDAIsDevice ? CUDADiagIfDeviceCode(Loc, DiagID)
1543                                       : CUDADiagIfHostCode(Loc, DiagID);
1544   return DeviceDiagBuilder(DeviceDiagBuilder::K_Immediate, Loc, DiagID,
1545                            getCurFunctionDecl(), *this);
1546 }
1547 
1548 /// Looks through the macro-expansion chain for the given
1549 /// location, looking for a macro expansion with the given name.
1550 /// If one is found, returns true and sets the location to that
1551 /// expansion loc.
1552 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) {
1553   SourceLocation loc = locref;
1554   if (!loc.isMacroID()) return false;
1555 
1556   // There's no good way right now to look at the intermediate
1557   // expansions, so just jump to the expansion location.
1558   loc = getSourceManager().getExpansionLoc(loc);
1559 
1560   // If that's written with the name, stop here.
1561   SmallVector<char, 16> buffer;
1562   if (getPreprocessor().getSpelling(loc, buffer) == name) {
1563     locref = loc;
1564     return true;
1565   }
1566   return false;
1567 }
1568 
1569 /// Determines the active Scope associated with the given declaration
1570 /// context.
1571 ///
1572 /// This routine maps a declaration context to the active Scope object that
1573 /// represents that declaration context in the parser. It is typically used
1574 /// from "scope-less" code (e.g., template instantiation, lazy creation of
1575 /// declarations) that injects a name for name-lookup purposes and, therefore,
1576 /// must update the Scope.
1577 ///
1578 /// \returns The scope corresponding to the given declaraion context, or NULL
1579 /// if no such scope is open.
1580 Scope *Sema::getScopeForContext(DeclContext *Ctx) {
1581 
1582   if (!Ctx)
1583     return nullptr;
1584 
1585   Ctx = Ctx->getPrimaryContext();
1586   for (Scope *S = getCurScope(); S; S = S->getParent()) {
1587     // Ignore scopes that cannot have declarations. This is important for
1588     // out-of-line definitions of static class members.
1589     if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
1590       if (DeclContext *Entity = S->getEntity())
1591         if (Ctx == Entity->getPrimaryContext())
1592           return S;
1593   }
1594 
1595   return nullptr;
1596 }
1597 
1598 /// Enter a new function scope
1599 void Sema::PushFunctionScope() {
1600   if (FunctionScopes.empty()) {
1601     // Use PreallocatedFunctionScope to avoid allocating memory when possible.
1602     PreallocatedFunctionScope->Clear();
1603     FunctionScopes.push_back(PreallocatedFunctionScope.get());
1604   } else {
1605     FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
1606   }
1607   if (LangOpts.OpenMP)
1608     pushOpenMPFunctionRegion();
1609 }
1610 
1611 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
1612   FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
1613                                               BlockScope, Block));
1614 }
1615 
1616 LambdaScopeInfo *Sema::PushLambdaScope() {
1617   LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics());
1618   FunctionScopes.push_back(LSI);
1619   return LSI;
1620 }
1621 
1622 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) {
1623   if (LambdaScopeInfo *const LSI = getCurLambda()) {
1624     LSI->AutoTemplateParameterDepth = Depth;
1625     return;
1626   }
1627   llvm_unreachable(
1628       "Remove assertion if intentionally called in a non-lambda context.");
1629 }
1630 
1631 // Check that the type of the VarDecl has an accessible copy constructor and
1632 // resolve its destructor's exception spefication.
1633 static void checkEscapingByref(VarDecl *VD, Sema &S) {
1634   QualType T = VD->getType();
1635   EnterExpressionEvaluationContext scope(
1636       S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
1637   SourceLocation Loc = VD->getLocation();
1638   Expr *VarRef =
1639       new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc);
1640   ExprResult Result = S.PerformMoveOrCopyInitialization(
1641       InitializedEntity::InitializeBlock(Loc, T, false), VD, VD->getType(),
1642       VarRef, /*AllowNRVO=*/true);
1643   if (!Result.isInvalid()) {
1644     Result = S.MaybeCreateExprWithCleanups(Result);
1645     Expr *Init = Result.getAs<Expr>();
1646     S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init));
1647   }
1648 
1649   // The destructor's exception spefication is needed when IRGen generates
1650   // block copy/destroy functions. Resolve it here.
1651   if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1652     if (CXXDestructorDecl *DD = RD->getDestructor()) {
1653       auto *FPT = DD->getType()->getAs<FunctionProtoType>();
1654       S.ResolveExceptionSpec(Loc, FPT);
1655     }
1656 }
1657 
1658 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) {
1659   // Set the EscapingByref flag of __block variables captured by
1660   // escaping blocks.
1661   for (const BlockDecl *BD : FSI.Blocks) {
1662     if (BD->doesNotEscape())
1663       continue;
1664     for (const BlockDecl::Capture &BC : BD->captures()) {
1665       VarDecl *VD = BC.getVariable();
1666       if (VD->hasAttr<BlocksAttr>())
1667         VD->setEscapingByref();
1668     }
1669   }
1670 
1671   for (VarDecl *VD : FSI.ByrefBlockVars) {
1672     // __block variables might require us to capture a copy-initializer.
1673     if (!VD->isEscapingByref())
1674       continue;
1675     // It's currently invalid to ever have a __block variable with an
1676     // array type; should we diagnose that here?
1677     // Regardless, we don't want to ignore array nesting when
1678     // constructing this copy.
1679     if (VD->getType()->isStructureOrClassType())
1680       checkEscapingByref(VD, S);
1681   }
1682 }
1683 
1684 void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP,
1685                                 const Decl *D, const BlockExpr *blkExpr) {
1686   assert(!FunctionScopes.empty() && "mismatched push/pop!");
1687 
1688   // This function shouldn't be called after popping the current function scope.
1689   // markEscapingByrefs calls PerformMoveOrCopyInitialization, which can call
1690   // PushFunctionScope, which can cause clearing out PreallocatedFunctionScope
1691   // when FunctionScopes is empty.
1692   markEscapingByrefs(*FunctionScopes.back(), *this);
1693 
1694   FunctionScopeInfo *Scope = FunctionScopes.pop_back_val();
1695 
1696   if (LangOpts.OpenMP)
1697     popOpenMPFunctionRegion(Scope);
1698 
1699   // Issue any analysis-based warnings.
1700   if (WP && D)
1701     AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr);
1702   else
1703     for (const auto &PUD : Scope->PossiblyUnreachableDiags)
1704       Diag(PUD.Loc, PUD.PD);
1705 
1706   // Delete the scope unless its our preallocated scope.
1707   if (Scope != PreallocatedFunctionScope.get())
1708     delete Scope;
1709 }
1710 
1711 void Sema::PushCompoundScope(bool IsStmtExpr) {
1712   getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr));
1713 }
1714 
1715 void Sema::PopCompoundScope() {
1716   FunctionScopeInfo *CurFunction = getCurFunction();
1717   assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop");
1718 
1719   CurFunction->CompoundScopes.pop_back();
1720 }
1721 
1722 /// Determine whether any errors occurred within this function/method/
1723 /// block.
1724 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
1725   return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
1726 }
1727 
1728 void Sema::setFunctionHasBranchIntoScope() {
1729   if (!FunctionScopes.empty())
1730     FunctionScopes.back()->setHasBranchIntoScope();
1731 }
1732 
1733 void Sema::setFunctionHasBranchProtectedScope() {
1734   if (!FunctionScopes.empty())
1735     FunctionScopes.back()->setHasBranchProtectedScope();
1736 }
1737 
1738 void Sema::setFunctionHasIndirectGoto() {
1739   if (!FunctionScopes.empty())
1740     FunctionScopes.back()->setHasIndirectGoto();
1741 }
1742 
1743 BlockScopeInfo *Sema::getCurBlock() {
1744   if (FunctionScopes.empty())
1745     return nullptr;
1746 
1747   auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back());
1748   if (CurBSI && CurBSI->TheDecl &&
1749       !CurBSI->TheDecl->Encloses(CurContext)) {
1750     // We have switched contexts due to template instantiation.
1751     assert(!CodeSynthesisContexts.empty());
1752     return nullptr;
1753   }
1754 
1755   return CurBSI;
1756 }
1757 
1758 FunctionScopeInfo *Sema::getEnclosingFunction() const {
1759   if (FunctionScopes.empty())
1760     return nullptr;
1761 
1762   for (int e = FunctionScopes.size() - 1; e >= 0; --e) {
1763     if (isa<sema::BlockScopeInfo>(FunctionScopes[e]))
1764       continue;
1765     return FunctionScopes[e];
1766   }
1767   return nullptr;
1768 }
1769 
1770 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) {
1771   if (FunctionScopes.empty())
1772     return nullptr;
1773 
1774   auto I = FunctionScopes.rbegin();
1775   if (IgnoreNonLambdaCapturingScope) {
1776     auto E = FunctionScopes.rend();
1777     while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1778       ++I;
1779     if (I == E)
1780       return nullptr;
1781   }
1782   auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I);
1783   if (CurLSI && CurLSI->Lambda &&
1784       !CurLSI->Lambda->Encloses(CurContext)) {
1785     // We have switched contexts due to template instantiation.
1786     assert(!CodeSynthesisContexts.empty());
1787     return nullptr;
1788   }
1789 
1790   return CurLSI;
1791 }
1792 // We have a generic lambda if we parsed auto parameters, or we have
1793 // an associated template parameter list.
1794 LambdaScopeInfo *Sema::getCurGenericLambda() {
1795   if (LambdaScopeInfo *LSI =  getCurLambda()) {
1796     return (LSI->AutoTemplateParams.size() ||
1797                     LSI->GLTemplateParameterList) ? LSI : nullptr;
1798   }
1799   return nullptr;
1800 }
1801 
1802 
1803 void Sema::ActOnComment(SourceRange Comment) {
1804   if (!LangOpts.RetainCommentsFromSystemHeaders &&
1805       SourceMgr.isInSystemHeader(Comment.getBegin()))
1806     return;
1807   RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false);
1808   if (RC.isAlmostTrailingComment()) {
1809     SourceRange MagicMarkerRange(Comment.getBegin(),
1810                                  Comment.getBegin().getLocWithOffset(3));
1811     StringRef MagicMarkerText;
1812     switch (RC.getKind()) {
1813     case RawComment::RCK_OrdinaryBCPL:
1814       MagicMarkerText = "///<";
1815       break;
1816     case RawComment::RCK_OrdinaryC:
1817       MagicMarkerText = "/**<";
1818       break;
1819     default:
1820       llvm_unreachable("if this is an almost Doxygen comment, "
1821                        "it should be ordinary");
1822     }
1823     Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1824       FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText);
1825   }
1826   Context.addComment(RC);
1827 }
1828 
1829 // Pin this vtable to this file.
1830 ExternalSemaSource::~ExternalSemaSource() {}
1831 
1832 void ExternalSemaSource::ReadMethodPool(Selector Sel) { }
1833 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { }
1834 
1835 void ExternalSemaSource::ReadKnownNamespaces(
1836                            SmallVectorImpl<NamespaceDecl *> &Namespaces) {
1837 }
1838 
1839 void ExternalSemaSource::ReadUndefinedButUsed(
1840     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1841 
1842 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector<
1843     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {}
1844 
1845 /// Figure out if an expression could be turned into a call.
1846 ///
1847 /// Use this when trying to recover from an error where the programmer may have
1848 /// written just the name of a function instead of actually calling it.
1849 ///
1850 /// \param E - The expression to examine.
1851 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
1852 ///  with no arguments, this parameter is set to the type returned by such a
1853 ///  call; otherwise, it is set to an empty QualType.
1854 /// \param OverloadSet - If the expression is an overloaded function
1855 ///  name, this parameter is populated with the decls of the various overloads.
1856 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
1857                          UnresolvedSetImpl &OverloadSet) {
1858   ZeroArgCallReturnTy = QualType();
1859   OverloadSet.clear();
1860 
1861   const OverloadExpr *Overloads = nullptr;
1862   bool IsMemExpr = false;
1863   if (E.getType() == Context.OverloadTy) {
1864     OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E));
1865 
1866     // Ignore overloads that are pointer-to-member constants.
1867     if (FR.HasFormOfMemberPointer)
1868       return false;
1869 
1870     Overloads = FR.Expression;
1871   } else if (E.getType() == Context.BoundMemberTy) {
1872     Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens());
1873     IsMemExpr = true;
1874   }
1875 
1876   bool Ambiguous = false;
1877   bool IsMV = false;
1878 
1879   if (Overloads) {
1880     for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
1881          DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
1882       OverloadSet.addDecl(*it);
1883 
1884       // Check whether the function is a non-template, non-member which takes no
1885       // arguments.
1886       if (IsMemExpr)
1887         continue;
1888       if (const FunctionDecl *OverloadDecl
1889             = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
1890         if (OverloadDecl->getMinRequiredArguments() == 0) {
1891           if (!ZeroArgCallReturnTy.isNull() && !Ambiguous &&
1892               (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() ||
1893                           OverloadDecl->isCPUSpecificMultiVersion()))) {
1894             ZeroArgCallReturnTy = QualType();
1895             Ambiguous = true;
1896           } else {
1897             ZeroArgCallReturnTy = OverloadDecl->getReturnType();
1898             IsMV = OverloadDecl->isCPUDispatchMultiVersion() ||
1899                    OverloadDecl->isCPUSpecificMultiVersion();
1900           }
1901         }
1902       }
1903     }
1904 
1905     // If it's not a member, use better machinery to try to resolve the call
1906     if (!IsMemExpr)
1907       return !ZeroArgCallReturnTy.isNull();
1908   }
1909 
1910   // Attempt to call the member with no arguments - this will correctly handle
1911   // member templates with defaults/deduction of template arguments, overloads
1912   // with default arguments, etc.
1913   if (IsMemExpr && !E.isTypeDependent()) {
1914     bool Suppress = getDiagnostics().getSuppressAllDiagnostics();
1915     getDiagnostics().setSuppressAllDiagnostics(true);
1916     ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(),
1917                                              None, SourceLocation());
1918     getDiagnostics().setSuppressAllDiagnostics(Suppress);
1919     if (R.isUsable()) {
1920       ZeroArgCallReturnTy = R.get()->getType();
1921       return true;
1922     }
1923     return false;
1924   }
1925 
1926   if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) {
1927     if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
1928       if (Fun->getMinRequiredArguments() == 0)
1929         ZeroArgCallReturnTy = Fun->getReturnType();
1930       return true;
1931     }
1932   }
1933 
1934   // We don't have an expression that's convenient to get a FunctionDecl from,
1935   // but we can at least check if the type is "function of 0 arguments".
1936   QualType ExprTy = E.getType();
1937   const FunctionType *FunTy = nullptr;
1938   QualType PointeeTy = ExprTy->getPointeeType();
1939   if (!PointeeTy.isNull())
1940     FunTy = PointeeTy->getAs<FunctionType>();
1941   if (!FunTy)
1942     FunTy = ExprTy->getAs<FunctionType>();
1943 
1944   if (const FunctionProtoType *FPT =
1945       dyn_cast_or_null<FunctionProtoType>(FunTy)) {
1946     if (FPT->getNumParams() == 0)
1947       ZeroArgCallReturnTy = FunTy->getReturnType();
1948     return true;
1949   }
1950   return false;
1951 }
1952 
1953 /// Give notes for a set of overloads.
1954 ///
1955 /// A companion to tryExprAsCall. In cases when the name that the programmer
1956 /// wrote was an overloaded function, we may be able to make some guesses about
1957 /// plausible overloads based on their return types; such guesses can be handed
1958 /// off to this method to be emitted as notes.
1959 ///
1960 /// \param Overloads - The overloads to note.
1961 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
1962 ///  -fshow-overloads=best, this is the location to attach to the note about too
1963 ///  many candidates. Typically this will be the location of the original
1964 ///  ill-formed expression.
1965 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads,
1966                           const SourceLocation FinalNoteLoc) {
1967   int ShownOverloads = 0;
1968   int SuppressedOverloads = 0;
1969   for (UnresolvedSetImpl::iterator It = Overloads.begin(),
1970        DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
1971     // FIXME: Magic number for max shown overloads stolen from
1972     // OverloadCandidateSet::NoteCandidates.
1973     if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) {
1974       ++SuppressedOverloads;
1975       continue;
1976     }
1977 
1978     NamedDecl *Fn = (*It)->getUnderlyingDecl();
1979     // Don't print overloads for non-default multiversioned functions.
1980     if (const auto *FD = Fn->getAsFunction()) {
1981       if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() &&
1982           !FD->getAttr<TargetAttr>()->isDefaultVersion())
1983         continue;
1984     }
1985     S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);
1986     ++ShownOverloads;
1987   }
1988 
1989   if (SuppressedOverloads)
1990     S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
1991       << SuppressedOverloads;
1992 }
1993 
1994 static void notePlausibleOverloads(Sema &S, SourceLocation Loc,
1995                                    const UnresolvedSetImpl &Overloads,
1996                                    bool (*IsPlausibleResult)(QualType)) {
1997   if (!IsPlausibleResult)
1998     return noteOverloads(S, Overloads, Loc);
1999 
2000   UnresolvedSet<2> PlausibleOverloads;
2001   for (OverloadExpr::decls_iterator It = Overloads.begin(),
2002          DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
2003     const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
2004     QualType OverloadResultTy = OverloadDecl->getReturnType();
2005     if (IsPlausibleResult(OverloadResultTy))
2006       PlausibleOverloads.addDecl(It.getDecl());
2007   }
2008   noteOverloads(S, PlausibleOverloads, Loc);
2009 }
2010 
2011 /// Determine whether the given expression can be called by just
2012 /// putting parentheses after it.  Notably, expressions with unary
2013 /// operators can't be because the unary operator will start parsing
2014 /// outside the call.
2015 static bool IsCallableWithAppend(Expr *E) {
2016   E = E->IgnoreImplicit();
2017   return (!isa<CStyleCastExpr>(E) &&
2018           !isa<UnaryOperator>(E) &&
2019           !isa<BinaryOperator>(E) &&
2020           !isa<CXXOperatorCallExpr>(E));
2021 }
2022 
2023 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) {
2024   if (const auto *UO = dyn_cast<UnaryOperator>(E))
2025     E = UO->getSubExpr();
2026 
2027   if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
2028     if (ULE->getNumDecls() == 0)
2029       return false;
2030 
2031     const NamedDecl *ND = *ULE->decls_begin();
2032     if (const auto *FD = dyn_cast<FunctionDecl>(ND))
2033       return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion();
2034   }
2035   return false;
2036 }
2037 
2038 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
2039                                 bool ForceComplain,
2040                                 bool (*IsPlausibleResult)(QualType)) {
2041   SourceLocation Loc = E.get()->getExprLoc();
2042   SourceRange Range = E.get()->getSourceRange();
2043 
2044   QualType ZeroArgCallTy;
2045   UnresolvedSet<4> Overloads;
2046   if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
2047       !ZeroArgCallTy.isNull() &&
2048       (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
2049     // At this point, we know E is potentially callable with 0
2050     // arguments and that it returns something of a reasonable type,
2051     // so we can emit a fixit and carry on pretending that E was
2052     // actually a CallExpr.
2053     SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
2054     bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2055     Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range
2056                   << (IsCallableWithAppend(E.get())
2057                           ? FixItHint::CreateInsertion(ParenInsertionLoc, "()")
2058                           : FixItHint());
2059     if (!IsMV)
2060       notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2061 
2062     // FIXME: Try this before emitting the fixit, and suppress diagnostics
2063     // while doing so.
2064     E = ActOnCallExpr(nullptr, E.get(), Range.getEnd(), None,
2065                       Range.getEnd().getLocWithOffset(1));
2066     return true;
2067   }
2068 
2069   if (!ForceComplain) return false;
2070 
2071   bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2072   Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range;
2073   if (!IsMV)
2074     notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2075   E = ExprError();
2076   return true;
2077 }
2078 
2079 IdentifierInfo *Sema::getSuperIdentifier() const {
2080   if (!Ident_super)
2081     Ident_super = &Context.Idents.get("super");
2082   return Ident_super;
2083 }
2084 
2085 IdentifierInfo *Sema::getFloat128Identifier() const {
2086   if (!Ident___float128)
2087     Ident___float128 = &Context.Idents.get("__float128");
2088   return Ident___float128;
2089 }
2090 
2091 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD,
2092                                    CapturedRegionKind K) {
2093   CapturingScopeInfo *CSI = new CapturedRegionScopeInfo(
2094       getDiagnostics(), S, CD, RD, CD->getContextParam(), K,
2095       (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0);
2096   CSI->ReturnType = Context.VoidTy;
2097   FunctionScopes.push_back(CSI);
2098 }
2099 
2100 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() {
2101   if (FunctionScopes.empty())
2102     return nullptr;
2103 
2104   return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back());
2105 }
2106 
2107 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
2108 Sema::getMismatchingDeleteExpressions() const {
2109   return DeleteExprs;
2110 }
2111 
2112 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) {
2113   if (ExtStr.empty())
2114     return;
2115   llvm::SmallVector<StringRef, 1> Exts;
2116   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2117   auto CanT = T.getCanonicalType().getTypePtr();
2118   for (auto &I : Exts)
2119     OpenCLTypeExtMap[CanT].insert(I.str());
2120 }
2121 
2122 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) {
2123   llvm::SmallVector<StringRef, 1> Exts;
2124   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2125   if (Exts.empty())
2126     return;
2127   for (auto &I : Exts)
2128     OpenCLDeclExtMap[FD].insert(I.str());
2129 }
2130 
2131 void Sema::setCurrentOpenCLExtensionForType(QualType T) {
2132   if (CurrOpenCLExtension.empty())
2133     return;
2134   setOpenCLExtensionForType(T, CurrOpenCLExtension);
2135 }
2136 
2137 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) {
2138   if (CurrOpenCLExtension.empty())
2139     return;
2140   setOpenCLExtensionForDecl(D, CurrOpenCLExtension);
2141 }
2142 
2143 std::string Sema::getOpenCLExtensionsFromDeclExtMap(FunctionDecl *FD) {
2144   if (!OpenCLDeclExtMap.empty())
2145     return getOpenCLExtensionsFromExtMap(FD, OpenCLDeclExtMap);
2146 
2147   return "";
2148 }
2149 
2150 std::string Sema::getOpenCLExtensionsFromTypeExtMap(FunctionType *FT) {
2151   if (!OpenCLTypeExtMap.empty())
2152     return getOpenCLExtensionsFromExtMap(FT, OpenCLTypeExtMap);
2153 
2154   return "";
2155 }
2156 
2157 template <typename T, typename MapT>
2158 std::string Sema::getOpenCLExtensionsFromExtMap(T *FDT, MapT &Map) {
2159   std::string ExtensionNames = "";
2160   auto Loc = Map.find(FDT);
2161 
2162   for (auto const& I : Loc->second) {
2163     ExtensionNames += I;
2164     ExtensionNames += " ";
2165   }
2166   ExtensionNames.pop_back();
2167 
2168   return ExtensionNames;
2169 }
2170 
2171 bool Sema::isOpenCLDisabledDecl(Decl *FD) {
2172   auto Loc = OpenCLDeclExtMap.find(FD);
2173   if (Loc == OpenCLDeclExtMap.end())
2174     return false;
2175   for (auto &I : Loc->second) {
2176     if (!getOpenCLOptions().isEnabled(I))
2177       return true;
2178   }
2179   return false;
2180 }
2181 
2182 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT>
2183 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
2184                                          DiagInfoT DiagInfo, MapT &Map,
2185                                          unsigned Selector,
2186                                          SourceRange SrcRange) {
2187   auto Loc = Map.find(D);
2188   if (Loc == Map.end())
2189     return false;
2190   bool Disabled = false;
2191   for (auto &I : Loc->second) {
2192     if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) {
2193       Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
2194                                                          << I << SrcRange;
2195       Disabled = true;
2196     }
2197   }
2198   return Disabled;
2199 }
2200 
2201 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) {
2202   // Check extensions for declared types.
2203   Decl *Decl = nullptr;
2204   if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr()))
2205     Decl = TypedefT->getDecl();
2206   if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr()))
2207     Decl = TagT->getDecl();
2208   auto Loc = DS.getTypeSpecTypeLoc();
2209 
2210   // Check extensions for vector types.
2211   // e.g. double4 is not allowed when cl_khr_fp64 is absent.
2212   if (QT->isExtVectorType()) {
2213     auto TypePtr = QT->castAs<ExtVectorType>()->getElementType().getTypePtr();
2214     return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap);
2215   }
2216 
2217   if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
2218     return true;
2219 
2220   // Check extensions for builtin types.
2221   return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc,
2222                                        QT, OpenCLTypeExtMap);
2223 }
2224 
2225 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) {
2226   IdentifierInfo *FnName = D.getIdentifier();
2227   return checkOpenCLDisabledTypeOrDecl(&D, E.getBeginLoc(), FnName,
2228                                        OpenCLDeclExtMap, 1, D.getSourceRange());
2229 }
2230