Home | History | Annotate | Download | only in Sema
      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 
     42 FunctionScopeInfo::~FunctionScopeInfo() { }
     43 
     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 
     55 BlockScopeInfo::~BlockScopeInfo() { }
     56 
     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 
    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 
    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 
    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.
    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 
    233 ASTMutationListener *Sema::getASTMutationListener() const {
    234   return getASTConsumer().GetASTMutationListener();
    235 }
    236 
    237 /// \brief Print out statistics about the semantic analysis.
    238 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.
    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.
    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 
    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.
    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 
    347     UndefinedInternal(NamedDecl *decl, FullSourceLoc useLoc)
    348       : decl(decl), useLoc(useLoc) {}
    349   };
    350 
    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.
    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.
    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 
    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.
    585 FunctionDecl *Sema::getCurFunctionDecl() {
    586   DeclContext *DC = getFunctionLevelDeclContext();
    587   return dyn_cast<FunctionDecl>(DC);
    588 }
    589 
    590 ObjCMethodDecl *Sema::getCurMethodDecl() {
    591   DeclContext *DC = getFunctionLevelDeclContext();
    592   return dyn_cast<ObjCMethodDecl>(DC);
    593 }
    594 
    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 
    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 
    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
    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.
    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.
    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
    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 
    743 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
    744   FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
    745                                               BlockScope, Block));
    746 }
    747 
    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.
    773 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
    774   return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
    775 }
    776 
    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.
    785 ExternalSemaSource::~ExternalSemaSource() {}
    786 
    787 std::pair<ObjCMethodList, ObjCMethodList>
    788 ExternalSemaSource::ReadMethodPool(Selector Sel) {
    789   return std::pair<ObjCMethodList, ObjCMethodList>();
    790 }
    791 
    792 void ExternalSemaSource::ReadKnownNamespaces(
    793                            llvm::SmallVectorImpl<NamespaceDecl *> &Namespaces) {
    794 }
    795 
    796 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.
    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.
    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