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