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