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