xref: /llvm-project-15.0.7/clang/lib/Sema/Sema.cpp (revision 9284931e)
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   FunctionScopes.push_back(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   // Kill all the active scopes.
336   for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I)
337     delete FunctionScopes[I];
338   if (FunctionScopes.size() == 1)
339     delete FunctionScopes[0];
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.size() == 1) {
1344     // Use the "top" function scope rather than having to allocate
1345     // memory for a new scope.
1346     FunctionScopes.back()->Clear();
1347     FunctionScopes.push_back(FunctionScopes.back());
1348     if (LangOpts.OpenMP)
1349       pushOpenMPFunctionRegion();
1350     return;
1351   }
1352 
1353   FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
1354   if (LangOpts.OpenMP)
1355     pushOpenMPFunctionRegion();
1356 }
1357 
1358 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
1359   FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
1360                                               BlockScope, Block));
1361 }
1362 
1363 LambdaScopeInfo *Sema::PushLambdaScope() {
1364   LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics());
1365   FunctionScopes.push_back(LSI);
1366   return LSI;
1367 }
1368 
1369 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) {
1370   if (LambdaScopeInfo *const LSI = getCurLambda()) {
1371     LSI->AutoTemplateParameterDepth = Depth;
1372     return;
1373   }
1374   llvm_unreachable(
1375       "Remove assertion if intentionally called in a non-lambda context.");
1376 }
1377 
1378 void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP,
1379                                 const Decl *D, const BlockExpr *blkExpr) {
1380   FunctionScopeInfo *Scope = FunctionScopes.pop_back_val();
1381   assert(!FunctionScopes.empty() && "mismatched push/pop!");
1382 
1383   if (LangOpts.OpenMP)
1384     popOpenMPFunctionRegion(Scope);
1385 
1386   // Issue any analysis-based warnings.
1387   if (WP && D)
1388     AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr);
1389   else
1390     for (const auto &PUD : Scope->PossiblyUnreachableDiags)
1391       Diag(PUD.Loc, PUD.PD);
1392 
1393   if (FunctionScopes.back() != Scope)
1394     delete Scope;
1395 }
1396 
1397 void Sema::PushCompoundScope(bool IsStmtExpr) {
1398   getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr));
1399 }
1400 
1401 void Sema::PopCompoundScope() {
1402   FunctionScopeInfo *CurFunction = getCurFunction();
1403   assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop");
1404 
1405   CurFunction->CompoundScopes.pop_back();
1406 }
1407 
1408 /// \brief Determine whether any errors occurred within this function/method/
1409 /// block.
1410 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
1411   return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
1412 }
1413 
1414 BlockScopeInfo *Sema::getCurBlock() {
1415   if (FunctionScopes.empty())
1416     return nullptr;
1417 
1418   auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back());
1419   if (CurBSI && CurBSI->TheDecl &&
1420       !CurBSI->TheDecl->Encloses(CurContext)) {
1421     // We have switched contexts due to template instantiation.
1422     assert(!CodeSynthesisContexts.empty());
1423     return nullptr;
1424   }
1425 
1426   return CurBSI;
1427 }
1428 
1429 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) {
1430   if (FunctionScopes.empty())
1431     return nullptr;
1432 
1433   auto I = FunctionScopes.rbegin();
1434   if (IgnoreNonLambdaCapturingScope) {
1435     auto E = FunctionScopes.rend();
1436     while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1437       ++I;
1438     if (I == E)
1439       return nullptr;
1440   }
1441   auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I);
1442   if (CurLSI && CurLSI->Lambda &&
1443       !CurLSI->Lambda->Encloses(CurContext)) {
1444     // We have switched contexts due to template instantiation.
1445     assert(!CodeSynthesisContexts.empty());
1446     return nullptr;
1447   }
1448 
1449   return CurLSI;
1450 }
1451 // We have a generic lambda if we parsed auto parameters, or we have
1452 // an associated template parameter list.
1453 LambdaScopeInfo *Sema::getCurGenericLambda() {
1454   if (LambdaScopeInfo *LSI =  getCurLambda()) {
1455     return (LSI->AutoTemplateParams.size() ||
1456                     LSI->GLTemplateParameterList) ? LSI : nullptr;
1457   }
1458   return nullptr;
1459 }
1460 
1461 
1462 void Sema::ActOnComment(SourceRange Comment) {
1463   if (!LangOpts.RetainCommentsFromSystemHeaders &&
1464       SourceMgr.isInSystemHeader(Comment.getBegin()))
1465     return;
1466   RawComment RC(SourceMgr, Comment, false,
1467                 LangOpts.CommentOpts.ParseAllComments);
1468   if (RC.isAlmostTrailingComment()) {
1469     SourceRange MagicMarkerRange(Comment.getBegin(),
1470                                  Comment.getBegin().getLocWithOffset(3));
1471     StringRef MagicMarkerText;
1472     switch (RC.getKind()) {
1473     case RawComment::RCK_OrdinaryBCPL:
1474       MagicMarkerText = "///<";
1475       break;
1476     case RawComment::RCK_OrdinaryC:
1477       MagicMarkerText = "/**<";
1478       break;
1479     default:
1480       llvm_unreachable("if this is an almost Doxygen comment, "
1481                        "it should be ordinary");
1482     }
1483     Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1484       FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText);
1485   }
1486   Context.addComment(RC);
1487 }
1488 
1489 // Pin this vtable to this file.
1490 ExternalSemaSource::~ExternalSemaSource() {}
1491 
1492 void ExternalSemaSource::ReadMethodPool(Selector Sel) { }
1493 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { }
1494 
1495 void ExternalSemaSource::ReadKnownNamespaces(
1496                            SmallVectorImpl<NamespaceDecl *> &Namespaces) {
1497 }
1498 
1499 void ExternalSemaSource::ReadUndefinedButUsed(
1500     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1501 
1502 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector<
1503     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {}
1504 
1505 void PrettyDeclStackTraceEntry::print(raw_ostream &OS) const {
1506   SourceLocation Loc = this->Loc;
1507   if (!Loc.isValid() && TheDecl) Loc = TheDecl->getLocation();
1508   if (Loc.isValid()) {
1509     Loc.print(OS, S.getSourceManager());
1510     OS << ": ";
1511   }
1512   OS << Message;
1513 
1514   if (auto *ND = dyn_cast_or_null<NamedDecl>(TheDecl)) {
1515     OS << " '";
1516     ND->getNameForDiagnostic(OS, ND->getASTContext().getPrintingPolicy(), true);
1517     OS << "'";
1518   }
1519 
1520   OS << '\n';
1521 }
1522 
1523 /// \brief Figure out if an expression could be turned into a call.
1524 ///
1525 /// Use this when trying to recover from an error where the programmer may have
1526 /// written just the name of a function instead of actually calling it.
1527 ///
1528 /// \param E - The expression to examine.
1529 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
1530 ///  with no arguments, this parameter is set to the type returned by such a
1531 ///  call; otherwise, it is set to an empty QualType.
1532 /// \param OverloadSet - If the expression is an overloaded function
1533 ///  name, this parameter is populated with the decls of the various overloads.
1534 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
1535                          UnresolvedSetImpl &OverloadSet) {
1536   ZeroArgCallReturnTy = QualType();
1537   OverloadSet.clear();
1538 
1539   const OverloadExpr *Overloads = nullptr;
1540   bool IsMemExpr = false;
1541   if (E.getType() == Context.OverloadTy) {
1542     OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E));
1543 
1544     // Ignore overloads that are pointer-to-member constants.
1545     if (FR.HasFormOfMemberPointer)
1546       return false;
1547 
1548     Overloads = FR.Expression;
1549   } else if (E.getType() == Context.BoundMemberTy) {
1550     Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens());
1551     IsMemExpr = true;
1552   }
1553 
1554   bool Ambiguous = false;
1555 
1556   if (Overloads) {
1557     for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
1558          DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
1559       OverloadSet.addDecl(*it);
1560 
1561       // Check whether the function is a non-template, non-member which takes no
1562       // arguments.
1563       if (IsMemExpr)
1564         continue;
1565       if (const FunctionDecl *OverloadDecl
1566             = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
1567         if (OverloadDecl->getMinRequiredArguments() == 0) {
1568           if (!ZeroArgCallReturnTy.isNull() && !Ambiguous) {
1569             ZeroArgCallReturnTy = QualType();
1570             Ambiguous = true;
1571           } else
1572             ZeroArgCallReturnTy = OverloadDecl->getReturnType();
1573         }
1574       }
1575     }
1576 
1577     // If it's not a member, use better machinery to try to resolve the call
1578     if (!IsMemExpr)
1579       return !ZeroArgCallReturnTy.isNull();
1580   }
1581 
1582   // Attempt to call the member with no arguments - this will correctly handle
1583   // member templates with defaults/deduction of template arguments, overloads
1584   // with default arguments, etc.
1585   if (IsMemExpr && !E.isTypeDependent()) {
1586     bool Suppress = getDiagnostics().getSuppressAllDiagnostics();
1587     getDiagnostics().setSuppressAllDiagnostics(true);
1588     ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(),
1589                                              None, SourceLocation());
1590     getDiagnostics().setSuppressAllDiagnostics(Suppress);
1591     if (R.isUsable()) {
1592       ZeroArgCallReturnTy = R.get()->getType();
1593       return true;
1594     }
1595     return false;
1596   }
1597 
1598   if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) {
1599     if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
1600       if (Fun->getMinRequiredArguments() == 0)
1601         ZeroArgCallReturnTy = Fun->getReturnType();
1602       return true;
1603     }
1604   }
1605 
1606   // We don't have an expression that's convenient to get a FunctionDecl from,
1607   // but we can at least check if the type is "function of 0 arguments".
1608   QualType ExprTy = E.getType();
1609   const FunctionType *FunTy = nullptr;
1610   QualType PointeeTy = ExprTy->getPointeeType();
1611   if (!PointeeTy.isNull())
1612     FunTy = PointeeTy->getAs<FunctionType>();
1613   if (!FunTy)
1614     FunTy = ExprTy->getAs<FunctionType>();
1615 
1616   if (const FunctionProtoType *FPT =
1617       dyn_cast_or_null<FunctionProtoType>(FunTy)) {
1618     if (FPT->getNumParams() == 0)
1619       ZeroArgCallReturnTy = FunTy->getReturnType();
1620     return true;
1621   }
1622   return false;
1623 }
1624 
1625 /// \brief Give notes for a set of overloads.
1626 ///
1627 /// A companion to tryExprAsCall. In cases when the name that the programmer
1628 /// wrote was an overloaded function, we may be able to make some guesses about
1629 /// plausible overloads based on their return types; such guesses can be handed
1630 /// off to this method to be emitted as notes.
1631 ///
1632 /// \param Overloads - The overloads to note.
1633 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
1634 ///  -fshow-overloads=best, this is the location to attach to the note about too
1635 ///  many candidates. Typically this will be the location of the original
1636 ///  ill-formed expression.
1637 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads,
1638                           const SourceLocation FinalNoteLoc) {
1639   int ShownOverloads = 0;
1640   int SuppressedOverloads = 0;
1641   for (UnresolvedSetImpl::iterator It = Overloads.begin(),
1642        DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
1643     // FIXME: Magic number for max shown overloads stolen from
1644     // OverloadCandidateSet::NoteCandidates.
1645     if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) {
1646       ++SuppressedOverloads;
1647       continue;
1648     }
1649 
1650     NamedDecl *Fn = (*It)->getUnderlyingDecl();
1651     // Don't print overloads for non-default multiversioned functions.
1652     if (const auto *FD = Fn->getAsFunction()) {
1653       if (FD->isMultiVersion() &&
1654           !FD->getAttr<TargetAttr>()->isDefaultVersion())
1655         continue;
1656     }
1657     S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);
1658     ++ShownOverloads;
1659   }
1660 
1661   if (SuppressedOverloads)
1662     S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
1663       << SuppressedOverloads;
1664 }
1665 
1666 static void notePlausibleOverloads(Sema &S, SourceLocation Loc,
1667                                    const UnresolvedSetImpl &Overloads,
1668                                    bool (*IsPlausibleResult)(QualType)) {
1669   if (!IsPlausibleResult)
1670     return noteOverloads(S, Overloads, Loc);
1671 
1672   UnresolvedSet<2> PlausibleOverloads;
1673   for (OverloadExpr::decls_iterator It = Overloads.begin(),
1674          DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
1675     const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
1676     QualType OverloadResultTy = OverloadDecl->getReturnType();
1677     if (IsPlausibleResult(OverloadResultTy))
1678       PlausibleOverloads.addDecl(It.getDecl());
1679   }
1680   noteOverloads(S, PlausibleOverloads, Loc);
1681 }
1682 
1683 /// Determine whether the given expression can be called by just
1684 /// putting parentheses after it.  Notably, expressions with unary
1685 /// operators can't be because the unary operator will start parsing
1686 /// outside the call.
1687 static bool IsCallableWithAppend(Expr *E) {
1688   E = E->IgnoreImplicit();
1689   return (!isa<CStyleCastExpr>(E) &&
1690           !isa<UnaryOperator>(E) &&
1691           !isa<BinaryOperator>(E) &&
1692           !isa<CXXOperatorCallExpr>(E));
1693 }
1694 
1695 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
1696                                 bool ForceComplain,
1697                                 bool (*IsPlausibleResult)(QualType)) {
1698   SourceLocation Loc = E.get()->getExprLoc();
1699   SourceRange Range = E.get()->getSourceRange();
1700 
1701   QualType ZeroArgCallTy;
1702   UnresolvedSet<4> Overloads;
1703   if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
1704       !ZeroArgCallTy.isNull() &&
1705       (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
1706     // At this point, we know E is potentially callable with 0
1707     // arguments and that it returns something of a reasonable type,
1708     // so we can emit a fixit and carry on pretending that E was
1709     // actually a CallExpr.
1710     SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
1711     Diag(Loc, PD)
1712       << /*zero-arg*/ 1 << Range
1713       << (IsCallableWithAppend(E.get())
1714           ? FixItHint::CreateInsertion(ParenInsertionLoc, "()")
1715           : FixItHint());
1716     notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
1717 
1718     // FIXME: Try this before emitting the fixit, and suppress diagnostics
1719     // while doing so.
1720     E = ActOnCallExpr(nullptr, E.get(), Range.getEnd(), None,
1721                       Range.getEnd().getLocWithOffset(1));
1722     return true;
1723   }
1724 
1725   if (!ForceComplain) return false;
1726 
1727   Diag(Loc, PD) << /*not zero-arg*/ 0 << Range;
1728   notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
1729   E = ExprError();
1730   return true;
1731 }
1732 
1733 IdentifierInfo *Sema::getSuperIdentifier() const {
1734   if (!Ident_super)
1735     Ident_super = &Context.Idents.get("super");
1736   return Ident_super;
1737 }
1738 
1739 IdentifierInfo *Sema::getFloat128Identifier() const {
1740   if (!Ident___float128)
1741     Ident___float128 = &Context.Idents.get("__float128");
1742   return Ident___float128;
1743 }
1744 
1745 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD,
1746                                    CapturedRegionKind K) {
1747   CapturingScopeInfo *CSI = new CapturedRegionScopeInfo(
1748       getDiagnostics(), S, CD, RD, CD->getContextParam(), K,
1749       (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0);
1750   CSI->ReturnType = Context.VoidTy;
1751   FunctionScopes.push_back(CSI);
1752 }
1753 
1754 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() {
1755   if (FunctionScopes.empty())
1756     return nullptr;
1757 
1758   return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back());
1759 }
1760 
1761 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
1762 Sema::getMismatchingDeleteExpressions() const {
1763   return DeleteExprs;
1764 }
1765 
1766 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) {
1767   if (ExtStr.empty())
1768     return;
1769   llvm::SmallVector<StringRef, 1> Exts;
1770   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
1771   auto CanT = T.getCanonicalType().getTypePtr();
1772   for (auto &I : Exts)
1773     OpenCLTypeExtMap[CanT].insert(I.str());
1774 }
1775 
1776 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) {
1777   llvm::SmallVector<StringRef, 1> Exts;
1778   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
1779   if (Exts.empty())
1780     return;
1781   for (auto &I : Exts)
1782     OpenCLDeclExtMap[FD].insert(I.str());
1783 }
1784 
1785 void Sema::setCurrentOpenCLExtensionForType(QualType T) {
1786   if (CurrOpenCLExtension.empty())
1787     return;
1788   setOpenCLExtensionForType(T, CurrOpenCLExtension);
1789 }
1790 
1791 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) {
1792   if (CurrOpenCLExtension.empty())
1793     return;
1794   setOpenCLExtensionForDecl(D, CurrOpenCLExtension);
1795 }
1796 
1797 bool Sema::isOpenCLDisabledDecl(Decl *FD) {
1798   auto Loc = OpenCLDeclExtMap.find(FD);
1799   if (Loc == OpenCLDeclExtMap.end())
1800     return false;
1801   for (auto &I : Loc->second) {
1802     if (!getOpenCLOptions().isEnabled(I))
1803       return true;
1804   }
1805   return false;
1806 }
1807 
1808 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT>
1809 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
1810                                          DiagInfoT DiagInfo, MapT &Map,
1811                                          unsigned Selector,
1812                                          SourceRange SrcRange) {
1813   auto Loc = Map.find(D);
1814   if (Loc == Map.end())
1815     return false;
1816   bool Disabled = false;
1817   for (auto &I : Loc->second) {
1818     if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) {
1819       Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
1820                                                          << I << SrcRange;
1821       Disabled = true;
1822     }
1823   }
1824   return Disabled;
1825 }
1826 
1827 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) {
1828   // Check extensions for declared types.
1829   Decl *Decl = nullptr;
1830   if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr()))
1831     Decl = TypedefT->getDecl();
1832   if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr()))
1833     Decl = TagT->getDecl();
1834   auto Loc = DS.getTypeSpecTypeLoc();
1835   if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
1836     return true;
1837 
1838   // Check extensions for builtin types.
1839   return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc,
1840                                        QT, OpenCLTypeExtMap);
1841 }
1842 
1843 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) {
1844   IdentifierInfo *FnName = D.getIdentifier();
1845   return checkOpenCLDisabledTypeOrDecl(&D, E.getLocStart(), FnName,
1846                                        OpenCLDeclExtMap, 1, D.getSourceRange());
1847 }
1848