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