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