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