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