xref: /llvm-project-15.0.7/clang/lib/Sema/Sema.cpp (revision f614422d)
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   // In diagnostics, we print _Bool as bool if the latter is defined as the
56   // former.
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       // Skip VarDecls that lack formal definitions but which we know are in
658       // fact defined somewhere.
659       if (VD->isKnownToBeDefined())
660         continue;
661     }
662 
663     Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
664   }
665 }
666 
667 /// checkUndefinedButUsed - Check for undefined objects with internal linkage
668 /// or that are inline.
669 static void checkUndefinedButUsed(Sema &S) {
670   if (S.UndefinedButUsed.empty()) return;
671 
672   // Collect all the still-undefined entities with internal linkage.
673   SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined;
674   S.getUndefinedButUsed(Undefined);
675   if (Undefined.empty()) return;
676 
677   for (auto Undef : Undefined) {
678     ValueDecl *VD = cast<ValueDecl>(Undef.first);
679     SourceLocation UseLoc = Undef.second;
680 
681     if (S.isExternalWithNoLinkageType(VD)) {
682       // C++ [basic.link]p8:
683       //   A type without linkage shall not be used as the type of a variable
684       //   or function with external linkage unless
685       //    -- the entity has C language linkage
686       //    -- the entity is not odr-used or is defined in the same TU
687       //
688       // As an extension, accept this in cases where the type is externally
689       // visible, since the function or variable actually can be defined in
690       // another translation unit in that case.
691       S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage())
692                                     ? diag::ext_undefined_internal_type
693                                     : diag::err_undefined_internal_type)
694         << isa<VarDecl>(VD) << VD;
695     } else if (!VD->isExternallyVisible()) {
696       // FIXME: We can promote this to an error. The function or variable can't
697       // be defined anywhere else, so the program must necessarily violate the
698       // one definition rule.
699       S.Diag(VD->getLocation(), diag::warn_undefined_internal)
700         << isa<VarDecl>(VD) << VD;
701     } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {
702       (void)FD;
703       assert(FD->getMostRecentDecl()->isInlined() &&
704              "used object requires definition but isn't inline or internal?");
705       // FIXME: This is ill-formed; we should reject.
706       S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD;
707     } else {
708       assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
709              "used var requires definition but isn't inline or internal?");
710       S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;
711     }
712     if (UseLoc.isValid())
713       S.Diag(UseLoc, diag::note_used_here);
714   }
715 
716   S.UndefinedButUsed.clear();
717 }
718 
719 void Sema::LoadExternalWeakUndeclaredIdentifiers() {
720   if (!ExternalSource)
721     return;
722 
723   SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs;
724   ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs);
725   for (auto &WeakID : WeakIDs)
726     WeakUndeclaredIdentifiers.insert(WeakID);
727 }
728 
729 
730 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap;
731 
732 /// Returns true, if all methods and nested classes of the given
733 /// CXXRecordDecl are defined in this translation unit.
734 ///
735 /// Should only be called from ActOnEndOfTranslationUnit so that all
736 /// definitions are actually read.
737 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD,
738                                             RecordCompleteMap &MNCComplete) {
739   RecordCompleteMap::iterator Cache = MNCComplete.find(RD);
740   if (Cache != MNCComplete.end())
741     return Cache->second;
742   if (!RD->isCompleteDefinition())
743     return false;
744   bool Complete = true;
745   for (DeclContext::decl_iterator I = RD->decls_begin(),
746                                   E = RD->decls_end();
747        I != E && Complete; ++I) {
748     if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I))
749       Complete = M->isDefined() || M->isDefaulted() ||
750                  (M->isPure() && !isa<CXXDestructorDecl>(M));
751     else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I))
752       // If the template function is marked as late template parsed at this
753       // point, it has not been instantiated and therefore we have not
754       // performed semantic analysis on it yet, so we cannot know if the type
755       // can be considered complete.
756       Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
757                   F->getTemplatedDecl()->isDefined();
758     else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
759       if (R->isInjectedClassName())
760         continue;
761       if (R->hasDefinition())
762         Complete = MethodsAndNestedClassesComplete(R->getDefinition(),
763                                                    MNCComplete);
764       else
765         Complete = false;
766     }
767   }
768   MNCComplete[RD] = Complete;
769   return Complete;
770 }
771 
772 /// Returns true, if the given CXXRecordDecl is fully defined in this
773 /// translation unit, i.e. all methods are defined or pure virtual and all
774 /// friends, friend functions and nested classes are fully defined in this
775 /// translation unit.
776 ///
777 /// Should only be called from ActOnEndOfTranslationUnit so that all
778 /// definitions are actually read.
779 static bool IsRecordFullyDefined(const CXXRecordDecl *RD,
780                                  RecordCompleteMap &RecordsComplete,
781                                  RecordCompleteMap &MNCComplete) {
782   RecordCompleteMap::iterator Cache = RecordsComplete.find(RD);
783   if (Cache != RecordsComplete.end())
784     return Cache->second;
785   bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete);
786   for (CXXRecordDecl::friend_iterator I = RD->friend_begin(),
787                                       E = RD->friend_end();
788        I != E && Complete; ++I) {
789     // Check if friend classes and methods are complete.
790     if (TypeSourceInfo *TSI = (*I)->getFriendType()) {
791       // Friend classes are available as the TypeSourceInfo of the FriendDecl.
792       if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
793         Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete);
794       else
795         Complete = false;
796     } else {
797       // Friend functions are available through the NamedDecl of FriendDecl.
798       if (const FunctionDecl *FD =
799           dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
800         Complete = FD->isDefined();
801       else
802         // This is a template friend, give up.
803         Complete = false;
804     }
805   }
806   RecordsComplete[RD] = Complete;
807   return Complete;
808 }
809 
810 void Sema::emitAndClearUnusedLocalTypedefWarnings() {
811   if (ExternalSource)
812     ExternalSource->ReadUnusedLocalTypedefNameCandidates(
813         UnusedLocalTypedefNameCandidates);
814   for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {
815     if (TD->isReferenced())
816       continue;
817     Diag(TD->getLocation(), diag::warn_unused_local_typedef)
818         << isa<TypeAliasDecl>(TD) << TD->getDeclName();
819   }
820   UnusedLocalTypedefNameCandidates.clear();
821 }
822 
823 /// This is called before the very first declaration in the translation unit
824 /// is parsed. Note that the ASTContext may have already injected some
825 /// declarations.
826 void Sema::ActOnStartOfTranslationUnit() {
827   if (getLangOpts().ModulesTS) {
828     SourceLocation StartOfTU =
829         SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
830 
831     // We start in the global module; all those declarations are implicitly
832     // module-private (though they do not have module linkage).
833     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
834     auto *GlobalModule = Map.createGlobalModuleForInterfaceUnit(StartOfTU);
835     assert(GlobalModule && "module creation should not fail");
836 
837     // Enter the scope of the global module.
838     ModuleScopes.push_back({});
839     ModuleScopes.back().Module = GlobalModule;
840     VisibleModules.setVisible(GlobalModule, StartOfTU);
841 
842     // All declarations created from now on are owned by the global module.
843     auto *TU = Context.getTranslationUnitDecl();
844     TU->setModuleOwnershipKind(Decl::ModuleOwnershipKind::Visible);
845     TU->setLocalOwningModule(GlobalModule);
846   }
847 }
848 
849 /// ActOnEndOfTranslationUnit - This is called at the very end of the
850 /// translation unit when EOF is reached and all but the top-level scope is
851 /// popped.
852 void Sema::ActOnEndOfTranslationUnit() {
853   assert(DelayedDiagnostics.getCurrentPool() == nullptr
854          && "reached end of translation unit with a pool attached?");
855 
856   // If code completion is enabled, don't perform any end-of-translation-unit
857   // work.
858   if (PP.isCodeCompletionEnabled())
859     return;
860 
861   // Transfer late parsed template instantiations over to the pending template
862   // instantiation list. During normal compliation, the late template parser
863   // will be installed and instantiating these templates will succeed.
864   //
865   // If we are building a TU prefix for serialization, it is also safe to
866   // transfer these over, even though they are not parsed. The end of the TU
867   // should be outside of any eager template instantiation scope, so when this
868   // AST is deserialized, these templates will not be parsed until the end of
869   // the combined TU.
870   PendingInstantiations.insert(PendingInstantiations.end(),
871                                LateParsedInstantiations.begin(),
872                                LateParsedInstantiations.end());
873   LateParsedInstantiations.clear();
874 
875   // Complete translation units and modules define vtables and perform implicit
876   // instantiations. PCH files do not.
877   if (TUKind != TU_Prefix) {
878     DiagnoseUseOfUnimplementedSelectors();
879 
880     // If DefinedUsedVTables ends up marking any virtual member functions it
881     // might lead to more pending template instantiations, which we then need
882     // to instantiate.
883     DefineUsedVTables();
884 
885     // C++: Perform implicit template instantiations.
886     //
887     // FIXME: When we perform these implicit instantiations, we do not
888     // carefully keep track of the point of instantiation (C++ [temp.point]).
889     // This means that name lookup that occurs within the template
890     // instantiation will always happen at the end of the translation unit,
891     // so it will find some names that are not required to be found. This is
892     // valid, but we could do better by diagnosing if an instantiation uses a
893     // name that was not visible at its first point of instantiation.
894     if (ExternalSource) {
895       // Load pending instantiations from the external source.
896       SmallVector<PendingImplicitInstantiation, 4> Pending;
897       ExternalSource->ReadPendingInstantiations(Pending);
898       for (auto PII : Pending)
899         if (auto Func = dyn_cast<FunctionDecl>(PII.first))
900           Func->setInstantiationIsPending(true);
901       PendingInstantiations.insert(PendingInstantiations.begin(),
902                                    Pending.begin(), Pending.end());
903     }
904 
905     PerformPendingInstantiations();
906 
907     assert(LateParsedInstantiations.empty() &&
908            "end of TU template instantiation should not create more "
909            "late-parsed templates");
910 
911     if (LateTemplateParserCleanup)
912       LateTemplateParserCleanup(OpaqueParser);
913 
914     CheckDelayedMemberExceptionSpecs();
915   }
916 
917   DiagnoseUnterminatedPragmaPack();
918   DiagnoseUnterminatedPragmaAttribute();
919 
920   // All delayed member exception specs should be checked or we end up accepting
921   // incompatible declarations.
922   // FIXME: This is wrong for TUKind == TU_Prefix. In that case, we need to
923   // write out the lists to the AST file (if any).
924   assert(DelayedDefaultedMemberExceptionSpecs.empty());
925   assert(DelayedExceptionSpecChecks.empty());
926 
927   // All dllexport classes should have been processed already.
928   assert(DelayedDllExportClasses.empty());
929 
930   // Remove file scoped decls that turned out to be used.
931   UnusedFileScopedDecls.erase(
932       std::remove_if(UnusedFileScopedDecls.begin(nullptr, true),
933                      UnusedFileScopedDecls.end(),
934                      [this](const DeclaratorDecl *DD) {
935                        return ShouldRemoveFromUnused(this, DD);
936                      }),
937       UnusedFileScopedDecls.end());
938 
939   if (TUKind == TU_Prefix) {
940     // Translation unit prefixes don't need any of the checking below.
941     if (!PP.isIncrementalProcessingEnabled())
942       TUScope = nullptr;
943     return;
944   }
945 
946   // Check for #pragma weak identifiers that were never declared
947   LoadExternalWeakUndeclaredIdentifiers();
948   for (auto WeakID : WeakUndeclaredIdentifiers) {
949     if (WeakID.second.getUsed())
950       continue;
951 
952     Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(),
953                                       LookupOrdinaryName);
954     if (PrevDecl != nullptr &&
955         !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
956       Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
957           << "'weak'" << ExpectedVariableOrFunction;
958     else
959       Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
960           << WeakID.first;
961   }
962 
963   if (LangOpts.CPlusPlus11 &&
964       !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))
965     CheckDelegatingCtorCycles();
966 
967   if (!Diags.hasErrorOccurred()) {
968     if (ExternalSource)
969       ExternalSource->ReadUndefinedButUsed(UndefinedButUsed);
970     checkUndefinedButUsed(*this);
971   }
972 
973   if (TUKind == TU_Module) {
974     // If we are building a module interface unit, we need to have seen the
975     // module declaration by now.
976     if (getLangOpts().getCompilingModule() ==
977             LangOptions::CMK_ModuleInterface &&
978         ModuleScopes.back().Module->Kind != Module::ModuleInterfaceUnit) {
979       // FIXME: Make a better guess as to where to put the module declaration.
980       Diag(getSourceManager().getLocForStartOfFile(
981                getSourceManager().getMainFileID()),
982            diag::err_module_declaration_missing);
983     }
984 
985     // If we are building a module, resolve all of the exported declarations
986     // now.
987     if (Module *CurrentModule = PP.getCurrentModule()) {
988       ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
989 
990       SmallVector<Module *, 2> Stack;
991       Stack.push_back(CurrentModule);
992       while (!Stack.empty()) {
993         Module *Mod = Stack.pop_back_val();
994 
995         // Resolve the exported declarations and conflicts.
996         // FIXME: Actually complain, once we figure out how to teach the
997         // diagnostic client to deal with complaints in the module map at this
998         // point.
999         ModMap.resolveExports(Mod, /*Complain=*/false);
1000         ModMap.resolveUses(Mod, /*Complain=*/false);
1001         ModMap.resolveConflicts(Mod, /*Complain=*/false);
1002 
1003         // Queue the submodules, so their exports will also be resolved.
1004         Stack.append(Mod->submodule_begin(), Mod->submodule_end());
1005       }
1006     }
1007 
1008     // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for
1009     // modules when they are built, not every time they are used.
1010     emitAndClearUnusedLocalTypedefWarnings();
1011 
1012     // Modules don't need any of the checking below.
1013     if (!PP.isIncrementalProcessingEnabled())
1014       TUScope = nullptr;
1015     return;
1016   }
1017 
1018   // C99 6.9.2p2:
1019   //   A declaration of an identifier for an object that has file
1020   //   scope without an initializer, and without a storage-class
1021   //   specifier or with the storage-class specifier static,
1022   //   constitutes a tentative definition. If a translation unit
1023   //   contains one or more tentative definitions for an identifier,
1024   //   and the translation unit contains no external definition for
1025   //   that identifier, then the behavior is exactly as if the
1026   //   translation unit contains a file scope declaration of that
1027   //   identifier, with the composite type as of the end of the
1028   //   translation unit, with an initializer equal to 0.
1029   llvm::SmallSet<VarDecl *, 32> Seen;
1030   for (TentativeDefinitionsType::iterator
1031             T = TentativeDefinitions.begin(ExternalSource),
1032          TEnd = TentativeDefinitions.end();
1033        T != TEnd; ++T)
1034   {
1035     VarDecl *VD = (*T)->getActingDefinition();
1036 
1037     // If the tentative definition was completed, getActingDefinition() returns
1038     // null. If we've already seen this variable before, insert()'s second
1039     // return value is false.
1040     if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second)
1041       continue;
1042 
1043     if (const IncompleteArrayType *ArrayT
1044         = Context.getAsIncompleteArrayType(VD->getType())) {
1045       // Set the length of the array to 1 (C99 6.9.2p5).
1046       Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
1047       llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
1048       QualType T = Context.getConstantArrayType(ArrayT->getElementType(),
1049                                                 One, ArrayType::Normal, 0);
1050       VD->setType(T);
1051     } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
1052                                    diag::err_tentative_def_incomplete_type))
1053       VD->setInvalidDecl();
1054 
1055     // No initialization is performed for a tentative definition.
1056     CheckCompleteVariableDeclaration(VD);
1057 
1058     // Notify the consumer that we've completed a tentative definition.
1059     if (!VD->isInvalidDecl())
1060       Consumer.CompleteTentativeDefinition(VD);
1061 
1062   }
1063 
1064   // If there were errors, disable 'unused' warnings since they will mostly be
1065   // noise.
1066   if (!Diags.hasErrorOccurred()) {
1067     // Output warning for unused file scoped decls.
1068     for (UnusedFileScopedDeclsType::iterator
1069            I = UnusedFileScopedDecls.begin(ExternalSource),
1070            E = UnusedFileScopedDecls.end(); I != E; ++I) {
1071       if (ShouldRemoveFromUnused(this, *I))
1072         continue;
1073 
1074       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1075         const FunctionDecl *DiagD;
1076         if (!FD->hasBody(DiagD))
1077           DiagD = FD;
1078         if (DiagD->isDeleted())
1079           continue; // Deleted functions are supposed to be unused.
1080         if (DiagD->isReferenced()) {
1081           if (isa<CXXMethodDecl>(DiagD))
1082             Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
1083                   << DiagD->getDeclName();
1084           else {
1085             if (FD->getStorageClass() == SC_Static &&
1086                 !FD->isInlineSpecified() &&
1087                 !SourceMgr.isInMainFile(
1088                    SourceMgr.getExpansionLoc(FD->getLocation())))
1089               Diag(DiagD->getLocation(),
1090                    diag::warn_unneeded_static_internal_decl)
1091                   << DiagD->getDeclName();
1092             else
1093               Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1094                    << /*function*/0 << DiagD->getDeclName();
1095           }
1096         } else {
1097           if (FD->getDescribedFunctionTemplate())
1098             Diag(DiagD->getLocation(), diag::warn_unused_template)
1099               << /*function*/0 << DiagD->getDeclName();
1100           else
1101             Diag(DiagD->getLocation(),
1102                  isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
1103                                            : diag::warn_unused_function)
1104               << DiagD->getDeclName();
1105         }
1106       } else {
1107         const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
1108         if (!DiagD)
1109           DiagD = cast<VarDecl>(*I);
1110         if (DiagD->isReferenced()) {
1111           Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1112                 << /*variable*/1 << DiagD->getDeclName();
1113         } else if (DiagD->getType().isConstQualified()) {
1114           const SourceManager &SM = SourceMgr;
1115           if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) ||
1116               !PP.getLangOpts().IsHeaderFile)
1117             Diag(DiagD->getLocation(), diag::warn_unused_const_variable)
1118                 << DiagD->getDeclName();
1119         } else {
1120           if (DiagD->getDescribedVarTemplate())
1121             Diag(DiagD->getLocation(), diag::warn_unused_template)
1122               << /*variable*/1 << DiagD->getDeclName();
1123           else
1124             Diag(DiagD->getLocation(), diag::warn_unused_variable)
1125               << DiagD->getDeclName();
1126         }
1127       }
1128     }
1129 
1130     emitAndClearUnusedLocalTypedefWarnings();
1131   }
1132 
1133   if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) {
1134     RecordCompleteMap RecordsComplete;
1135     RecordCompleteMap MNCComplete;
1136     for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(),
1137          E = UnusedPrivateFields.end(); I != E; ++I) {
1138       const NamedDecl *D = *I;
1139       const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
1140       if (RD && !RD->isUnion() &&
1141           IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) {
1142         Diag(D->getLocation(), diag::warn_unused_private_field)
1143               << D->getDeclName();
1144       }
1145     }
1146   }
1147 
1148   if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {
1149     if (ExternalSource)
1150       ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs);
1151     for (const auto &DeletedFieldInfo : DeleteExprs) {
1152       for (const auto &DeleteExprLoc : DeletedFieldInfo.second) {
1153         AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first,
1154                                   DeleteExprLoc.second);
1155       }
1156     }
1157   }
1158 
1159   // Check we've noticed that we're no longer parsing the initializer for every
1160   // variable. If we miss cases, then at best we have a performance issue and
1161   // at worst a rejects-valid bug.
1162   assert(ParsingInitForAutoVars.empty() &&
1163          "Didn't unmark var as having its initializer parsed");
1164 
1165   if (!PP.isIncrementalProcessingEnabled())
1166     TUScope = nullptr;
1167 }
1168 
1169 
1170 //===----------------------------------------------------------------------===//
1171 // Helper functions.
1172 //===----------------------------------------------------------------------===//
1173 
1174 DeclContext *Sema::getFunctionLevelDeclContext() {
1175   DeclContext *DC = CurContext;
1176 
1177   while (true) {
1178     if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) {
1179       DC = DC->getParent();
1180     } else if (isa<CXXMethodDecl>(DC) &&
1181                cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1182                cast<CXXRecordDecl>(DC->getParent())->isLambda()) {
1183       DC = DC->getParent()->getParent();
1184     }
1185     else break;
1186   }
1187 
1188   return DC;
1189 }
1190 
1191 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
1192 /// to the function decl for the function being parsed.  If we're currently
1193 /// in a 'block', this returns the containing context.
1194 FunctionDecl *Sema::getCurFunctionDecl() {
1195   DeclContext *DC = getFunctionLevelDeclContext();
1196   return dyn_cast<FunctionDecl>(DC);
1197 }
1198 
1199 ObjCMethodDecl *Sema::getCurMethodDecl() {
1200   DeclContext *DC = getFunctionLevelDeclContext();
1201   while (isa<RecordDecl>(DC))
1202     DC = DC->getParent();
1203   return dyn_cast<ObjCMethodDecl>(DC);
1204 }
1205 
1206 NamedDecl *Sema::getCurFunctionOrMethodDecl() {
1207   DeclContext *DC = getFunctionLevelDeclContext();
1208   if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1209     return cast<NamedDecl>(DC);
1210   return nullptr;
1211 }
1212 
1213 void Sema::EmitCurrentDiagnostic(unsigned DiagID) {
1214   // FIXME: It doesn't make sense to me that DiagID is an incoming argument here
1215   // and yet we also use the current diag ID on the DiagnosticsEngine. This has
1216   // been made more painfully obvious by the refactor that introduced this
1217   // function, but it is possible that the incoming argument can be
1218   // eliminated. If it truly cannot be (for example, there is some reentrancy
1219   // issue I am not seeing yet), then there should at least be a clarifying
1220   // comment somewhere.
1221   if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) {
1222     switch (DiagnosticIDs::getDiagnosticSFINAEResponse(
1223               Diags.getCurrentDiagID())) {
1224     case DiagnosticIDs::SFINAE_Report:
1225       // We'll report the diagnostic below.
1226       break;
1227 
1228     case DiagnosticIDs::SFINAE_SubstitutionFailure:
1229       // Count this failure so that we know that template argument deduction
1230       // has failed.
1231       ++NumSFINAEErrors;
1232 
1233       // Make a copy of this suppressed diagnostic and store it with the
1234       // template-deduction information.
1235       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1236         Diagnostic DiagInfo(&Diags);
1237         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1238                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1239       }
1240 
1241       Diags.setLastDiagnosticIgnored();
1242       Diags.Clear();
1243       return;
1244 
1245     case DiagnosticIDs::SFINAE_AccessControl: {
1246       // Per C++ Core Issue 1170, access control is part of SFINAE.
1247       // Additionally, the AccessCheckingSFINAE flag can be used to temporarily
1248       // make access control a part of SFINAE for the purposes of checking
1249       // type traits.
1250       if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11)
1251         break;
1252 
1253       SourceLocation Loc = Diags.getCurrentDiagLoc();
1254 
1255       // Suppress this diagnostic.
1256       ++NumSFINAEErrors;
1257 
1258       // Make a copy of this suppressed diagnostic and store it with the
1259       // template-deduction information.
1260       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1261         Diagnostic DiagInfo(&Diags);
1262         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1263                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1264       }
1265 
1266       Diags.setLastDiagnosticIgnored();
1267       Diags.Clear();
1268 
1269       // Now the diagnostic state is clear, produce a C++98 compatibility
1270       // warning.
1271       Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1272 
1273       // The last diagnostic which Sema produced was ignored. Suppress any
1274       // notes attached to it.
1275       Diags.setLastDiagnosticIgnored();
1276       return;
1277     }
1278 
1279     case DiagnosticIDs::SFINAE_Suppress:
1280       // Make a copy of this suppressed diagnostic and store it with the
1281       // template-deduction information;
1282       if (*Info) {
1283         Diagnostic DiagInfo(&Diags);
1284         (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
1285                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1286       }
1287 
1288       // Suppress this diagnostic.
1289       Diags.setLastDiagnosticIgnored();
1290       Diags.Clear();
1291       return;
1292     }
1293   }
1294 
1295   // Copy the diagnostic printing policy over the ASTContext printing policy.
1296   // TODO: Stop doing that.  See: https://reviews.llvm.org/D45093#1090292
1297   Context.setPrintingPolicy(getPrintingPolicy());
1298 
1299   // Emit the diagnostic.
1300   if (!Diags.EmitCurrentDiagnostic())
1301     return;
1302 
1303   // If this is not a note, and we're in a template instantiation
1304   // that is different from the last template instantiation where
1305   // we emitted an error, print a template instantiation
1306   // backtrace.
1307   if (!DiagnosticIDs::isBuiltinNote(DiagID))
1308     PrintContextStack();
1309 }
1310 
1311 Sema::SemaDiagnosticBuilder
1312 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
1313   SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
1314   PD.Emit(Builder);
1315 
1316   return Builder;
1317 }
1318 
1319 /// Looks through the macro-expansion chain for the given
1320 /// location, looking for a macro expansion with the given name.
1321 /// If one is found, returns true and sets the location to that
1322 /// expansion loc.
1323 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) {
1324   SourceLocation loc = locref;
1325   if (!loc.isMacroID()) return false;
1326 
1327   // There's no good way right now to look at the intermediate
1328   // expansions, so just jump to the expansion location.
1329   loc = getSourceManager().getExpansionLoc(loc);
1330 
1331   // If that's written with the name, stop here.
1332   SmallVector<char, 16> buffer;
1333   if (getPreprocessor().getSpelling(loc, buffer) == name) {
1334     locref = loc;
1335     return true;
1336   }
1337   return false;
1338 }
1339 
1340 /// Determines the active Scope associated with the given declaration
1341 /// context.
1342 ///
1343 /// This routine maps a declaration context to the active Scope object that
1344 /// represents that declaration context in the parser. It is typically used
1345 /// from "scope-less" code (e.g., template instantiation, lazy creation of
1346 /// declarations) that injects a name for name-lookup purposes and, therefore,
1347 /// must update the Scope.
1348 ///
1349 /// \returns The scope corresponding to the given declaraion context, or NULL
1350 /// if no such scope is open.
1351 Scope *Sema::getScopeForContext(DeclContext *Ctx) {
1352 
1353   if (!Ctx)
1354     return nullptr;
1355 
1356   Ctx = Ctx->getPrimaryContext();
1357   for (Scope *S = getCurScope(); S; S = S->getParent()) {
1358     // Ignore scopes that cannot have declarations. This is important for
1359     // out-of-line definitions of static class members.
1360     if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
1361       if (DeclContext *Entity = S->getEntity())
1362         if (Ctx == Entity->getPrimaryContext())
1363           return S;
1364   }
1365 
1366   return nullptr;
1367 }
1368 
1369 /// Enter a new function scope
1370 void Sema::PushFunctionScope() {
1371   if (FunctionScopes.empty()) {
1372     // Use PreallocatedFunctionScope to avoid allocating memory when possible.
1373     PreallocatedFunctionScope->Clear();
1374     FunctionScopes.push_back(PreallocatedFunctionScope.get());
1375   } else {
1376     FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
1377   }
1378   if (LangOpts.OpenMP)
1379     pushOpenMPFunctionRegion();
1380 }
1381 
1382 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
1383   FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
1384                                               BlockScope, Block));
1385 }
1386 
1387 LambdaScopeInfo *Sema::PushLambdaScope() {
1388   LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics());
1389   FunctionScopes.push_back(LSI);
1390   return LSI;
1391 }
1392 
1393 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) {
1394   if (LambdaScopeInfo *const LSI = getCurLambda()) {
1395     LSI->AutoTemplateParameterDepth = Depth;
1396     return;
1397   }
1398   llvm_unreachable(
1399       "Remove assertion if intentionally called in a non-lambda context.");
1400 }
1401 
1402 void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP,
1403                                 const Decl *D, const BlockExpr *blkExpr) {
1404   assert(!FunctionScopes.empty() && "mismatched push/pop!");
1405   FunctionScopeInfo *Scope = FunctionScopes.pop_back_val();
1406 
1407   if (LangOpts.OpenMP)
1408     popOpenMPFunctionRegion(Scope);
1409 
1410   // Issue any analysis-based warnings.
1411   if (WP && D)
1412     AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr);
1413   else
1414     for (const auto &PUD : Scope->PossiblyUnreachableDiags)
1415       Diag(PUD.Loc, PUD.PD);
1416 
1417   // Delete the scope unless its our preallocated scope.
1418   if (Scope != PreallocatedFunctionScope.get())
1419     delete Scope;
1420 }
1421 
1422 void Sema::PushCompoundScope(bool IsStmtExpr) {
1423   getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr));
1424 }
1425 
1426 void Sema::PopCompoundScope() {
1427   FunctionScopeInfo *CurFunction = getCurFunction();
1428   assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop");
1429 
1430   CurFunction->CompoundScopes.pop_back();
1431 }
1432 
1433 /// Determine whether any errors occurred within this function/method/
1434 /// block.
1435 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
1436   return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
1437 }
1438 
1439 void Sema::setFunctionHasBranchIntoScope() {
1440   if (!FunctionScopes.empty())
1441     FunctionScopes.back()->setHasBranchIntoScope();
1442 }
1443 
1444 void Sema::setFunctionHasBranchProtectedScope() {
1445   if (!FunctionScopes.empty())
1446     FunctionScopes.back()->setHasBranchProtectedScope();
1447 }
1448 
1449 void Sema::setFunctionHasIndirectGoto() {
1450   if (!FunctionScopes.empty())
1451     FunctionScopes.back()->setHasIndirectGoto();
1452 }
1453 
1454 BlockScopeInfo *Sema::getCurBlock() {
1455   if (FunctionScopes.empty())
1456     return nullptr;
1457 
1458   auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back());
1459   if (CurBSI && CurBSI->TheDecl &&
1460       !CurBSI->TheDecl->Encloses(CurContext)) {
1461     // We have switched contexts due to template instantiation.
1462     assert(!CodeSynthesisContexts.empty());
1463     return nullptr;
1464   }
1465 
1466   return CurBSI;
1467 }
1468 
1469 FunctionScopeInfo *Sema::getEnclosingFunction() const {
1470   if (FunctionScopes.empty())
1471     return nullptr;
1472 
1473   for (int e = FunctionScopes.size() - 1; e >= 0; --e) {
1474     if (isa<sema::BlockScopeInfo>(FunctionScopes[e]))
1475       continue;
1476     return FunctionScopes[e];
1477   }
1478   return nullptr;
1479 }
1480 
1481 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) {
1482   if (FunctionScopes.empty())
1483     return nullptr;
1484 
1485   auto I = FunctionScopes.rbegin();
1486   if (IgnoreNonLambdaCapturingScope) {
1487     auto E = FunctionScopes.rend();
1488     while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1489       ++I;
1490     if (I == E)
1491       return nullptr;
1492   }
1493   auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I);
1494   if (CurLSI && CurLSI->Lambda &&
1495       !CurLSI->Lambda->Encloses(CurContext)) {
1496     // We have switched contexts due to template instantiation.
1497     assert(!CodeSynthesisContexts.empty());
1498     return nullptr;
1499   }
1500 
1501   return CurLSI;
1502 }
1503 // We have a generic lambda if we parsed auto parameters, or we have
1504 // an associated template parameter list.
1505 LambdaScopeInfo *Sema::getCurGenericLambda() {
1506   if (LambdaScopeInfo *LSI =  getCurLambda()) {
1507     return (LSI->AutoTemplateParams.size() ||
1508                     LSI->GLTemplateParameterList) ? LSI : nullptr;
1509   }
1510   return nullptr;
1511 }
1512 
1513 
1514 void Sema::ActOnComment(SourceRange Comment) {
1515   if (!LangOpts.RetainCommentsFromSystemHeaders &&
1516       SourceMgr.isInSystemHeader(Comment.getBegin()))
1517     return;
1518   RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false);
1519   if (RC.isAlmostTrailingComment()) {
1520     SourceRange MagicMarkerRange(Comment.getBegin(),
1521                                  Comment.getBegin().getLocWithOffset(3));
1522     StringRef MagicMarkerText;
1523     switch (RC.getKind()) {
1524     case RawComment::RCK_OrdinaryBCPL:
1525       MagicMarkerText = "///<";
1526       break;
1527     case RawComment::RCK_OrdinaryC:
1528       MagicMarkerText = "/**<";
1529       break;
1530     default:
1531       llvm_unreachable("if this is an almost Doxygen comment, "
1532                        "it should be ordinary");
1533     }
1534     Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1535       FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText);
1536   }
1537   Context.addComment(RC);
1538 }
1539 
1540 // Pin this vtable to this file.
1541 ExternalSemaSource::~ExternalSemaSource() {}
1542 
1543 void ExternalSemaSource::ReadMethodPool(Selector Sel) { }
1544 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { }
1545 
1546 void ExternalSemaSource::ReadKnownNamespaces(
1547                            SmallVectorImpl<NamespaceDecl *> &Namespaces) {
1548 }
1549 
1550 void ExternalSemaSource::ReadUndefinedButUsed(
1551     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1552 
1553 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector<
1554     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {}
1555 
1556 /// Figure out if an expression could be turned into a call.
1557 ///
1558 /// Use this when trying to recover from an error where the programmer may have
1559 /// written just the name of a function instead of actually calling it.
1560 ///
1561 /// \param E - The expression to examine.
1562 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
1563 ///  with no arguments, this parameter is set to the type returned by such a
1564 ///  call; otherwise, it is set to an empty QualType.
1565 /// \param OverloadSet - If the expression is an overloaded function
1566 ///  name, this parameter is populated with the decls of the various overloads.
1567 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
1568                          UnresolvedSetImpl &OverloadSet) {
1569   ZeroArgCallReturnTy = QualType();
1570   OverloadSet.clear();
1571 
1572   const OverloadExpr *Overloads = nullptr;
1573   bool IsMemExpr = false;
1574   if (E.getType() == Context.OverloadTy) {
1575     OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E));
1576 
1577     // Ignore overloads that are pointer-to-member constants.
1578     if (FR.HasFormOfMemberPointer)
1579       return false;
1580 
1581     Overloads = FR.Expression;
1582   } else if (E.getType() == Context.BoundMemberTy) {
1583     Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens());
1584     IsMemExpr = true;
1585   }
1586 
1587   bool Ambiguous = false;
1588 
1589   if (Overloads) {
1590     for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
1591          DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
1592       OverloadSet.addDecl(*it);
1593 
1594       // Check whether the function is a non-template, non-member which takes no
1595       // arguments.
1596       if (IsMemExpr)
1597         continue;
1598       if (const FunctionDecl *OverloadDecl
1599             = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
1600         if (OverloadDecl->getMinRequiredArguments() == 0) {
1601           if (!ZeroArgCallReturnTy.isNull() && !Ambiguous) {
1602             ZeroArgCallReturnTy = QualType();
1603             Ambiguous = true;
1604           } else
1605             ZeroArgCallReturnTy = OverloadDecl->getReturnType();
1606         }
1607       }
1608     }
1609 
1610     // If it's not a member, use better machinery to try to resolve the call
1611     if (!IsMemExpr)
1612       return !ZeroArgCallReturnTy.isNull();
1613   }
1614 
1615   // Attempt to call the member with no arguments - this will correctly handle
1616   // member templates with defaults/deduction of template arguments, overloads
1617   // with default arguments, etc.
1618   if (IsMemExpr && !E.isTypeDependent()) {
1619     bool Suppress = getDiagnostics().getSuppressAllDiagnostics();
1620     getDiagnostics().setSuppressAllDiagnostics(true);
1621     ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(),
1622                                              None, SourceLocation());
1623     getDiagnostics().setSuppressAllDiagnostics(Suppress);
1624     if (R.isUsable()) {
1625       ZeroArgCallReturnTy = R.get()->getType();
1626       return true;
1627     }
1628     return false;
1629   }
1630 
1631   if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) {
1632     if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
1633       if (Fun->getMinRequiredArguments() == 0)
1634         ZeroArgCallReturnTy = Fun->getReturnType();
1635       return true;
1636     }
1637   }
1638 
1639   // We don't have an expression that's convenient to get a FunctionDecl from,
1640   // but we can at least check if the type is "function of 0 arguments".
1641   QualType ExprTy = E.getType();
1642   const FunctionType *FunTy = nullptr;
1643   QualType PointeeTy = ExprTy->getPointeeType();
1644   if (!PointeeTy.isNull())
1645     FunTy = PointeeTy->getAs<FunctionType>();
1646   if (!FunTy)
1647     FunTy = ExprTy->getAs<FunctionType>();
1648 
1649   if (const FunctionProtoType *FPT =
1650       dyn_cast_or_null<FunctionProtoType>(FunTy)) {
1651     if (FPT->getNumParams() == 0)
1652       ZeroArgCallReturnTy = FunTy->getReturnType();
1653     return true;
1654   }
1655   return false;
1656 }
1657 
1658 /// Give notes for a set of overloads.
1659 ///
1660 /// A companion to tryExprAsCall. In cases when the name that the programmer
1661 /// wrote was an overloaded function, we may be able to make some guesses about
1662 /// plausible overloads based on their return types; such guesses can be handed
1663 /// off to this method to be emitted as notes.
1664 ///
1665 /// \param Overloads - The overloads to note.
1666 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
1667 ///  -fshow-overloads=best, this is the location to attach to the note about too
1668 ///  many candidates. Typically this will be the location of the original
1669 ///  ill-formed expression.
1670 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads,
1671                           const SourceLocation FinalNoteLoc) {
1672   int ShownOverloads = 0;
1673   int SuppressedOverloads = 0;
1674   for (UnresolvedSetImpl::iterator It = Overloads.begin(),
1675        DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
1676     // FIXME: Magic number for max shown overloads stolen from
1677     // OverloadCandidateSet::NoteCandidates.
1678     if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) {
1679       ++SuppressedOverloads;
1680       continue;
1681     }
1682 
1683     NamedDecl *Fn = (*It)->getUnderlyingDecl();
1684     // Don't print overloads for non-default multiversioned functions.
1685     if (const auto *FD = Fn->getAsFunction()) {
1686       if (FD->isMultiVersion() &&
1687           !FD->getAttr<TargetAttr>()->isDefaultVersion())
1688         continue;
1689     }
1690     S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);
1691     ++ShownOverloads;
1692   }
1693 
1694   if (SuppressedOverloads)
1695     S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
1696       << SuppressedOverloads;
1697 }
1698 
1699 static void notePlausibleOverloads(Sema &S, SourceLocation Loc,
1700                                    const UnresolvedSetImpl &Overloads,
1701                                    bool (*IsPlausibleResult)(QualType)) {
1702   if (!IsPlausibleResult)
1703     return noteOverloads(S, Overloads, Loc);
1704 
1705   UnresolvedSet<2> PlausibleOverloads;
1706   for (OverloadExpr::decls_iterator It = Overloads.begin(),
1707          DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
1708     const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
1709     QualType OverloadResultTy = OverloadDecl->getReturnType();
1710     if (IsPlausibleResult(OverloadResultTy))
1711       PlausibleOverloads.addDecl(It.getDecl());
1712   }
1713   noteOverloads(S, PlausibleOverloads, Loc);
1714 }
1715 
1716 /// Determine whether the given expression can be called by just
1717 /// putting parentheses after it.  Notably, expressions with unary
1718 /// operators can't be because the unary operator will start parsing
1719 /// outside the call.
1720 static bool IsCallableWithAppend(Expr *E) {
1721   E = E->IgnoreImplicit();
1722   return (!isa<CStyleCastExpr>(E) &&
1723           !isa<UnaryOperator>(E) &&
1724           !isa<BinaryOperator>(E) &&
1725           !isa<CXXOperatorCallExpr>(E));
1726 }
1727 
1728 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
1729                                 bool ForceComplain,
1730                                 bool (*IsPlausibleResult)(QualType)) {
1731   SourceLocation Loc = E.get()->getExprLoc();
1732   SourceRange Range = E.get()->getSourceRange();
1733 
1734   QualType ZeroArgCallTy;
1735   UnresolvedSet<4> Overloads;
1736   if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
1737       !ZeroArgCallTy.isNull() &&
1738       (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
1739     // At this point, we know E is potentially callable with 0
1740     // arguments and that it returns something of a reasonable type,
1741     // so we can emit a fixit and carry on pretending that E was
1742     // actually a CallExpr.
1743     SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
1744     Diag(Loc, PD)
1745       << /*zero-arg*/ 1 << Range
1746       << (IsCallableWithAppend(E.get())
1747           ? FixItHint::CreateInsertion(ParenInsertionLoc, "()")
1748           : FixItHint());
1749     notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
1750 
1751     // FIXME: Try this before emitting the fixit, and suppress diagnostics
1752     // while doing so.
1753     E = ActOnCallExpr(nullptr, E.get(), Range.getEnd(), None,
1754                       Range.getEnd().getLocWithOffset(1));
1755     return true;
1756   }
1757 
1758   if (!ForceComplain) return false;
1759 
1760   Diag(Loc, PD) << /*not zero-arg*/ 0 << Range;
1761   notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
1762   E = ExprError();
1763   return true;
1764 }
1765 
1766 IdentifierInfo *Sema::getSuperIdentifier() const {
1767   if (!Ident_super)
1768     Ident_super = &Context.Idents.get("super");
1769   return Ident_super;
1770 }
1771 
1772 IdentifierInfo *Sema::getFloat128Identifier() const {
1773   if (!Ident___float128)
1774     Ident___float128 = &Context.Idents.get("__float128");
1775   return Ident___float128;
1776 }
1777 
1778 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD,
1779                                    CapturedRegionKind K) {
1780   CapturingScopeInfo *CSI = new CapturedRegionScopeInfo(
1781       getDiagnostics(), S, CD, RD, CD->getContextParam(), K,
1782       (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0);
1783   CSI->ReturnType = Context.VoidTy;
1784   FunctionScopes.push_back(CSI);
1785 }
1786 
1787 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() {
1788   if (FunctionScopes.empty())
1789     return nullptr;
1790 
1791   return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back());
1792 }
1793 
1794 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
1795 Sema::getMismatchingDeleteExpressions() const {
1796   return DeleteExprs;
1797 }
1798 
1799 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) {
1800   if (ExtStr.empty())
1801     return;
1802   llvm::SmallVector<StringRef, 1> Exts;
1803   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
1804   auto CanT = T.getCanonicalType().getTypePtr();
1805   for (auto &I : Exts)
1806     OpenCLTypeExtMap[CanT].insert(I.str());
1807 }
1808 
1809 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) {
1810   llvm::SmallVector<StringRef, 1> Exts;
1811   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
1812   if (Exts.empty())
1813     return;
1814   for (auto &I : Exts)
1815     OpenCLDeclExtMap[FD].insert(I.str());
1816 }
1817 
1818 void Sema::setCurrentOpenCLExtensionForType(QualType T) {
1819   if (CurrOpenCLExtension.empty())
1820     return;
1821   setOpenCLExtensionForType(T, CurrOpenCLExtension);
1822 }
1823 
1824 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) {
1825   if (CurrOpenCLExtension.empty())
1826     return;
1827   setOpenCLExtensionForDecl(D, CurrOpenCLExtension);
1828 }
1829 
1830 bool Sema::isOpenCLDisabledDecl(Decl *FD) {
1831   auto Loc = OpenCLDeclExtMap.find(FD);
1832   if (Loc == OpenCLDeclExtMap.end())
1833     return false;
1834   for (auto &I : Loc->second) {
1835     if (!getOpenCLOptions().isEnabled(I))
1836       return true;
1837   }
1838   return false;
1839 }
1840 
1841 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT>
1842 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
1843                                          DiagInfoT DiagInfo, MapT &Map,
1844                                          unsigned Selector,
1845                                          SourceRange SrcRange) {
1846   auto Loc = Map.find(D);
1847   if (Loc == Map.end())
1848     return false;
1849   bool Disabled = false;
1850   for (auto &I : Loc->second) {
1851     if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) {
1852       Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
1853                                                          << I << SrcRange;
1854       Disabled = true;
1855     }
1856   }
1857   return Disabled;
1858 }
1859 
1860 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) {
1861   // Check extensions for declared types.
1862   Decl *Decl = nullptr;
1863   if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr()))
1864     Decl = TypedefT->getDecl();
1865   if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr()))
1866     Decl = TagT->getDecl();
1867   auto Loc = DS.getTypeSpecTypeLoc();
1868   if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
1869     return true;
1870 
1871   // Check extensions for builtin types.
1872   return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc,
1873                                        QT, OpenCLTypeExtMap);
1874 }
1875 
1876 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) {
1877   IdentifierInfo *FnName = D.getIdentifier();
1878   return checkOpenCLDisabledTypeOrDecl(&D, E.getLocStart(), FnName,
1879                                        OpenCLDeclExtMap, 1, D.getSourceRange());
1880 }
1881