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