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