xref: /llvm-project-15.0.7/clang/lib/Sema/Sema.cpp (revision 97eec24b)
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 (PP.getLangOptions().ObjC1) {
64     // Synthesize "@class Protocol;
65     if (Context.getObjCProtoType().isNull()) {
66       ObjCInterfaceDecl *ProtocolDecl =
67         ObjCInterfaceDecl::Create(Context, CurContext, SourceLocation(),
68                                   &Context.Idents.get("Protocol"),
69                                   SourceLocation(), true);
70       Context.setObjCProtoType(Context.getObjCInterfaceType(ProtocolDecl));
71       PushOnScopeChains(ProtocolDecl, TUScope, false);
72     }
73   }
74 }
75 
76 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
77            TranslationUnitKind TUKind,
78            CodeCompleteConsumer *CodeCompleter)
79   : TheTargetAttributesSema(0), FPFeatures(pp.getLangOptions()),
80     LangOpts(pp.getLangOptions()), PP(pp), Context(ctxt), Consumer(consumer),
81     Diags(PP.getDiagnostics()), SourceMgr(PP.getSourceManager()),
82     CollectStats(false), ExternalSource(0), CodeCompleter(CodeCompleter),
83     CurContext(0), PackContext(0), MSStructPragmaOn(false), VisContext(0),
84     ExprNeedsCleanups(0), LateTemplateParser(0), OpaqueParser(0),
85     IdResolver(pp.getLangOptions()), CXXTypeInfoDecl(0), MSVCGuidDecl(0),
86     GlobalNewDeleteDeclared(false),
87     ObjCShouldCallSuperDealloc(false),
88     ObjCShouldCallSuperFinalize(false),
89     TUKind(TUKind),
90     NumSFINAEErrors(0), SuppressAccessChecking(false),
91     AccessCheckingSFINAE(false), InNonInstantiationSFINAEContext(false),
92     NonInstantiationEntries(0), ArgumentPackSubstitutionIndex(-1),
93     CurrentInstantiationScope(0), TyposCorrected(0),
94     AnalysisWarnings(*this)
95 {
96   TUScope = 0;
97   LoadedExternalKnownNamespaces = false;
98 
99   if (getLangOptions().CPlusPlus)
100     FieldCollector.reset(new CXXFieldCollector());
101 
102   // Tell diagnostics how to render things from the AST library.
103   PP.getDiagnostics().SetArgToStringFn(&FormatASTNodeDiagnosticArgument,
104                                        &Context);
105 
106   ExprEvalContexts.push_back(
107         ExpressionEvaluationContextRecord(PotentiallyEvaluated, 0, false));
108 
109   FunctionScopes.push_back(new FunctionScopeInfo(Diags));
110 }
111 
112 void Sema::Initialize() {
113   // Tell the AST consumer about this Sema object.
114   Consumer.Initialize(Context);
115 
116   // FIXME: Isn't this redundant with the initialization above?
117   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
118     SC->InitializeSema(*this);
119 
120   // Tell the external Sema source about this Sema object.
121   if (ExternalSemaSource *ExternalSema
122       = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
123     ExternalSema->InitializeSema(*this);
124 
125   // Initialize predefined 128-bit integer types, if needed.
126   if (PP.getTargetInfo().getPointerWidth(0) >= 64) {
127     // If either of the 128-bit integer types are unavailable to name lookup,
128     // define them now.
129     DeclarationName Int128 = &Context.Idents.get("__int128_t");
130     if (IdentifierResolver::begin(Int128) == IdentifierResolver::end())
131       PushOnScopeChains(Context.getInt128Decl(), TUScope);
132 
133     DeclarationName UInt128 = &Context.Idents.get("__uint128_t");
134     if (IdentifierResolver::begin(UInt128) == IdentifierResolver::end())
135       PushOnScopeChains(Context.getUInt128Decl(), TUScope);
136   }
137 
138 
139   // Initialize predefined Objective-C types:
140   if (PP.getLangOptions().ObjC1) {
141     // If 'SEL' does not yet refer to any declarations, make it refer to the
142     // predefined 'SEL'.
143     DeclarationName SEL = &Context.Idents.get("SEL");
144     if (IdentifierResolver::begin(SEL) == IdentifierResolver::end())
145       PushOnScopeChains(Context.getObjCSelDecl(), TUScope);
146 
147     // If 'id' does not yet refer to any declarations, make it refer to the
148     // predefined 'id'.
149     DeclarationName Id = &Context.Idents.get("id");
150     if (IdentifierResolver::begin(Id) == IdentifierResolver::end())
151       PushOnScopeChains(Context.getObjCIdDecl(), TUScope);
152 
153     // Create the built-in typedef for 'Class'.
154     DeclarationName Class = &Context.Idents.get("Class");
155     if (IdentifierResolver::begin(Class) == IdentifierResolver::end())
156       PushOnScopeChains(Context.getObjCClassDecl(), TUScope);
157   }
158 }
159 
160 Sema::~Sema() {
161   if (PackContext) FreePackedContext();
162   if (VisContext) FreeVisContext();
163   delete TheTargetAttributesSema;
164   MSStructPragmaOn = false;
165   // Kill all the active scopes.
166   for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I)
167     delete FunctionScopes[I];
168   if (FunctionScopes.size() == 1)
169     delete FunctionScopes[0];
170 
171   // Tell the SemaConsumer to forget about us; we're going out of scope.
172   if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
173     SC->ForgetSema();
174 
175   // Detach from the external Sema source.
176   if (ExternalSemaSource *ExternalSema
177         = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
178     ExternalSema->ForgetSema();
179 }
180 
181 
182 /// makeUnavailableInSystemHeader - There is an error in the current
183 /// context.  If we're still in a system header, and we can plausibly
184 /// make the relevant declaration unavailable instead of erroring, do
185 /// so and return true.
186 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
187                                          StringRef msg) {
188   // If we're not in a function, it's an error.
189   FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
190   if (!fn) return false;
191 
192   // If we're in template instantiation, it's an error.
193   if (!ActiveTemplateInstantiations.empty())
194     return false;
195 
196   // If that function's not in a system header, it's an error.
197   if (!Context.getSourceManager().isInSystemHeader(loc))
198     return false;
199 
200   // If the function is already unavailable, it's not an error.
201   if (fn->hasAttr<UnavailableAttr>()) return true;
202 
203   fn->addAttr(new (Context) UnavailableAttr(loc, Context, msg));
204   return true;
205 }
206 
207 ASTMutationListener *Sema::getASTMutationListener() const {
208   return getASTConsumer().GetASTMutationListener();
209 }
210 
211 /// \brief Print out statistics about the semantic analysis.
212 void Sema::PrintStats() const {
213   llvm::errs() << "\n*** Semantic Analysis Stats:\n";
214   llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
215 
216   BumpAlloc.PrintStats();
217   AnalysisWarnings.PrintStats();
218 }
219 
220 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
221 /// If there is already an implicit cast, merge into the existing one.
222 /// The result is of the given category.
223 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
224                                    CastKind Kind, ExprValueKind VK,
225                                    const CXXCastPath *BasePath,
226                                    CheckedConversionKind CCK) {
227   QualType ExprTy = Context.getCanonicalType(E->getType());
228   QualType TypeTy = Context.getCanonicalType(Ty);
229 
230   if (ExprTy == TypeTy)
231     return Owned(E);
232 
233   if (getLangOptions().ObjCAutoRefCount)
234     CheckObjCARCConversion(SourceRange(), Ty, E, CCK);
235 
236   // If this is a derived-to-base cast to a through a virtual base, we
237   // need a vtable.
238   if (Kind == CK_DerivedToBase &&
239       BasePathInvolvesVirtualBase(*BasePath)) {
240     QualType T = E->getType();
241     if (const PointerType *Pointer = T->getAs<PointerType>())
242       T = Pointer->getPointeeType();
243     if (const RecordType *RecordTy = T->getAs<RecordType>())
244       MarkVTableUsed(E->getLocStart(),
245                      cast<CXXRecordDecl>(RecordTy->getDecl()));
246   }
247 
248   if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) {
249     if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
250       ImpCast->setType(Ty);
251       ImpCast->setValueKind(VK);
252       return Owned(E);
253     }
254   }
255 
256   return Owned(ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK));
257 }
258 
259 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
260 /// to the conversion from scalar type ScalarTy to the Boolean type.
261 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) {
262   switch (ScalarTy->getScalarTypeKind()) {
263   case Type::STK_Bool: return CK_NoOp;
264   case Type::STK_CPointer: return CK_PointerToBoolean;
265   case Type::STK_BlockPointer: return CK_PointerToBoolean;
266   case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean;
267   case Type::STK_MemberPointer: return CK_MemberPointerToBoolean;
268   case Type::STK_Integral: return CK_IntegralToBoolean;
269   case Type::STK_Floating: return CK_FloatingToBoolean;
270   case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean;
271   case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean;
272   }
273   return CK_Invalid;
274 }
275 
276 ExprValueKind Sema::CastCategory(Expr *E) {
277   Expr::Classification Classification = E->Classify(Context);
278   return Classification.isRValue() ? VK_RValue :
279       (Classification.isLValue() ? VK_LValue : VK_XValue);
280 }
281 
282 /// \brief Used to prune the decls of Sema's UnusedFileScopedDecls vector.
283 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
284   if (D->isUsed())
285     return true;
286 
287   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
288     // UnusedFileScopedDecls stores the first declaration.
289     // The declaration may have become definition so check again.
290     const FunctionDecl *DeclToCheck;
291     if (FD->hasBody(DeclToCheck))
292       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
293 
294     // Later redecls may add new information resulting in not having to warn,
295     // so check again.
296     DeclToCheck = FD->getMostRecentDeclaration();
297     if (DeclToCheck != FD)
298       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
299   }
300 
301   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
302     // UnusedFileScopedDecls stores the first declaration.
303     // The declaration may have become definition so check again.
304     const VarDecl *DeclToCheck = VD->getDefinition();
305     if (DeclToCheck)
306       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
307 
308     // Later redecls may add new information resulting in not having to warn,
309     // so check again.
310     DeclToCheck = VD->getMostRecentDeclaration();
311     if (DeclToCheck != VD)
312       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
313   }
314 
315   return false;
316 }
317 
318 namespace {
319   struct UndefinedInternal {
320     NamedDecl *decl;
321     FullSourceLoc useLoc;
322 
323     UndefinedInternal(NamedDecl *decl, FullSourceLoc useLoc)
324       : decl(decl), useLoc(useLoc) {}
325   };
326 
327   bool operator<(const UndefinedInternal &l, const UndefinedInternal &r) {
328     return l.useLoc.isBeforeInTranslationUnitThan(r.useLoc);
329   }
330 }
331 
332 /// checkUndefinedInternals - Check for undefined objects with internal linkage.
333 static void checkUndefinedInternals(Sema &S) {
334   if (S.UndefinedInternals.empty()) return;
335 
336   // Collect all the still-undefined entities with internal linkage.
337   SmallVector<UndefinedInternal, 16> undefined;
338   for (llvm::DenseMap<NamedDecl*,SourceLocation>::iterator
339          i = S.UndefinedInternals.begin(), e = S.UndefinedInternals.end();
340        i != e; ++i) {
341     NamedDecl *decl = i->first;
342 
343     // Ignore attributes that have become invalid.
344     if (decl->isInvalidDecl()) continue;
345 
346     // __attribute__((weakref)) is basically a definition.
347     if (decl->hasAttr<WeakRefAttr>()) continue;
348 
349     if (FunctionDecl *fn = dyn_cast<FunctionDecl>(decl)) {
350       if (fn->isPure() || fn->hasBody())
351         continue;
352     } else {
353       if (cast<VarDecl>(decl)->hasDefinition() != VarDecl::DeclarationOnly)
354         continue;
355     }
356 
357     // We build a FullSourceLoc so that we can sort with array_pod_sort.
358     FullSourceLoc loc(i->second, S.Context.getSourceManager());
359     undefined.push_back(UndefinedInternal(decl, loc));
360   }
361 
362   if (undefined.empty()) return;
363 
364   // Sort (in order of use site) so that we're not (as) dependent on
365   // the iteration order through an llvm::DenseMap.
366   llvm::array_pod_sort(undefined.begin(), undefined.end());
367 
368   for (SmallVectorImpl<UndefinedInternal>::iterator
369          i = undefined.begin(), e = undefined.end(); i != e; ++i) {
370     NamedDecl *decl = i->decl;
371     S.Diag(decl->getLocation(), diag::warn_undefined_internal)
372       << isa<VarDecl>(decl) << decl;
373     S.Diag(i->useLoc, diag::note_used_here);
374   }
375 }
376 
377 void Sema::LoadExternalWeakUndeclaredIdentifiers() {
378   if (!ExternalSource)
379     return;
380 
381   SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs;
382   ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs);
383   for (unsigned I = 0, N = WeakIDs.size(); I != N; ++I) {
384     llvm::DenseMap<IdentifierInfo*,WeakInfo>::iterator Pos
385       = WeakUndeclaredIdentifiers.find(WeakIDs[I].first);
386     if (Pos != WeakUndeclaredIdentifiers.end())
387       continue;
388 
389     WeakUndeclaredIdentifiers.insert(WeakIDs[I]);
390   }
391 }
392 
393 /// ActOnEndOfTranslationUnit - This is called at the very end of the
394 /// translation unit when EOF is reached and all but the top-level scope is
395 /// popped.
396 void Sema::ActOnEndOfTranslationUnit() {
397   // Only complete translation units define vtables and perform implicit
398   // instantiations.
399   if (TUKind == TU_Complete) {
400     // If any dynamic classes have their key function defined within
401     // this translation unit, then those vtables are considered "used" and must
402     // be emitted.
403     for (DynamicClassesType::iterator I = DynamicClasses.begin(ExternalSource),
404                                       E = DynamicClasses.end();
405          I != E; ++I) {
406       assert(!(*I)->isDependentType() &&
407              "Should not see dependent types here!");
408       if (const CXXMethodDecl *KeyFunction = Context.getKeyFunction(*I)) {
409         const FunctionDecl *Definition = 0;
410         if (KeyFunction->hasBody(Definition))
411           MarkVTableUsed(Definition->getLocation(), *I, true);
412       }
413     }
414 
415     // If DefinedUsedVTables ends up marking any virtual member functions it
416     // might lead to more pending template instantiations, which we then need
417     // to instantiate.
418     DefineUsedVTables();
419 
420     // C++: Perform implicit template instantiations.
421     //
422     // FIXME: When we perform these implicit instantiations, we do not
423     // carefully keep track of the point of instantiation (C++ [temp.point]).
424     // This means that name lookup that occurs within the template
425     // instantiation will always happen at the end of the translation unit,
426     // so it will find some names that should not be found. Although this is
427     // common behavior for C++ compilers, it is technically wrong. In the
428     // future, we either need to be able to filter the results of name lookup
429     // or we need to perform template instantiations earlier.
430     PerformPendingInstantiations();
431   }
432 
433   // Remove file scoped decls that turned out to be used.
434   UnusedFileScopedDecls.erase(std::remove_if(UnusedFileScopedDecls.begin(0,
435                                                                          true),
436                                              UnusedFileScopedDecls.end(),
437                               std::bind1st(std::ptr_fun(ShouldRemoveFromUnused),
438                                            this)),
439                               UnusedFileScopedDecls.end());
440 
441   if (TUKind == TU_Prefix) {
442     // Translation unit prefixes don't need any of the checking below.
443     TUScope = 0;
444     return;
445   }
446 
447   // Check for #pragma weak identifiers that were never declared
448   // FIXME: This will cause diagnostics to be emitted in a non-determinstic
449   // order!  Iterating over a densemap like this is bad.
450   LoadExternalWeakUndeclaredIdentifiers();
451   for (llvm::DenseMap<IdentifierInfo*,WeakInfo>::iterator
452        I = WeakUndeclaredIdentifiers.begin(),
453        E = WeakUndeclaredIdentifiers.end(); I != E; ++I) {
454     if (I->second.getUsed()) continue;
455 
456     Diag(I->second.getLocation(), diag::warn_weak_identifier_undeclared)
457       << I->first;
458   }
459 
460   if (TUKind == TU_Module) {
461     // Modules don't need any of the checking below.
462     TUScope = 0;
463     return;
464   }
465 
466   // C99 6.9.2p2:
467   //   A declaration of an identifier for an object that has file
468   //   scope without an initializer, and without a storage-class
469   //   specifier or with the storage-class specifier static,
470   //   constitutes a tentative definition. If a translation unit
471   //   contains one or more tentative definitions for an identifier,
472   //   and the translation unit contains no external definition for
473   //   that identifier, then the behavior is exactly as if the
474   //   translation unit contains a file scope declaration of that
475   //   identifier, with the composite type as of the end of the
476   //   translation unit, with an initializer equal to 0.
477   llvm::SmallSet<VarDecl *, 32> Seen;
478   for (TentativeDefinitionsType::iterator
479             T = TentativeDefinitions.begin(ExternalSource),
480          TEnd = TentativeDefinitions.end();
481        T != TEnd; ++T)
482   {
483     VarDecl *VD = (*T)->getActingDefinition();
484 
485     // If the tentative definition was completed, getActingDefinition() returns
486     // null. If we've already seen this variable before, insert()'s second
487     // return value is false.
488     if (VD == 0 || VD->isInvalidDecl() || !Seen.insert(VD))
489       continue;
490 
491     if (const IncompleteArrayType *ArrayT
492         = Context.getAsIncompleteArrayType(VD->getType())) {
493       if (RequireCompleteType(VD->getLocation(),
494                               ArrayT->getElementType(),
495                               diag::err_tentative_def_incomplete_type_arr)) {
496         VD->setInvalidDecl();
497         continue;
498       }
499 
500       // Set the length of the array to 1 (C99 6.9.2p5).
501       Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
502       llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
503       QualType T = Context.getConstantArrayType(ArrayT->getElementType(),
504                                                 One, ArrayType::Normal, 0);
505       VD->setType(T);
506     } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
507                                    diag::err_tentative_def_incomplete_type))
508       VD->setInvalidDecl();
509 
510     // Notify the consumer that we've completed a tentative definition.
511     if (!VD->isInvalidDecl())
512       Consumer.CompleteTentativeDefinition(VD);
513 
514   }
515 
516   if (LangOpts.CPlusPlus0x &&
517       Diags.getDiagnosticLevel(diag::warn_delegating_ctor_cycle,
518                                SourceLocation())
519         != Diagnostic::Ignored)
520     CheckDelegatingCtorCycles();
521 
522   // If there were errors, disable 'unused' warnings since they will mostly be
523   // noise.
524   if (!Diags.hasErrorOccurred()) {
525     // Output warning for unused file scoped decls.
526     for (UnusedFileScopedDeclsType::iterator
527            I = UnusedFileScopedDecls.begin(ExternalSource),
528            E = UnusedFileScopedDecls.end(); I != E; ++I) {
529       if (ShouldRemoveFromUnused(this, *I))
530         continue;
531 
532       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
533         const FunctionDecl *DiagD;
534         if (!FD->hasBody(DiagD))
535           DiagD = FD;
536         if (DiagD->isDeleted())
537           continue; // Deleted functions are supposed to be unused.
538         if (DiagD->isReferenced()) {
539           if (isa<CXXMethodDecl>(DiagD))
540             Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
541                   << DiagD->getDeclName();
542           else
543             Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
544                   << /*function*/0 << DiagD->getDeclName();
545         } else {
546           Diag(DiagD->getLocation(),
547                isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
548                                          : diag::warn_unused_function)
549                 << DiagD->getDeclName();
550         }
551       } else {
552         const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
553         if (!DiagD)
554           DiagD = cast<VarDecl>(*I);
555         if (DiagD->isReferenced()) {
556           Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
557                 << /*variable*/1 << DiagD->getDeclName();
558         } else {
559           Diag(DiagD->getLocation(), diag::warn_unused_variable)
560                 << DiagD->getDeclName();
561         }
562       }
563     }
564 
565     checkUndefinedInternals(*this);
566   }
567 
568   // Check we've noticed that we're no longer parsing the initializer for every
569   // variable. If we miss cases, then at best we have a performance issue and
570   // at worst a rejects-valid bug.
571   assert(ParsingInitForAutoVars.empty() &&
572          "Didn't unmark var as having its initializer parsed");
573 
574   TUScope = 0;
575 }
576 
577 
578 //===----------------------------------------------------------------------===//
579 // Helper functions.
580 //===----------------------------------------------------------------------===//
581 
582 DeclContext *Sema::getFunctionLevelDeclContext() {
583   DeclContext *DC = CurContext;
584 
585   while (isa<BlockDecl>(DC) || isa<EnumDecl>(DC))
586     DC = DC->getParent();
587 
588   return DC;
589 }
590 
591 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
592 /// to the function decl for the function being parsed.  If we're currently
593 /// in a 'block', this returns the containing context.
594 FunctionDecl *Sema::getCurFunctionDecl() {
595   DeclContext *DC = getFunctionLevelDeclContext();
596   return dyn_cast<FunctionDecl>(DC);
597 }
598 
599 ObjCMethodDecl *Sema::getCurMethodDecl() {
600   DeclContext *DC = getFunctionLevelDeclContext();
601   return dyn_cast<ObjCMethodDecl>(DC);
602 }
603 
604 NamedDecl *Sema::getCurFunctionOrMethodDecl() {
605   DeclContext *DC = getFunctionLevelDeclContext();
606   if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
607     return cast<NamedDecl>(DC);
608   return 0;
609 }
610 
611 Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() {
612   if (!isActive())
613     return;
614 
615   if (llvm::Optional<TemplateDeductionInfo*> Info = SemaRef.isSFINAEContext()) {
616     switch (DiagnosticIDs::getDiagnosticSFINAEResponse(getDiagID())) {
617     case DiagnosticIDs::SFINAE_Report:
618       // Fall through; we'll report the diagnostic below.
619       break;
620 
621     case DiagnosticIDs::SFINAE_AccessControl:
622       // Per C++ Core Issue 1170, access control is part of SFINAE.
623       // Additionally, the AccessCheckingSFINAE flag can be used to temporary
624       // make access control a part of SFINAE for the purposes of checking
625       // type traits.
626       if (!SemaRef.AccessCheckingSFINAE &&
627           !SemaRef.getLangOptions().CPlusPlus0x)
628         break;
629 
630     case DiagnosticIDs::SFINAE_SubstitutionFailure:
631       // Count this failure so that we know that template argument deduction
632       // has failed.
633       ++SemaRef.NumSFINAEErrors;
634       SemaRef.Diags.setLastDiagnosticIgnored();
635       SemaRef.Diags.Clear();
636       Clear();
637       return;
638 
639     case DiagnosticIDs::SFINAE_Suppress:
640       // Make a copy of this suppressed diagnostic and store it with the
641       // template-deduction information;
642       FlushCounts();
643       DiagnosticInfo DiagInfo(&SemaRef.Diags);
644 
645       if (*Info)
646         (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
647                         PartialDiagnostic(DiagInfo,
648                                           SemaRef.Context.getDiagAllocator()));
649 
650       // Suppress this diagnostic.
651       SemaRef.Diags.setLastDiagnosticIgnored();
652       SemaRef.Diags.Clear();
653       Clear();
654       return;
655     }
656   }
657 
658   // Emit the diagnostic.
659   if (!this->Emit())
660     return;
661 
662   // If this is not a note, and we're in a template instantiation
663   // that is different from the last template instantiation where
664   // we emitted an error, print a template instantiation
665   // backtrace.
666   if (!DiagnosticIDs::isBuiltinNote(DiagID) &&
667       !SemaRef.ActiveTemplateInstantiations.empty() &&
668       SemaRef.ActiveTemplateInstantiations.back()
669         != SemaRef.LastTemplateInstantiationErrorContext) {
670     SemaRef.PrintInstantiationStack();
671     SemaRef.LastTemplateInstantiationErrorContext
672       = SemaRef.ActiveTemplateInstantiations.back();
673   }
674 }
675 
676 Sema::SemaDiagnosticBuilder Sema::Diag(SourceLocation Loc, unsigned DiagID) {
677   DiagnosticBuilder DB = Diags.Report(Loc, DiagID);
678   return SemaDiagnosticBuilder(DB, *this, DiagID);
679 }
680 
681 Sema::SemaDiagnosticBuilder
682 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
683   SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
684   PD.Emit(Builder);
685 
686   return Builder;
687 }
688 
689 /// \brief Looks through the macro-expansion chain for the given
690 /// location, looking for a macro expansion with the given name.
691 /// If one is found, returns true and sets the location to that
692 /// expansion loc.
693 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) {
694   SourceLocation loc = locref;
695   if (!loc.isMacroID()) return false;
696 
697   // There's no good way right now to look at the intermediate
698   // expansions, so just jump to the expansion location.
699   loc = getSourceManager().getExpansionLoc(loc);
700 
701   // If that's written with the name, stop here.
702   SmallVector<char, 16> buffer;
703   if (getPreprocessor().getSpelling(loc, buffer) == name) {
704     locref = loc;
705     return true;
706   }
707   return false;
708 }
709 
710 /// \brief Determines the active Scope associated with the given declaration
711 /// context.
712 ///
713 /// This routine maps a declaration context to the active Scope object that
714 /// represents that declaration context in the parser. It is typically used
715 /// from "scope-less" code (e.g., template instantiation, lazy creation of
716 /// declarations) that injects a name for name-lookup purposes and, therefore,
717 /// must update the Scope.
718 ///
719 /// \returns The scope corresponding to the given declaraion context, or NULL
720 /// if no such scope is open.
721 Scope *Sema::getScopeForContext(DeclContext *Ctx) {
722 
723   if (!Ctx)
724     return 0;
725 
726   Ctx = Ctx->getPrimaryContext();
727   for (Scope *S = getCurScope(); S; S = S->getParent()) {
728     // Ignore scopes that cannot have declarations. This is important for
729     // out-of-line definitions of static class members.
730     if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
731       if (DeclContext *Entity = static_cast<DeclContext *> (S->getEntity()))
732         if (Ctx == Entity->getPrimaryContext())
733           return S;
734   }
735 
736   return 0;
737 }
738 
739 /// \brief Enter a new function scope
740 void Sema::PushFunctionScope() {
741   if (FunctionScopes.size() == 1) {
742     // Use the "top" function scope rather than having to allocate
743     // memory for a new scope.
744     FunctionScopes.back()->Clear();
745     FunctionScopes.push_back(FunctionScopes.back());
746     return;
747   }
748 
749   FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
750 }
751 
752 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
753   FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
754                                               BlockScope, Block));
755 }
756 
757 void Sema::PopFunctionOrBlockScope(const AnalysisBasedWarnings::Policy *WP,
758                                    const Decl *D, const BlockExpr *blkExpr) {
759   FunctionScopeInfo *Scope = FunctionScopes.pop_back_val();
760   assert(!FunctionScopes.empty() && "mismatched push/pop!");
761 
762   // Issue any analysis-based warnings.
763   if (WP && D)
764     AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr);
765   else {
766     for (SmallVectorImpl<sema::PossiblyUnreachableDiag>::iterator
767          i = Scope->PossiblyUnreachableDiags.begin(),
768          e = Scope->PossiblyUnreachableDiags.end();
769          i != e; ++i) {
770       const sema::PossiblyUnreachableDiag &D = *i;
771       Diag(D.Loc, D.PD);
772     }
773   }
774 
775   if (FunctionScopes.back() != Scope) {
776     delete Scope;
777   }
778 }
779 
780 /// \brief Determine whether any errors occurred within this function/method/
781 /// block.
782 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
783   return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
784 }
785 
786 BlockScopeInfo *Sema::getCurBlock() {
787   if (FunctionScopes.empty())
788     return 0;
789 
790   return dyn_cast<BlockScopeInfo>(FunctionScopes.back());
791 }
792 
793 // Pin this vtable to this file.
794 ExternalSemaSource::~ExternalSemaSource() {}
795 
796 std::pair<ObjCMethodList, ObjCMethodList>
797 ExternalSemaSource::ReadMethodPool(Selector Sel) {
798   return std::pair<ObjCMethodList, ObjCMethodList>();
799 }
800 
801 void ExternalSemaSource::ReadKnownNamespaces(
802                            SmallVectorImpl<NamespaceDecl *> &Namespaces) {
803 }
804 
805 void PrettyDeclStackTraceEntry::print(raw_ostream &OS) const {
806   SourceLocation Loc = this->Loc;
807   if (!Loc.isValid() && TheDecl) Loc = TheDecl->getLocation();
808   if (Loc.isValid()) {
809     Loc.print(OS, S.getSourceManager());
810     OS << ": ";
811   }
812   OS << Message;
813 
814   if (TheDecl && isa<NamedDecl>(TheDecl)) {
815     std::string Name = cast<NamedDecl>(TheDecl)->getNameAsString();
816     if (!Name.empty())
817       OS << " '" << Name << '\'';
818   }
819 
820   OS << '\n';
821 }
822 
823 /// \brief Figure out if an expression could be turned into a call.
824 ///
825 /// Use this when trying to recover from an error where the programmer may have
826 /// written just the name of a function instead of actually calling it.
827 ///
828 /// \param E - The expression to examine.
829 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
830 ///  with no arguments, this parameter is set to the type returned by such a
831 ///  call; otherwise, it is set to an empty QualType.
832 /// \param NonTemplateOverloads - If the expression is an overloaded function
833 ///  name, this parameter is populated with the decls of the various overloads.
834 bool Sema::isExprCallable(const Expr &E, QualType &ZeroArgCallReturnTy,
835                           UnresolvedSetImpl &NonTemplateOverloads) {
836   ZeroArgCallReturnTy = QualType();
837   NonTemplateOverloads.clear();
838   if (const OverloadExpr *Overloads = dyn_cast<OverloadExpr>(&E)) {
839     for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
840          DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
841       // Our overload set may include TemplateDecls, which we'll ignore for our
842       // present purpose.
843       if (const FunctionDecl *OverloadDecl = dyn_cast<FunctionDecl>(*it)) {
844         NonTemplateOverloads.addDecl(*it);
845         if (OverloadDecl->getMinRequiredArguments() == 0)
846           ZeroArgCallReturnTy = OverloadDecl->getResultType();
847       }
848     }
849     return true;
850   }
851 
852   if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(&E)) {
853     if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
854       if (Fun->getMinRequiredArguments() == 0)
855         ZeroArgCallReturnTy = Fun->getResultType();
856       return true;
857     }
858   }
859 
860   // We don't have an expression that's convenient to get a FunctionDecl from,
861   // but we can at least check if the type is "function of 0 arguments".
862   QualType ExprTy = E.getType();
863   const FunctionType *FunTy = NULL;
864   QualType PointeeTy = ExprTy->getPointeeType();
865   if (!PointeeTy.isNull())
866     FunTy = PointeeTy->getAs<FunctionType>();
867   if (!FunTy)
868     FunTy = ExprTy->getAs<FunctionType>();
869   if (!FunTy && ExprTy == Context.BoundMemberTy) {
870     // Look for the bound-member type.  If it's still overloaded, give up,
871     // although we probably should have fallen into the OverloadExpr case above
872     // if we actually have an overloaded bound member.
873     QualType BoundMemberTy = Expr::findBoundMemberType(&E);
874     if (!BoundMemberTy.isNull())
875       FunTy = BoundMemberTy->castAs<FunctionType>();
876   }
877 
878   if (const FunctionProtoType *FPT =
879       dyn_cast_or_null<FunctionProtoType>(FunTy)) {
880     if (FPT->getNumArgs() == 0)
881       ZeroArgCallReturnTy = FunTy->getResultType();
882     return true;
883   }
884   return false;
885 }
886 
887 /// \brief Give notes for a set of overloads.
888 ///
889 /// A companion to isExprCallable. In cases when the name that the programmer
890 /// wrote was an overloaded function, we may be able to make some guesses about
891 /// plausible overloads based on their return types; such guesses can be handed
892 /// off to this method to be emitted as notes.
893 ///
894 /// \param Overloads - The overloads to note.
895 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
896 ///  -fshow-overloads=best, this is the location to attach to the note about too
897 ///  many candidates. Typically this will be the location of the original
898 ///  ill-formed expression.
899 void Sema::NoteOverloads(const UnresolvedSetImpl &Overloads,
900                          const SourceLocation FinalNoteLoc) {
901   int ShownOverloads = 0;
902   int SuppressedOverloads = 0;
903   for (UnresolvedSetImpl::iterator It = Overloads.begin(),
904        DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
905     // FIXME: Magic number for max shown overloads stolen from
906     // OverloadCandidateSet::NoteCandidates.
907     if (ShownOverloads >= 4 &&
908         Diags.getShowOverloads() == Diagnostic::Ovl_Best) {
909       ++SuppressedOverloads;
910       continue;
911     }
912     Diag(cast<FunctionDecl>(*It)->getSourceRange().getBegin(),
913          diag::note_member_ref_possible_intended_overload);
914     ++ShownOverloads;
915   }
916   if (SuppressedOverloads)
917     Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
918         << SuppressedOverloads;
919 }
920