xref: /llvm-project-15.0.7/clang/lib/Sema/Sema.cpp (revision 84fffa67)
1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the actions class which performs semantic analysis and
10 // builds an AST out of a parse stream.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "UsedDeclVisitor.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/ASTDiagnostic.h"
17 #include "clang/AST/DeclCXX.h"
18 #include "clang/AST/DeclFriend.h"
19 #include "clang/AST/DeclObjC.h"
20 #include "clang/AST/Expr.h"
21 #include "clang/AST/ExprCXX.h"
22 #include "clang/AST/PrettyDeclStackTrace.h"
23 #include "clang/AST/StmtCXX.h"
24 #include "clang/Basic/DiagnosticOptions.h"
25 #include "clang/Basic/PartialDiagnostic.h"
26 #include "clang/Basic/SourceManager.h"
27 #include "clang/Basic/Stack.h"
28 #include "clang/Basic/TargetInfo.h"
29 #include "clang/Lex/HeaderSearch.h"
30 #include "clang/Lex/Preprocessor.h"
31 #include "clang/Sema/CXXFieldCollector.h"
32 #include "clang/Sema/DelayedDiagnostic.h"
33 #include "clang/Sema/ExternalSemaSource.h"
34 #include "clang/Sema/Initialization.h"
35 #include "clang/Sema/MultiplexExternalSemaSource.h"
36 #include "clang/Sema/ObjCMethodList.h"
37 #include "clang/Sema/Scope.h"
38 #include "clang/Sema/ScopeInfo.h"
39 #include "clang/Sema/SemaConsumer.h"
40 #include "clang/Sema/SemaInternal.h"
41 #include "clang/Sema/TemplateDeduction.h"
42 #include "clang/Sema/TemplateInstCallback.h"
43 #include "clang/Sema/TypoCorrection.h"
44 #include "llvm/ADT/DenseMap.h"
45 #include "llvm/ADT/SmallPtrSet.h"
46 #include "llvm/Support/TimeProfiler.h"
47 
48 using namespace clang;
49 using namespace sema;
50 
51 SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) {
52   return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts);
53 }
54 
55 ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); }
56 
57 IdentifierInfo *
58 Sema::InventAbbreviatedTemplateParameterTypeName(IdentifierInfo *ParamName,
59                                                  unsigned int Index) {
60   std::string InventedName;
61   llvm::raw_string_ostream OS(InventedName);
62 
63   if (!ParamName)
64     OS << "auto:" << Index + 1;
65   else
66     OS << ParamName->getName() << ":auto";
67 
68   OS.flush();
69   return &Context.Idents.get(OS.str());
70 }
71 
72 PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context,
73                                        const Preprocessor &PP) {
74   PrintingPolicy Policy = Context.getPrintingPolicy();
75   // In diagnostics, we print _Bool as bool if the latter is defined as the
76   // former.
77   Policy.Bool = Context.getLangOpts().Bool;
78   if (!Policy.Bool) {
79     if (const MacroInfo *BoolMacro = PP.getMacroInfo(Context.getBoolName())) {
80       Policy.Bool = BoolMacro->isObjectLike() &&
81                     BoolMacro->getNumTokens() == 1 &&
82                     BoolMacro->getReplacementToken(0).is(tok::kw__Bool);
83     }
84   }
85 
86   return Policy;
87 }
88 
89 void Sema::ActOnTranslationUnitScope(Scope *S) {
90   TUScope = S;
91   PushDeclContext(S, Context.getTranslationUnitDecl());
92 }
93 
94 namespace clang {
95 namespace sema {
96 
97 class SemaPPCallbacks : public PPCallbacks {
98   Sema *S = nullptr;
99   llvm::SmallVector<SourceLocation, 8> IncludeStack;
100 
101 public:
102   void set(Sema &S) { this->S = &S; }
103 
104   void reset() { S = nullptr; }
105 
106   virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
107                            SrcMgr::CharacteristicKind FileType,
108                            FileID PrevFID) override {
109     if (!S)
110       return;
111     switch (Reason) {
112     case EnterFile: {
113       SourceManager &SM = S->getSourceManager();
114       SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc));
115       if (IncludeLoc.isValid()) {
116         if (llvm::timeTraceProfilerEnabled()) {
117           const FileEntry *FE = SM.getFileEntryForID(SM.getFileID(Loc));
118           llvm::timeTraceProfilerBegin(
119               "Source", FE != nullptr ? FE->getName() : StringRef("<unknown>"));
120         }
121 
122         IncludeStack.push_back(IncludeLoc);
123         S->DiagnoseNonDefaultPragmaPack(
124             Sema::PragmaPackDiagnoseKind::NonDefaultStateAtInclude, IncludeLoc);
125       }
126       break;
127     }
128     case ExitFile:
129       if (!IncludeStack.empty()) {
130         if (llvm::timeTraceProfilerEnabled())
131           llvm::timeTraceProfilerEnd();
132 
133         S->DiagnoseNonDefaultPragmaPack(
134             Sema::PragmaPackDiagnoseKind::ChangedStateAtExit,
135             IncludeStack.pop_back_val());
136       }
137       break;
138     default:
139       break;
140     }
141   }
142 };
143 
144 } // end namespace sema
145 } // end namespace clang
146 
147 const unsigned Sema::MaxAlignmentExponent;
148 const unsigned Sema::MaximumAlignment;
149 
150 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
151            TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter)
152     : ExternalSource(nullptr), isMultiplexExternalSource(false),
153       CurFPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp),
154       Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()),
155       SourceMgr(PP.getSourceManager()), CollectStats(false),
156       CodeCompleter(CodeCompleter), CurContext(nullptr),
157       OriginalLexicalContext(nullptr), MSStructPragmaOn(false),
158       MSPointerToMemberRepresentationMethod(
159           LangOpts.getMSPointerToMemberRepresentationMethod()),
160       VtorDispStack(LangOpts.getVtorDispMode()), PackStack(0),
161       DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr),
162       CodeSegStack(nullptr), FpPragmaStack(FPOptionsOverride()),
163       CurInitSeg(nullptr), VisContext(nullptr),
164       PragmaAttributeCurrentTargetDecl(nullptr),
165       IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr),
166       LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp),
167       StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr),
168       StdCoroutineTraitsCache(nullptr), CXXTypeInfoDecl(nullptr),
169       MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), NSValueDecl(nullptr),
170       NSStringDecl(nullptr), StringWithUTF8StringMethod(nullptr),
171       ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr),
172       ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr),
173       DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false),
174       TUKind(TUKind), NumSFINAEErrors(0),
175       FullyCheckedComparisonCategories(
176           static_cast<unsigned>(ComparisonCategoryType::Last) + 1),
177       SatisfactionCache(Context), AccessCheckingSFINAE(false),
178       InNonInstantiationSFINAEContext(false), NonInstantiationEntries(0),
179       ArgumentPackSubstitutionIndex(-1), CurrentInstantiationScope(nullptr),
180       DisableTypoCorrection(false), TyposCorrected(0), AnalysisWarnings(*this),
181       ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr),
182       CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) {
183   TUScope = nullptr;
184   isConstantEvaluatedOverride = false;
185 
186   LoadedExternalKnownNamespaces = false;
187   for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I)
188     NSNumberLiteralMethods[I] = nullptr;
189 
190   if (getLangOpts().ObjC)
191     NSAPIObj.reset(new NSAPI(Context));
192 
193   if (getLangOpts().CPlusPlus)
194     FieldCollector.reset(new CXXFieldCollector());
195 
196   // Tell diagnostics how to render things from the AST library.
197   Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context);
198 
199   ExprEvalContexts.emplace_back(
200       ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{},
201       nullptr, ExpressionEvaluationContextRecord::EK_Other);
202 
203   // Initialization of data sharing attributes stack for OpenMP
204   InitDataSharingAttributesStack();
205 
206   std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
207       std::make_unique<sema::SemaPPCallbacks>();
208   SemaPPCallbackHandler = Callbacks.get();
209   PP.addPPCallbacks(std::move(Callbacks));
210   SemaPPCallbackHandler->set(*this);
211 }
212 
213 // Anchor Sema's type info to this TU.
214 void Sema::anchor() {}
215 
216 void Sema::addImplicitTypedef(StringRef Name, QualType T) {
217   DeclarationName DN = &Context.Idents.get(Name);
218   if (IdResolver.begin(DN) == IdResolver.end())
219     PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope);
220 }
221 
222 void Sema::Initialize() {
223   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
224     SC->InitializeSema(*this);
225 
226   // Tell the external Sema source about this Sema object.
227   if (ExternalSemaSource *ExternalSema
228       = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
229     ExternalSema->InitializeSema(*this);
230 
231   // This needs to happen after ExternalSemaSource::InitializeSema(this) or we
232   // will not be able to merge any duplicate __va_list_tag decls correctly.
233   VAListTagName = PP.getIdentifierInfo("__va_list_tag");
234 
235   if (!TUScope)
236     return;
237 
238   // Initialize predefined 128-bit integer types, if needed.
239   if (Context.getTargetInfo().hasInt128Type()) {
240     // If either of the 128-bit integer types are unavailable to name lookup,
241     // define them now.
242     DeclarationName Int128 = &Context.Idents.get("__int128_t");
243     if (IdResolver.begin(Int128) == IdResolver.end())
244       PushOnScopeChains(Context.getInt128Decl(), TUScope);
245 
246     DeclarationName UInt128 = &Context.Idents.get("__uint128_t");
247     if (IdResolver.begin(UInt128) == IdResolver.end())
248       PushOnScopeChains(Context.getUInt128Decl(), TUScope);
249   }
250 
251 
252   // Initialize predefined Objective-C types:
253   if (getLangOpts().ObjC) {
254     // If 'SEL' does not yet refer to any declarations, make it refer to the
255     // predefined 'SEL'.
256     DeclarationName SEL = &Context.Idents.get("SEL");
257     if (IdResolver.begin(SEL) == IdResolver.end())
258       PushOnScopeChains(Context.getObjCSelDecl(), TUScope);
259 
260     // If 'id' does not yet refer to any declarations, make it refer to the
261     // predefined 'id'.
262     DeclarationName Id = &Context.Idents.get("id");
263     if (IdResolver.begin(Id) == IdResolver.end())
264       PushOnScopeChains(Context.getObjCIdDecl(), TUScope);
265 
266     // Create the built-in typedef for 'Class'.
267     DeclarationName Class = &Context.Idents.get("Class");
268     if (IdResolver.begin(Class) == IdResolver.end())
269       PushOnScopeChains(Context.getObjCClassDecl(), TUScope);
270 
271     // Create the built-in forward declaratino for 'Protocol'.
272     DeclarationName Protocol = &Context.Idents.get("Protocol");
273     if (IdResolver.begin(Protocol) == IdResolver.end())
274       PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope);
275   }
276 
277   // Create the internal type for the *StringMakeConstantString builtins.
278   DeclarationName ConstantString = &Context.Idents.get("__NSConstantString");
279   if (IdResolver.begin(ConstantString) == IdResolver.end())
280     PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope);
281 
282   // Initialize Microsoft "predefined C++ types".
283   if (getLangOpts().MSVCCompat) {
284     if (getLangOpts().CPlusPlus &&
285         IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end())
286       PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class),
287                         TUScope);
288 
289     addImplicitTypedef("size_t", Context.getSizeType());
290   }
291 
292   // Initialize predefined OpenCL types and supported extensions and (optional)
293   // core features.
294   if (getLangOpts().OpenCL) {
295     getOpenCLOptions().addSupport(
296         Context.getTargetInfo().getSupportedOpenCLOpts());
297     getOpenCLOptions().enableSupportedCore(getLangOpts());
298     addImplicitTypedef("sampler_t", Context.OCLSamplerTy);
299     addImplicitTypedef("event_t", Context.OCLEventTy);
300     if (getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) {
301       addImplicitTypedef("clk_event_t", Context.OCLClkEventTy);
302       addImplicitTypedef("queue_t", Context.OCLQueueTy);
303       addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy);
304       addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy));
305       addImplicitTypedef("atomic_uint",
306                          Context.getAtomicType(Context.UnsignedIntTy));
307       auto AtomicLongT = Context.getAtomicType(Context.LongTy);
308       addImplicitTypedef("atomic_long", AtomicLongT);
309       auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy);
310       addImplicitTypedef("atomic_ulong", AtomicULongT);
311       addImplicitTypedef("atomic_float",
312                          Context.getAtomicType(Context.FloatTy));
313       auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy);
314       addImplicitTypedef("atomic_double", AtomicDoubleT);
315       // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as
316       // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide.
317       addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy));
318       auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType());
319       addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT);
320       auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType());
321       addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT);
322       auto AtomicSizeT = Context.getAtomicType(Context.getSizeType());
323       addImplicitTypedef("atomic_size_t", AtomicSizeT);
324       auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType());
325       addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT);
326 
327       // OpenCL v2.0 s6.13.11.6:
328       // - The atomic_long and atomic_ulong types are supported if the
329       //   cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics
330       //   extensions are supported.
331       // - The atomic_double type is only supported if double precision
332       //   is supported and the cl_khr_int64_base_atomics and
333       //   cl_khr_int64_extended_atomics extensions are supported.
334       // - If the device address space is 64-bits, the data types
335       //   atomic_intptr_t, atomic_uintptr_t, atomic_size_t and
336       //   atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and
337       //   cl_khr_int64_extended_atomics extensions are supported.
338       std::vector<QualType> Atomic64BitTypes;
339       Atomic64BitTypes.push_back(AtomicLongT);
340       Atomic64BitTypes.push_back(AtomicULongT);
341       Atomic64BitTypes.push_back(AtomicDoubleT);
342       if (Context.getTypeSize(AtomicSizeT) == 64) {
343         Atomic64BitTypes.push_back(AtomicSizeT);
344         Atomic64BitTypes.push_back(AtomicIntPtrT);
345         Atomic64BitTypes.push_back(AtomicUIntPtrT);
346         Atomic64BitTypes.push_back(AtomicPtrDiffT);
347       }
348       for (auto &I : Atomic64BitTypes)
349         setOpenCLExtensionForType(I,
350             "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
351 
352       setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64");
353     }
354 
355     setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64");
356 
357 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \
358     setOpenCLExtensionForType(Context.Id, Ext);
359 #include "clang/Basic/OpenCLImageTypes.def"
360 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
361     addImplicitTypedef(#ExtType, Context.Id##Ty); \
362     setOpenCLExtensionForType(Context.Id##Ty, #Ext);
363 #include "clang/Basic/OpenCLExtensionTypes.def"
364   }
365 
366   if (Context.getTargetInfo().hasAArch64SVETypes()) {
367 #define SVE_TYPE(Name, Id, SingletonId) \
368     addImplicitTypedef(Name, Context.SingletonId);
369 #include "clang/Basic/AArch64SVEACLETypes.def"
370   }
371 
372   if (Context.getTargetInfo().hasBuiltinMSVaList()) {
373     DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list");
374     if (IdResolver.begin(MSVaList) == IdResolver.end())
375       PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope);
376   }
377 
378   DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list");
379   if (IdResolver.begin(BuiltinVaList) == IdResolver.end())
380     PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope);
381 }
382 
383 Sema::~Sema() {
384   if (VisContext) FreeVisContext();
385 
386   // Kill all the active scopes.
387   for (sema::FunctionScopeInfo *FSI : FunctionScopes)
388     delete FSI;
389 
390   // Tell the SemaConsumer to forget about us; we're going out of scope.
391   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
392     SC->ForgetSema();
393 
394   // Detach from the external Sema source.
395   if (ExternalSemaSource *ExternalSema
396         = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
397     ExternalSema->ForgetSema();
398 
399   // If Sema's ExternalSource is the multiplexer - we own it.
400   if (isMultiplexExternalSource)
401     delete ExternalSource;
402 
403   // Delete cached satisfactions.
404   std::vector<ConstraintSatisfaction *> Satisfactions;
405   Satisfactions.reserve(Satisfactions.size());
406   for (auto &Node : SatisfactionCache)
407     Satisfactions.push_back(&Node);
408   for (auto *Node : Satisfactions)
409     delete Node;
410 
411   threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache);
412 
413   // Destroys data sharing attributes stack for OpenMP
414   DestroyDataSharingAttributesStack();
415 
416   // Detach from the PP callback handler which outlives Sema since it's owned
417   // by the preprocessor.
418   SemaPPCallbackHandler->reset();
419 }
420 
421 void Sema::warnStackExhausted(SourceLocation Loc) {
422   // Only warn about this once.
423   if (!WarnedStackExhausted) {
424     Diag(Loc, diag::warn_stack_exhausted);
425     WarnedStackExhausted = true;
426   }
427 }
428 
429 void Sema::runWithSufficientStackSpace(SourceLocation Loc,
430                                        llvm::function_ref<void()> Fn) {
431   clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn);
432 }
433 
434 /// makeUnavailableInSystemHeader - There is an error in the current
435 /// context.  If we're still in a system header, and we can plausibly
436 /// make the relevant declaration unavailable instead of erroring, do
437 /// so and return true.
438 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
439                                       UnavailableAttr::ImplicitReason reason) {
440   // If we're not in a function, it's an error.
441   FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
442   if (!fn) return false;
443 
444   // If we're in template instantiation, it's an error.
445   if (inTemplateInstantiation())
446     return false;
447 
448   // If that function's not in a system header, it's an error.
449   if (!Context.getSourceManager().isInSystemHeader(loc))
450     return false;
451 
452   // If the function is already unavailable, it's not an error.
453   if (fn->hasAttr<UnavailableAttr>()) return true;
454 
455   fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc));
456   return true;
457 }
458 
459 ASTMutationListener *Sema::getASTMutationListener() const {
460   return getASTConsumer().GetASTMutationListener();
461 }
462 
463 ///Registers an external source. If an external source already exists,
464 /// creates a multiplex external source and appends to it.
465 ///
466 ///\param[in] E - A non-null external sema source.
467 ///
468 void Sema::addExternalSource(ExternalSemaSource *E) {
469   assert(E && "Cannot use with NULL ptr");
470 
471   if (!ExternalSource) {
472     ExternalSource = E;
473     return;
474   }
475 
476   if (isMultiplexExternalSource)
477     static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E);
478   else {
479     ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E);
480     isMultiplexExternalSource = true;
481   }
482 }
483 
484 /// Print out statistics about the semantic analysis.
485 void Sema::PrintStats() const {
486   llvm::errs() << "\n*** Semantic Analysis Stats:\n";
487   llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
488 
489   BumpAlloc.PrintStats();
490   AnalysisWarnings.PrintStats();
491 }
492 
493 void Sema::diagnoseNullableToNonnullConversion(QualType DstType,
494                                                QualType SrcType,
495                                                SourceLocation Loc) {
496   Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context);
497   if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable)
498     return;
499 
500   Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context);
501   if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull)
502     return;
503 
504   Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
505 }
506 
507 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) {
508   if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant,
509                       E->getBeginLoc()))
510     return;
511   // nullptr only exists from C++11 on, so don't warn on its absence earlier.
512   if (!getLangOpts().CPlusPlus11)
513     return;
514 
515   if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
516     return;
517   if (E->IgnoreParenImpCasts()->getType()->isNullPtrType())
518     return;
519 
520   // If it is a macro from system header, and if the macro name is not "NULL",
521   // do not warn.
522   SourceLocation MaybeMacroLoc = E->getBeginLoc();
523   if (Diags.getSuppressSystemWarnings() &&
524       SourceMgr.isInSystemMacro(MaybeMacroLoc) &&
525       !findMacroSpelling(MaybeMacroLoc, "NULL"))
526     return;
527 
528   Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant)
529       << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr");
530 }
531 
532 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
533 /// If there is already an implicit cast, merge into the existing one.
534 /// The result is of the given category.
535 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
536                                    CastKind Kind, ExprValueKind VK,
537                                    const CXXCastPath *BasePath,
538                                    CheckedConversionKind CCK) {
539 #ifndef NDEBUG
540   if (VK == VK_RValue && !E->isRValue()) {
541     switch (Kind) {
542     default:
543       llvm_unreachable(("can't implicitly cast lvalue to rvalue with this cast "
544                         "kind: " +
545                         std::string(CastExpr::getCastKindName(Kind)))
546                            .c_str());
547     case CK_Dependent:
548     case CK_LValueToRValue:
549     case CK_ArrayToPointerDecay:
550     case CK_FunctionToPointerDecay:
551     case CK_ToVoid:
552     case CK_NonAtomicToAtomic:
553       break;
554     }
555   }
556   assert((VK == VK_RValue || Kind == CK_Dependent || !E->isRValue()) &&
557          "can't cast rvalue to lvalue");
558 #endif
559 
560   diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getBeginLoc());
561   diagnoseZeroToNullptrConversion(Kind, E);
562 
563   QualType ExprTy = Context.getCanonicalType(E->getType());
564   QualType TypeTy = Context.getCanonicalType(Ty);
565 
566   if (ExprTy == TypeTy)
567     return E;
568 
569   // C++1z [conv.array]: The temporary materialization conversion is applied.
570   // We also use this to fuel C++ DR1213, which applies to C++11 onwards.
571   if (Kind == CK_ArrayToPointerDecay && getLangOpts().CPlusPlus &&
572       E->getValueKind() == VK_RValue) {
573     // The temporary is an lvalue in C++98 and an xvalue otherwise.
574     ExprResult Materialized = CreateMaterializeTemporaryExpr(
575         E->getType(), E, !getLangOpts().CPlusPlus11);
576     if (Materialized.isInvalid())
577       return ExprError();
578     E = Materialized.get();
579   }
580 
581   if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) {
582     if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
583       ImpCast->setType(Ty);
584       ImpCast->setValueKind(VK);
585       return E;
586     }
587   }
588 
589   return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK);
590 }
591 
592 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
593 /// to the conversion from scalar type ScalarTy to the Boolean type.
594 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) {
595   switch (ScalarTy->getScalarTypeKind()) {
596   case Type::STK_Bool: return CK_NoOp;
597   case Type::STK_CPointer: return CK_PointerToBoolean;
598   case Type::STK_BlockPointer: return CK_PointerToBoolean;
599   case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean;
600   case Type::STK_MemberPointer: return CK_MemberPointerToBoolean;
601   case Type::STK_Integral: return CK_IntegralToBoolean;
602   case Type::STK_Floating: return CK_FloatingToBoolean;
603   case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean;
604   case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean;
605   case Type::STK_FixedPoint: return CK_FixedPointToBoolean;
606   }
607   llvm_unreachable("unknown scalar type kind");
608 }
609 
610 /// Used to prune the decls of Sema's UnusedFileScopedDecls vector.
611 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
612   if (D->getMostRecentDecl()->isUsed())
613     return true;
614 
615   if (D->isExternallyVisible())
616     return true;
617 
618   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
619     // If this is a function template and none of its specializations is used,
620     // we should warn.
621     if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate())
622       for (const auto *Spec : Template->specializations())
623         if (ShouldRemoveFromUnused(SemaRef, Spec))
624           return true;
625 
626     // UnusedFileScopedDecls stores the first declaration.
627     // The declaration may have become definition so check again.
628     const FunctionDecl *DeclToCheck;
629     if (FD->hasBody(DeclToCheck))
630       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
631 
632     // Later redecls may add new information resulting in not having to warn,
633     // so check again.
634     DeclToCheck = FD->getMostRecentDecl();
635     if (DeclToCheck != FD)
636       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
637   }
638 
639   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
640     // If a variable usable in constant expressions is referenced,
641     // don't warn if it isn't used: if the value of a variable is required
642     // for the computation of a constant expression, it doesn't make sense to
643     // warn even if the variable isn't odr-used.  (isReferenced doesn't
644     // precisely reflect that, but it's a decent approximation.)
645     if (VD->isReferenced() &&
646         VD->mightBeUsableInConstantExpressions(SemaRef->Context))
647       return true;
648 
649     if (VarTemplateDecl *Template = VD->getDescribedVarTemplate())
650       // If this is a variable template and none of its specializations is used,
651       // we should warn.
652       for (const auto *Spec : Template->specializations())
653         if (ShouldRemoveFromUnused(SemaRef, Spec))
654           return true;
655 
656     // UnusedFileScopedDecls stores the first declaration.
657     // The declaration may have become definition so check again.
658     const VarDecl *DeclToCheck = VD->getDefinition();
659     if (DeclToCheck)
660       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
661 
662     // Later redecls may add new information resulting in not having to warn,
663     // so check again.
664     DeclToCheck = VD->getMostRecentDecl();
665     if (DeclToCheck != VD)
666       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
667   }
668 
669   return false;
670 }
671 
672 static bool isFunctionOrVarDeclExternC(NamedDecl *ND) {
673   if (auto *FD = dyn_cast<FunctionDecl>(ND))
674     return FD->isExternC();
675   return cast<VarDecl>(ND)->isExternC();
676 }
677 
678 /// Determine whether ND is an external-linkage function or variable whose
679 /// type has no linkage.
680 bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) {
681   // Note: it's not quite enough to check whether VD has UniqueExternalLinkage,
682   // because we also want to catch the case where its type has VisibleNoLinkage,
683   // which does not affect the linkage of VD.
684   return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() &&
685          !isExternalFormalLinkage(VD->getType()->getLinkage()) &&
686          !isFunctionOrVarDeclExternC(VD);
687 }
688 
689 /// Obtains a sorted list of functions and variables that are undefined but
690 /// ODR-used.
691 void Sema::getUndefinedButUsed(
692     SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) {
693   for (const auto &UndefinedUse : UndefinedButUsed) {
694     NamedDecl *ND = UndefinedUse.first;
695 
696     // Ignore attributes that have become invalid.
697     if (ND->isInvalidDecl()) continue;
698 
699     // __attribute__((weakref)) is basically a definition.
700     if (ND->hasAttr<WeakRefAttr>()) continue;
701 
702     if (isa<CXXDeductionGuideDecl>(ND))
703       continue;
704 
705     if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) {
706       // An exported function will always be emitted when defined, so even if
707       // the function is inline, it doesn't have to be emitted in this TU. An
708       // imported function implies that it has been exported somewhere else.
709       continue;
710     }
711 
712     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) {
713       if (FD->isDefined())
714         continue;
715       if (FD->isExternallyVisible() &&
716           !isExternalWithNoLinkageType(FD) &&
717           !FD->getMostRecentDecl()->isInlined() &&
718           !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
719         continue;
720       if (FD->getBuiltinID())
721         continue;
722     } else {
723       auto *VD = cast<VarDecl>(ND);
724       if (VD->hasDefinition() != VarDecl::DeclarationOnly)
725         continue;
726       if (VD->isExternallyVisible() &&
727           !isExternalWithNoLinkageType(VD) &&
728           !VD->getMostRecentDecl()->isInline() &&
729           !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
730         continue;
731 
732       // Skip VarDecls that lack formal definitions but which we know are in
733       // fact defined somewhere.
734       if (VD->isKnownToBeDefined())
735         continue;
736     }
737 
738     Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
739   }
740 }
741 
742 /// checkUndefinedButUsed - Check for undefined objects with internal linkage
743 /// or that are inline.
744 static void checkUndefinedButUsed(Sema &S) {
745   if (S.UndefinedButUsed.empty()) return;
746 
747   // Collect all the still-undefined entities with internal linkage.
748   SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined;
749   S.getUndefinedButUsed(Undefined);
750   if (Undefined.empty()) return;
751 
752   for (auto Undef : Undefined) {
753     ValueDecl *VD = cast<ValueDecl>(Undef.first);
754     SourceLocation UseLoc = Undef.second;
755 
756     if (S.isExternalWithNoLinkageType(VD)) {
757       // C++ [basic.link]p8:
758       //   A type without linkage shall not be used as the type of a variable
759       //   or function with external linkage unless
760       //    -- the entity has C language linkage
761       //    -- the entity is not odr-used or is defined in the same TU
762       //
763       // As an extension, accept this in cases where the type is externally
764       // visible, since the function or variable actually can be defined in
765       // another translation unit in that case.
766       S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage())
767                                     ? diag::ext_undefined_internal_type
768                                     : diag::err_undefined_internal_type)
769         << isa<VarDecl>(VD) << VD;
770     } else if (!VD->isExternallyVisible()) {
771       // FIXME: We can promote this to an error. The function or variable can't
772       // be defined anywhere else, so the program must necessarily violate the
773       // one definition rule.
774       S.Diag(VD->getLocation(), diag::warn_undefined_internal)
775         << isa<VarDecl>(VD) << VD;
776     } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {
777       (void)FD;
778       assert(FD->getMostRecentDecl()->isInlined() &&
779              "used object requires definition but isn't inline or internal?");
780       // FIXME: This is ill-formed; we should reject.
781       S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD;
782     } else {
783       assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
784              "used var requires definition but isn't inline or internal?");
785       S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;
786     }
787     if (UseLoc.isValid())
788       S.Diag(UseLoc, diag::note_used_here);
789   }
790 
791   S.UndefinedButUsed.clear();
792 }
793 
794 void Sema::LoadExternalWeakUndeclaredIdentifiers() {
795   if (!ExternalSource)
796     return;
797 
798   SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs;
799   ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs);
800   for (auto &WeakID : WeakIDs)
801     WeakUndeclaredIdentifiers.insert(WeakID);
802 }
803 
804 
805 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap;
806 
807 /// Returns true, if all methods and nested classes of the given
808 /// CXXRecordDecl are defined in this translation unit.
809 ///
810 /// Should only be called from ActOnEndOfTranslationUnit so that all
811 /// definitions are actually read.
812 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD,
813                                             RecordCompleteMap &MNCComplete) {
814   RecordCompleteMap::iterator Cache = MNCComplete.find(RD);
815   if (Cache != MNCComplete.end())
816     return Cache->second;
817   if (!RD->isCompleteDefinition())
818     return false;
819   bool Complete = true;
820   for (DeclContext::decl_iterator I = RD->decls_begin(),
821                                   E = RD->decls_end();
822        I != E && Complete; ++I) {
823     if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I))
824       Complete = M->isDefined() || M->isDefaulted() ||
825                  (M->isPure() && !isa<CXXDestructorDecl>(M));
826     else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I))
827       // If the template function is marked as late template parsed at this
828       // point, it has not been instantiated and therefore we have not
829       // performed semantic analysis on it yet, so we cannot know if the type
830       // can be considered complete.
831       Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
832                   F->getTemplatedDecl()->isDefined();
833     else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
834       if (R->isInjectedClassName())
835         continue;
836       if (R->hasDefinition())
837         Complete = MethodsAndNestedClassesComplete(R->getDefinition(),
838                                                    MNCComplete);
839       else
840         Complete = false;
841     }
842   }
843   MNCComplete[RD] = Complete;
844   return Complete;
845 }
846 
847 /// Returns true, if the given CXXRecordDecl is fully defined in this
848 /// translation unit, i.e. all methods are defined or pure virtual and all
849 /// friends, friend functions and nested classes are fully defined in this
850 /// translation unit.
851 ///
852 /// Should only be called from ActOnEndOfTranslationUnit so that all
853 /// definitions are actually read.
854 static bool IsRecordFullyDefined(const CXXRecordDecl *RD,
855                                  RecordCompleteMap &RecordsComplete,
856                                  RecordCompleteMap &MNCComplete) {
857   RecordCompleteMap::iterator Cache = RecordsComplete.find(RD);
858   if (Cache != RecordsComplete.end())
859     return Cache->second;
860   bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete);
861   for (CXXRecordDecl::friend_iterator I = RD->friend_begin(),
862                                       E = RD->friend_end();
863        I != E && Complete; ++I) {
864     // Check if friend classes and methods are complete.
865     if (TypeSourceInfo *TSI = (*I)->getFriendType()) {
866       // Friend classes are available as the TypeSourceInfo of the FriendDecl.
867       if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
868         Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete);
869       else
870         Complete = false;
871     } else {
872       // Friend functions are available through the NamedDecl of FriendDecl.
873       if (const FunctionDecl *FD =
874           dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
875         Complete = FD->isDefined();
876       else
877         // This is a template friend, give up.
878         Complete = false;
879     }
880   }
881   RecordsComplete[RD] = Complete;
882   return Complete;
883 }
884 
885 void Sema::emitAndClearUnusedLocalTypedefWarnings() {
886   if (ExternalSource)
887     ExternalSource->ReadUnusedLocalTypedefNameCandidates(
888         UnusedLocalTypedefNameCandidates);
889   for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {
890     if (TD->isReferenced())
891       continue;
892     Diag(TD->getLocation(), diag::warn_unused_local_typedef)
893         << isa<TypeAliasDecl>(TD) << TD->getDeclName();
894   }
895   UnusedLocalTypedefNameCandidates.clear();
896 }
897 
898 /// This is called before the very first declaration in the translation unit
899 /// is parsed. Note that the ASTContext may have already injected some
900 /// declarations.
901 void Sema::ActOnStartOfTranslationUnit() {
902   if (getLangOpts().ModulesTS &&
903       (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface ||
904        getLangOpts().getCompilingModule() == LangOptions::CMK_None)) {
905     // We start in an implied global module fragment.
906     SourceLocation StartOfTU =
907         SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
908     ActOnGlobalModuleFragmentDecl(StartOfTU);
909     ModuleScopes.back().ImplicitGlobalModuleFragment = true;
910   }
911 }
912 
913 void Sema::ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind) {
914   // No explicit actions are required at the end of the global module fragment.
915   if (Kind == TUFragmentKind::Global)
916     return;
917 
918   // Transfer late parsed template instantiations over to the pending template
919   // instantiation list. During normal compilation, the late template parser
920   // will be installed and instantiating these templates will succeed.
921   //
922   // If we are building a TU prefix for serialization, it is also safe to
923   // transfer these over, even though they are not parsed. The end of the TU
924   // should be outside of any eager template instantiation scope, so when this
925   // AST is deserialized, these templates will not be parsed until the end of
926   // the combined TU.
927   PendingInstantiations.insert(PendingInstantiations.end(),
928                                LateParsedInstantiations.begin(),
929                                LateParsedInstantiations.end());
930   LateParsedInstantiations.clear();
931 
932   // If DefinedUsedVTables ends up marking any virtual member functions it
933   // might lead to more pending template instantiations, which we then need
934   // to instantiate.
935   DefineUsedVTables();
936 
937   // C++: Perform implicit template instantiations.
938   //
939   // FIXME: When we perform these implicit instantiations, we do not
940   // carefully keep track of the point of instantiation (C++ [temp.point]).
941   // This means that name lookup that occurs within the template
942   // instantiation will always happen at the end of the translation unit,
943   // so it will find some names that are not required to be found. This is
944   // valid, but we could do better by diagnosing if an instantiation uses a
945   // name that was not visible at its first point of instantiation.
946   if (ExternalSource) {
947     // Load pending instantiations from the external source.
948     SmallVector<PendingImplicitInstantiation, 4> Pending;
949     ExternalSource->ReadPendingInstantiations(Pending);
950     for (auto PII : Pending)
951       if (auto Func = dyn_cast<FunctionDecl>(PII.first))
952         Func->setInstantiationIsPending(true);
953     PendingInstantiations.insert(PendingInstantiations.begin(),
954                                  Pending.begin(), Pending.end());
955   }
956 
957   {
958     llvm::TimeTraceScope TimeScope("PerformPendingInstantiations");
959     PerformPendingInstantiations();
960   }
961 
962   emitDeferredDiags();
963 
964   assert(LateParsedInstantiations.empty() &&
965          "end of TU template instantiation should not create more "
966          "late-parsed templates");
967 
968   // Report diagnostics for uncorrected delayed typos. Ideally all of them
969   // should have been corrected by that time, but it is very hard to cover all
970   // cases in practice.
971   for (const auto &Typo : DelayedTypos) {
972     // We pass an empty TypoCorrection to indicate no correction was performed.
973     Typo.second.DiagHandler(TypoCorrection());
974   }
975   DelayedTypos.clear();
976 }
977 
978 /// ActOnEndOfTranslationUnit - This is called at the very end of the
979 /// translation unit when EOF is reached and all but the top-level scope is
980 /// popped.
981 void Sema::ActOnEndOfTranslationUnit() {
982   assert(DelayedDiagnostics.getCurrentPool() == nullptr
983          && "reached end of translation unit with a pool attached?");
984 
985   // If code completion is enabled, don't perform any end-of-translation-unit
986   // work.
987   if (PP.isCodeCompletionEnabled())
988     return;
989 
990   // Complete translation units and modules define vtables and perform implicit
991   // instantiations. PCH files do not.
992   if (TUKind != TU_Prefix) {
993     DiagnoseUseOfUnimplementedSelectors();
994 
995     ActOnEndOfTranslationUnitFragment(
996         !ModuleScopes.empty() && ModuleScopes.back().Module->Kind ==
997                                      Module::PrivateModuleFragment
998             ? TUFragmentKind::Private
999             : TUFragmentKind::Normal);
1000 
1001     if (LateTemplateParserCleanup)
1002       LateTemplateParserCleanup(OpaqueParser);
1003 
1004     CheckDelayedMemberExceptionSpecs();
1005   } else {
1006     // If we are building a TU prefix for serialization, it is safe to transfer
1007     // these over, even though they are not parsed. The end of the TU should be
1008     // outside of any eager template instantiation scope, so when this AST is
1009     // deserialized, these templates will not be parsed until the end of the
1010     // combined TU.
1011     PendingInstantiations.insert(PendingInstantiations.end(),
1012                                  LateParsedInstantiations.begin(),
1013                                  LateParsedInstantiations.end());
1014     LateParsedInstantiations.clear();
1015 
1016     if (LangOpts.PCHInstantiateTemplates) {
1017       llvm::TimeTraceScope TimeScope("PerformPendingInstantiations");
1018       PerformPendingInstantiations();
1019     }
1020   }
1021 
1022   DiagnoseUnterminatedPragmaPack();
1023   DiagnoseUnterminatedPragmaAttribute();
1024 
1025   // All delayed member exception specs should be checked or we end up accepting
1026   // incompatible declarations.
1027   assert(DelayedOverridingExceptionSpecChecks.empty());
1028   assert(DelayedEquivalentExceptionSpecChecks.empty());
1029 
1030   // All dllexport classes should have been processed already.
1031   assert(DelayedDllExportClasses.empty());
1032   assert(DelayedDllExportMemberFunctions.empty());
1033 
1034   // Remove file scoped decls that turned out to be used.
1035   UnusedFileScopedDecls.erase(
1036       std::remove_if(UnusedFileScopedDecls.begin(nullptr, true),
1037                      UnusedFileScopedDecls.end(),
1038                      [this](const DeclaratorDecl *DD) {
1039                        return ShouldRemoveFromUnused(this, DD);
1040                      }),
1041       UnusedFileScopedDecls.end());
1042 
1043   if (TUKind == TU_Prefix) {
1044     // Translation unit prefixes don't need any of the checking below.
1045     if (!PP.isIncrementalProcessingEnabled())
1046       TUScope = nullptr;
1047     return;
1048   }
1049 
1050   // Check for #pragma weak identifiers that were never declared
1051   LoadExternalWeakUndeclaredIdentifiers();
1052   for (auto WeakID : WeakUndeclaredIdentifiers) {
1053     if (WeakID.second.getUsed())
1054       continue;
1055 
1056     Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(),
1057                                       LookupOrdinaryName);
1058     if (PrevDecl != nullptr &&
1059         !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
1060       Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
1061           << "'weak'" << ExpectedVariableOrFunction;
1062     else
1063       Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
1064           << WeakID.first;
1065   }
1066 
1067   if (LangOpts.CPlusPlus11 &&
1068       !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))
1069     CheckDelegatingCtorCycles();
1070 
1071   if (!Diags.hasErrorOccurred()) {
1072     if (ExternalSource)
1073       ExternalSource->ReadUndefinedButUsed(UndefinedButUsed);
1074     checkUndefinedButUsed(*this);
1075   }
1076 
1077   // A global-module-fragment is only permitted within a module unit.
1078   bool DiagnosedMissingModuleDeclaration = false;
1079   if (!ModuleScopes.empty() &&
1080       ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment &&
1081       !ModuleScopes.back().ImplicitGlobalModuleFragment) {
1082     Diag(ModuleScopes.back().BeginLoc,
1083          diag::err_module_declaration_missing_after_global_module_introducer);
1084     DiagnosedMissingModuleDeclaration = true;
1085   }
1086 
1087   if (TUKind == TU_Module) {
1088     // If we are building a module interface unit, we need to have seen the
1089     // module declaration by now.
1090     if (getLangOpts().getCompilingModule() ==
1091             LangOptions::CMK_ModuleInterface &&
1092         (ModuleScopes.empty() ||
1093          !ModuleScopes.back().Module->isModulePurview()) &&
1094         !DiagnosedMissingModuleDeclaration) {
1095       // FIXME: Make a better guess as to where to put the module declaration.
1096       Diag(getSourceManager().getLocForStartOfFile(
1097                getSourceManager().getMainFileID()),
1098            diag::err_module_declaration_missing);
1099     }
1100 
1101     // If we are building a module, resolve all of the exported declarations
1102     // now.
1103     if (Module *CurrentModule = PP.getCurrentModule()) {
1104       ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
1105 
1106       SmallVector<Module *, 2> Stack;
1107       Stack.push_back(CurrentModule);
1108       while (!Stack.empty()) {
1109         Module *Mod = Stack.pop_back_val();
1110 
1111         // Resolve the exported declarations and conflicts.
1112         // FIXME: Actually complain, once we figure out how to teach the
1113         // diagnostic client to deal with complaints in the module map at this
1114         // point.
1115         ModMap.resolveExports(Mod, /*Complain=*/false);
1116         ModMap.resolveUses(Mod, /*Complain=*/false);
1117         ModMap.resolveConflicts(Mod, /*Complain=*/false);
1118 
1119         // Queue the submodules, so their exports will also be resolved.
1120         Stack.append(Mod->submodule_begin(), Mod->submodule_end());
1121       }
1122     }
1123 
1124     // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for
1125     // modules when they are built, not every time they are used.
1126     emitAndClearUnusedLocalTypedefWarnings();
1127   }
1128 
1129   // C99 6.9.2p2:
1130   //   A declaration of an identifier for an object that has file
1131   //   scope without an initializer, and without a storage-class
1132   //   specifier or with the storage-class specifier static,
1133   //   constitutes a tentative definition. If a translation unit
1134   //   contains one or more tentative definitions for an identifier,
1135   //   and the translation unit contains no external definition for
1136   //   that identifier, then the behavior is exactly as if the
1137   //   translation unit contains a file scope declaration of that
1138   //   identifier, with the composite type as of the end of the
1139   //   translation unit, with an initializer equal to 0.
1140   llvm::SmallSet<VarDecl *, 32> Seen;
1141   for (TentativeDefinitionsType::iterator
1142             T = TentativeDefinitions.begin(ExternalSource),
1143          TEnd = TentativeDefinitions.end();
1144        T != TEnd; ++T) {
1145     VarDecl *VD = (*T)->getActingDefinition();
1146 
1147     // If the tentative definition was completed, getActingDefinition() returns
1148     // null. If we've already seen this variable before, insert()'s second
1149     // return value is false.
1150     if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second)
1151       continue;
1152 
1153     if (const IncompleteArrayType *ArrayT
1154         = Context.getAsIncompleteArrayType(VD->getType())) {
1155       // Set the length of the array to 1 (C99 6.9.2p5).
1156       Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
1157       llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
1158       QualType T = Context.getConstantArrayType(ArrayT->getElementType(), One,
1159                                                 nullptr, ArrayType::Normal, 0);
1160       VD->setType(T);
1161     } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
1162                                    diag::err_tentative_def_incomplete_type))
1163       VD->setInvalidDecl();
1164 
1165     // No initialization is performed for a tentative definition.
1166     CheckCompleteVariableDeclaration(VD);
1167 
1168     // Notify the consumer that we've completed a tentative definition.
1169     if (!VD->isInvalidDecl())
1170       Consumer.CompleteTentativeDefinition(VD);
1171   }
1172 
1173   for (auto D : ExternalDeclarations) {
1174     if (!D || D->isInvalidDecl() || D->getPreviousDecl() || !D->isUsed())
1175       continue;
1176 
1177     Consumer.CompleteExternalDeclaration(D);
1178   }
1179 
1180   // If there were errors, disable 'unused' warnings since they will mostly be
1181   // noise. Don't warn for a use from a module: either we should warn on all
1182   // file-scope declarations in modules or not at all, but whether the
1183   // declaration is used is immaterial.
1184   if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {
1185     // Output warning for unused file scoped decls.
1186     for (UnusedFileScopedDeclsType::iterator
1187            I = UnusedFileScopedDecls.begin(ExternalSource),
1188            E = UnusedFileScopedDecls.end(); I != E; ++I) {
1189       if (ShouldRemoveFromUnused(this, *I))
1190         continue;
1191 
1192       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1193         const FunctionDecl *DiagD;
1194         if (!FD->hasBody(DiagD))
1195           DiagD = FD;
1196         if (DiagD->isDeleted())
1197           continue; // Deleted functions are supposed to be unused.
1198         if (DiagD->isReferenced()) {
1199           if (isa<CXXMethodDecl>(DiagD))
1200             Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
1201                 << DiagD;
1202           else {
1203             if (FD->getStorageClass() == SC_Static &&
1204                 !FD->isInlineSpecified() &&
1205                 !SourceMgr.isInMainFile(
1206                    SourceMgr.getExpansionLoc(FD->getLocation())))
1207               Diag(DiagD->getLocation(),
1208                    diag::warn_unneeded_static_internal_decl)
1209                   << DiagD;
1210             else
1211               Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1212                   << /*function*/ 0 << DiagD;
1213           }
1214         } else {
1215           if (FD->getDescribedFunctionTemplate())
1216             Diag(DiagD->getLocation(), diag::warn_unused_template)
1217                 << /*function*/ 0 << DiagD;
1218           else
1219             Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD)
1220                                            ? diag::warn_unused_member_function
1221                                            : diag::warn_unused_function)
1222                 << DiagD;
1223         }
1224       } else {
1225         const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
1226         if (!DiagD)
1227           DiagD = cast<VarDecl>(*I);
1228         if (DiagD->isReferenced()) {
1229           Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1230               << /*variable*/ 1 << DiagD;
1231         } else if (DiagD->getType().isConstQualified()) {
1232           const SourceManager &SM = SourceMgr;
1233           if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) ||
1234               !PP.getLangOpts().IsHeaderFile)
1235             Diag(DiagD->getLocation(), diag::warn_unused_const_variable)
1236                 << DiagD;
1237         } else {
1238           if (DiagD->getDescribedVarTemplate())
1239             Diag(DiagD->getLocation(), diag::warn_unused_template)
1240                 << /*variable*/ 1 << DiagD;
1241           else
1242             Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD;
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