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