• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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