• 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