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