xref: /llvm-project-15.0.7/clang/lib/Sema/Sema.cpp (revision 0103df79)
1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the actions class which performs semantic analysis and
10 // builds an AST out of a parse stream.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "UsedDeclVisitor.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/ASTDiagnostic.h"
17 #include "clang/AST/DeclCXX.h"
18 #include "clang/AST/DeclFriend.h"
19 #include "clang/AST/DeclObjC.h"
20 #include "clang/AST/Expr.h"
21 #include "clang/AST/ExprCXX.h"
22 #include "clang/AST/PrettyDeclStackTrace.h"
23 #include "clang/AST/StmtCXX.h"
24 #include "clang/Basic/DiagnosticOptions.h"
25 #include "clang/Basic/PartialDiagnostic.h"
26 #include "clang/Basic/SourceManager.h"
27 #include "clang/Basic/Stack.h"
28 #include "clang/Basic/TargetInfo.h"
29 #include "clang/Lex/HeaderSearch.h"
30 #include "clang/Lex/Preprocessor.h"
31 #include "clang/Sema/CXXFieldCollector.h"
32 #include "clang/Sema/DelayedDiagnostic.h"
33 #include "clang/Sema/ExternalSemaSource.h"
34 #include "clang/Sema/Initialization.h"
35 #include "clang/Sema/MultiplexExternalSemaSource.h"
36 #include "clang/Sema/ObjCMethodList.h"
37 #include "clang/Sema/Scope.h"
38 #include "clang/Sema/ScopeInfo.h"
39 #include "clang/Sema/SemaConsumer.h"
40 #include "clang/Sema/SemaInternal.h"
41 #include "clang/Sema/TemplateDeduction.h"
42 #include "clang/Sema/TemplateInstCallback.h"
43 #include "clang/Sema/TypoCorrection.h"
44 #include "llvm/ADT/DenseMap.h"
45 #include "llvm/ADT/SmallPtrSet.h"
46 #include "llvm/Support/TimeProfiler.h"
47 
48 using namespace clang;
49 using namespace sema;
50 
51 SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) {
52   return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts);
53 }
54 
55 ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); }
56 
57 IdentifierInfo *
58 Sema::InventAbbreviatedTemplateParameterTypeName(IdentifierInfo *ParamName,
59                                                  unsigned int Index) {
60   std::string InventedName;
61   llvm::raw_string_ostream OS(InventedName);
62 
63   if (!ParamName)
64     OS << "auto:" << Index + 1;
65   else
66     OS << ParamName->getName() << ":auto";
67 
68   OS.flush();
69   return &Context.Idents.get(OS.str());
70 }
71 
72 PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context,
73                                        const Preprocessor &PP) {
74   PrintingPolicy Policy = Context.getPrintingPolicy();
75   // In diagnostics, we print _Bool as bool if the latter is defined as the
76   // former.
77   Policy.Bool = Context.getLangOpts().Bool;
78   if (!Policy.Bool) {
79     if (const MacroInfo *BoolMacro = PP.getMacroInfo(Context.getBoolName())) {
80       Policy.Bool = BoolMacro->isObjectLike() &&
81                     BoolMacro->getNumTokens() == 1 &&
82                     BoolMacro->getReplacementToken(0).is(tok::kw__Bool);
83     }
84   }
85 
86   return Policy;
87 }
88 
89 void Sema::ActOnTranslationUnitScope(Scope *S) {
90   TUScope = S;
91   PushDeclContext(S, Context.getTranslationUnitDecl());
92 }
93 
94 namespace clang {
95 namespace sema {
96 
97 class SemaPPCallbacks : public PPCallbacks {
98   Sema *S = nullptr;
99   llvm::SmallVector<SourceLocation, 8> IncludeStack;
100 
101 public:
102   void set(Sema &S) { this->S = &S; }
103 
104   void reset() { S = nullptr; }
105 
106   virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
107                            SrcMgr::CharacteristicKind FileType,
108                            FileID PrevFID) override {
109     if (!S)
110       return;
111     switch (Reason) {
112     case EnterFile: {
113       SourceManager &SM = S->getSourceManager();
114       SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc));
115       if (IncludeLoc.isValid()) {
116         if (llvm::timeTraceProfilerEnabled()) {
117           const FileEntry *FE = SM.getFileEntryForID(SM.getFileID(Loc));
118           llvm::timeTraceProfilerBegin(
119               "Source", FE != nullptr ? FE->getName() : StringRef("<unknown>"));
120         }
121 
122         IncludeStack.push_back(IncludeLoc);
123         S->DiagnoseNonDefaultPragmaPack(
124             Sema::PragmaPackDiagnoseKind::NonDefaultStateAtInclude, IncludeLoc);
125       }
126       break;
127     }
128     case ExitFile:
129       if (!IncludeStack.empty()) {
130         if (llvm::timeTraceProfilerEnabled())
131           llvm::timeTraceProfilerEnd();
132 
133         S->DiagnoseNonDefaultPragmaPack(
134             Sema::PragmaPackDiagnoseKind::ChangedStateAtExit,
135             IncludeStack.pop_back_val());
136       }
137       break;
138     default:
139       break;
140     }
141   }
142 };
143 
144 } // end namespace sema
145 } // end namespace clang
146 
147 const unsigned Sema::MaxAlignmentExponent;
148 const unsigned Sema::MaximumAlignment;
149 
150 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
151            TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter)
152     : ExternalSource(nullptr), isMultiplexExternalSource(false),
153       CurFPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp),
154       Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()),
155       SourceMgr(PP.getSourceManager()), CollectStats(false),
156       CodeCompleter(CodeCompleter), CurContext(nullptr),
157       OriginalLexicalContext(nullptr), MSStructPragmaOn(false),
158       MSPointerToMemberRepresentationMethod(
159           LangOpts.getMSPointerToMemberRepresentationMethod()),
160       VtorDispStack(LangOpts.getVtorDispMode()), PackStack(0),
161       DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr),
162       CodeSegStack(nullptr), FpPragmaStack(FPOptionsOverride()),
163       CurInitSeg(nullptr), VisContext(nullptr),
164       PragmaAttributeCurrentTargetDecl(nullptr),
165       IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr),
166       LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp),
167       StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr),
168       StdCoroutineTraitsCache(nullptr), CXXTypeInfoDecl(nullptr),
169       MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), NSValueDecl(nullptr),
170       NSStringDecl(nullptr), StringWithUTF8StringMethod(nullptr),
171       ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr),
172       ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr),
173       DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false),
174       TUKind(TUKind), NumSFINAEErrors(0),
175       FullyCheckedComparisonCategories(
176           static_cast<unsigned>(ComparisonCategoryType::Last) + 1),
177       SatisfactionCache(Context), AccessCheckingSFINAE(false),
178       InNonInstantiationSFINAEContext(false), NonInstantiationEntries(0),
179       ArgumentPackSubstitutionIndex(-1), CurrentInstantiationScope(nullptr),
180       DisableTypoCorrection(false), TyposCorrected(0), AnalysisWarnings(*this),
181       ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr),
182       CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) {
183   TUScope = nullptr;
184   isConstantEvaluatedOverride = false;
185 
186   LoadedExternalKnownNamespaces = false;
187   for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I)
188     NSNumberLiteralMethods[I] = nullptr;
189 
190   if (getLangOpts().ObjC)
191     NSAPIObj.reset(new NSAPI(Context));
192 
193   if (getLangOpts().CPlusPlus)
194     FieldCollector.reset(new CXXFieldCollector());
195 
196   // Tell diagnostics how to render things from the AST library.
197   Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context);
198 
199   ExprEvalContexts.emplace_back(
200       ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{},
201       nullptr, ExpressionEvaluationContextRecord::EK_Other);
202 
203   // Initialization of data sharing attributes stack for OpenMP
204   InitDataSharingAttributesStack();
205 
206   std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
207       std::make_unique<sema::SemaPPCallbacks>();
208   SemaPPCallbackHandler = Callbacks.get();
209   PP.addPPCallbacks(std::move(Callbacks));
210   SemaPPCallbackHandler->set(*this);
211 }
212 
213 // Anchor Sema's type info to this TU.
214 void Sema::anchor() {}
215 
216 void Sema::addImplicitTypedef(StringRef Name, QualType T) {
217   DeclarationName DN = &Context.Idents.get(Name);
218   if (IdResolver.begin(DN) == IdResolver.end())
219     PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope);
220 }
221 
222 void Sema::Initialize() {
223   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
224     SC->InitializeSema(*this);
225 
226   // Tell the external Sema source about this Sema object.
227   if (ExternalSemaSource *ExternalSema
228       = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
229     ExternalSema->InitializeSema(*this);
230 
231   // This needs to happen after ExternalSemaSource::InitializeSema(this) or we
232   // will not be able to merge any duplicate __va_list_tag decls correctly.
233   VAListTagName = PP.getIdentifierInfo("__va_list_tag");
234 
235   if (!TUScope)
236     return;
237 
238   // Initialize predefined 128-bit integer types, if needed.
239   if (Context.getTargetInfo().hasInt128Type()) {
240     // If either of the 128-bit integer types are unavailable to name lookup,
241     // define them now.
242     DeclarationName Int128 = &Context.Idents.get("__int128_t");
243     if (IdResolver.begin(Int128) == IdResolver.end())
244       PushOnScopeChains(Context.getInt128Decl(), TUScope);
245 
246     DeclarationName UInt128 = &Context.Idents.get("__uint128_t");
247     if (IdResolver.begin(UInt128) == IdResolver.end())
248       PushOnScopeChains(Context.getUInt128Decl(), TUScope);
249   }
250 
251 
252   // Initialize predefined Objective-C types:
253   if (getLangOpts().ObjC) {
254     // If 'SEL' does not yet refer to any declarations, make it refer to the
255     // predefined 'SEL'.
256     DeclarationName SEL = &Context.Idents.get("SEL");
257     if (IdResolver.begin(SEL) == IdResolver.end())
258       PushOnScopeChains(Context.getObjCSelDecl(), TUScope);
259 
260     // If 'id' does not yet refer to any declarations, make it refer to the
261     // predefined 'id'.
262     DeclarationName Id = &Context.Idents.get("id");
263     if (IdResolver.begin(Id) == IdResolver.end())
264       PushOnScopeChains(Context.getObjCIdDecl(), TUScope);
265 
266     // Create the built-in typedef for 'Class'.
267     DeclarationName Class = &Context.Idents.get("Class");
268     if (IdResolver.begin(Class) == IdResolver.end())
269       PushOnScopeChains(Context.getObjCClassDecl(), TUScope);
270 
271     // Create the built-in forward declaratino for 'Protocol'.
272     DeclarationName Protocol = &Context.Idents.get("Protocol");
273     if (IdResolver.begin(Protocol) == IdResolver.end())
274       PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope);
275   }
276 
277   // Create the internal type for the *StringMakeConstantString builtins.
278   DeclarationName ConstantString = &Context.Idents.get("__NSConstantString");
279   if (IdResolver.begin(ConstantString) == IdResolver.end())
280     PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope);
281 
282   // Initialize Microsoft "predefined C++ types".
283   if (getLangOpts().MSVCCompat) {
284     if (getLangOpts().CPlusPlus &&
285         IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end())
286       PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class),
287                         TUScope);
288 
289     addImplicitTypedef("size_t", Context.getSizeType());
290   }
291 
292   // Initialize predefined OpenCL types and supported extensions and (optional)
293   // core features.
294   if (getLangOpts().OpenCL) {
295     getOpenCLOptions().addSupport(
296         Context.getTargetInfo().getSupportedOpenCLOpts());
297     getOpenCLOptions().enableSupportedCore(getLangOpts());
298     addImplicitTypedef("sampler_t", Context.OCLSamplerTy);
299     addImplicitTypedef("event_t", Context.OCLEventTy);
300     if (getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) {
301       addImplicitTypedef("clk_event_t", Context.OCLClkEventTy);
302       addImplicitTypedef("queue_t", Context.OCLQueueTy);
303       addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy);
304       addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy));
305       addImplicitTypedef("atomic_uint",
306                          Context.getAtomicType(Context.UnsignedIntTy));
307       auto AtomicLongT = Context.getAtomicType(Context.LongTy);
308       addImplicitTypedef("atomic_long", AtomicLongT);
309       auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy);
310       addImplicitTypedef("atomic_ulong", AtomicULongT);
311       addImplicitTypedef("atomic_float",
312                          Context.getAtomicType(Context.FloatTy));
313       auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy);
314       addImplicitTypedef("atomic_double", AtomicDoubleT);
315       // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as
316       // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide.
317       addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy));
318       auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType());
319       addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT);
320       auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType());
321       addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT);
322       auto AtomicSizeT = Context.getAtomicType(Context.getSizeType());
323       addImplicitTypedef("atomic_size_t", AtomicSizeT);
324       auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType());
325       addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT);
326 
327       // OpenCL v2.0 s6.13.11.6:
328       // - The atomic_long and atomic_ulong types are supported if the
329       //   cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics
330       //   extensions are supported.
331       // - The atomic_double type is only supported if double precision
332       //   is supported and the cl_khr_int64_base_atomics and
333       //   cl_khr_int64_extended_atomics extensions are supported.
334       // - If the device address space is 64-bits, the data types
335       //   atomic_intptr_t, atomic_uintptr_t, atomic_size_t and
336       //   atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and
337       //   cl_khr_int64_extended_atomics extensions are supported.
338       std::vector<QualType> Atomic64BitTypes;
339       Atomic64BitTypes.push_back(AtomicLongT);
340       Atomic64BitTypes.push_back(AtomicULongT);
341       Atomic64BitTypes.push_back(AtomicDoubleT);
342       if (Context.getTypeSize(AtomicSizeT) == 64) {
343         Atomic64BitTypes.push_back(AtomicSizeT);
344         Atomic64BitTypes.push_back(AtomicIntPtrT);
345         Atomic64BitTypes.push_back(AtomicUIntPtrT);
346         Atomic64BitTypes.push_back(AtomicPtrDiffT);
347       }
348       for (auto &I : Atomic64BitTypes)
349         setOpenCLExtensionForType(I,
350             "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
351 
352       setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64");
353     }
354 
355     setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64");
356 
357 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \
358     setOpenCLExtensionForType(Context.Id, Ext);
359 #include "clang/Basic/OpenCLImageTypes.def"
360 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
361     addImplicitTypedef(#ExtType, Context.Id##Ty); \
362     setOpenCLExtensionForType(Context.Id##Ty, #Ext);
363 #include "clang/Basic/OpenCLExtensionTypes.def"
364   }
365 
366   if (Context.getTargetInfo().hasAArch64SVETypes()) {
367 #define SVE_TYPE(Name, Id, SingletonId) \
368     addImplicitTypedef(Name, Context.SingletonId);
369 #include "clang/Basic/AArch64SVEACLETypes.def"
370   }
371 
372   if (Context.getTargetInfo().hasBuiltinMSVaList()) {
373     DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list");
374     if (IdResolver.begin(MSVaList) == IdResolver.end())
375       PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope);
376   }
377 
378   DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list");
379   if (IdResolver.begin(BuiltinVaList) == IdResolver.end())
380     PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope);
381 }
382 
383 Sema::~Sema() {
384   if (VisContext) FreeVisContext();
385 
386   // Kill all the active scopes.
387   for (sema::FunctionScopeInfo *FSI : FunctionScopes)
388     delete FSI;
389 
390   // Tell the SemaConsumer to forget about us; we're going out of scope.
391   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
392     SC->ForgetSema();
393 
394   // Detach from the external Sema source.
395   if (ExternalSemaSource *ExternalSema
396         = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
397     ExternalSema->ForgetSema();
398 
399   // If Sema's ExternalSource is the multiplexer - we own it.
400   if (isMultiplexExternalSource)
401     delete ExternalSource;
402 
403   // Delete cached satisfactions.
404   std::vector<ConstraintSatisfaction *> Satisfactions;
405   Satisfactions.reserve(Satisfactions.size());
406   for (auto &Node : SatisfactionCache)
407     Satisfactions.push_back(&Node);
408   for (auto *Node : Satisfactions)
409     delete Node;
410 
411   threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache);
412 
413   // Destroys data sharing attributes stack for OpenMP
414   DestroyDataSharingAttributesStack();
415 
416   // Detach from the PP callback handler which outlives Sema since it's owned
417   // by the preprocessor.
418   SemaPPCallbackHandler->reset();
419 }
420 
421 void Sema::warnStackExhausted(SourceLocation Loc) {
422   // Only warn about this once.
423   if (!WarnedStackExhausted) {
424     Diag(Loc, diag::warn_stack_exhausted);
425     WarnedStackExhausted = true;
426   }
427 }
428 
429 void Sema::runWithSufficientStackSpace(SourceLocation Loc,
430                                        llvm::function_ref<void()> Fn) {
431   clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn);
432 }
433 
434 /// makeUnavailableInSystemHeader - There is an error in the current
435 /// context.  If we're still in a system header, and we can plausibly
436 /// make the relevant declaration unavailable instead of erroring, do
437 /// so and return true.
438 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
439                                       UnavailableAttr::ImplicitReason reason) {
440   // If we're not in a function, it's an error.
441   FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
442   if (!fn) return false;
443 
444   // If we're in template instantiation, it's an error.
445   if (inTemplateInstantiation())
446     return false;
447 
448   // If that function's not in a system header, it's an error.
449   if (!Context.getSourceManager().isInSystemHeader(loc))
450     return false;
451 
452   // If the function is already unavailable, it's not an error.
453   if (fn->hasAttr<UnavailableAttr>()) return true;
454 
455   fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc));
456   return true;
457 }
458 
459 ASTMutationListener *Sema::getASTMutationListener() const {
460   return getASTConsumer().GetASTMutationListener();
461 }
462 
463 ///Registers an external source. If an external source already exists,
464 /// creates a multiplex external source and appends to it.
465 ///
466 ///\param[in] E - A non-null external sema source.
467 ///
468 void Sema::addExternalSource(ExternalSemaSource *E) {
469   assert(E && "Cannot use with NULL ptr");
470 
471   if (!ExternalSource) {
472     ExternalSource = E;
473     return;
474   }
475 
476   if (isMultiplexExternalSource)
477     static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E);
478   else {
479     ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E);
480     isMultiplexExternalSource = true;
481   }
482 }
483 
484 /// Print out statistics about the semantic analysis.
485 void Sema::PrintStats() const {
486   llvm::errs() << "\n*** Semantic Analysis Stats:\n";
487   llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
488 
489   BumpAlloc.PrintStats();
490   AnalysisWarnings.PrintStats();
491 }
492 
493 void Sema::diagnoseNullableToNonnullConversion(QualType DstType,
494                                                QualType SrcType,
495                                                SourceLocation Loc) {
496   Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context);
497   if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable)
498     return;
499 
500   Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context);
501   if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull)
502     return;
503 
504   Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
505 }
506 
507 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) {
508   if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant,
509                       E->getBeginLoc()))
510     return;
511   // nullptr only exists from C++11 on, so don't warn on its absence earlier.
512   if (!getLangOpts().CPlusPlus11)
513     return;
514 
515   if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
516     return;
517   if (E->IgnoreParenImpCasts()->getType()->isNullPtrType())
518     return;
519 
520   // If it is a macro from system header, and if the macro name is not "NULL",
521   // do not warn.
522   SourceLocation MaybeMacroLoc = E->getBeginLoc();
523   if (Diags.getSuppressSystemWarnings() &&
524       SourceMgr.isInSystemMacro(MaybeMacroLoc) &&
525       !findMacroSpelling(MaybeMacroLoc, "NULL"))
526     return;
527 
528   Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant)
529       << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr");
530 }
531 
532 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
533 /// If there is already an implicit cast, merge into the existing one.
534 /// The result is of the given category.
535 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
536                                    CastKind Kind, ExprValueKind VK,
537                                    const CXXCastPath *BasePath,
538                                    CheckedConversionKind CCK) {
539 #ifndef NDEBUG
540   if (VK == VK_RValue && !E->isRValue()) {
541     switch (Kind) {
542     default:
543       llvm_unreachable(("can't implicitly cast lvalue to rvalue with this cast "
544                         "kind: " +
545                         std::string(CastExpr::getCastKindName(Kind)))
546                            .c_str());
547     case CK_Dependent:
548     case CK_LValueToRValue:
549     case CK_ArrayToPointerDecay:
550     case CK_FunctionToPointerDecay:
551     case CK_ToVoid:
552     case CK_NonAtomicToAtomic:
553       break;
554     }
555   }
556   assert((VK == VK_RValue || Kind == CK_Dependent || !E->isRValue()) &&
557          "can't cast rvalue to lvalue");
558 #endif
559 
560   diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getBeginLoc());
561   diagnoseZeroToNullptrConversion(Kind, E);
562 
563   QualType ExprTy = Context.getCanonicalType(E->getType());
564   QualType TypeTy = Context.getCanonicalType(Ty);
565 
566   if (ExprTy == TypeTy)
567     return E;
568 
569   // C++1z [conv.array]: The temporary materialization conversion is applied.
570   // We also use this to fuel C++ DR1213, which applies to C++11 onwards.
571   if (Kind == CK_ArrayToPointerDecay && getLangOpts().CPlusPlus &&
572       E->getValueKind() == VK_RValue) {
573     // The temporary is an lvalue in C++98 and an xvalue otherwise.
574     ExprResult Materialized = CreateMaterializeTemporaryExpr(
575         E->getType(), E, !getLangOpts().CPlusPlus11);
576     if (Materialized.isInvalid())
577       return ExprError();
578     E = Materialized.get();
579   }
580 
581   if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) {
582     if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
583       ImpCast->setType(Ty);
584       ImpCast->setValueKind(VK);
585       return E;
586     }
587   }
588 
589   return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK,
590                                   CurFPFeatureOverrides());
591 }
592 
593 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
594 /// to the conversion from scalar type ScalarTy to the Boolean type.
595 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) {
596   switch (ScalarTy->getScalarTypeKind()) {
597   case Type::STK_Bool: return CK_NoOp;
598   case Type::STK_CPointer: return CK_PointerToBoolean;
599   case Type::STK_BlockPointer: return CK_PointerToBoolean;
600   case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean;
601   case Type::STK_MemberPointer: return CK_MemberPointerToBoolean;
602   case Type::STK_Integral: return CK_IntegralToBoolean;
603   case Type::STK_Floating: return CK_FloatingToBoolean;
604   case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean;
605   case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean;
606   case Type::STK_FixedPoint: return CK_FixedPointToBoolean;
607   }
608   llvm_unreachable("unknown scalar type kind");
609 }
610 
611 /// Used to prune the decls of Sema's UnusedFileScopedDecls vector.
612 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
613   if (D->getMostRecentDecl()->isUsed())
614     return true;
615 
616   if (D->isExternallyVisible())
617     return true;
618 
619   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
620     // If this is a function template and none of its specializations is used,
621     // we should warn.
622     if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate())
623       for (const auto *Spec : Template->specializations())
624         if (ShouldRemoveFromUnused(SemaRef, Spec))
625           return true;
626 
627     // UnusedFileScopedDecls stores the first declaration.
628     // The declaration may have become definition so check again.
629     const FunctionDecl *DeclToCheck;
630     if (FD->hasBody(DeclToCheck))
631       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
632 
633     // Later redecls may add new information resulting in not having to warn,
634     // so check again.
635     DeclToCheck = FD->getMostRecentDecl();
636     if (DeclToCheck != FD)
637       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
638   }
639 
640   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
641     // If a variable usable in constant expressions is referenced,
642     // don't warn if it isn't used: if the value of a variable is required
643     // for the computation of a constant expression, it doesn't make sense to
644     // warn even if the variable isn't odr-used.  (isReferenced doesn't
645     // precisely reflect that, but it's a decent approximation.)
646     if (VD->isReferenced() &&
647         VD->mightBeUsableInConstantExpressions(SemaRef->Context))
648       return true;
649 
650     if (VarTemplateDecl *Template = VD->getDescribedVarTemplate())
651       // If this is a variable template and none of its specializations is used,
652       // we should warn.
653       for (const auto *Spec : Template->specializations())
654         if (ShouldRemoveFromUnused(SemaRef, Spec))
655           return true;
656 
657     // UnusedFileScopedDecls stores the first declaration.
658     // The declaration may have become definition so check again.
659     const VarDecl *DeclToCheck = VD->getDefinition();
660     if (DeclToCheck)
661       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
662 
663     // Later redecls may add new information resulting in not having to warn,
664     // so check again.
665     DeclToCheck = VD->getMostRecentDecl();
666     if (DeclToCheck != VD)
667       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
668   }
669 
670   return false;
671 }
672 
673 static bool isFunctionOrVarDeclExternC(NamedDecl *ND) {
674   if (auto *FD = dyn_cast<FunctionDecl>(ND))
675     return FD->isExternC();
676   return cast<VarDecl>(ND)->isExternC();
677 }
678 
679 /// Determine whether ND is an external-linkage function or variable whose
680 /// type has no linkage.
681 bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) {
682   // Note: it's not quite enough to check whether VD has UniqueExternalLinkage,
683   // because we also want to catch the case where its type has VisibleNoLinkage,
684   // which does not affect the linkage of VD.
685   return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() &&
686          !isExternalFormalLinkage(VD->getType()->getLinkage()) &&
687          !isFunctionOrVarDeclExternC(VD);
688 }
689 
690 /// Obtains a sorted list of functions and variables that are undefined but
691 /// ODR-used.
692 void Sema::getUndefinedButUsed(
693     SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) {
694   for (const auto &UndefinedUse : UndefinedButUsed) {
695     NamedDecl *ND = UndefinedUse.first;
696 
697     // Ignore attributes that have become invalid.
698     if (ND->isInvalidDecl()) continue;
699 
700     // __attribute__((weakref)) is basically a definition.
701     if (ND->hasAttr<WeakRefAttr>()) continue;
702 
703     if (isa<CXXDeductionGuideDecl>(ND))
704       continue;
705 
706     if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) {
707       // An exported function will always be emitted when defined, so even if
708       // the function is inline, it doesn't have to be emitted in this TU. An
709       // imported function implies that it has been exported somewhere else.
710       continue;
711     }
712 
713     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) {
714       if (FD->isDefined())
715         continue;
716       if (FD->isExternallyVisible() &&
717           !isExternalWithNoLinkageType(FD) &&
718           !FD->getMostRecentDecl()->isInlined() &&
719           !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
720         continue;
721       if (FD->getBuiltinID())
722         continue;
723     } else {
724       auto *VD = cast<VarDecl>(ND);
725       if (VD->hasDefinition() != VarDecl::DeclarationOnly)
726         continue;
727       if (VD->isExternallyVisible() &&
728           !isExternalWithNoLinkageType(VD) &&
729           !VD->getMostRecentDecl()->isInline() &&
730           !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
731         continue;
732 
733       // Skip VarDecls that lack formal definitions but which we know are in
734       // fact defined somewhere.
735       if (VD->isKnownToBeDefined())
736         continue;
737     }
738 
739     Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
740   }
741 }
742 
743 /// checkUndefinedButUsed - Check for undefined objects with internal linkage
744 /// or that are inline.
745 static void checkUndefinedButUsed(Sema &S) {
746   if (S.UndefinedButUsed.empty()) return;
747 
748   // Collect all the still-undefined entities with internal linkage.
749   SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined;
750   S.getUndefinedButUsed(Undefined);
751   if (Undefined.empty()) return;
752 
753   for (auto Undef : Undefined) {
754     ValueDecl *VD = cast<ValueDecl>(Undef.first);
755     SourceLocation UseLoc = Undef.second;
756 
757     if (S.isExternalWithNoLinkageType(VD)) {
758       // C++ [basic.link]p8:
759       //   A type without linkage shall not be used as the type of a variable
760       //   or function with external linkage unless
761       //    -- the entity has C language linkage
762       //    -- the entity is not odr-used or is defined in the same TU
763       //
764       // As an extension, accept this in cases where the type is externally
765       // visible, since the function or variable actually can be defined in
766       // another translation unit in that case.
767       S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage())
768                                     ? diag::ext_undefined_internal_type
769                                     : diag::err_undefined_internal_type)
770         << isa<VarDecl>(VD) << VD;
771     } else if (!VD->isExternallyVisible()) {
772       // FIXME: We can promote this to an error. The function or variable can't
773       // be defined anywhere else, so the program must necessarily violate the
774       // one definition rule.
775       S.Diag(VD->getLocation(), diag::warn_undefined_internal)
776         << isa<VarDecl>(VD) << VD;
777     } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {
778       (void)FD;
779       assert(FD->getMostRecentDecl()->isInlined() &&
780              "used object requires definition but isn't inline or internal?");
781       // FIXME: This is ill-formed; we should reject.
782       S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD;
783     } else {
784       assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
785              "used var requires definition but isn't inline or internal?");
786       S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;
787     }
788     if (UseLoc.isValid())
789       S.Diag(UseLoc, diag::note_used_here);
790   }
791 
792   S.UndefinedButUsed.clear();
793 }
794 
795 void Sema::LoadExternalWeakUndeclaredIdentifiers() {
796   if (!ExternalSource)
797     return;
798 
799   SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs;
800   ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs);
801   for (auto &WeakID : WeakIDs)
802     WeakUndeclaredIdentifiers.insert(WeakID);
803 }
804 
805 
806 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap;
807 
808 /// Returns true, if all methods and nested classes of the given
809 /// CXXRecordDecl are defined in this translation unit.
810 ///
811 /// Should only be called from ActOnEndOfTranslationUnit so that all
812 /// definitions are actually read.
813 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD,
814                                             RecordCompleteMap &MNCComplete) {
815   RecordCompleteMap::iterator Cache = MNCComplete.find(RD);
816   if (Cache != MNCComplete.end())
817     return Cache->second;
818   if (!RD->isCompleteDefinition())
819     return false;
820   bool Complete = true;
821   for (DeclContext::decl_iterator I = RD->decls_begin(),
822                                   E = RD->decls_end();
823        I != E && Complete; ++I) {
824     if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I))
825       Complete = M->isDefined() || M->isDefaulted() ||
826                  (M->isPure() && !isa<CXXDestructorDecl>(M));
827     else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I))
828       // If the template function is marked as late template parsed at this
829       // point, it has not been instantiated and therefore we have not
830       // performed semantic analysis on it yet, so we cannot know if the type
831       // can be considered complete.
832       Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
833                   F->getTemplatedDecl()->isDefined();
834     else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
835       if (R->isInjectedClassName())
836         continue;
837       if (R->hasDefinition())
838         Complete = MethodsAndNestedClassesComplete(R->getDefinition(),
839                                                    MNCComplete);
840       else
841         Complete = false;
842     }
843   }
844   MNCComplete[RD] = Complete;
845   return Complete;
846 }
847 
848 /// Returns true, if the given CXXRecordDecl is fully defined in this
849 /// translation unit, i.e. all methods are defined or pure virtual and all
850 /// friends, friend functions and nested classes are fully defined in this
851 /// translation unit.
852 ///
853 /// Should only be called from ActOnEndOfTranslationUnit so that all
854 /// definitions are actually read.
855 static bool IsRecordFullyDefined(const CXXRecordDecl *RD,
856                                  RecordCompleteMap &RecordsComplete,
857                                  RecordCompleteMap &MNCComplete) {
858   RecordCompleteMap::iterator Cache = RecordsComplete.find(RD);
859   if (Cache != RecordsComplete.end())
860     return Cache->second;
861   bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete);
862   for (CXXRecordDecl::friend_iterator I = RD->friend_begin(),
863                                       E = RD->friend_end();
864        I != E && Complete; ++I) {
865     // Check if friend classes and methods are complete.
866     if (TypeSourceInfo *TSI = (*I)->getFriendType()) {
867       // Friend classes are available as the TypeSourceInfo of the FriendDecl.
868       if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
869         Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete);
870       else
871         Complete = false;
872     } else {
873       // Friend functions are available through the NamedDecl of FriendDecl.
874       if (const FunctionDecl *FD =
875           dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
876         Complete = FD->isDefined();
877       else
878         // This is a template friend, give up.
879         Complete = false;
880     }
881   }
882   RecordsComplete[RD] = Complete;
883   return Complete;
884 }
885 
886 void Sema::emitAndClearUnusedLocalTypedefWarnings() {
887   if (ExternalSource)
888     ExternalSource->ReadUnusedLocalTypedefNameCandidates(
889         UnusedLocalTypedefNameCandidates);
890   for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {
891     if (TD->isReferenced())
892       continue;
893     Diag(TD->getLocation(), diag::warn_unused_local_typedef)
894         << isa<TypeAliasDecl>(TD) << TD->getDeclName();
895   }
896   UnusedLocalTypedefNameCandidates.clear();
897 }
898 
899 /// This is called before the very first declaration in the translation unit
900 /// is parsed. Note that the ASTContext may have already injected some
901 /// declarations.
902 void Sema::ActOnStartOfTranslationUnit() {
903   if (getLangOpts().ModulesTS &&
904       (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface ||
905        getLangOpts().getCompilingModule() == LangOptions::CMK_None)) {
906     // We start in an implied global module fragment.
907     SourceLocation StartOfTU =
908         SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
909     ActOnGlobalModuleFragmentDecl(StartOfTU);
910     ModuleScopes.back().ImplicitGlobalModuleFragment = true;
911   }
912 }
913 
914 void Sema::ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind) {
915   // No explicit actions are required at the end of the global module fragment.
916   if (Kind == TUFragmentKind::Global)
917     return;
918 
919   // Transfer late parsed template instantiations over to the pending template
920   // instantiation list. During normal compilation, the late template parser
921   // will be installed and instantiating these templates will succeed.
922   //
923   // If we are building a TU prefix for serialization, it is also safe to
924   // transfer these over, even though they are not parsed. The end of the TU
925   // should be outside of any eager template instantiation scope, so when this
926   // AST is deserialized, these templates will not be parsed until the end of
927   // the combined TU.
928   PendingInstantiations.insert(PendingInstantiations.end(),
929                                LateParsedInstantiations.begin(),
930                                LateParsedInstantiations.end());
931   LateParsedInstantiations.clear();
932 
933   // If DefinedUsedVTables ends up marking any virtual member functions it
934   // might lead to more pending template instantiations, which we then need
935   // to instantiate.
936   DefineUsedVTables();
937 
938   // C++: Perform implicit template instantiations.
939   //
940   // FIXME: When we perform these implicit instantiations, we do not
941   // carefully keep track of the point of instantiation (C++ [temp.point]).
942   // This means that name lookup that occurs within the template
943   // instantiation will always happen at the end of the translation unit,
944   // so it will find some names that are not required to be found. This is
945   // valid, but we could do better by diagnosing if an instantiation uses a
946   // name that was not visible at its first point of instantiation.
947   if (ExternalSource) {
948     // Load pending instantiations from the external source.
949     SmallVector<PendingImplicitInstantiation, 4> Pending;
950     ExternalSource->ReadPendingInstantiations(Pending);
951     for (auto PII : Pending)
952       if (auto Func = dyn_cast<FunctionDecl>(PII.first))
953         Func->setInstantiationIsPending(true);
954     PendingInstantiations.insert(PendingInstantiations.begin(),
955                                  Pending.begin(), Pending.end());
956   }
957 
958   {
959     llvm::TimeTraceScope TimeScope("PerformPendingInstantiations");
960     PerformPendingInstantiations();
961   }
962 
963   emitDeferredDiags();
964 
965   assert(LateParsedInstantiations.empty() &&
966          "end of TU template instantiation should not create more "
967          "late-parsed templates");
968 
969   // Report diagnostics for uncorrected delayed typos. Ideally all of them
970   // should have been corrected by that time, but it is very hard to cover all
971   // cases in practice.
972   for (const auto &Typo : DelayedTypos) {
973     // We pass an empty TypoCorrection to indicate no correction was performed.
974     Typo.second.DiagHandler(TypoCorrection());
975   }
976   DelayedTypos.clear();
977 }
978 
979 /// ActOnEndOfTranslationUnit - This is called at the very end of the
980 /// translation unit when EOF is reached and all but the top-level scope is
981 /// popped.
982 void Sema::ActOnEndOfTranslationUnit() {
983   assert(DelayedDiagnostics.getCurrentPool() == nullptr
984          && "reached end of translation unit with a pool attached?");
985 
986   // If code completion is enabled, don't perform any end-of-translation-unit
987   // work.
988   if (PP.isCodeCompletionEnabled())
989     return;
990 
991   // Complete translation units and modules define vtables and perform implicit
992   // instantiations. PCH files do not.
993   if (TUKind != TU_Prefix) {
994     DiagnoseUseOfUnimplementedSelectors();
995 
996     ActOnEndOfTranslationUnitFragment(
997         !ModuleScopes.empty() && ModuleScopes.back().Module->Kind ==
998                                      Module::PrivateModuleFragment
999             ? TUFragmentKind::Private
1000             : TUFragmentKind::Normal);
1001 
1002     if (LateTemplateParserCleanup)
1003       LateTemplateParserCleanup(OpaqueParser);
1004 
1005     CheckDelayedMemberExceptionSpecs();
1006   } else {
1007     // If we are building a TU prefix for serialization, it is safe to transfer
1008     // these over, even though they are not parsed. The end of the TU should be
1009     // outside of any eager template instantiation scope, so when this AST is
1010     // deserialized, these templates will not be parsed until the end of the
1011     // combined TU.
1012     PendingInstantiations.insert(PendingInstantiations.end(),
1013                                  LateParsedInstantiations.begin(),
1014                                  LateParsedInstantiations.end());
1015     LateParsedInstantiations.clear();
1016 
1017     if (LangOpts.PCHInstantiateTemplates) {
1018       llvm::TimeTraceScope TimeScope("PerformPendingInstantiations");
1019       PerformPendingInstantiations();
1020     }
1021   }
1022 
1023   DiagnoseUnterminatedPragmaPack();
1024   DiagnoseUnterminatedPragmaAttribute();
1025 
1026   // All delayed member exception specs should be checked or we end up accepting
1027   // incompatible declarations.
1028   assert(DelayedOverridingExceptionSpecChecks.empty());
1029   assert(DelayedEquivalentExceptionSpecChecks.empty());
1030 
1031   // All dllexport classes should have been processed already.
1032   assert(DelayedDllExportClasses.empty());
1033   assert(DelayedDllExportMemberFunctions.empty());
1034 
1035   // Remove file scoped decls that turned out to be used.
1036   UnusedFileScopedDecls.erase(
1037       std::remove_if(UnusedFileScopedDecls.begin(nullptr, true),
1038                      UnusedFileScopedDecls.end(),
1039                      [this](const DeclaratorDecl *DD) {
1040                        return ShouldRemoveFromUnused(this, DD);
1041                      }),
1042       UnusedFileScopedDecls.end());
1043 
1044   if (TUKind == TU_Prefix) {
1045     // Translation unit prefixes don't need any of the checking below.
1046     if (!PP.isIncrementalProcessingEnabled())
1047       TUScope = nullptr;
1048     return;
1049   }
1050 
1051   // Check for #pragma weak identifiers that were never declared
1052   LoadExternalWeakUndeclaredIdentifiers();
1053   for (auto WeakID : WeakUndeclaredIdentifiers) {
1054     if (WeakID.second.getUsed())
1055       continue;
1056 
1057     Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(),
1058                                       LookupOrdinaryName);
1059     if (PrevDecl != nullptr &&
1060         !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
1061       Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
1062           << "'weak'" << ExpectedVariableOrFunction;
1063     else
1064       Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
1065           << WeakID.first;
1066   }
1067 
1068   if (LangOpts.CPlusPlus11 &&
1069       !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))
1070     CheckDelegatingCtorCycles();
1071 
1072   if (!Diags.hasErrorOccurred()) {
1073     if (ExternalSource)
1074       ExternalSource->ReadUndefinedButUsed(UndefinedButUsed);
1075     checkUndefinedButUsed(*this);
1076   }
1077 
1078   // A global-module-fragment is only permitted within a module unit.
1079   bool DiagnosedMissingModuleDeclaration = false;
1080   if (!ModuleScopes.empty() &&
1081       ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment &&
1082       !ModuleScopes.back().ImplicitGlobalModuleFragment) {
1083     Diag(ModuleScopes.back().BeginLoc,
1084          diag::err_module_declaration_missing_after_global_module_introducer);
1085     DiagnosedMissingModuleDeclaration = true;
1086   }
1087 
1088   if (TUKind == TU_Module) {
1089     // If we are building a module interface unit, we need to have seen the
1090     // module declaration by now.
1091     if (getLangOpts().getCompilingModule() ==
1092             LangOptions::CMK_ModuleInterface &&
1093         (ModuleScopes.empty() ||
1094          !ModuleScopes.back().Module->isModulePurview()) &&
1095         !DiagnosedMissingModuleDeclaration) {
1096       // FIXME: Make a better guess as to where to put the module declaration.
1097       Diag(getSourceManager().getLocForStartOfFile(
1098                getSourceManager().getMainFileID()),
1099            diag::err_module_declaration_missing);
1100     }
1101 
1102     // If we are building a module, resolve all of the exported declarations
1103     // now.
1104     if (Module *CurrentModule = PP.getCurrentModule()) {
1105       ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
1106 
1107       SmallVector<Module *, 2> Stack;
1108       Stack.push_back(CurrentModule);
1109       while (!Stack.empty()) {
1110         Module *Mod = Stack.pop_back_val();
1111 
1112         // Resolve the exported declarations and conflicts.
1113         // FIXME: Actually complain, once we figure out how to teach the
1114         // diagnostic client to deal with complaints in the module map at this
1115         // point.
1116         ModMap.resolveExports(Mod, /*Complain=*/false);
1117         ModMap.resolveUses(Mod, /*Complain=*/false);
1118         ModMap.resolveConflicts(Mod, /*Complain=*/false);
1119 
1120         // Queue the submodules, so their exports will also be resolved.
1121         Stack.append(Mod->submodule_begin(), Mod->submodule_end());
1122       }
1123     }
1124 
1125     // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for
1126     // modules when they are built, not every time they are used.
1127     emitAndClearUnusedLocalTypedefWarnings();
1128   }
1129 
1130   // C99 6.9.2p2:
1131   //   A declaration of an identifier for an object that has file
1132   //   scope without an initializer, and without a storage-class
1133   //   specifier or with the storage-class specifier static,
1134   //   constitutes a tentative definition. If a translation unit
1135   //   contains one or more tentative definitions for an identifier,
1136   //   and the translation unit contains no external definition for
1137   //   that identifier, then the behavior is exactly as if the
1138   //   translation unit contains a file scope declaration of that
1139   //   identifier, with the composite type as of the end of the
1140   //   translation unit, with an initializer equal to 0.
1141   llvm::SmallSet<VarDecl *, 32> Seen;
1142   for (TentativeDefinitionsType::iterator
1143             T = TentativeDefinitions.begin(ExternalSource),
1144          TEnd = TentativeDefinitions.end();
1145        T != TEnd; ++T) {
1146     VarDecl *VD = (*T)->getActingDefinition();
1147 
1148     // If the tentative definition was completed, getActingDefinition() returns
1149     // null. If we've already seen this variable before, insert()'s second
1150     // return value is false.
1151     if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second)
1152       continue;
1153 
1154     if (const IncompleteArrayType *ArrayT
1155         = Context.getAsIncompleteArrayType(VD->getType())) {
1156       // Set the length of the array to 1 (C99 6.9.2p5).
1157       Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
1158       llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
1159       QualType T = Context.getConstantArrayType(ArrayT->getElementType(), One,
1160                                                 nullptr, ArrayType::Normal, 0);
1161       VD->setType(T);
1162     } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
1163                                    diag::err_tentative_def_incomplete_type))
1164       VD->setInvalidDecl();
1165 
1166     // No initialization is performed for a tentative definition.
1167     CheckCompleteVariableDeclaration(VD);
1168 
1169     // Notify the consumer that we've completed a tentative definition.
1170     if (!VD->isInvalidDecl())
1171       Consumer.CompleteTentativeDefinition(VD);
1172   }
1173 
1174   for (auto D : ExternalDeclarations) {
1175     if (!D || D->isInvalidDecl() || D->getPreviousDecl() || !D->isUsed())
1176       continue;
1177 
1178     Consumer.CompleteExternalDeclaration(D);
1179   }
1180 
1181   // If there were errors, disable 'unused' warnings since they will mostly be
1182   // noise. Don't warn for a use from a module: either we should warn on all
1183   // file-scope declarations in modules or not at all, but whether the
1184   // declaration is used is immaterial.
1185   if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {
1186     // Output warning for unused file scoped decls.
1187     for (UnusedFileScopedDeclsType::iterator
1188            I = UnusedFileScopedDecls.begin(ExternalSource),
1189            E = UnusedFileScopedDecls.end(); I != E; ++I) {
1190       if (ShouldRemoveFromUnused(this, *I))
1191         continue;
1192 
1193       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1194         const FunctionDecl *DiagD;
1195         if (!FD->hasBody(DiagD))
1196           DiagD = FD;
1197         if (DiagD->isDeleted())
1198           continue; // Deleted functions are supposed to be unused.
1199         if (DiagD->isReferenced()) {
1200           if (isa<CXXMethodDecl>(DiagD))
1201             Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
1202                 << DiagD;
1203           else {
1204             if (FD->getStorageClass() == SC_Static &&
1205                 !FD->isInlineSpecified() &&
1206                 !SourceMgr.isInMainFile(
1207                    SourceMgr.getExpansionLoc(FD->getLocation())))
1208               Diag(DiagD->getLocation(),
1209                    diag::warn_unneeded_static_internal_decl)
1210                   << DiagD;
1211             else
1212               Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1213                   << /*function*/ 0 << DiagD;
1214           }
1215         } else {
1216           if (FD->getDescribedFunctionTemplate())
1217             Diag(DiagD->getLocation(), diag::warn_unused_template)
1218                 << /*function*/ 0 << DiagD;
1219           else
1220             Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD)
1221                                            ? diag::warn_unused_member_function
1222                                            : diag::warn_unused_function)
1223                 << DiagD;
1224         }
1225       } else {
1226         const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
1227         if (!DiagD)
1228           DiagD = cast<VarDecl>(*I);
1229         if (DiagD->isReferenced()) {
1230           Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1231               << /*variable*/ 1 << DiagD;
1232         } else if (DiagD->getType().isConstQualified()) {
1233           const SourceManager &SM = SourceMgr;
1234           if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) ||
1235               !PP.getLangOpts().IsHeaderFile)
1236             Diag(DiagD->getLocation(), diag::warn_unused_const_variable)
1237                 << DiagD;
1238         } else {
1239           if (DiagD->getDescribedVarTemplate())
1240             Diag(DiagD->getLocation(), diag::warn_unused_template)
1241                 << /*variable*/ 1 << DiagD;
1242           else
1243             Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD;
1244         }
1245       }
1246     }
1247 
1248     emitAndClearUnusedLocalTypedefWarnings();
1249   }
1250 
1251   if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) {
1252     // FIXME: Load additional unused private field candidates from the external
1253     // source.
1254     RecordCompleteMap RecordsComplete;
1255     RecordCompleteMap MNCComplete;
1256     for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(),
1257          E = UnusedPrivateFields.end(); I != E; ++I) {
1258       const NamedDecl *D = *I;
1259       const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
1260       if (RD && !RD->isUnion() &&
1261           IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) {
1262         Diag(D->getLocation(), diag::warn_unused_private_field)
1263               << D->getDeclName();
1264       }
1265     }
1266   }
1267 
1268   if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {
1269     if (ExternalSource)
1270       ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs);
1271     for (const auto &DeletedFieldInfo : DeleteExprs) {
1272       for (const auto &DeleteExprLoc : DeletedFieldInfo.second) {
1273         AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first,
1274                                   DeleteExprLoc.second);
1275       }
1276     }
1277   }
1278 
1279   // Check we've noticed that we're no longer parsing the initializer for every
1280   // variable. If we miss cases, then at best we have a performance issue and
1281   // at worst a rejects-valid bug.
1282   assert(ParsingInitForAutoVars.empty() &&
1283          "Didn't unmark var as having its initializer parsed");
1284 
1285   if (!PP.isIncrementalProcessingEnabled())
1286     TUScope = nullptr;
1287 }
1288 
1289 
1290 //===----------------------------------------------------------------------===//
1291 // Helper functions.
1292 //===----------------------------------------------------------------------===//
1293 
1294 DeclContext *Sema::getFunctionLevelDeclContext() {
1295   DeclContext *DC = CurContext;
1296 
1297   while (true) {
1298     if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC) ||
1299         isa<RequiresExprBodyDecl>(DC)) {
1300       DC = DC->getParent();
1301     } else if (isa<CXXMethodDecl>(DC) &&
1302                cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1303                cast<CXXRecordDecl>(DC->getParent())->isLambda()) {
1304       DC = DC->getParent()->getParent();
1305     }
1306     else break;
1307   }
1308 
1309   return DC;
1310 }
1311 
1312 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
1313 /// to the function decl for the function being parsed.  If we're currently
1314 /// in a 'block', this returns the containing context.
1315 FunctionDecl *Sema::getCurFunctionDecl() {
1316   DeclContext *DC = getFunctionLevelDeclContext();
1317   return dyn_cast<FunctionDecl>(DC);
1318 }
1319 
1320 ObjCMethodDecl *Sema::getCurMethodDecl() {
1321   DeclContext *DC = getFunctionLevelDeclContext();
1322   while (isa<RecordDecl>(DC))
1323     DC = DC->getParent();
1324   return dyn_cast<ObjCMethodDecl>(DC);
1325 }
1326 
1327 NamedDecl *Sema::getCurFunctionOrMethodDecl() {
1328   DeclContext *DC = getFunctionLevelDeclContext();
1329   if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1330     return cast<NamedDecl>(DC);
1331   return nullptr;
1332 }
1333 
1334 LangAS Sema::getDefaultCXXMethodAddrSpace() const {
1335   if (getLangOpts().OpenCL)
1336     return LangAS::opencl_generic;
1337   return LangAS::Default;
1338 }
1339 
1340 void Sema::EmitCurrentDiagnostic(unsigned DiagID) {
1341   // FIXME: It doesn't make sense to me that DiagID is an incoming argument here
1342   // and yet we also use the current diag ID on the DiagnosticsEngine. This has
1343   // been made more painfully obvious by the refactor that introduced this
1344   // function, but it is possible that the incoming argument can be
1345   // eliminated. If it truly cannot be (for example, there is some reentrancy
1346   // issue I am not seeing yet), then there should at least be a clarifying
1347   // comment somewhere.
1348   if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) {
1349     switch (DiagnosticIDs::getDiagnosticSFINAEResponse(
1350               Diags.getCurrentDiagID())) {
1351     case DiagnosticIDs::SFINAE_Report:
1352       // We'll report the diagnostic below.
1353       break;
1354 
1355     case DiagnosticIDs::SFINAE_SubstitutionFailure:
1356       // Count this failure so that we know that template argument deduction
1357       // has failed.
1358       ++NumSFINAEErrors;
1359 
1360       // Make a copy of this suppressed diagnostic and store it with the
1361       // template-deduction information.
1362       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1363         Diagnostic DiagInfo(&Diags);
1364         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1365                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1366       }
1367 
1368       Diags.setLastDiagnosticIgnored(true);
1369       Diags.Clear();
1370       return;
1371 
1372     case DiagnosticIDs::SFINAE_AccessControl: {
1373       // Per C++ Core Issue 1170, access control is part of SFINAE.
1374       // Additionally, the AccessCheckingSFINAE flag can be used to temporarily
1375       // make access control a part of SFINAE for the purposes of checking
1376       // type traits.
1377       if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11)
1378         break;
1379 
1380       SourceLocation Loc = Diags.getCurrentDiagLoc();
1381 
1382       // Suppress this diagnostic.
1383       ++NumSFINAEErrors;
1384 
1385       // Make a copy of this suppressed diagnostic and store it with the
1386       // template-deduction information.
1387       if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1388         Diagnostic DiagInfo(&Diags);
1389         (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1390                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1391       }
1392 
1393       Diags.setLastDiagnosticIgnored(true);
1394       Diags.Clear();
1395 
1396       // Now the diagnostic state is clear, produce a C++98 compatibility
1397       // warning.
1398       Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1399 
1400       // The last diagnostic which Sema produced was ignored. Suppress any
1401       // notes attached to it.
1402       Diags.setLastDiagnosticIgnored(true);
1403       return;
1404     }
1405 
1406     case DiagnosticIDs::SFINAE_Suppress:
1407       // Make a copy of this suppressed diagnostic and store it with the
1408       // template-deduction information;
1409       if (*Info) {
1410         Diagnostic DiagInfo(&Diags);
1411         (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
1412                        PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1413       }
1414 
1415       // Suppress this diagnostic.
1416       Diags.setLastDiagnosticIgnored(true);
1417       Diags.Clear();
1418       return;
1419     }
1420   }
1421 
1422   // Copy the diagnostic printing policy over the ASTContext printing policy.
1423   // TODO: Stop doing that.  See: https://reviews.llvm.org/D45093#1090292
1424   Context.setPrintingPolicy(getPrintingPolicy());
1425 
1426   // Emit the diagnostic.
1427   if (!Diags.EmitCurrentDiagnostic())
1428     return;
1429 
1430   // If this is not a note, and we're in a template instantiation
1431   // that is different from the last template instantiation where
1432   // we emitted an error, print a template instantiation
1433   // backtrace.
1434   if (!DiagnosticIDs::isBuiltinNote(DiagID))
1435     PrintContextStack();
1436 }
1437 
1438 Sema::SemaDiagnosticBuilder
1439 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
1440   SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
1441   PD.Emit(Builder);
1442 
1443   return Builder;
1444 }
1445 
1446 // Print notes showing how we can reach FD starting from an a priori
1447 // known-callable function.
1448 static void emitCallStackNotes(Sema &S, FunctionDecl *FD) {
1449   auto FnIt = S.DeviceKnownEmittedFns.find(FD);
1450   while (FnIt != S.DeviceKnownEmittedFns.end()) {
1451     // Respect error limit.
1452     if (S.Diags.hasFatalErrorOccurred())
1453       return;
1454     DiagnosticBuilder Builder(
1455         S.Diags.Report(FnIt->second.Loc, diag::note_called_by));
1456     Builder << FnIt->second.FD;
1457     FnIt = S.DeviceKnownEmittedFns.find(FnIt->second.FD);
1458   }
1459 }
1460 
1461 namespace {
1462 
1463 /// Helper class that emits deferred diagnostic messages if an entity directly
1464 /// or indirectly using the function that causes the deferred diagnostic
1465 /// messages is known to be emitted.
1466 ///
1467 /// During parsing of AST, certain diagnostic messages are recorded as deferred
1468 /// diagnostics since it is unknown whether the functions containing such
1469 /// diagnostics will be emitted. A list of potentially emitted functions and
1470 /// variables that may potentially trigger emission of functions are also
1471 /// recorded. DeferredDiagnosticsEmitter recursively visits used functions
1472 /// by each function to emit deferred diagnostics.
1473 ///
1474 /// During the visit, certain OpenMP directives or initializer of variables
1475 /// with certain OpenMP attributes will cause subsequent visiting of any
1476 /// functions enter a state which is called OpenMP device context in this
1477 /// implementation. The state is exited when the directive or initializer is
1478 /// exited. This state can change the emission states of subsequent uses
1479 /// of functions.
1480 ///
1481 /// Conceptually the functions or variables to be visited form a use graph
1482 /// where the parent node uses the child node. At any point of the visit,
1483 /// the tree nodes traversed from the tree root to the current node form a use
1484 /// stack. The emission state of the current node depends on two factors:
1485 ///    1. the emission state of the root node
1486 ///    2. whether the current node is in OpenMP device context
1487 /// If the function is decided to be emitted, its contained deferred diagnostics
1488 /// are emitted, together with the information about the use stack.
1489 ///
1490 class DeferredDiagnosticsEmitter
1491     : public UsedDeclVisitor<DeferredDiagnosticsEmitter> {
1492 public:
1493   typedef UsedDeclVisitor<DeferredDiagnosticsEmitter> Inherited;
1494 
1495   // Whether the function is already in the current use-path.
1496   llvm::SmallPtrSet<CanonicalDeclPtr<Decl>, 4> InUsePath;
1497 
1498   // The current use-path.
1499   llvm::SmallVector<CanonicalDeclPtr<FunctionDecl>, 4> UsePath;
1500 
1501   // Whether the visiting of the function has been done. Done[0] is for the
1502   // case not in OpenMP device context. Done[1] is for the case in OpenMP
1503   // device context. We need two sets because diagnostics emission may be
1504   // different depending on whether it is in OpenMP device context.
1505   llvm::SmallPtrSet<CanonicalDeclPtr<Decl>, 4> DoneMap[2];
1506 
1507   // Emission state of the root node of the current use graph.
1508   bool ShouldEmitRootNode;
1509 
1510   // Current OpenMP device context level. It is initialized to 0 and each
1511   // entering of device context increases it by 1 and each exit decreases
1512   // it by 1. Non-zero value indicates it is currently in device context.
1513   unsigned InOMPDeviceContext;
1514 
1515   DeferredDiagnosticsEmitter(Sema &S)
1516       : Inherited(S), ShouldEmitRootNode(false), InOMPDeviceContext(0) {}
1517 
1518   void VisitOMPTargetDirective(OMPTargetDirective *Node) {
1519     ++InOMPDeviceContext;
1520     Inherited::VisitOMPTargetDirective(Node);
1521     --InOMPDeviceContext;
1522   }
1523 
1524   void visitUsedDecl(SourceLocation Loc, Decl *D) {
1525     if (isa<VarDecl>(D))
1526       return;
1527     if (auto *FD = dyn_cast<FunctionDecl>(D))
1528       checkFunc(Loc, FD);
1529     else
1530       Inherited::visitUsedDecl(Loc, D);
1531   }
1532 
1533   void checkVar(VarDecl *VD) {
1534     assert(VD->isFileVarDecl() &&
1535            "Should only check file-scope variables");
1536     if (auto *Init = VD->getInit()) {
1537       auto DevTy = OMPDeclareTargetDeclAttr::getDeviceType(VD);
1538       bool IsDev = DevTy && (*DevTy == OMPDeclareTargetDeclAttr::DT_NoHost ||
1539                              *DevTy == OMPDeclareTargetDeclAttr::DT_Any);
1540       if (IsDev)
1541         ++InOMPDeviceContext;
1542       this->Visit(Init);
1543       if (IsDev)
1544         --InOMPDeviceContext;
1545     }
1546   }
1547 
1548   void checkFunc(SourceLocation Loc, FunctionDecl *FD) {
1549     auto &Done = DoneMap[InOMPDeviceContext > 0 ? 1 : 0];
1550     FunctionDecl *Caller = UsePath.empty() ? nullptr : UsePath.back();
1551     if ((!ShouldEmitRootNode && !S.getLangOpts().OpenMP && !Caller) ||
1552         S.shouldIgnoreInHostDeviceCheck(FD) || InUsePath.count(FD))
1553       return;
1554     // Finalize analysis of OpenMP-specific constructs.
1555     if (Caller && S.LangOpts.OpenMP && UsePath.size() == 1 &&
1556         (ShouldEmitRootNode || InOMPDeviceContext))
1557       S.finalizeOpenMPDelayedAnalysis(Caller, FD, Loc);
1558     if (Caller)
1559       S.DeviceKnownEmittedFns[FD] = {Caller, Loc};
1560     // Always emit deferred diagnostics for the direct users. This does not
1561     // lead to explosion of diagnostics since each user is visited at most
1562     // twice.
1563     if (ShouldEmitRootNode || InOMPDeviceContext)
1564       emitDeferredDiags(FD, Caller);
1565     // Do not revisit a function if the function body has been completely
1566     // visited before.
1567     if (!Done.insert(FD).second)
1568       return;
1569     InUsePath.insert(FD);
1570     UsePath.push_back(FD);
1571     if (auto *S = FD->getBody()) {
1572       this->Visit(S);
1573     }
1574     UsePath.pop_back();
1575     InUsePath.erase(FD);
1576   }
1577 
1578   void checkRecordedDecl(Decl *D) {
1579     if (auto *FD = dyn_cast<FunctionDecl>(D)) {
1580       ShouldEmitRootNode = S.getEmissionStatus(FD, /*Final=*/true) ==
1581                            Sema::FunctionEmissionStatus::Emitted;
1582       checkFunc(SourceLocation(), FD);
1583     } else
1584       checkVar(cast<VarDecl>(D));
1585   }
1586 
1587   // Emit any deferred diagnostics for FD
1588   void emitDeferredDiags(FunctionDecl *FD, bool ShowCallStack) {
1589     auto It = S.DeviceDeferredDiags.find(FD);
1590     if (It == S.DeviceDeferredDiags.end())
1591       return;
1592     bool HasWarningOrError = false;
1593     bool FirstDiag = true;
1594     for (PartialDiagnosticAt &PDAt : It->second) {
1595       // Respect error limit.
1596       if (S.Diags.hasFatalErrorOccurred())
1597         return;
1598       const SourceLocation &Loc = PDAt.first;
1599       const PartialDiagnostic &PD = PDAt.second;
1600       HasWarningOrError |=
1601           S.getDiagnostics().getDiagnosticLevel(PD.getDiagID(), Loc) >=
1602           DiagnosticsEngine::Warning;
1603       {
1604         DiagnosticBuilder Builder(S.Diags.Report(Loc, PD.getDiagID()));
1605         PD.Emit(Builder);
1606       }
1607       // Emit the note on the first diagnostic in case too many diagnostics
1608       // cause the note not emitted.
1609       if (FirstDiag && HasWarningOrError && ShowCallStack) {
1610         emitCallStackNotes(S, FD);
1611         FirstDiag = false;
1612       }
1613     }
1614   }
1615 };
1616 } // namespace
1617 
1618 void Sema::emitDeferredDiags() {
1619   if (ExternalSource)
1620     ExternalSource->ReadDeclsToCheckForDeferredDiags(
1621         DeclsToCheckForDeferredDiags);
1622 
1623   if ((DeviceDeferredDiags.empty() && !LangOpts.OpenMP) ||
1624       DeclsToCheckForDeferredDiags.empty())
1625     return;
1626 
1627   DeferredDiagnosticsEmitter DDE(*this);
1628   for (auto D : DeclsToCheckForDeferredDiags)
1629     DDE.checkRecordedDecl(D);
1630 }
1631 
1632 // In CUDA, there are some constructs which may appear in semantically-valid
1633 // code, but trigger errors if we ever generate code for the function in which
1634 // they appear.  Essentially every construct you're not allowed to use on the
1635 // device falls into this category, because you are allowed to use these
1636 // constructs in a __host__ __device__ function, but only if that function is
1637 // never codegen'ed on the device.
1638 //
1639 // To handle semantic checking for these constructs, we keep track of the set of
1640 // functions we know will be emitted, either because we could tell a priori that
1641 // they would be emitted, or because they were transitively called by a
1642 // known-emitted function.
1643 //
1644 // We also keep a partial call graph of which not-known-emitted functions call
1645 // which other not-known-emitted functions.
1646 //
1647 // When we see something which is illegal if the current function is emitted
1648 // (usually by way of CUDADiagIfDeviceCode, CUDADiagIfHostCode, or
1649 // CheckCUDACall), we first check if the current function is known-emitted.  If
1650 // so, we immediately output the diagnostic.
1651 //
1652 // Otherwise, we "defer" the diagnostic.  It sits in Sema::DeviceDeferredDiags
1653 // until we discover that the function is known-emitted, at which point we take
1654 // it out of this map and emit the diagnostic.
1655 
1656 Sema::DeviceDiagBuilder::DeviceDiagBuilder(Kind K, SourceLocation Loc,
1657                                            unsigned DiagID, FunctionDecl *Fn,
1658                                            Sema &S)
1659     : S(S), Loc(Loc), DiagID(DiagID), Fn(Fn),
1660       ShowCallStack(K == K_ImmediateWithCallStack || K == K_Deferred) {
1661   switch (K) {
1662   case K_Nop:
1663     break;
1664   case K_Immediate:
1665   case K_ImmediateWithCallStack:
1666     ImmediateDiag.emplace(S.Diag(Loc, DiagID));
1667     break;
1668   case K_Deferred:
1669     assert(Fn && "Must have a function to attach the deferred diag to.");
1670     auto &Diags = S.DeviceDeferredDiags[Fn];
1671     PartialDiagId.emplace(Diags.size());
1672     Diags.emplace_back(Loc, S.PDiag(DiagID));
1673     break;
1674   }
1675 }
1676 
1677 Sema::DeviceDiagBuilder::DeviceDiagBuilder(DeviceDiagBuilder &&D)
1678     : S(D.S), Loc(D.Loc), DiagID(D.DiagID), Fn(D.Fn),
1679       ShowCallStack(D.ShowCallStack), ImmediateDiag(D.ImmediateDiag),
1680       PartialDiagId(D.PartialDiagId) {
1681   // Clean the previous diagnostics.
1682   D.ShowCallStack = false;
1683   D.ImmediateDiag.reset();
1684   D.PartialDiagId.reset();
1685 }
1686 
1687 Sema::DeviceDiagBuilder::~DeviceDiagBuilder() {
1688   if (ImmediateDiag) {
1689     // Emit our diagnostic and, if it was a warning or error, output a callstack
1690     // if Fn isn't a priori known-emitted.
1691     bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel(
1692                                 DiagID, Loc) >= DiagnosticsEngine::Warning;
1693     ImmediateDiag.reset(); // Emit the immediate diag.
1694     if (IsWarningOrError && ShowCallStack)
1695       emitCallStackNotes(S, Fn);
1696   } else {
1697     assert((!PartialDiagId || ShowCallStack) &&
1698            "Must always show call stack for deferred diags.");
1699   }
1700 }
1701 
1702 Sema::DeviceDiagBuilder Sema::targetDiag(SourceLocation Loc, unsigned DiagID) {
1703   if (LangOpts.OpenMP)
1704     return LangOpts.OpenMPIsDevice ? diagIfOpenMPDeviceCode(Loc, DiagID)
1705                                    : diagIfOpenMPHostCode(Loc, DiagID);
1706   if (getLangOpts().CUDA)
1707     return getLangOpts().CUDAIsDevice ? CUDADiagIfDeviceCode(Loc, DiagID)
1708                                       : CUDADiagIfHostCode(Loc, DiagID);
1709 
1710   if (getLangOpts().SYCLIsDevice)
1711     return SYCLDiagIfDeviceCode(Loc, DiagID);
1712 
1713   return DeviceDiagBuilder(DeviceDiagBuilder::K_Immediate, Loc, DiagID,
1714                            getCurFunctionDecl(), *this);
1715 }
1716 
1717 void Sema::checkDeviceDecl(const ValueDecl *D, SourceLocation Loc) {
1718   if (isUnevaluatedContext())
1719     return;
1720 
1721   Decl *C = cast<Decl>(getCurLexicalContext());
1722 
1723   // Memcpy operations for structs containing a member with unsupported type
1724   // are ok, though.
1725   if (const auto *MD = dyn_cast<CXXMethodDecl>(C)) {
1726     if ((MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator()) &&
1727         MD->isTrivial())
1728       return;
1729 
1730     if (const auto *Ctor = dyn_cast<CXXConstructorDecl>(MD))
1731       if (Ctor->isCopyOrMoveConstructor() && Ctor->isTrivial())
1732         return;
1733   }
1734 
1735   auto CheckType = [&](QualType Ty) {
1736     if (Ty->isDependentType())
1737       return;
1738 
1739     if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) ||
1740         ((Ty->isFloat128Type() ||
1741           (Ty->isRealFloatingType() && Context.getTypeSize(Ty) == 128)) &&
1742          !Context.getTargetInfo().hasFloat128Type()) ||
1743         (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 &&
1744          !Context.getTargetInfo().hasInt128Type())) {
1745       targetDiag(Loc, diag::err_device_unsupported_type)
1746           << D << static_cast<unsigned>(Context.getTypeSize(Ty)) << Ty
1747           << Context.getTargetInfo().getTriple().str();
1748       targetDiag(D->getLocation(), diag::note_defined_here) << D;
1749     }
1750   };
1751 
1752   QualType Ty = D->getType();
1753   CheckType(Ty);
1754 
1755   if (const auto *FPTy = dyn_cast<FunctionProtoType>(Ty)) {
1756     for (const auto &ParamTy : FPTy->param_types())
1757       CheckType(ParamTy);
1758     CheckType(FPTy->getReturnType());
1759   }
1760 }
1761 
1762 /// Looks through the macro-expansion chain for the given
1763 /// location, looking for a macro expansion with the given name.
1764 /// If one is found, returns true and sets the location to that
1765 /// expansion loc.
1766 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) {
1767   SourceLocation loc = locref;
1768   if (!loc.isMacroID()) return false;
1769 
1770   // There's no good way right now to look at the intermediate
1771   // expansions, so just jump to the expansion location.
1772   loc = getSourceManager().getExpansionLoc(loc);
1773 
1774   // If that's written with the name, stop here.
1775   SmallVector<char, 16> buffer;
1776   if (getPreprocessor().getSpelling(loc, buffer) == name) {
1777     locref = loc;
1778     return true;
1779   }
1780   return false;
1781 }
1782 
1783 /// Determines the active Scope associated with the given declaration
1784 /// context.
1785 ///
1786 /// This routine maps a declaration context to the active Scope object that
1787 /// represents that declaration context in the parser. It is typically used
1788 /// from "scope-less" code (e.g., template instantiation, lazy creation of
1789 /// declarations) that injects a name for name-lookup purposes and, therefore,
1790 /// must update the Scope.
1791 ///
1792 /// \returns The scope corresponding to the given declaraion context, or NULL
1793 /// if no such scope is open.
1794 Scope *Sema::getScopeForContext(DeclContext *Ctx) {
1795 
1796   if (!Ctx)
1797     return nullptr;
1798 
1799   Ctx = Ctx->getPrimaryContext();
1800   for (Scope *S = getCurScope(); S; S = S->getParent()) {
1801     // Ignore scopes that cannot have declarations. This is important for
1802     // out-of-line definitions of static class members.
1803     if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
1804       if (DeclContext *Entity = S->getEntity())
1805         if (Ctx == Entity->getPrimaryContext())
1806           return S;
1807   }
1808 
1809   return nullptr;
1810 }
1811 
1812 /// Enter a new function scope
1813 void Sema::PushFunctionScope() {
1814   if (FunctionScopes.empty() && CachedFunctionScope) {
1815     // Use CachedFunctionScope to avoid allocating memory when possible.
1816     CachedFunctionScope->Clear();
1817     FunctionScopes.push_back(CachedFunctionScope.release());
1818   } else {
1819     FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
1820   }
1821   if (LangOpts.OpenMP)
1822     pushOpenMPFunctionRegion();
1823 }
1824 
1825 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
1826   FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
1827                                               BlockScope, Block));
1828 }
1829 
1830 LambdaScopeInfo *Sema::PushLambdaScope() {
1831   LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics());
1832   FunctionScopes.push_back(LSI);
1833   return LSI;
1834 }
1835 
1836 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) {
1837   if (LambdaScopeInfo *const LSI = getCurLambda()) {
1838     LSI->AutoTemplateParameterDepth = Depth;
1839     return;
1840   }
1841   llvm_unreachable(
1842       "Remove assertion if intentionally called in a non-lambda context.");
1843 }
1844 
1845 // Check that the type of the VarDecl has an accessible copy constructor and
1846 // resolve its destructor's exception specification.
1847 static void checkEscapingByref(VarDecl *VD, Sema &S) {
1848   QualType T = VD->getType();
1849   EnterExpressionEvaluationContext scope(
1850       S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
1851   SourceLocation Loc = VD->getLocation();
1852   Expr *VarRef =
1853       new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc);
1854   ExprResult Result = S.PerformMoveOrCopyInitialization(
1855       InitializedEntity::InitializeBlock(Loc, T, false), VD, VD->getType(),
1856       VarRef, /*AllowNRVO=*/true);
1857   if (!Result.isInvalid()) {
1858     Result = S.MaybeCreateExprWithCleanups(Result);
1859     Expr *Init = Result.getAs<Expr>();
1860     S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init));
1861   }
1862 
1863   // The destructor's exception specification is needed when IRGen generates
1864   // block copy/destroy functions. Resolve it here.
1865   if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1866     if (CXXDestructorDecl *DD = RD->getDestructor()) {
1867       auto *FPT = DD->getType()->getAs<FunctionProtoType>();
1868       S.ResolveExceptionSpec(Loc, FPT);
1869     }
1870 }
1871 
1872 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) {
1873   // Set the EscapingByref flag of __block variables captured by
1874   // escaping blocks.
1875   for (const BlockDecl *BD : FSI.Blocks) {
1876     for (const BlockDecl::Capture &BC : BD->captures()) {
1877       VarDecl *VD = BC.getVariable();
1878       if (VD->hasAttr<BlocksAttr>()) {
1879         // Nothing to do if this is a __block variable captured by a
1880         // non-escaping block.
1881         if (BD->doesNotEscape())
1882           continue;
1883         VD->setEscapingByref();
1884       }
1885       // Check whether the captured variable is or contains an object of
1886       // non-trivial C union type.
1887       QualType CapType = BC.getVariable()->getType();
1888       if (CapType.hasNonTrivialToPrimitiveDestructCUnion() ||
1889           CapType.hasNonTrivialToPrimitiveCopyCUnion())
1890         S.checkNonTrivialCUnion(BC.getVariable()->getType(),
1891                                 BD->getCaretLocation(),
1892                                 Sema::NTCUC_BlockCapture,
1893                                 Sema::NTCUK_Destruct|Sema::NTCUK_Copy);
1894     }
1895   }
1896 
1897   for (VarDecl *VD : FSI.ByrefBlockVars) {
1898     // __block variables might require us to capture a copy-initializer.
1899     if (!VD->isEscapingByref())
1900       continue;
1901     // It's currently invalid to ever have a __block variable with an
1902     // array type; should we diagnose that here?
1903     // Regardless, we don't want to ignore array nesting when
1904     // constructing this copy.
1905     if (VD->getType()->isStructureOrClassType())
1906       checkEscapingByref(VD, S);
1907   }
1908 }
1909 
1910 /// Pop a function (or block or lambda or captured region) scope from the stack.
1911 ///
1912 /// \param WP The warning policy to use for CFG-based warnings, or null if such
1913 ///        warnings should not be produced.
1914 /// \param D The declaration corresponding to this function scope, if producing
1915 ///        CFG-based warnings.
1916 /// \param BlockType The type of the block expression, if D is a BlockDecl.
1917 Sema::PoppedFunctionScopePtr
1918 Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP,
1919                            const Decl *D, QualType BlockType) {
1920   assert(!FunctionScopes.empty() && "mismatched push/pop!");
1921 
1922   markEscapingByrefs(*FunctionScopes.back(), *this);
1923 
1924   PoppedFunctionScopePtr Scope(FunctionScopes.pop_back_val(),
1925                                PoppedFunctionScopeDeleter(this));
1926 
1927   if (LangOpts.OpenMP)
1928     popOpenMPFunctionRegion(Scope.get());
1929 
1930   // Issue any analysis-based warnings.
1931   if (WP && D)
1932     AnalysisWarnings.IssueWarnings(*WP, Scope.get(), D, BlockType);
1933   else
1934     for (const auto &PUD : Scope->PossiblyUnreachableDiags)
1935       Diag(PUD.Loc, PUD.PD);
1936 
1937   return Scope;
1938 }
1939 
1940 void Sema::PoppedFunctionScopeDeleter::
1941 operator()(sema::FunctionScopeInfo *Scope) const {
1942   // Stash the function scope for later reuse if it's for a normal function.
1943   if (Scope->isPlainFunction() && !Self->CachedFunctionScope)
1944     Self->CachedFunctionScope.reset(Scope);
1945   else
1946     delete Scope;
1947 }
1948 
1949 void Sema::PushCompoundScope(bool IsStmtExpr) {
1950   getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr));
1951 }
1952 
1953 void Sema::PopCompoundScope() {
1954   FunctionScopeInfo *CurFunction = getCurFunction();
1955   assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop");
1956 
1957   CurFunction->CompoundScopes.pop_back();
1958 }
1959 
1960 /// Determine whether any errors occurred within this function/method/
1961 /// block.
1962 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
1963   return getCurFunction()->hasUnrecoverableErrorOccurred();
1964 }
1965 
1966 void Sema::setFunctionHasBranchIntoScope() {
1967   if (!FunctionScopes.empty())
1968     FunctionScopes.back()->setHasBranchIntoScope();
1969 }
1970 
1971 void Sema::setFunctionHasBranchProtectedScope() {
1972   if (!FunctionScopes.empty())
1973     FunctionScopes.back()->setHasBranchProtectedScope();
1974 }
1975 
1976 void Sema::setFunctionHasIndirectGoto() {
1977   if (!FunctionScopes.empty())
1978     FunctionScopes.back()->setHasIndirectGoto();
1979 }
1980 
1981 BlockScopeInfo *Sema::getCurBlock() {
1982   if (FunctionScopes.empty())
1983     return nullptr;
1984 
1985   auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back());
1986   if (CurBSI && CurBSI->TheDecl &&
1987       !CurBSI->TheDecl->Encloses(CurContext)) {
1988     // We have switched contexts due to template instantiation.
1989     assert(!CodeSynthesisContexts.empty());
1990     return nullptr;
1991   }
1992 
1993   return CurBSI;
1994 }
1995 
1996 FunctionScopeInfo *Sema::getEnclosingFunction() const {
1997   if (FunctionScopes.empty())
1998     return nullptr;
1999 
2000   for (int e = FunctionScopes.size() - 1; e >= 0; --e) {
2001     if (isa<sema::BlockScopeInfo>(FunctionScopes[e]))
2002       continue;
2003     return FunctionScopes[e];
2004   }
2005   return nullptr;
2006 }
2007 
2008 LambdaScopeInfo *Sema::getEnclosingLambda() const {
2009   for (auto *Scope : llvm::reverse(FunctionScopes)) {
2010     if (auto *LSI = dyn_cast<sema::LambdaScopeInfo>(Scope)) {
2011       if (LSI->Lambda && !LSI->Lambda->Encloses(CurContext)) {
2012         // We have switched contexts due to template instantiation.
2013         // FIXME: We should swap out the FunctionScopes during code synthesis
2014         // so that we don't need to check for this.
2015         assert(!CodeSynthesisContexts.empty());
2016         return nullptr;
2017       }
2018       return LSI;
2019     }
2020   }
2021   return nullptr;
2022 }
2023 
2024 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) {
2025   if (FunctionScopes.empty())
2026     return nullptr;
2027 
2028   auto I = FunctionScopes.rbegin();
2029   if (IgnoreNonLambdaCapturingScope) {
2030     auto E = FunctionScopes.rend();
2031     while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
2032       ++I;
2033     if (I == E)
2034       return nullptr;
2035   }
2036   auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I);
2037   if (CurLSI && CurLSI->Lambda &&
2038       !CurLSI->Lambda->Encloses(CurContext)) {
2039     // We have switched contexts due to template instantiation.
2040     assert(!CodeSynthesisContexts.empty());
2041     return nullptr;
2042   }
2043 
2044   return CurLSI;
2045 }
2046 
2047 // We have a generic lambda if we parsed auto parameters, or we have
2048 // an associated template parameter list.
2049 LambdaScopeInfo *Sema::getCurGenericLambda() {
2050   if (LambdaScopeInfo *LSI =  getCurLambda()) {
2051     return (LSI->TemplateParams.size() ||
2052                     LSI->GLTemplateParameterList) ? LSI : nullptr;
2053   }
2054   return nullptr;
2055 }
2056 
2057 
2058 void Sema::ActOnComment(SourceRange Comment) {
2059   if (!LangOpts.RetainCommentsFromSystemHeaders &&
2060       SourceMgr.isInSystemHeader(Comment.getBegin()))
2061     return;
2062   RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false);
2063   if (RC.isAlmostTrailingComment()) {
2064     SourceRange MagicMarkerRange(Comment.getBegin(),
2065                                  Comment.getBegin().getLocWithOffset(3));
2066     StringRef MagicMarkerText;
2067     switch (RC.getKind()) {
2068     case RawComment::RCK_OrdinaryBCPL:
2069       MagicMarkerText = "///<";
2070       break;
2071     case RawComment::RCK_OrdinaryC:
2072       MagicMarkerText = "/**<";
2073       break;
2074     default:
2075       llvm_unreachable("if this is an almost Doxygen comment, "
2076                        "it should be ordinary");
2077     }
2078     Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
2079       FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText);
2080   }
2081   Context.addComment(RC);
2082 }
2083 
2084 // Pin this vtable to this file.
2085 ExternalSemaSource::~ExternalSemaSource() {}
2086 char ExternalSemaSource::ID;
2087 
2088 void ExternalSemaSource::ReadMethodPool(Selector Sel) { }
2089 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { }
2090 
2091 void ExternalSemaSource::ReadKnownNamespaces(
2092                            SmallVectorImpl<NamespaceDecl *> &Namespaces) {
2093 }
2094 
2095 void ExternalSemaSource::ReadUndefinedButUsed(
2096     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
2097 
2098 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector<
2099     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {}
2100 
2101 /// Figure out if an expression could be turned into a call.
2102 ///
2103 /// Use this when trying to recover from an error where the programmer may have
2104 /// written just the name of a function instead of actually calling it.
2105 ///
2106 /// \param E - The expression to examine.
2107 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
2108 ///  with no arguments, this parameter is set to the type returned by such a
2109 ///  call; otherwise, it is set to an empty QualType.
2110 /// \param OverloadSet - If the expression is an overloaded function
2111 ///  name, this parameter is populated with the decls of the various overloads.
2112 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
2113                          UnresolvedSetImpl &OverloadSet) {
2114   ZeroArgCallReturnTy = QualType();
2115   OverloadSet.clear();
2116 
2117   const OverloadExpr *Overloads = nullptr;
2118   bool IsMemExpr = false;
2119   if (E.getType() == Context.OverloadTy) {
2120     OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E));
2121 
2122     // Ignore overloads that are pointer-to-member constants.
2123     if (FR.HasFormOfMemberPointer)
2124       return false;
2125 
2126     Overloads = FR.Expression;
2127   } else if (E.getType() == Context.BoundMemberTy) {
2128     Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens());
2129     IsMemExpr = true;
2130   }
2131 
2132   bool Ambiguous = false;
2133   bool IsMV = false;
2134 
2135   if (Overloads) {
2136     for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
2137          DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
2138       OverloadSet.addDecl(*it);
2139 
2140       // Check whether the function is a non-template, non-member which takes no
2141       // arguments.
2142       if (IsMemExpr)
2143         continue;
2144       if (const FunctionDecl *OverloadDecl
2145             = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
2146         if (OverloadDecl->getMinRequiredArguments() == 0) {
2147           if (!ZeroArgCallReturnTy.isNull() && !Ambiguous &&
2148               (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() ||
2149                           OverloadDecl->isCPUSpecificMultiVersion()))) {
2150             ZeroArgCallReturnTy = QualType();
2151             Ambiguous = true;
2152           } else {
2153             ZeroArgCallReturnTy = OverloadDecl->getReturnType();
2154             IsMV = OverloadDecl->isCPUDispatchMultiVersion() ||
2155                    OverloadDecl->isCPUSpecificMultiVersion();
2156           }
2157         }
2158       }
2159     }
2160 
2161     // If it's not a member, use better machinery to try to resolve the call
2162     if (!IsMemExpr)
2163       return !ZeroArgCallReturnTy.isNull();
2164   }
2165 
2166   // Attempt to call the member with no arguments - this will correctly handle
2167   // member templates with defaults/deduction of template arguments, overloads
2168   // with default arguments, etc.
2169   if (IsMemExpr && !E.isTypeDependent()) {
2170     Sema::TentativeAnalysisScope Trap(*this);
2171     ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(),
2172                                              None, SourceLocation());
2173     if (R.isUsable()) {
2174       ZeroArgCallReturnTy = R.get()->getType();
2175       return true;
2176     }
2177     return false;
2178   }
2179 
2180   if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) {
2181     if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
2182       if (Fun->getMinRequiredArguments() == 0)
2183         ZeroArgCallReturnTy = Fun->getReturnType();
2184       return true;
2185     }
2186   }
2187 
2188   // We don't have an expression that's convenient to get a FunctionDecl from,
2189   // but we can at least check if the type is "function of 0 arguments".
2190   QualType ExprTy = E.getType();
2191   const FunctionType *FunTy = nullptr;
2192   QualType PointeeTy = ExprTy->getPointeeType();
2193   if (!PointeeTy.isNull())
2194     FunTy = PointeeTy->getAs<FunctionType>();
2195   if (!FunTy)
2196     FunTy = ExprTy->getAs<FunctionType>();
2197 
2198   if (const FunctionProtoType *FPT =
2199       dyn_cast_or_null<FunctionProtoType>(FunTy)) {
2200     if (FPT->getNumParams() == 0)
2201       ZeroArgCallReturnTy = FunTy->getReturnType();
2202     return true;
2203   }
2204   return false;
2205 }
2206 
2207 /// Give notes for a set of overloads.
2208 ///
2209 /// A companion to tryExprAsCall. In cases when the name that the programmer
2210 /// wrote was an overloaded function, we may be able to make some guesses about
2211 /// plausible overloads based on their return types; such guesses can be handed
2212 /// off to this method to be emitted as notes.
2213 ///
2214 /// \param Overloads - The overloads to note.
2215 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
2216 ///  -fshow-overloads=best, this is the location to attach to the note about too
2217 ///  many candidates. Typically this will be the location of the original
2218 ///  ill-formed expression.
2219 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads,
2220                           const SourceLocation FinalNoteLoc) {
2221   int ShownOverloads = 0;
2222   int SuppressedOverloads = 0;
2223   for (UnresolvedSetImpl::iterator It = Overloads.begin(),
2224        DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
2225     // FIXME: Magic number for max shown overloads stolen from
2226     // OverloadCandidateSet::NoteCandidates.
2227     if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) {
2228       ++SuppressedOverloads;
2229       continue;
2230     }
2231 
2232     NamedDecl *Fn = (*It)->getUnderlyingDecl();
2233     // Don't print overloads for non-default multiversioned functions.
2234     if (const auto *FD = Fn->getAsFunction()) {
2235       if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() &&
2236           !FD->getAttr<TargetAttr>()->isDefaultVersion())
2237         continue;
2238     }
2239     S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);
2240     ++ShownOverloads;
2241   }
2242 
2243   if (SuppressedOverloads)
2244     S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
2245       << SuppressedOverloads;
2246 }
2247 
2248 static void notePlausibleOverloads(Sema &S, SourceLocation Loc,
2249                                    const UnresolvedSetImpl &Overloads,
2250                                    bool (*IsPlausibleResult)(QualType)) {
2251   if (!IsPlausibleResult)
2252     return noteOverloads(S, Overloads, Loc);
2253 
2254   UnresolvedSet<2> PlausibleOverloads;
2255   for (OverloadExpr::decls_iterator It = Overloads.begin(),
2256          DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
2257     const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
2258     QualType OverloadResultTy = OverloadDecl->getReturnType();
2259     if (IsPlausibleResult(OverloadResultTy))
2260       PlausibleOverloads.addDecl(It.getDecl());
2261   }
2262   noteOverloads(S, PlausibleOverloads, Loc);
2263 }
2264 
2265 /// Determine whether the given expression can be called by just
2266 /// putting parentheses after it.  Notably, expressions with unary
2267 /// operators can't be because the unary operator will start parsing
2268 /// outside the call.
2269 static bool IsCallableWithAppend(Expr *E) {
2270   E = E->IgnoreImplicit();
2271   return (!isa<CStyleCastExpr>(E) &&
2272           !isa<UnaryOperator>(E) &&
2273           !isa<BinaryOperator>(E) &&
2274           !isa<CXXOperatorCallExpr>(E));
2275 }
2276 
2277 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) {
2278   if (const auto *UO = dyn_cast<UnaryOperator>(E))
2279     E = UO->getSubExpr();
2280 
2281   if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
2282     if (ULE->getNumDecls() == 0)
2283       return false;
2284 
2285     const NamedDecl *ND = *ULE->decls_begin();
2286     if (const auto *FD = dyn_cast<FunctionDecl>(ND))
2287       return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion();
2288   }
2289   return false;
2290 }
2291 
2292 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
2293                                 bool ForceComplain,
2294                                 bool (*IsPlausibleResult)(QualType)) {
2295   SourceLocation Loc = E.get()->getExprLoc();
2296   SourceRange Range = E.get()->getSourceRange();
2297 
2298   QualType ZeroArgCallTy;
2299   UnresolvedSet<4> Overloads;
2300   if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
2301       !ZeroArgCallTy.isNull() &&
2302       (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
2303     // At this point, we know E is potentially callable with 0
2304     // arguments and that it returns something of a reasonable type,
2305     // so we can emit a fixit and carry on pretending that E was
2306     // actually a CallExpr.
2307     SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
2308     bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2309     Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range
2310                   << (IsCallableWithAppend(E.get())
2311                           ? FixItHint::CreateInsertion(ParenInsertionLoc, "()")
2312                           : FixItHint());
2313     if (!IsMV)
2314       notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2315 
2316     // FIXME: Try this before emitting the fixit, and suppress diagnostics
2317     // while doing so.
2318     E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None,
2319                       Range.getEnd().getLocWithOffset(1));
2320     return true;
2321   }
2322 
2323   if (!ForceComplain) return false;
2324 
2325   bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2326   Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range;
2327   if (!IsMV)
2328     notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2329   E = ExprError();
2330   return true;
2331 }
2332 
2333 IdentifierInfo *Sema::getSuperIdentifier() const {
2334   if (!Ident_super)
2335     Ident_super = &Context.Idents.get("super");
2336   return Ident_super;
2337 }
2338 
2339 IdentifierInfo *Sema::getFloat128Identifier() const {
2340   if (!Ident___float128)
2341     Ident___float128 = &Context.Idents.get("__float128");
2342   return Ident___float128;
2343 }
2344 
2345 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD,
2346                                    CapturedRegionKind K,
2347                                    unsigned OpenMPCaptureLevel) {
2348   auto *CSI = new CapturedRegionScopeInfo(
2349       getDiagnostics(), S, CD, RD, CD->getContextParam(), K,
2350       (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0,
2351       OpenMPCaptureLevel);
2352   CSI->ReturnType = Context.VoidTy;
2353   FunctionScopes.push_back(CSI);
2354 }
2355 
2356 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() {
2357   if (FunctionScopes.empty())
2358     return nullptr;
2359 
2360   return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back());
2361 }
2362 
2363 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
2364 Sema::getMismatchingDeleteExpressions() const {
2365   return DeleteExprs;
2366 }
2367 
2368 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) {
2369   if (ExtStr.empty())
2370     return;
2371   llvm::SmallVector<StringRef, 1> Exts;
2372   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2373   auto CanT = T.getCanonicalType().getTypePtr();
2374   for (auto &I : Exts)
2375     OpenCLTypeExtMap[CanT].insert(I.str());
2376 }
2377 
2378 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) {
2379   llvm::SmallVector<StringRef, 1> Exts;
2380   ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2381   if (Exts.empty())
2382     return;
2383   for (auto &I : Exts)
2384     OpenCLDeclExtMap[FD].insert(I.str());
2385 }
2386 
2387 void Sema::setCurrentOpenCLExtensionForType(QualType T) {
2388   if (CurrOpenCLExtension.empty())
2389     return;
2390   setOpenCLExtensionForType(T, CurrOpenCLExtension);
2391 }
2392 
2393 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) {
2394   if (CurrOpenCLExtension.empty())
2395     return;
2396   setOpenCLExtensionForDecl(D, CurrOpenCLExtension);
2397 }
2398 
2399 std::string Sema::getOpenCLExtensionsFromDeclExtMap(FunctionDecl *FD) {
2400   if (!OpenCLDeclExtMap.empty())
2401     return getOpenCLExtensionsFromExtMap(FD, OpenCLDeclExtMap);
2402 
2403   return "";
2404 }
2405 
2406 std::string Sema::getOpenCLExtensionsFromTypeExtMap(FunctionType *FT) {
2407   if (!OpenCLTypeExtMap.empty())
2408     return getOpenCLExtensionsFromExtMap(FT, OpenCLTypeExtMap);
2409 
2410   return "";
2411 }
2412 
2413 template <typename T, typename MapT>
2414 std::string Sema::getOpenCLExtensionsFromExtMap(T *FDT, MapT &Map) {
2415   auto Loc = Map.find(FDT);
2416   return llvm::join(Loc->second, " ");
2417 }
2418 
2419 bool Sema::isOpenCLDisabledDecl(Decl *FD) {
2420   auto Loc = OpenCLDeclExtMap.find(FD);
2421   if (Loc == OpenCLDeclExtMap.end())
2422     return false;
2423   for (auto &I : Loc->second) {
2424     if (!getOpenCLOptions().isEnabled(I))
2425       return true;
2426   }
2427   return false;
2428 }
2429 
2430 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT>
2431 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
2432                                          DiagInfoT DiagInfo, MapT &Map,
2433                                          unsigned Selector,
2434                                          SourceRange SrcRange) {
2435   auto Loc = Map.find(D);
2436   if (Loc == Map.end())
2437     return false;
2438   bool Disabled = false;
2439   for (auto &I : Loc->second) {
2440     if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) {
2441       Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
2442                                                          << I << SrcRange;
2443       Disabled = true;
2444     }
2445   }
2446   return Disabled;
2447 }
2448 
2449 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) {
2450   // Check extensions for declared types.
2451   Decl *Decl = nullptr;
2452   if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr()))
2453     Decl = TypedefT->getDecl();
2454   if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr()))
2455     Decl = TagT->getDecl();
2456   auto Loc = DS.getTypeSpecTypeLoc();
2457 
2458   // Check extensions for vector types.
2459   // e.g. double4 is not allowed when cl_khr_fp64 is absent.
2460   if (QT->isExtVectorType()) {
2461     auto TypePtr = QT->castAs<ExtVectorType>()->getElementType().getTypePtr();
2462     return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap);
2463   }
2464 
2465   if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
2466     return true;
2467 
2468   // Check extensions for builtin types.
2469   return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc,
2470                                        QT, OpenCLTypeExtMap);
2471 }
2472 
2473 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) {
2474   IdentifierInfo *FnName = D.getIdentifier();
2475   return checkOpenCLDisabledTypeOrDecl(&D, E.getBeginLoc(), FnName,
2476                                        OpenCLDeclExtMap, 1, D.getSourceRange());
2477 }
2478