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