1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the actions class which performs semantic analysis and
11 // builds an AST out of a parse stream.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "clang/Sema/SemaInternal.h"
16 #include "clang/Sema/DelayedDiagnostic.h"
17 #include "TargetAttributesSema.h"
18 #include "llvm/ADT/DenseMap.h"
19 #include "llvm/ADT/SmallSet.h"
20 #include "llvm/ADT/APFloat.h"
21 #include "clang/Sema/CXXFieldCollector.h"
22 #include "clang/Sema/TemplateDeduction.h"
23 #include "clang/Sema/ExternalSemaSource.h"
24 #include "clang/Sema/ObjCMethodList.h"
25 #include "clang/Sema/PrettyDeclStackTrace.h"
26 #include "clang/Sema/Scope.h"
27 #include "clang/Sema/ScopeInfo.h"
28 #include "clang/Sema/SemaConsumer.h"
29 #include "clang/AST/ASTContext.h"
30 #include "clang/AST/ASTDiagnostic.h"
31 #include "clang/AST/DeclCXX.h"
32 #include "clang/AST/DeclObjC.h"
33 #include "clang/AST/Expr.h"
34 #include "clang/AST/ExprCXX.h"
35 #include "clang/AST/StmtCXX.h"
36 #include "clang/Lex/Preprocessor.h"
37 #include "clang/Basic/PartialDiagnostic.h"
38 #include "clang/Basic/TargetInfo.h"
39 using namespace clang;
40 using namespace sema;
41
~FunctionScopeInfo()42 FunctionScopeInfo::~FunctionScopeInfo() { }
43
Clear()44 void FunctionScopeInfo::Clear() {
45 HasBranchProtectedScope = false;
46 HasBranchIntoScope = false;
47 HasIndirectGoto = false;
48
49 SwitchStack.clear();
50 Returns.clear();
51 ErrorTrap.reset();
52 PossiblyUnreachableDiags.clear();
53 }
54
~BlockScopeInfo()55 BlockScopeInfo::~BlockScopeInfo() { }
56
ActOnTranslationUnitScope(Scope * S)57 void Sema::ActOnTranslationUnitScope(Scope *S) {
58 TUScope = S;
59 PushDeclContext(S, Context.getTranslationUnitDecl());
60
61 VAListTagName = PP.getIdentifierInfo("__va_list_tag");
62
63 if (!Context.isInt128Installed() && // May be set by ASTReader.
64 PP.getTargetInfo().getPointerWidth(0) >= 64) {
65 TypeSourceInfo *TInfo;
66
67 // Install [u]int128_t for 64-bit targets.
68 TInfo = Context.getTrivialTypeSourceInfo(Context.Int128Ty);
69 PushOnScopeChains(TypedefDecl::Create(Context, CurContext,
70 SourceLocation(),
71 SourceLocation(),
72 &Context.Idents.get("__int128_t"),
73 TInfo), TUScope);
74
75 TInfo = Context.getTrivialTypeSourceInfo(Context.UnsignedInt128Ty);
76 PushOnScopeChains(TypedefDecl::Create(Context, CurContext,
77 SourceLocation(),
78 SourceLocation(),
79 &Context.Idents.get("__uint128_t"),
80 TInfo), TUScope);
81 Context.setInt128Installed();
82 }
83
84
85 if (!PP.getLangOptions().ObjC1) return;
86
87 // Built-in ObjC types may already be set by ASTReader (hence isNull checks).
88 if (Context.getObjCSelType().isNull()) {
89 // Create the built-in typedef for 'SEL'.
90 QualType SelT = Context.getPointerType(Context.ObjCBuiltinSelTy);
91 TypeSourceInfo *SelInfo = Context.getTrivialTypeSourceInfo(SelT);
92 TypedefDecl *SelTypedef
93 = TypedefDecl::Create(Context, CurContext,
94 SourceLocation(), SourceLocation(),
95 &Context.Idents.get("SEL"), SelInfo);
96 PushOnScopeChains(SelTypedef, TUScope);
97 Context.setObjCSelType(Context.getTypeDeclType(SelTypedef));
98 Context.ObjCSelRedefinitionType = Context.getObjCSelType();
99 }
100
101 // Synthesize "@class Protocol;
102 if (Context.getObjCProtoType().isNull()) {
103 ObjCInterfaceDecl *ProtocolDecl =
104 ObjCInterfaceDecl::Create(Context, CurContext, SourceLocation(),
105 &Context.Idents.get("Protocol"),
106 SourceLocation(), true);
107 Context.setObjCProtoType(Context.getObjCInterfaceType(ProtocolDecl));
108 PushOnScopeChains(ProtocolDecl, TUScope, false);
109 }
110 // Create the built-in typedef for 'id'.
111 if (Context.getObjCIdType().isNull()) {
112 QualType T = Context.getObjCObjectType(Context.ObjCBuiltinIdTy, 0, 0);
113 T = Context.getObjCObjectPointerType(T);
114 TypeSourceInfo *IdInfo = Context.getTrivialTypeSourceInfo(T);
115 TypedefDecl *IdTypedef
116 = TypedefDecl::Create(Context, CurContext,
117 SourceLocation(), SourceLocation(),
118 &Context.Idents.get("id"), IdInfo);
119 PushOnScopeChains(IdTypedef, TUScope);
120 Context.setObjCIdType(Context.getTypeDeclType(IdTypedef));
121 Context.ObjCIdRedefinitionType = Context.getObjCIdType();
122 }
123 // Create the built-in typedef for 'Class'.
124 if (Context.getObjCClassType().isNull()) {
125 QualType T = Context.getObjCObjectType(Context.ObjCBuiltinClassTy, 0, 0);
126 T = Context.getObjCObjectPointerType(T);
127 TypeSourceInfo *ClassInfo = Context.getTrivialTypeSourceInfo(T);
128 TypedefDecl *ClassTypedef
129 = TypedefDecl::Create(Context, CurContext,
130 SourceLocation(), SourceLocation(),
131 &Context.Idents.get("Class"), ClassInfo);
132 PushOnScopeChains(ClassTypedef, TUScope);
133 Context.setObjCClassType(Context.getTypeDeclType(ClassTypedef));
134 Context.ObjCClassRedefinitionType = Context.getObjCClassType();
135 }
136 }
137
Sema(Preprocessor & pp,ASTContext & ctxt,ASTConsumer & consumer,bool CompleteTranslationUnit,CodeCompleteConsumer * CodeCompleter)138 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
139 bool CompleteTranslationUnit,
140 CodeCompleteConsumer *CodeCompleter)
141 : TheTargetAttributesSema(0), FPFeatures(pp.getLangOptions()),
142 LangOpts(pp.getLangOptions()), PP(pp), Context(ctxt), Consumer(consumer),
143 Diags(PP.getDiagnostics()), SourceMgr(PP.getSourceManager()),
144 CollectStats(false), ExternalSource(0), CodeCompleter(CodeCompleter),
145 CurContext(0), PackContext(0), MSStructPragmaOn(false), VisContext(0),
146 ExprNeedsCleanups(0), LateTemplateParser(0), OpaqueParser(0),
147 IdResolver(pp.getLangOptions()), CXXTypeInfoDecl(0), MSVCGuidDecl(0),
148 GlobalNewDeleteDeclared(false),
149 CompleteTranslationUnit(CompleteTranslationUnit),
150 NumSFINAEErrors(0), SuppressAccessChecking(false),
151 AccessCheckingSFINAE(false), InNonInstantiationSFINAEContext(false),
152 NonInstantiationEntries(0), ArgumentPackSubstitutionIndex(-1),
153 CurrentInstantiationScope(0), TyposCorrected(0),
154 AnalysisWarnings(*this)
155 {
156 TUScope = 0;
157 LoadedExternalKnownNamespaces = false;
158
159 if (getLangOptions().CPlusPlus)
160 FieldCollector.reset(new CXXFieldCollector());
161
162 // Tell diagnostics how to render things from the AST library.
163 PP.getDiagnostics().SetArgToStringFn(&FormatASTNodeDiagnosticArgument,
164 &Context);
165
166 ExprEvalContexts.push_back(
167 ExpressionEvaluationContextRecord(PotentiallyEvaluated, 0, false));
168
169 FunctionScopes.push_back(new FunctionScopeInfo(Diags));
170 }
171
Initialize()172 void Sema::Initialize() {
173 // Tell the AST consumer about this Sema object.
174 Consumer.Initialize(Context);
175
176 // FIXME: Isn't this redundant with the initialization above?
177 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
178 SC->InitializeSema(*this);
179
180 // Tell the external Sema source about this Sema object.
181 if (ExternalSemaSource *ExternalSema
182 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
183 ExternalSema->InitializeSema(*this);
184 }
185
~Sema()186 Sema::~Sema() {
187 if (PackContext) FreePackedContext();
188 if (VisContext) FreeVisContext();
189 delete TheTargetAttributesSema;
190 MSStructPragmaOn = false;
191 // Kill all the active scopes.
192 for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I)
193 delete FunctionScopes[I];
194 if (FunctionScopes.size() == 1)
195 delete FunctionScopes[0];
196
197 // Tell the SemaConsumer to forget about us; we're going out of scope.
198 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
199 SC->ForgetSema();
200
201 // Detach from the external Sema source.
202 if (ExternalSemaSource *ExternalSema
203 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
204 ExternalSema->ForgetSema();
205 }
206
207
208 /// makeUnavailableInSystemHeader - There is an error in the current
209 /// context. If we're still in a system header, and we can plausibly
210 /// make the relevant declaration unavailable instead of erroring, do
211 /// so and return true.
makeUnavailableInSystemHeader(SourceLocation loc,llvm::StringRef msg)212 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
213 llvm::StringRef msg) {
214 // If we're not in a function, it's an error.
215 FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
216 if (!fn) return false;
217
218 // If we're in template instantiation, it's an error.
219 if (!ActiveTemplateInstantiations.empty())
220 return false;
221
222 // If that function's not in a system header, it's an error.
223 if (!Context.getSourceManager().isInSystemHeader(loc))
224 return false;
225
226 // If the function is already unavailable, it's not an error.
227 if (fn->hasAttr<UnavailableAttr>()) return true;
228
229 fn->addAttr(new (Context) UnavailableAttr(loc, Context, msg));
230 return true;
231 }
232
getASTMutationListener() const233 ASTMutationListener *Sema::getASTMutationListener() const {
234 return getASTConsumer().GetASTMutationListener();
235 }
236
237 /// \brief Print out statistics about the semantic analysis.
PrintStats() const238 void Sema::PrintStats() const {
239 llvm::errs() << "\n*** Semantic Analysis Stats:\n";
240 llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
241
242 BumpAlloc.PrintStats();
243 AnalysisWarnings.PrintStats();
244 }
245
246 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
247 /// If there is already an implicit cast, merge into the existing one.
248 /// The result is of the given category.
ImpCastExprToType(Expr * E,QualType Ty,CastKind Kind,ExprValueKind VK,const CXXCastPath * BasePath,CheckedConversionKind CCK)249 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
250 CastKind Kind, ExprValueKind VK,
251 const CXXCastPath *BasePath,
252 CheckedConversionKind CCK) {
253 QualType ExprTy = Context.getCanonicalType(E->getType());
254 QualType TypeTy = Context.getCanonicalType(Ty);
255
256 if (ExprTy == TypeTy)
257 return Owned(E);
258
259 if (getLangOptions().ObjCAutoRefCount)
260 CheckObjCARCConversion(SourceRange(), Ty, E, CCK);
261
262 // If this is a derived-to-base cast to a through a virtual base, we
263 // need a vtable.
264 if (Kind == CK_DerivedToBase &&
265 BasePathInvolvesVirtualBase(*BasePath)) {
266 QualType T = E->getType();
267 if (const PointerType *Pointer = T->getAs<PointerType>())
268 T = Pointer->getPointeeType();
269 if (const RecordType *RecordTy = T->getAs<RecordType>())
270 MarkVTableUsed(E->getLocStart(),
271 cast<CXXRecordDecl>(RecordTy->getDecl()));
272 }
273
274 if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) {
275 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
276 ImpCast->setType(Ty);
277 ImpCast->setValueKind(VK);
278 return Owned(E);
279 }
280 }
281
282 return Owned(ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK));
283 }
284
285 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
286 /// to the conversion from scalar type ScalarTy to the Boolean type.
ScalarTypeToBooleanCastKind(QualType ScalarTy)287 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) {
288 switch (ScalarTy->getScalarTypeKind()) {
289 case Type::STK_Bool: return CK_NoOp;
290 case Type::STK_Pointer: return CK_PointerToBoolean;
291 case Type::STK_MemberPointer: return CK_MemberPointerToBoolean;
292 case Type::STK_Integral: return CK_IntegralToBoolean;
293 case Type::STK_Floating: return CK_FloatingToBoolean;
294 case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean;
295 case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean;
296 }
297 return CK_Invalid;
298 }
299
CastCategory(Expr * E)300 ExprValueKind Sema::CastCategory(Expr *E) {
301 Expr::Classification Classification = E->Classify(Context);
302 return Classification.isRValue() ? VK_RValue :
303 (Classification.isLValue() ? VK_LValue : VK_XValue);
304 }
305
306 /// \brief Used to prune the decls of Sema's UnusedFileScopedDecls vector.
ShouldRemoveFromUnused(Sema * SemaRef,const DeclaratorDecl * D)307 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
308 if (D->isUsed())
309 return true;
310
311 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
312 // UnusedFileScopedDecls stores the first declaration.
313 // The declaration may have become definition so check again.
314 const FunctionDecl *DeclToCheck;
315 if (FD->hasBody(DeclToCheck))
316 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
317
318 // Later redecls may add new information resulting in not having to warn,
319 // so check again.
320 DeclToCheck = FD->getMostRecentDeclaration();
321 if (DeclToCheck != FD)
322 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
323 }
324
325 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
326 // UnusedFileScopedDecls stores the first declaration.
327 // The declaration may have become definition so check again.
328 const VarDecl *DeclToCheck = VD->getDefinition();
329 if (DeclToCheck)
330 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
331
332 // Later redecls may add new information resulting in not having to warn,
333 // so check again.
334 DeclToCheck = VD->getMostRecentDeclaration();
335 if (DeclToCheck != VD)
336 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
337 }
338
339 return false;
340 }
341
342 namespace {
343 struct UndefinedInternal {
344 NamedDecl *decl;
345 FullSourceLoc useLoc;
346
UndefinedInternal__anon12a9d35a0111::UndefinedInternal347 UndefinedInternal(NamedDecl *decl, FullSourceLoc useLoc)
348 : decl(decl), useLoc(useLoc) {}
349 };
350
operator <(const UndefinedInternal & l,const UndefinedInternal & r)351 bool operator<(const UndefinedInternal &l, const UndefinedInternal &r) {
352 return l.useLoc.isBeforeInTranslationUnitThan(r.useLoc);
353 }
354 }
355
356 /// checkUndefinedInternals - Check for undefined objects with internal linkage.
checkUndefinedInternals(Sema & S)357 static void checkUndefinedInternals(Sema &S) {
358 if (S.UndefinedInternals.empty()) return;
359
360 // Collect all the still-undefined entities with internal linkage.
361 llvm::SmallVector<UndefinedInternal, 16> undefined;
362 for (llvm::DenseMap<NamedDecl*,SourceLocation>::iterator
363 i = S.UndefinedInternals.begin(), e = S.UndefinedInternals.end();
364 i != e; ++i) {
365 NamedDecl *decl = i->first;
366
367 // Ignore attributes that have become invalid.
368 if (decl->isInvalidDecl()) continue;
369
370 // __attribute__((weakref)) is basically a definition.
371 if (decl->hasAttr<WeakRefAttr>()) continue;
372
373 if (FunctionDecl *fn = dyn_cast<FunctionDecl>(decl)) {
374 if (fn->isPure() || fn->hasBody())
375 continue;
376 } else {
377 if (cast<VarDecl>(decl)->hasDefinition() != VarDecl::DeclarationOnly)
378 continue;
379 }
380
381 // We build a FullSourceLoc so that we can sort with array_pod_sort.
382 FullSourceLoc loc(i->second, S.Context.getSourceManager());
383 undefined.push_back(UndefinedInternal(decl, loc));
384 }
385
386 if (undefined.empty()) return;
387
388 // Sort (in order of use site) so that we're not (as) dependent on
389 // the iteration order through an llvm::DenseMap.
390 llvm::array_pod_sort(undefined.begin(), undefined.end());
391
392 for (llvm::SmallVectorImpl<UndefinedInternal>::iterator
393 i = undefined.begin(), e = undefined.end(); i != e; ++i) {
394 NamedDecl *decl = i->decl;
395 S.Diag(decl->getLocation(), diag::warn_undefined_internal)
396 << isa<VarDecl>(decl) << decl;
397 S.Diag(i->useLoc, diag::note_used_here);
398 }
399 }
400
401 /// ActOnEndOfTranslationUnit - This is called at the very end of the
402 /// translation unit when EOF is reached and all but the top-level scope is
403 /// popped.
ActOnEndOfTranslationUnit()404 void Sema::ActOnEndOfTranslationUnit() {
405 // At PCH writing, implicit instantiations and VTable handling info are
406 // stored and performed when the PCH is included.
407 if (CompleteTranslationUnit) {
408 // If any dynamic classes have their key function defined within
409 // this translation unit, then those vtables are considered "used" and must
410 // be emitted.
411 for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I) {
412 assert(!DynamicClasses[I]->isDependentType() &&
413 "Should not see dependent types here!");
414 if (const CXXMethodDecl *KeyFunction
415 = Context.getKeyFunction(DynamicClasses[I])) {
416 const FunctionDecl *Definition = 0;
417 if (KeyFunction->hasBody(Definition))
418 MarkVTableUsed(Definition->getLocation(), DynamicClasses[I], true);
419 }
420 }
421
422 // If DefinedUsedVTables ends up marking any virtual member functions it
423 // might lead to more pending template instantiations, which we then need
424 // to instantiate.
425 DefineUsedVTables();
426
427 // C++: Perform implicit template instantiations.
428 //
429 // FIXME: When we perform these implicit instantiations, we do not
430 // carefully keep track of the point of instantiation (C++ [temp.point]).
431 // This means that name lookup that occurs within the template
432 // instantiation will always happen at the end of the translation unit,
433 // so it will find some names that should not be found. Although this is
434 // common behavior for C++ compilers, it is technically wrong. In the
435 // future, we either need to be able to filter the results of name lookup
436 // or we need to perform template instantiations earlier.
437 PerformPendingInstantiations();
438 }
439
440 // Remove file scoped decls that turned out to be used.
441 UnusedFileScopedDecls.erase(std::remove_if(UnusedFileScopedDecls.begin(),
442 UnusedFileScopedDecls.end(),
443 std::bind1st(std::ptr_fun(ShouldRemoveFromUnused),
444 this)),
445 UnusedFileScopedDecls.end());
446
447 if (!CompleteTranslationUnit) {
448 TUScope = 0;
449 return;
450 }
451
452 // Check for #pragma weak identifiers that were never declared
453 // FIXME: This will cause diagnostics to be emitted in a non-determinstic
454 // order! Iterating over a densemap like this is bad.
455 for (llvm::DenseMap<IdentifierInfo*,WeakInfo>::iterator
456 I = WeakUndeclaredIdentifiers.begin(),
457 E = WeakUndeclaredIdentifiers.end(); I != E; ++I) {
458 if (I->second.getUsed()) continue;
459
460 Diag(I->second.getLocation(), diag::warn_weak_identifier_undeclared)
461 << I->first;
462 }
463
464 // C99 6.9.2p2:
465 // A declaration of an identifier for an object that has file
466 // scope without an initializer, and without a storage-class
467 // specifier or with the storage-class specifier static,
468 // constitutes a tentative definition. If a translation unit
469 // contains one or more tentative definitions for an identifier,
470 // and the translation unit contains no external definition for
471 // that identifier, then the behavior is exactly as if the
472 // translation unit contains a file scope declaration of that
473 // identifier, with the composite type as of the end of the
474 // translation unit, with an initializer equal to 0.
475 llvm::SmallSet<VarDecl *, 32> Seen;
476 for (unsigned i = 0, e = TentativeDefinitions.size(); i != e; ++i) {
477 VarDecl *VD = TentativeDefinitions[i]->getActingDefinition();
478
479 // If the tentative definition was completed, getActingDefinition() returns
480 // null. If we've already seen this variable before, insert()'s second
481 // return value is false.
482 if (VD == 0 || VD->isInvalidDecl() || !Seen.insert(VD))
483 continue;
484
485 if (const IncompleteArrayType *ArrayT
486 = Context.getAsIncompleteArrayType(VD->getType())) {
487 if (RequireCompleteType(VD->getLocation(),
488 ArrayT->getElementType(),
489 diag::err_tentative_def_incomplete_type_arr)) {
490 VD->setInvalidDecl();
491 continue;
492 }
493
494 // Set the length of the array to 1 (C99 6.9.2p5).
495 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
496 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
497 QualType T = Context.getConstantArrayType(ArrayT->getElementType(),
498 One, ArrayType::Normal, 0);
499 VD->setType(T);
500 } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
501 diag::err_tentative_def_incomplete_type))
502 VD->setInvalidDecl();
503
504 // Notify the consumer that we've completed a tentative definition.
505 if (!VD->isInvalidDecl())
506 Consumer.CompleteTentativeDefinition(VD);
507
508 }
509
510 if (LangOpts.CPlusPlus0x &&
511 Diags.getDiagnosticLevel(diag::warn_delegating_ctor_cycle,
512 SourceLocation())
513 != Diagnostic::Ignored)
514 CheckDelegatingCtorCycles();
515
516 // If there were errors, disable 'unused' warnings since they will mostly be
517 // noise.
518 if (!Diags.hasErrorOccurred()) {
519 // Output warning for unused file scoped decls.
520 for (llvm::SmallVectorImpl<const DeclaratorDecl*>::iterator
521 I = UnusedFileScopedDecls.begin(),
522 E = UnusedFileScopedDecls.end(); I != E; ++I) {
523 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
524 const FunctionDecl *DiagD;
525 if (!FD->hasBody(DiagD))
526 DiagD = FD;
527 if (DiagD->isDeleted())
528 continue; // Deleted functions are supposed to be unused.
529 if (DiagD->isReferenced()) {
530 if (isa<CXXMethodDecl>(DiagD))
531 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
532 << DiagD->getDeclName();
533 else
534 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
535 << /*function*/0 << DiagD->getDeclName();
536 } else {
537 Diag(DiagD->getLocation(),
538 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
539 : diag::warn_unused_function)
540 << DiagD->getDeclName();
541 }
542 } else {
543 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
544 if (!DiagD)
545 DiagD = cast<VarDecl>(*I);
546 if (DiagD->isReferenced()) {
547 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
548 << /*variable*/1 << DiagD->getDeclName();
549 } else {
550 Diag(DiagD->getLocation(), diag::warn_unused_variable)
551 << DiagD->getDeclName();
552 }
553 }
554 }
555
556 checkUndefinedInternals(*this);
557 }
558
559 // Check we've noticed that we're no longer parsing the initializer for every
560 // variable. If we miss cases, then at best we have a performance issue and
561 // at worst a rejects-valid bug.
562 assert(ParsingInitForAutoVars.empty() &&
563 "Didn't unmark var as having its initializer parsed");
564
565 TUScope = 0;
566 }
567
568
569 //===----------------------------------------------------------------------===//
570 // Helper functions.
571 //===----------------------------------------------------------------------===//
572
getFunctionLevelDeclContext()573 DeclContext *Sema::getFunctionLevelDeclContext() {
574 DeclContext *DC = CurContext;
575
576 while (isa<BlockDecl>(DC) || isa<EnumDecl>(DC))
577 DC = DC->getParent();
578
579 return DC;
580 }
581
582 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
583 /// to the function decl for the function being parsed. If we're currently
584 /// in a 'block', this returns the containing context.
getCurFunctionDecl()585 FunctionDecl *Sema::getCurFunctionDecl() {
586 DeclContext *DC = getFunctionLevelDeclContext();
587 return dyn_cast<FunctionDecl>(DC);
588 }
589
getCurMethodDecl()590 ObjCMethodDecl *Sema::getCurMethodDecl() {
591 DeclContext *DC = getFunctionLevelDeclContext();
592 return dyn_cast<ObjCMethodDecl>(DC);
593 }
594
getCurFunctionOrMethodDecl()595 NamedDecl *Sema::getCurFunctionOrMethodDecl() {
596 DeclContext *DC = getFunctionLevelDeclContext();
597 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
598 return cast<NamedDecl>(DC);
599 return 0;
600 }
601
~SemaDiagnosticBuilder()602 Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() {
603 if (!isActive())
604 return;
605
606 if (llvm::Optional<TemplateDeductionInfo*> Info = SemaRef.isSFINAEContext()) {
607 switch (DiagnosticIDs::getDiagnosticSFINAEResponse(getDiagID())) {
608 case DiagnosticIDs::SFINAE_Report:
609 // Fall through; we'll report the diagnostic below.
610 break;
611
612 case DiagnosticIDs::SFINAE_AccessControl:
613 // Per C++ Core Issue 1170, access control is part of SFINAE.
614 // Additionally, the AccessCheckingSFINAE flag can be used to temporary
615 // make access control a part of SFINAE for the purposes of checking
616 // type traits.
617 if (!SemaRef.AccessCheckingSFINAE &&
618 !SemaRef.getLangOptions().CPlusPlus0x)
619 break;
620
621 case DiagnosticIDs::SFINAE_SubstitutionFailure:
622 // Count this failure so that we know that template argument deduction
623 // has failed.
624 ++SemaRef.NumSFINAEErrors;
625 SemaRef.Diags.setLastDiagnosticIgnored();
626 SemaRef.Diags.Clear();
627 Clear();
628 return;
629
630 case DiagnosticIDs::SFINAE_Suppress:
631 // Make a copy of this suppressed diagnostic and store it with the
632 // template-deduction information;
633 FlushCounts();
634 DiagnosticInfo DiagInfo(&SemaRef.Diags);
635
636 if (*Info)
637 (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
638 PartialDiagnostic(DiagInfo,
639 SemaRef.Context.getDiagAllocator()));
640
641 // Suppress this diagnostic.
642 SemaRef.Diags.setLastDiagnosticIgnored();
643 SemaRef.Diags.Clear();
644 Clear();
645 return;
646 }
647 }
648
649 // Emit the diagnostic.
650 if (!this->Emit())
651 return;
652
653 // If this is not a note, and we're in a template instantiation
654 // that is different from the last template instantiation where
655 // we emitted an error, print a template instantiation
656 // backtrace.
657 if (!DiagnosticIDs::isBuiltinNote(DiagID) &&
658 !SemaRef.ActiveTemplateInstantiations.empty() &&
659 SemaRef.ActiveTemplateInstantiations.back()
660 != SemaRef.LastTemplateInstantiationErrorContext) {
661 SemaRef.PrintInstantiationStack();
662 SemaRef.LastTemplateInstantiationErrorContext
663 = SemaRef.ActiveTemplateInstantiations.back();
664 }
665 }
666
Diag(SourceLocation Loc,unsigned DiagID)667 Sema::SemaDiagnosticBuilder Sema::Diag(SourceLocation Loc, unsigned DiagID) {
668 DiagnosticBuilder DB = Diags.Report(Loc, DiagID);
669 return SemaDiagnosticBuilder(DB, *this, DiagID);
670 }
671
672 Sema::SemaDiagnosticBuilder
Diag(SourceLocation Loc,const PartialDiagnostic & PD)673 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
674 SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
675 PD.Emit(Builder);
676
677 return Builder;
678 }
679
680 /// \brief Looks through the macro-instantiation chain for the given
681 /// location, looking for a macro instantiation with the given name.
682 /// If one is found, returns true and sets the location to that
683 /// instantiation loc.
findMacroSpelling(SourceLocation & locref,llvm::StringRef name)684 bool Sema::findMacroSpelling(SourceLocation &locref, llvm::StringRef name) {
685 SourceLocation loc = locref;
686 if (!loc.isMacroID()) return false;
687
688 // There's no good way right now to look at the intermediate
689 // instantiations, so just jump to the instantiation location.
690 loc = getSourceManager().getInstantiationLoc(loc);
691
692 // If that's written with the name, stop here.
693 llvm::SmallVector<char, 16> buffer;
694 if (getPreprocessor().getSpelling(loc, buffer) == name) {
695 locref = loc;
696 return true;
697 }
698 return false;
699 }
700
701 /// \brief Determines the active Scope associated with the given declaration
702 /// context.
703 ///
704 /// This routine maps a declaration context to the active Scope object that
705 /// represents that declaration context in the parser. It is typically used
706 /// from "scope-less" code (e.g., template instantiation, lazy creation of
707 /// declarations) that injects a name for name-lookup purposes and, therefore,
708 /// must update the Scope.
709 ///
710 /// \returns The scope corresponding to the given declaraion context, or NULL
711 /// if no such scope is open.
getScopeForContext(DeclContext * Ctx)712 Scope *Sema::getScopeForContext(DeclContext *Ctx) {
713
714 if (!Ctx)
715 return 0;
716
717 Ctx = Ctx->getPrimaryContext();
718 for (Scope *S = getCurScope(); S; S = S->getParent()) {
719 // Ignore scopes that cannot have declarations. This is important for
720 // out-of-line definitions of static class members.
721 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
722 if (DeclContext *Entity = static_cast<DeclContext *> (S->getEntity()))
723 if (Ctx == Entity->getPrimaryContext())
724 return S;
725 }
726
727 return 0;
728 }
729
730 /// \brief Enter a new function scope
PushFunctionScope()731 void Sema::PushFunctionScope() {
732 if (FunctionScopes.size() == 1) {
733 // Use the "top" function scope rather than having to allocate
734 // memory for a new scope.
735 FunctionScopes.back()->Clear();
736 FunctionScopes.push_back(FunctionScopes.back());
737 return;
738 }
739
740 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
741 }
742
PushBlockScope(Scope * BlockScope,BlockDecl * Block)743 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
744 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
745 BlockScope, Block));
746 }
747
PopFunctionOrBlockScope(const AnalysisBasedWarnings::Policy * WP,const Decl * D,const BlockExpr * blkExpr)748 void Sema::PopFunctionOrBlockScope(const AnalysisBasedWarnings::Policy *WP,
749 const Decl *D, const BlockExpr *blkExpr) {
750 FunctionScopeInfo *Scope = FunctionScopes.pop_back_val();
751 assert(!FunctionScopes.empty() && "mismatched push/pop!");
752
753 // Issue any analysis-based warnings.
754 if (WP && D)
755 AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr);
756 else {
757 for (llvm::SmallVectorImpl<sema::PossiblyUnreachableDiag>::iterator
758 i = Scope->PossiblyUnreachableDiags.begin(),
759 e = Scope->PossiblyUnreachableDiags.end();
760 i != e; ++i) {
761 const sema::PossiblyUnreachableDiag &D = *i;
762 Diag(D.Loc, D.PD);
763 }
764 }
765
766 if (FunctionScopes.back() != Scope) {
767 delete Scope;
768 }
769 }
770
771 /// \brief Determine whether any errors occurred within this function/method/
772 /// block.
hasAnyUnrecoverableErrorsInThisFunction() const773 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
774 return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
775 }
776
getCurBlock()777 BlockScopeInfo *Sema::getCurBlock() {
778 if (FunctionScopes.empty())
779 return 0;
780
781 return dyn_cast<BlockScopeInfo>(FunctionScopes.back());
782 }
783
784 // Pin this vtable to this file.
~ExternalSemaSource()785 ExternalSemaSource::~ExternalSemaSource() {}
786
787 std::pair<ObjCMethodList, ObjCMethodList>
ReadMethodPool(Selector Sel)788 ExternalSemaSource::ReadMethodPool(Selector Sel) {
789 return std::pair<ObjCMethodList, ObjCMethodList>();
790 }
791
ReadKnownNamespaces(llvm::SmallVectorImpl<NamespaceDecl * > & Namespaces)792 void ExternalSemaSource::ReadKnownNamespaces(
793 llvm::SmallVectorImpl<NamespaceDecl *> &Namespaces) {
794 }
795
print(llvm::raw_ostream & OS) const796 void PrettyDeclStackTraceEntry::print(llvm::raw_ostream &OS) const {
797 SourceLocation Loc = this->Loc;
798 if (!Loc.isValid() && TheDecl) Loc = TheDecl->getLocation();
799 if (Loc.isValid()) {
800 Loc.print(OS, S.getSourceManager());
801 OS << ": ";
802 }
803 OS << Message;
804
805 if (TheDecl && isa<NamedDecl>(TheDecl)) {
806 std::string Name = cast<NamedDecl>(TheDecl)->getNameAsString();
807 if (!Name.empty())
808 OS << " '" << Name << '\'';
809 }
810
811 OS << '\n';
812 }
813
814 /// \brief Figure out if an expression could be turned into a call.
815 ///
816 /// Use this when trying to recover from an error where the programmer may have
817 /// written just the name of a function instead of actually calling it.
818 ///
819 /// \param E - The expression to examine.
820 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
821 /// with no arguments, this parameter is set to the type returned by such a
822 /// call; otherwise, it is set to an empty QualType.
823 /// \param NonTemplateOverloads - If the expression is an overloaded function
824 /// name, this parameter is populated with the decls of the various overloads.
isExprCallable(const Expr & E,QualType & ZeroArgCallReturnTy,UnresolvedSetImpl & NonTemplateOverloads)825 bool Sema::isExprCallable(const Expr &E, QualType &ZeroArgCallReturnTy,
826 UnresolvedSetImpl &NonTemplateOverloads) {
827 ZeroArgCallReturnTy = QualType();
828 NonTemplateOverloads.clear();
829 if (const OverloadExpr *Overloads = dyn_cast<OverloadExpr>(&E)) {
830 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
831 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
832 // Our overload set may include TemplateDecls, which we'll ignore for our
833 // present purpose.
834 if (const FunctionDecl *OverloadDecl = dyn_cast<FunctionDecl>(*it)) {
835 NonTemplateOverloads.addDecl(*it);
836 if (OverloadDecl->getMinRequiredArguments() == 0)
837 ZeroArgCallReturnTy = OverloadDecl->getResultType();
838 }
839 }
840 return true;
841 }
842
843 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(&E)) {
844 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
845 if (Fun->getMinRequiredArguments() == 0)
846 ZeroArgCallReturnTy = Fun->getResultType();
847 return true;
848 }
849 }
850
851 // We don't have an expression that's convenient to get a FunctionDecl from,
852 // but we can at least check if the type is "function of 0 arguments".
853 QualType ExprTy = E.getType();
854 const FunctionType *FunTy = NULL;
855 QualType PointeeTy = ExprTy->getPointeeType();
856 if (!PointeeTy.isNull())
857 FunTy = PointeeTy->getAs<FunctionType>();
858 if (!FunTy)
859 FunTy = ExprTy->getAs<FunctionType>();
860 if (!FunTy && ExprTy == Context.BoundMemberTy) {
861 // Look for the bound-member type. If it's still overloaded, give up,
862 // although we probably should have fallen into the OverloadExpr case above
863 // if we actually have an overloaded bound member.
864 QualType BoundMemberTy = Expr::findBoundMemberType(&E);
865 if (!BoundMemberTy.isNull())
866 FunTy = BoundMemberTy->castAs<FunctionType>();
867 }
868
869 if (const FunctionProtoType *FPT =
870 dyn_cast_or_null<FunctionProtoType>(FunTy)) {
871 if (FPT->getNumArgs() == 0)
872 ZeroArgCallReturnTy = FunTy->getResultType();
873 return true;
874 }
875 return false;
876 }
877
878 /// \brief Give notes for a set of overloads.
879 ///
880 /// A companion to isExprCallable. In cases when the name that the programmer
881 /// wrote was an overloaded function, we may be able to make some guesses about
882 /// plausible overloads based on their return types; such guesses can be handed
883 /// off to this method to be emitted as notes.
884 ///
885 /// \param Overloads - The overloads to note.
886 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
887 /// -fshow-overloads=best, this is the location to attach to the note about too
888 /// many candidates. Typically this will be the location of the original
889 /// ill-formed expression.
NoteOverloads(const UnresolvedSetImpl & Overloads,const SourceLocation FinalNoteLoc)890 void Sema::NoteOverloads(const UnresolvedSetImpl &Overloads,
891 const SourceLocation FinalNoteLoc) {
892 int ShownOverloads = 0;
893 int SuppressedOverloads = 0;
894 for (UnresolvedSetImpl::iterator It = Overloads.begin(),
895 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
896 // FIXME: Magic number for max shown overloads stolen from
897 // OverloadCandidateSet::NoteCandidates.
898 if (ShownOverloads >= 4 &&
899 Diags.getShowOverloads() == Diagnostic::Ovl_Best) {
900 ++SuppressedOverloads;
901 continue;
902 }
903 Diag(cast<FunctionDecl>(*It)->getSourceRange().getBegin(),
904 diag::note_member_ref_possible_intended_overload);
905 ++ShownOverloads;
906 }
907 if (SuppressedOverloads)
908 Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
909 << SuppressedOverloads;
910 }
911