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