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