1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the actions class which performs semantic analysis and
11 // builds an AST out of a parse stream.
13 //===----------------------------------------------------------------------===//
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;
42 FunctionScopeInfo::~FunctionScopeInfo() { }
44 void FunctionScopeInfo::Clear() {
45 HasBranchProtectedScope = false;
46 HasBranchIntoScope = false;
47 HasIndirectGoto = false;
52 PossiblyUnreachableDiags.clear();
55 BlockScopeInfo::~BlockScopeInfo() { }
57 void Sema::ActOnTranslationUnitScope(Scope *S) {
59 PushDeclContext(S, Context.getTranslationUnitDecl());
61 VAListTagName = PP.getIdentifierInfo("__va_list_tag");
63 if (!Context.isInt128Installed() && // May be set by ASTReader.
64 PP.getTargetInfo().getPointerWidth(0) >= 64) {
65 TypeSourceInfo *TInfo;
67 // Install [u]int128_t for 64-bit targets.
68 TInfo = Context.getTrivialTypeSourceInfo(Context.Int128Ty);
69 PushOnScopeChains(TypedefDecl::Create(Context, CurContext,
72 &Context.Idents.get("__int128_t"),
75 TInfo = Context.getTrivialTypeSourceInfo(Context.UnsignedInt128Ty);
76 PushOnScopeChains(TypedefDecl::Create(Context, CurContext,
79 &Context.Idents.get("__uint128_t"),
81 Context.setInt128Installed();
85 if (!PP.getLangOptions().ObjC1) return;
87 // Built-in ObjC types may already be set by ASTReader (hence isNull checks).
88 if (Context.getObjCSelType().isNull()) {
89 // Create the built-in typedef for 'SEL'.
90 QualType SelT = Context.getPointerType(Context.ObjCBuiltinSelTy);
91 TypeSourceInfo *SelInfo = Context.getTrivialTypeSourceInfo(SelT);
92 TypedefDecl *SelTypedef
93 = TypedefDecl::Create(Context, CurContext,
94 SourceLocation(), SourceLocation(),
95 &Context.Idents.get("SEL"), SelInfo);
96 PushOnScopeChains(SelTypedef, TUScope);
97 Context.setObjCSelType(Context.getTypeDeclType(SelTypedef));
98 Context.ObjCSelRedefinitionType = Context.getObjCSelType();
101 // Synthesize "@class Protocol;
102 if (Context.getObjCProtoType().isNull()) {
103 ObjCInterfaceDecl *ProtocolDecl =
104 ObjCInterfaceDecl::Create(Context, CurContext, SourceLocation(),
105 &Context.Idents.get("Protocol"),
106 SourceLocation(), true);
107 Context.setObjCProtoType(Context.getObjCInterfaceType(ProtocolDecl));
108 PushOnScopeChains(ProtocolDecl, TUScope, false);
110 // Create the built-in typedef for 'id'.
111 if (Context.getObjCIdType().isNull()) {
112 QualType T = Context.getObjCObjectType(Context.ObjCBuiltinIdTy, 0, 0);
113 T = Context.getObjCObjectPointerType(T);
114 TypeSourceInfo *IdInfo = Context.getTrivialTypeSourceInfo(T);
115 TypedefDecl *IdTypedef
116 = TypedefDecl::Create(Context, CurContext,
117 SourceLocation(), SourceLocation(),
118 &Context.Idents.get("id"), IdInfo);
119 PushOnScopeChains(IdTypedef, TUScope);
120 Context.setObjCIdType(Context.getTypeDeclType(IdTypedef));
121 Context.ObjCIdRedefinitionType = Context.getObjCIdType();
123 // Create the built-in typedef for 'Class'.
124 if (Context.getObjCClassType().isNull()) {
125 QualType T = Context.getObjCObjectType(Context.ObjCBuiltinClassTy, 0, 0);
126 T = Context.getObjCObjectPointerType(T);
127 TypeSourceInfo *ClassInfo = Context.getTrivialTypeSourceInfo(T);
128 TypedefDecl *ClassTypedef
129 = TypedefDecl::Create(Context, CurContext,
130 SourceLocation(), SourceLocation(),
131 &Context.Idents.get("Class"), ClassInfo);
132 PushOnScopeChains(ClassTypedef, TUScope);
133 Context.setObjCClassType(Context.getTypeDeclType(ClassTypedef));
134 Context.ObjCClassRedefinitionType = Context.getObjCClassType();
138 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
139 bool CompleteTranslationUnit,
140 CodeCompleteConsumer *CodeCompleter)
141 : TheTargetAttributesSema(0), FPFeatures(pp.getLangOptions()),
142 LangOpts(pp.getLangOptions()), PP(pp), Context(ctxt), Consumer(consumer),
143 Diags(PP.getDiagnostics()), SourceMgr(PP.getSourceManager()),
144 CollectStats(false), ExternalSource(0), CodeCompleter(CodeCompleter),
145 CurContext(0), PackContext(0), MSStructPragmaOn(false), VisContext(0),
146 ExprNeedsCleanups(0), LateTemplateParser(0), OpaqueParser(0),
147 IdResolver(pp.getLangOptions()), CXXTypeInfoDecl(0), MSVCGuidDecl(0),
148 GlobalNewDeleteDeclared(false),
149 CompleteTranslationUnit(CompleteTranslationUnit),
150 NumSFINAEErrors(0), SuppressAccessChecking(false),
151 AccessCheckingSFINAE(false), InNonInstantiationSFINAEContext(false),
152 NonInstantiationEntries(0), ArgumentPackSubstitutionIndex(-1),
153 CurrentInstantiationScope(0), TyposCorrected(0),
154 AnalysisWarnings(*this)
157 LoadedExternalKnownNamespaces = false;
159 if (getLangOptions().CPlusPlus)
160 FieldCollector.reset(new CXXFieldCollector());
162 // Tell diagnostics how to render things from the AST library.
163 PP.getDiagnostics().SetArgToStringFn(&FormatASTNodeDiagnosticArgument,
166 ExprEvalContexts.push_back(
167 ExpressionEvaluationContextRecord(PotentiallyEvaluated, 0, false));
169 FunctionScopes.push_back(new FunctionScopeInfo(Diags));
172 void Sema::Initialize() {
173 // Tell the AST consumer about this Sema object.
174 Consumer.Initialize(Context);
176 // FIXME: Isn't this redundant with the initialization above?
177 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
178 SC->InitializeSema(*this);
180 // Tell the external Sema source about this Sema object.
181 if (ExternalSemaSource *ExternalSema
182 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
183 ExternalSema->InitializeSema(*this);
187 if (PackContext) FreePackedContext();
188 if (VisContext) FreeVisContext();
189 delete TheTargetAttributesSema;
190 MSStructPragmaOn = false;
191 // Kill all the active scopes.
192 for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I)
193 delete FunctionScopes[I];
194 if (FunctionScopes.size() == 1)
195 delete FunctionScopes[0];
197 // Tell the SemaConsumer to forget about us; we're going out of scope.
198 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
201 // Detach from the external Sema source.
202 if (ExternalSemaSource *ExternalSema
203 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
204 ExternalSema->ForgetSema();
208 /// makeUnavailableInSystemHeader - There is an error in the current
209 /// context. If we're still in a system header, and we can plausibly
210 /// make the relevant declaration unavailable instead of erroring, do
211 /// so and return true.
212 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
213 llvm::StringRef msg) {
214 // If we're not in a function, it's an error.
215 FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
216 if (!fn) return false;
218 // If we're in template instantiation, it's an error.
219 if (!ActiveTemplateInstantiations.empty())
222 // If that function's not in a system header, it's an error.
223 if (!Context.getSourceManager().isInSystemHeader(loc))
226 // If the function is already unavailable, it's not an error.
227 if (fn->hasAttr<UnavailableAttr>()) return true;
229 fn->addAttr(new (Context) UnavailableAttr(loc, Context, msg));
233 ASTMutationListener *Sema::getASTMutationListener() const {
234 return getASTConsumer().GetASTMutationListener();
237 /// \brief Print out statistics about the semantic analysis.
238 void Sema::PrintStats() const {
239 llvm::errs() << "\n*** Semantic Analysis Stats:\n";
240 llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
242 BumpAlloc.PrintStats();
243 AnalysisWarnings.PrintStats();
246 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
247 /// If there is already an implicit cast, merge into the existing one.
248 /// The result is of the given category.
249 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
250 CastKind Kind, ExprValueKind VK,
251 const CXXCastPath *BasePath,
252 CheckedConversionKind CCK) {
253 QualType ExprTy = Context.getCanonicalType(E->getType());
254 QualType TypeTy = Context.getCanonicalType(Ty);
256 if (ExprTy == TypeTy)
259 if (getLangOptions().ObjCAutoRefCount)
260 CheckObjCARCConversion(SourceRange(), Ty, E, CCK);
262 // If this is a derived-to-base cast to a through a virtual base, we
264 if (Kind == CK_DerivedToBase &&
265 BasePathInvolvesVirtualBase(*BasePath)) {
266 QualType T = E->getType();
267 if (const PointerType *Pointer = T->getAs<PointerType>())
268 T = Pointer->getPointeeType();
269 if (const RecordType *RecordTy = T->getAs<RecordType>())
270 MarkVTableUsed(E->getLocStart(),
271 cast<CXXRecordDecl>(RecordTy->getDecl()));
274 if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) {
275 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
276 ImpCast->setType(Ty);
277 ImpCast->setValueKind(VK);
282 return Owned(ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK));
285 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
286 /// to the conversion from scalar type ScalarTy to the Boolean type.
287 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) {
288 switch (ScalarTy->getScalarTypeKind()) {
289 case Type::STK_Bool: return CK_NoOp;
290 case Type::STK_Pointer: return CK_PointerToBoolean;
291 case Type::STK_MemberPointer: return CK_MemberPointerToBoolean;
292 case Type::STK_Integral: return CK_IntegralToBoolean;
293 case Type::STK_Floating: return CK_FloatingToBoolean;
294 case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean;
295 case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean;
300 ExprValueKind Sema::CastCategory(Expr *E) {
301 Expr::Classification Classification = E->Classify(Context);
302 return Classification.isRValue() ? VK_RValue :
303 (Classification.isLValue() ? VK_LValue : VK_XValue);
306 /// \brief Used to prune the decls of Sema's UnusedFileScopedDecls vector.
307 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
311 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
312 // UnusedFileScopedDecls stores the first declaration.
313 // The declaration may have become definition so check again.
314 const FunctionDecl *DeclToCheck;
315 if (FD->hasBody(DeclToCheck))
316 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
318 // Later redecls may add new information resulting in not having to warn,
320 DeclToCheck = FD->getMostRecentDeclaration();
321 if (DeclToCheck != FD)
322 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
325 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
326 // UnusedFileScopedDecls stores the first declaration.
327 // The declaration may have become definition so check again.
328 const VarDecl *DeclToCheck = VD->getDefinition();
330 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
332 // Later redecls may add new information resulting in not having to warn,
334 DeclToCheck = VD->getMostRecentDeclaration();
335 if (DeclToCheck != VD)
336 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
343 struct UndefinedInternal {
345 FullSourceLoc useLoc;
347 UndefinedInternal(NamedDecl *decl, FullSourceLoc useLoc)
348 : decl(decl), useLoc(useLoc) {}
351 bool operator<(const UndefinedInternal &l, const UndefinedInternal &r) {
352 return l.useLoc.isBeforeInTranslationUnitThan(r.useLoc);
356 /// checkUndefinedInternals - Check for undefined objects with internal linkage.
357 static void checkUndefinedInternals(Sema &S) {
358 if (S.UndefinedInternals.empty()) return;
360 // Collect all the still-undefined entities with internal linkage.
361 llvm::SmallVector<UndefinedInternal, 16> undefined;
362 for (llvm::DenseMap<NamedDecl*,SourceLocation>::iterator
363 i = S.UndefinedInternals.begin(), e = S.UndefinedInternals.end();
365 NamedDecl *decl = i->first;
367 // Ignore attributes that have become invalid.
368 if (decl->isInvalidDecl()) continue;
370 // __attribute__((weakref)) is basically a definition.
371 if (decl->hasAttr<WeakRefAttr>()) continue;
373 if (FunctionDecl *fn = dyn_cast<FunctionDecl>(decl)) {
374 if (fn->isPure() || fn->hasBody())
377 if (cast<VarDecl>(decl)->hasDefinition() != VarDecl::DeclarationOnly)
381 // We build a FullSourceLoc so that we can sort with array_pod_sort.
382 FullSourceLoc loc(i->second, S.Context.getSourceManager());
383 undefined.push_back(UndefinedInternal(decl, loc));
386 if (undefined.empty()) return;
388 // Sort (in order of use site) so that we're not (as) dependent on
389 // the iteration order through an llvm::DenseMap.
390 llvm::array_pod_sort(undefined.begin(), undefined.end());
392 for (llvm::SmallVectorImpl<UndefinedInternal>::iterator
393 i = undefined.begin(), e = undefined.end(); i != e; ++i) {
394 NamedDecl *decl = i->decl;
395 S.Diag(decl->getLocation(), diag::warn_undefined_internal)
396 << isa<VarDecl>(decl) << decl;
397 S.Diag(i->useLoc, diag::note_used_here);
401 /// ActOnEndOfTranslationUnit - This is called at the very end of the
402 /// translation unit when EOF is reached and all but the top-level scope is
404 void Sema::ActOnEndOfTranslationUnit() {
405 // At PCH writing, implicit instantiations and VTable handling info are
406 // stored and performed when the PCH is included.
407 if (CompleteTranslationUnit) {
408 // If any dynamic classes have their key function defined within
409 // this translation unit, then those vtables are considered "used" and must
411 for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I) {
412 assert(!DynamicClasses[I]->isDependentType() &&
413 "Should not see dependent types here!");
414 if (const CXXMethodDecl *KeyFunction
415 = Context.getKeyFunction(DynamicClasses[I])) {
416 const FunctionDecl *Definition = 0;
417 if (KeyFunction->hasBody(Definition))
418 MarkVTableUsed(Definition->getLocation(), DynamicClasses[I], true);
422 // If DefinedUsedVTables ends up marking any virtual member functions it
423 // might lead to more pending template instantiations, which we then need
427 // C++: Perform implicit template instantiations.
429 // FIXME: When we perform these implicit instantiations, we do not
430 // carefully keep track of the point of instantiation (C++ [temp.point]).
431 // This means that name lookup that occurs within the template
432 // instantiation will always happen at the end of the translation unit,
433 // so it will find some names that should not be found. Although this is
434 // common behavior for C++ compilers, it is technically wrong. In the
435 // future, we either need to be able to filter the results of name lookup
436 // or we need to perform template instantiations earlier.
437 PerformPendingInstantiations();
440 // Remove file scoped decls that turned out to be used.
441 UnusedFileScopedDecls.erase(std::remove_if(UnusedFileScopedDecls.begin(),
442 UnusedFileScopedDecls.end(),
443 std::bind1st(std::ptr_fun(ShouldRemoveFromUnused),
445 UnusedFileScopedDecls.end());
447 if (!CompleteTranslationUnit) {
452 // Check for #pragma weak identifiers that were never declared
453 // FIXME: This will cause diagnostics to be emitted in a non-determinstic
454 // order! Iterating over a densemap like this is bad.
455 for (llvm::DenseMap<IdentifierInfo*,WeakInfo>::iterator
456 I = WeakUndeclaredIdentifiers.begin(),
457 E = WeakUndeclaredIdentifiers.end(); I != E; ++I) {
458 if (I->second.getUsed()) continue;
460 Diag(I->second.getLocation(), diag::warn_weak_identifier_undeclared)
465 // A declaration of an identifier for an object that has file
466 // scope without an initializer, and without a storage-class
467 // specifier or with the storage-class specifier static,
468 // constitutes a tentative definition. If a translation unit
469 // contains one or more tentative definitions for an identifier,
470 // and the translation unit contains no external definition for
471 // that identifier, then the behavior is exactly as if the
472 // translation unit contains a file scope declaration of that
473 // identifier, with the composite type as of the end of the
474 // translation unit, with an initializer equal to 0.
475 llvm::SmallSet<VarDecl *, 32> Seen;
476 for (unsigned i = 0, e = TentativeDefinitions.size(); i != e; ++i) {
477 VarDecl *VD = TentativeDefinitions[i]->getActingDefinition();
479 // If the tentative definition was completed, getActingDefinition() returns
480 // null. If we've already seen this variable before, insert()'s second
481 // return value is false.
482 if (VD == 0 || VD->isInvalidDecl() || !Seen.insert(VD))
485 if (const IncompleteArrayType *ArrayT
486 = Context.getAsIncompleteArrayType(VD->getType())) {
487 if (RequireCompleteType(VD->getLocation(),
488 ArrayT->getElementType(),
489 diag::err_tentative_def_incomplete_type_arr)) {
490 VD->setInvalidDecl();
494 // Set the length of the array to 1 (C99 6.9.2p5).
495 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
496 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
497 QualType T = Context.getConstantArrayType(ArrayT->getElementType(),
498 One, ArrayType::Normal, 0);
500 } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
501 diag::err_tentative_def_incomplete_type))
502 VD->setInvalidDecl();
504 // Notify the consumer that we've completed a tentative definition.
505 if (!VD->isInvalidDecl())
506 Consumer.CompleteTentativeDefinition(VD);
510 if (LangOpts.CPlusPlus0x &&
511 Diags.getDiagnosticLevel(diag::warn_delegating_ctor_cycle,
513 != Diagnostic::Ignored)
514 CheckDelegatingCtorCycles();
516 // If there were errors, disable 'unused' warnings since they will mostly be
518 if (!Diags.hasErrorOccurred()) {
519 // Output warning for unused file scoped decls.
520 for (llvm::SmallVectorImpl<const DeclaratorDecl*>::iterator
521 I = UnusedFileScopedDecls.begin(),
522 E = UnusedFileScopedDecls.end(); I != E; ++I) {
523 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
524 const FunctionDecl *DiagD;
525 if (!FD->hasBody(DiagD))
527 if (DiagD->isDeleted())
528 continue; // Deleted functions are supposed to be unused.
529 if (DiagD->isReferenced()) {
530 if (isa<CXXMethodDecl>(DiagD))
531 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
532 << DiagD->getDeclName();
534 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
535 << /*function*/0 << DiagD->getDeclName();
537 Diag(DiagD->getLocation(),
538 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
539 : diag::warn_unused_function)
540 << DiagD->getDeclName();
543 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
545 DiagD = cast<VarDecl>(*I);
546 if (DiagD->isReferenced()) {
547 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
548 << /*variable*/1 << DiagD->getDeclName();
550 Diag(DiagD->getLocation(), diag::warn_unused_variable)
551 << DiagD->getDeclName();
556 checkUndefinedInternals(*this);
559 // Check we've noticed that we're no longer parsing the initializer for every
560 // variable. If we miss cases, then at best we have a performance issue and
561 // at worst a rejects-valid bug.
562 assert(ParsingInitForAutoVars.empty() &&
563 "Didn't unmark var as having its initializer parsed");
569 //===----------------------------------------------------------------------===//
571 //===----------------------------------------------------------------------===//
573 DeclContext *Sema::getFunctionLevelDeclContext() {
574 DeclContext *DC = CurContext;
576 while (isa<BlockDecl>(DC) || isa<EnumDecl>(DC))
577 DC = DC->getParent();
582 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
583 /// to the function decl for the function being parsed. If we're currently
584 /// in a 'block', this returns the containing context.
585 FunctionDecl *Sema::getCurFunctionDecl() {
586 DeclContext *DC = getFunctionLevelDeclContext();
587 return dyn_cast<FunctionDecl>(DC);
590 ObjCMethodDecl *Sema::getCurMethodDecl() {
591 DeclContext *DC = getFunctionLevelDeclContext();
592 return dyn_cast<ObjCMethodDecl>(DC);
595 NamedDecl *Sema::getCurFunctionOrMethodDecl() {
596 DeclContext *DC = getFunctionLevelDeclContext();
597 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
598 return cast<NamedDecl>(DC);
602 Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() {
606 if (llvm::Optional<TemplateDeductionInfo*> Info = SemaRef.isSFINAEContext()) {
607 switch (DiagnosticIDs::getDiagnosticSFINAEResponse(getDiagID())) {
608 case DiagnosticIDs::SFINAE_Report:
609 // Fall through; we'll report the diagnostic below.
612 case DiagnosticIDs::SFINAE_AccessControl:
613 // Per C++ Core Issue 1170, access control is part of SFINAE.
614 // Additionally, the AccessCheckingSFINAE flag can be used to temporary
615 // make access control a part of SFINAE for the purposes of checking
617 if (!SemaRef.AccessCheckingSFINAE &&
618 !SemaRef.getLangOptions().CPlusPlus0x)
621 case DiagnosticIDs::SFINAE_SubstitutionFailure:
622 // Count this failure so that we know that template argument deduction
624 ++SemaRef.NumSFINAEErrors;
625 SemaRef.Diags.setLastDiagnosticIgnored();
626 SemaRef.Diags.Clear();
630 case DiagnosticIDs::SFINAE_Suppress:
631 // Make a copy of this suppressed diagnostic and store it with the
632 // template-deduction information;
634 DiagnosticInfo DiagInfo(&SemaRef.Diags);
637 (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
638 PartialDiagnostic(DiagInfo,
639 SemaRef.Context.getDiagAllocator()));
641 // Suppress this diagnostic.
642 SemaRef.Diags.setLastDiagnosticIgnored();
643 SemaRef.Diags.Clear();
649 // Emit the diagnostic.
653 // If this is not a note, and we're in a template instantiation
654 // that is different from the last template instantiation where
655 // we emitted an error, print a template instantiation
657 if (!DiagnosticIDs::isBuiltinNote(DiagID) &&
658 !SemaRef.ActiveTemplateInstantiations.empty() &&
659 SemaRef.ActiveTemplateInstantiations.back()
660 != SemaRef.LastTemplateInstantiationErrorContext) {
661 SemaRef.PrintInstantiationStack();
662 SemaRef.LastTemplateInstantiationErrorContext
663 = SemaRef.ActiveTemplateInstantiations.back();
667 Sema::SemaDiagnosticBuilder Sema::Diag(SourceLocation Loc, unsigned DiagID) {
668 DiagnosticBuilder DB = Diags.Report(Loc, DiagID);
669 return SemaDiagnosticBuilder(DB, *this, DiagID);
672 Sema::SemaDiagnosticBuilder
673 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
674 SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
680 /// \brief Looks through the macro-instantiation chain for the given
681 /// location, looking for a macro instantiation with the given name.
682 /// If one is found, returns true and sets the location to that
683 /// instantiation loc.
684 bool Sema::findMacroSpelling(SourceLocation &locref, llvm::StringRef name) {
685 SourceLocation loc = locref;
686 if (!loc.isMacroID()) return false;
688 // There's no good way right now to look at the intermediate
689 // instantiations, so just jump to the instantiation location.
690 loc = getSourceManager().getInstantiationLoc(loc);
692 // If that's written with the name, stop here.
693 llvm::SmallVector<char, 16> buffer;
694 if (getPreprocessor().getSpelling(loc, buffer) == name) {
701 /// \brief Determines the active Scope associated with the given declaration
704 /// This routine maps a declaration context to the active Scope object that
705 /// represents that declaration context in the parser. It is typically used
706 /// from "scope-less" code (e.g., template instantiation, lazy creation of
707 /// declarations) that injects a name for name-lookup purposes and, therefore,
708 /// must update the Scope.
710 /// \returns The scope corresponding to the given declaraion context, or NULL
711 /// if no such scope is open.
712 Scope *Sema::getScopeForContext(DeclContext *Ctx) {
717 Ctx = Ctx->getPrimaryContext();
718 for (Scope *S = getCurScope(); S; S = S->getParent()) {
719 // Ignore scopes that cannot have declarations. This is important for
720 // out-of-line definitions of static class members.
721 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
722 if (DeclContext *Entity = static_cast<DeclContext *> (S->getEntity()))
723 if (Ctx == Entity->getPrimaryContext())
730 /// \brief Enter a new function scope
731 void Sema::PushFunctionScope() {
732 if (FunctionScopes.size() == 1) {
733 // Use the "top" function scope rather than having to allocate
734 // memory for a new scope.
735 FunctionScopes.back()->Clear();
736 FunctionScopes.push_back(FunctionScopes.back());
740 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
743 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
744 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
748 void Sema::PopFunctionOrBlockScope(const AnalysisBasedWarnings::Policy *WP,
749 const Decl *D, const BlockExpr *blkExpr) {
750 FunctionScopeInfo *Scope = FunctionScopes.pop_back_val();
751 assert(!FunctionScopes.empty() && "mismatched push/pop!");
753 // Issue any analysis-based warnings.
755 AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr);
757 for (llvm::SmallVectorImpl<sema::PossiblyUnreachableDiag>::iterator
758 i = Scope->PossiblyUnreachableDiags.begin(),
759 e = Scope->PossiblyUnreachableDiags.end();
761 const sema::PossiblyUnreachableDiag &D = *i;
766 if (FunctionScopes.back() != Scope) {
771 /// \brief Determine whether any errors occurred within this function/method/
773 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
774 return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
777 BlockScopeInfo *Sema::getCurBlock() {
778 if (FunctionScopes.empty())
781 return dyn_cast<BlockScopeInfo>(FunctionScopes.back());
784 // Pin this vtable to this file.
785 ExternalSemaSource::~ExternalSemaSource() {}
787 std::pair<ObjCMethodList, ObjCMethodList>
788 ExternalSemaSource::ReadMethodPool(Selector Sel) {
789 return std::pair<ObjCMethodList, ObjCMethodList>();
792 void ExternalSemaSource::ReadKnownNamespaces(
793 llvm::SmallVectorImpl<NamespaceDecl *> &Namespaces) {
796 void PrettyDeclStackTraceEntry::print(llvm::raw_ostream &OS) const {
797 SourceLocation Loc = this->Loc;
798 if (!Loc.isValid() && TheDecl) Loc = TheDecl->getLocation();
800 Loc.print(OS, S.getSourceManager());
805 if (TheDecl && isa<NamedDecl>(TheDecl)) {
806 std::string Name = cast<NamedDecl>(TheDecl)->getNameAsString();
808 OS << " '" << Name << '\'';
814 /// \brief Figure out if an expression could be turned into a call.
816 /// Use this when trying to recover from an error where the programmer may have
817 /// written just the name of a function instead of actually calling it.
819 /// \param E - The expression to examine.
820 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call
821 /// with no arguments, this parameter is set to the type returned by such a
822 /// call; otherwise, it is set to an empty QualType.
823 /// \param NonTemplateOverloads - If the expression is an overloaded function
824 /// name, this parameter is populated with the decls of the various overloads.
825 bool Sema::isExprCallable(const Expr &E, QualType &ZeroArgCallReturnTy,
826 UnresolvedSetImpl &NonTemplateOverloads) {
827 ZeroArgCallReturnTy = QualType();
828 NonTemplateOverloads.clear();
829 if (const OverloadExpr *Overloads = dyn_cast<OverloadExpr>(&E)) {
830 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
831 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
832 // Our overload set may include TemplateDecls, which we'll ignore for our
834 if (const FunctionDecl *OverloadDecl = dyn_cast<FunctionDecl>(*it)) {
835 NonTemplateOverloads.addDecl(*it);
836 if (OverloadDecl->getMinRequiredArguments() == 0)
837 ZeroArgCallReturnTy = OverloadDecl->getResultType();
843 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(&E)) {
844 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
845 if (Fun->getMinRequiredArguments() == 0)
846 ZeroArgCallReturnTy = Fun->getResultType();
851 // We don't have an expression that's convenient to get a FunctionDecl from,
852 // but we can at least check if the type is "function of 0 arguments".
853 QualType ExprTy = E.getType();
854 const FunctionType *FunTy = NULL;
855 QualType PointeeTy = ExprTy->getPointeeType();
856 if (!PointeeTy.isNull())
857 FunTy = PointeeTy->getAs<FunctionType>();
859 FunTy = ExprTy->getAs<FunctionType>();
860 if (!FunTy && ExprTy == Context.BoundMemberTy) {
861 // Look for the bound-member type. If it's still overloaded, give up,
862 // although we probably should have fallen into the OverloadExpr case above
863 // if we actually have an overloaded bound member.
864 QualType BoundMemberTy = Expr::findBoundMemberType(&E);
865 if (!BoundMemberTy.isNull())
866 FunTy = BoundMemberTy->castAs<FunctionType>();
869 if (const FunctionProtoType *FPT =
870 dyn_cast_or_null<FunctionProtoType>(FunTy)) {
871 if (FPT->getNumArgs() == 0)
872 ZeroArgCallReturnTy = FunTy->getResultType();
878 /// \brief Give notes for a set of overloads.
880 /// A companion to isExprCallable. In cases when the name that the programmer
881 /// wrote was an overloaded function, we may be able to make some guesses about
882 /// plausible overloads based on their return types; such guesses can be handed
883 /// off to this method to be emitted as notes.
885 /// \param Overloads - The overloads to note.
886 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to
887 /// -fshow-overloads=best, this is the location to attach to the note about too
888 /// many candidates. Typically this will be the location of the original
889 /// ill-formed expression.
890 void Sema::NoteOverloads(const UnresolvedSetImpl &Overloads,
891 const SourceLocation FinalNoteLoc) {
892 int ShownOverloads = 0;
893 int SuppressedOverloads = 0;
894 for (UnresolvedSetImpl::iterator It = Overloads.begin(),
895 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
896 // FIXME: Magic number for max shown overloads stolen from
897 // OverloadCandidateSet::NoteCandidates.
898 if (ShownOverloads >= 4 &&
899 Diags.getShowOverloads() == Diagnostic::Ovl_Best) {
900 ++SuppressedOverloads;
903 Diag(cast<FunctionDecl>(*It)->getSourceRange().getBegin(),
904 diag::note_member_ref_possible_intended_overload);
907 if (SuppressedOverloads)
908 Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
909 << SuppressedOverloads;