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