Sema.cpp revision 5ac4b6917aa34fae6da64036539023a6155a3d48
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/HeaderSearch.h" 37#include "clang/Lex/Preprocessor.h" 38#include "clang/Basic/FileManager.h" 39#include "clang/Basic/PartialDiagnostic.h" 40#include "clang/Basic/TargetInfo.h" 41using namespace clang; 42using namespace sema; 43 44FunctionScopeInfo::~FunctionScopeInfo() { } 45 46void FunctionScopeInfo::Clear() { 47 HasBranchProtectedScope = false; 48 HasBranchIntoScope = false; 49 HasIndirectGoto = false; 50 51 SwitchStack.clear(); 52 Returns.clear(); 53 ErrorTrap.reset(); 54 PossiblyUnreachableDiags.clear(); 55} 56 57BlockScopeInfo::~BlockScopeInfo() { } 58LambdaScopeInfo::~LambdaScopeInfo() { } 59 60PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context, 61 const Preprocessor &PP) { 62 PrintingPolicy Policy = Context.getPrintingPolicy(); 63 Policy.Bool = Context.getLangOptions().Bool; 64 if (!Policy.Bool) { 65 if (MacroInfo *BoolMacro = PP.getMacroInfo(&Context.Idents.get("bool"))) { 66 Policy.Bool = BoolMacro->isObjectLike() && 67 BoolMacro->getNumTokens() == 1 && 68 BoolMacro->getReplacementToken(0).is(tok::kw__Bool); 69 } 70 } 71 72 return Policy; 73} 74 75void Sema::ActOnTranslationUnitScope(Scope *S) { 76 TUScope = S; 77 PushDeclContext(S, Context.getTranslationUnitDecl()); 78 79 VAListTagName = PP.getIdentifierInfo("__va_list_tag"); 80} 81 82Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, 83 TranslationUnitKind TUKind, 84 CodeCompleteConsumer *CodeCompleter) 85 : TheTargetAttributesSema(0), FPFeatures(pp.getLangOptions()), 86 LangOpts(pp.getLangOptions()), PP(pp), Context(ctxt), Consumer(consumer), 87 Diags(PP.getDiagnostics()), SourceMgr(PP.getSourceManager()), 88 CollectStats(false), ExternalSource(0), CodeCompleter(CodeCompleter), 89 CurContext(0), OriginalLexicalContext(0), 90 PackContext(0), MSStructPragmaOn(false), VisContext(0), 91 ExprNeedsCleanups(false), LateTemplateParser(0), OpaqueParser(0), 92 IdResolver(pp), StdInitializerList(0), CXXTypeInfoDecl(0), MSVCGuidDecl(0), 93 GlobalNewDeleteDeclared(false), 94 ObjCShouldCallSuperDealloc(false), 95 ObjCShouldCallSuperFinalize(false), 96 TUKind(TUKind), 97 NumSFINAEErrors(0), SuppressAccessChecking(false), 98 AccessCheckingSFINAE(false), InNonInstantiationSFINAEContext(false), 99 NonInstantiationEntries(0), ArgumentPackSubstitutionIndex(-1), 100 CurrentInstantiationScope(0), TyposCorrected(0), 101 AnalysisWarnings(*this) 102{ 103 TUScope = 0; 104 LoadedExternalKnownNamespaces = false; 105 106 if (getLangOptions().CPlusPlus) 107 FieldCollector.reset(new CXXFieldCollector()); 108 109 // Tell diagnostics how to render things from the AST library. 110 PP.getDiagnostics().SetArgToStringFn(&FormatASTNodeDiagnosticArgument, 111 &Context); 112 113 ExprEvalContexts.push_back( 114 ExpressionEvaluationContextRecord(PotentiallyEvaluated, 0, false)); 115 116 FunctionScopes.push_back(new FunctionScopeInfo(Diags)); 117} 118 119void Sema::Initialize() { 120 // Tell the AST consumer about this Sema object. 121 Consumer.Initialize(Context); 122 123 // FIXME: Isn't this redundant with the initialization above? 124 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 125 SC->InitializeSema(*this); 126 127 // Tell the external Sema source about this Sema object. 128 if (ExternalSemaSource *ExternalSema 129 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 130 ExternalSema->InitializeSema(*this); 131 132 // Initialize predefined 128-bit integer types, if needed. 133 if (PP.getTargetInfo().getPointerWidth(0) >= 64) { 134 // If either of the 128-bit integer types are unavailable to name lookup, 135 // define them now. 136 DeclarationName Int128 = &Context.Idents.get("__int128_t"); 137 if (IdResolver.begin(Int128) == IdResolver.end()) 138 PushOnScopeChains(Context.getInt128Decl(), TUScope); 139 140 DeclarationName UInt128 = &Context.Idents.get("__uint128_t"); 141 if (IdResolver.begin(UInt128) == IdResolver.end()) 142 PushOnScopeChains(Context.getUInt128Decl(), TUScope); 143 } 144 145 146 // Initialize predefined Objective-C types: 147 if (PP.getLangOptions().ObjC1) { 148 // If 'SEL' does not yet refer to any declarations, make it refer to the 149 // predefined 'SEL'. 150 DeclarationName SEL = &Context.Idents.get("SEL"); 151 if (IdResolver.begin(SEL) == IdResolver.end()) 152 PushOnScopeChains(Context.getObjCSelDecl(), TUScope); 153 154 // If 'id' does not yet refer to any declarations, make it refer to the 155 // predefined 'id'. 156 DeclarationName Id = &Context.Idents.get("id"); 157 if (IdResolver.begin(Id) == IdResolver.end()) 158 PushOnScopeChains(Context.getObjCIdDecl(), TUScope); 159 160 // Create the built-in typedef for 'Class'. 161 DeclarationName Class = &Context.Idents.get("Class"); 162 if (IdResolver.begin(Class) == IdResolver.end()) 163 PushOnScopeChains(Context.getObjCClassDecl(), TUScope); 164 165 // Create the built-in forward declaratino for 'Protocol'. 166 DeclarationName Protocol = &Context.Idents.get("Protocol"); 167 if (IdResolver.begin(Protocol) == IdResolver.end()) 168 PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope); 169 } 170} 171 172Sema::~Sema() { 173 if (PackContext) FreePackedContext(); 174 if (VisContext) FreeVisContext(); 175 delete TheTargetAttributesSema; 176 MSStructPragmaOn = false; 177 // Kill all the active scopes. 178 for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I) 179 delete FunctionScopes[I]; 180 if (FunctionScopes.size() == 1) 181 delete FunctionScopes[0]; 182 183 // Tell the SemaConsumer to forget about us; we're going out of scope. 184 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 185 SC->ForgetSema(); 186 187 // Detach from the external Sema source. 188 if (ExternalSemaSource *ExternalSema 189 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 190 ExternalSema->ForgetSema(); 191} 192 193 194/// makeUnavailableInSystemHeader - There is an error in the current 195/// context. If we're still in a system header, and we can plausibly 196/// make the relevant declaration unavailable instead of erroring, do 197/// so and return true. 198bool Sema::makeUnavailableInSystemHeader(SourceLocation loc, 199 StringRef msg) { 200 // If we're not in a function, it's an error. 201 FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext); 202 if (!fn) return false; 203 204 // If we're in template instantiation, it's an error. 205 if (!ActiveTemplateInstantiations.empty()) 206 return false; 207 208 // If that function's not in a system header, it's an error. 209 if (!Context.getSourceManager().isInSystemHeader(loc)) 210 return false; 211 212 // If the function is already unavailable, it's not an error. 213 if (fn->hasAttr<UnavailableAttr>()) return true; 214 215 fn->addAttr(new (Context) UnavailableAttr(loc, Context, msg)); 216 return true; 217} 218 219ASTMutationListener *Sema::getASTMutationListener() const { 220 return getASTConsumer().GetASTMutationListener(); 221} 222 223/// \brief Print out statistics about the semantic analysis. 224void Sema::PrintStats() const { 225 llvm::errs() << "\n*** Semantic Analysis Stats:\n"; 226 llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n"; 227 228 BumpAlloc.PrintStats(); 229 AnalysisWarnings.PrintStats(); 230} 231 232/// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast. 233/// If there is already an implicit cast, merge into the existing one. 234/// The result is of the given category. 235ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty, 236 CastKind Kind, ExprValueKind VK, 237 const CXXCastPath *BasePath, 238 CheckedConversionKind CCK) { 239#ifndef NDEBUG 240 if (VK == VK_RValue && !E->isRValue()) { 241 switch (Kind) { 242 default: 243 assert(0 && "can't implicitly cast lvalue to rvalue with this cast kind"); 244 case CK_LValueToRValue: 245 case CK_ArrayToPointerDecay: 246 case CK_FunctionToPointerDecay: 247 case CK_ToVoid: 248 break; 249 } 250 } 251 assert((VK == VK_RValue || !E->isRValue()) && "can't cast rvalue to lvalue"); 252#endif 253 254 QualType ExprTy = Context.getCanonicalType(E->getType()); 255 QualType TypeTy = Context.getCanonicalType(Ty); 256 257 if (ExprTy == TypeTy) 258 return Owned(E); 259 260 if (getLangOptions().ObjCAutoRefCount) 261 CheckObjCARCConversion(SourceRange(), Ty, E, CCK); 262 263 // If this is a derived-to-base cast to a through a virtual base, we 264 // need a vtable. 265 if (Kind == CK_DerivedToBase && 266 BasePathInvolvesVirtualBase(*BasePath)) { 267 QualType T = E->getType(); 268 if (const PointerType *Pointer = T->getAs<PointerType>()) 269 T = Pointer->getPointeeType(); 270 if (const RecordType *RecordTy = T->getAs<RecordType>()) 271 MarkVTableUsed(E->getLocStart(), 272 cast<CXXRecordDecl>(RecordTy->getDecl())); 273 } 274 275 if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) { 276 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) { 277 ImpCast->setType(Ty); 278 ImpCast->setValueKind(VK); 279 return Owned(E); 280 } 281 } 282 283 return Owned(ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK)); 284} 285 286/// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding 287/// to the conversion from scalar type ScalarTy to the Boolean type. 288CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) { 289 switch (ScalarTy->getScalarTypeKind()) { 290 case Type::STK_Bool: return CK_NoOp; 291 case Type::STK_CPointer: return CK_PointerToBoolean; 292 case Type::STK_BlockPointer: return CK_PointerToBoolean; 293 case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean; 294 case Type::STK_MemberPointer: return CK_MemberPointerToBoolean; 295 case Type::STK_Integral: return CK_IntegralToBoolean; 296 case Type::STK_Floating: return CK_FloatingToBoolean; 297 case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean; 298 case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean; 299 } 300 return CK_Invalid; 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->getMostRecentDecl(); 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->getMostRecentDecl(); 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 // Only complete translation units define vtables and perform implicit 419 // instantiations. 420 if (TUKind == TU_Complete) { 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 (TUKind == TU_Prefix) { 463 // Translation unit prefixes don't need any of the checking below. 464 TUScope = 0; 465 return; 466 } 467 468 // Check for #pragma weak identifiers that were never declared 469 // FIXME: This will cause diagnostics to be emitted in a non-determinstic 470 // order! Iterating over a densemap like this is bad. 471 LoadExternalWeakUndeclaredIdentifiers(); 472 for (llvm::DenseMap<IdentifierInfo*,WeakInfo>::iterator 473 I = WeakUndeclaredIdentifiers.begin(), 474 E = WeakUndeclaredIdentifiers.end(); I != E; ++I) { 475 if (I->second.getUsed()) continue; 476 477 Diag(I->second.getLocation(), diag::warn_weak_identifier_undeclared) 478 << I->first; 479 } 480 481 if (TUKind == TU_Module) { 482 // If we are building a module, resolve all of the exported declarations 483 // now. 484 if (Module *CurrentModule = PP.getCurrentModule()) { 485 ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap(); 486 487 llvm::SmallVector<Module *, 2> Stack; 488 Stack.push_back(CurrentModule); 489 while (!Stack.empty()) { 490 Module *Mod = Stack.back(); 491 Stack.pop_back(); 492 493 // Resolve the exported declarations. 494 // FIXME: Actually complain, once we figure out how to teach the 495 // diagnostic client to deal with complains in the module map at this 496 // point. 497 ModMap.resolveExports(Mod, /*Complain=*/false); 498 499 // Queue the submodules, so their exports will also be resolved. 500 for (Module::submodule_iterator Sub = Mod->submodule_begin(), 501 SubEnd = Mod->submodule_end(); 502 Sub != SubEnd; ++Sub) { 503 Stack.push_back(*Sub); 504 } 505 } 506 } 507 508 // Modules don't need any of the checking below. 509 TUScope = 0; 510 return; 511 } 512 513 // C99 6.9.2p2: 514 // A declaration of an identifier for an object that has file 515 // scope without an initializer, and without a storage-class 516 // specifier or with the storage-class specifier static, 517 // constitutes a tentative definition. If a translation unit 518 // contains one or more tentative definitions for an identifier, 519 // and the translation unit contains no external definition for 520 // that identifier, then the behavior is exactly as if the 521 // translation unit contains a file scope declaration of that 522 // identifier, with the composite type as of the end of the 523 // translation unit, with an initializer equal to 0. 524 llvm::SmallSet<VarDecl *, 32> Seen; 525 for (TentativeDefinitionsType::iterator 526 T = TentativeDefinitions.begin(ExternalSource), 527 TEnd = TentativeDefinitions.end(); 528 T != TEnd; ++T) 529 { 530 VarDecl *VD = (*T)->getActingDefinition(); 531 532 // If the tentative definition was completed, getActingDefinition() returns 533 // null. If we've already seen this variable before, insert()'s second 534 // return value is false. 535 if (VD == 0 || VD->isInvalidDecl() || !Seen.insert(VD)) 536 continue; 537 538 if (const IncompleteArrayType *ArrayT 539 = Context.getAsIncompleteArrayType(VD->getType())) { 540 if (RequireCompleteType(VD->getLocation(), 541 ArrayT->getElementType(), 542 diag::err_tentative_def_incomplete_type_arr)) { 543 VD->setInvalidDecl(); 544 continue; 545 } 546 547 // Set the length of the array to 1 (C99 6.9.2p5). 548 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array); 549 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true); 550 QualType T = Context.getConstantArrayType(ArrayT->getElementType(), 551 One, ArrayType::Normal, 0); 552 VD->setType(T); 553 } else if (RequireCompleteType(VD->getLocation(), VD->getType(), 554 diag::err_tentative_def_incomplete_type)) 555 VD->setInvalidDecl(); 556 557 // Notify the consumer that we've completed a tentative definition. 558 if (!VD->isInvalidDecl()) 559 Consumer.CompleteTentativeDefinition(VD); 560 561 } 562 563 if (LangOpts.CPlusPlus0x && 564 Diags.getDiagnosticLevel(diag::warn_delegating_ctor_cycle, 565 SourceLocation()) 566 != DiagnosticsEngine::Ignored) 567 CheckDelegatingCtorCycles(); 568 569 // If there were errors, disable 'unused' warnings since they will mostly be 570 // noise. 571 if (!Diags.hasErrorOccurred()) { 572 // Output warning for unused file scoped decls. 573 for (UnusedFileScopedDeclsType::iterator 574 I = UnusedFileScopedDecls.begin(ExternalSource), 575 E = UnusedFileScopedDecls.end(); I != E; ++I) { 576 if (ShouldRemoveFromUnused(this, *I)) 577 continue; 578 579 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 580 const FunctionDecl *DiagD; 581 if (!FD->hasBody(DiagD)) 582 DiagD = FD; 583 if (DiagD->isDeleted()) 584 continue; // Deleted functions are supposed to be unused. 585 if (DiagD->isReferenced()) { 586 if (isa<CXXMethodDecl>(DiagD)) 587 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) 588 << DiagD->getDeclName(); 589 else 590 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 591 << /*function*/0 << DiagD->getDeclName(); 592 } else { 593 Diag(DiagD->getLocation(), 594 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function 595 : diag::warn_unused_function) 596 << DiagD->getDeclName(); 597 } 598 } else { 599 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition(); 600 if (!DiagD) 601 DiagD = cast<VarDecl>(*I); 602 if (DiagD->isReferenced()) { 603 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 604 << /*variable*/1 << DiagD->getDeclName(); 605 } else { 606 Diag(DiagD->getLocation(), diag::warn_unused_variable) 607 << DiagD->getDeclName(); 608 } 609 } 610 } 611 612 checkUndefinedInternals(*this); 613 } 614 615 // Check we've noticed that we're no longer parsing the initializer for every 616 // variable. If we miss cases, then at best we have a performance issue and 617 // at worst a rejects-valid bug. 618 assert(ParsingInitForAutoVars.empty() && 619 "Didn't unmark var as having its initializer parsed"); 620 621 TUScope = 0; 622} 623 624 625//===----------------------------------------------------------------------===// 626// Helper functions. 627//===----------------------------------------------------------------------===// 628 629DeclContext *Sema::getFunctionLevelDeclContext() { 630 DeclContext *DC = CurContext; 631 632 while (true) { 633 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC)) { 634 DC = DC->getParent(); 635 } else if (isa<CXXMethodDecl>(DC) && 636 cast<CXXRecordDecl>(DC->getParent())->isLambda()) { 637 DC = DC->getParent()->getParent(); 638 } 639 else break; 640 } 641 642 return DC; 643} 644 645/// getCurFunctionDecl - If inside of a function body, this returns a pointer 646/// to the function decl for the function being parsed. If we're currently 647/// in a 'block', this returns the containing context. 648FunctionDecl *Sema::getCurFunctionDecl() { 649 DeclContext *DC = getFunctionLevelDeclContext(); 650 return dyn_cast<FunctionDecl>(DC); 651} 652 653ObjCMethodDecl *Sema::getCurMethodDecl() { 654 DeclContext *DC = getFunctionLevelDeclContext(); 655 return dyn_cast<ObjCMethodDecl>(DC); 656} 657 658NamedDecl *Sema::getCurFunctionOrMethodDecl() { 659 DeclContext *DC = getFunctionLevelDeclContext(); 660 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC)) 661 return cast<NamedDecl>(DC); 662 return 0; 663} 664 665Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() { 666 if (!isActive()) 667 return; 668 669 if (llvm::Optional<TemplateDeductionInfo*> Info = SemaRef.isSFINAEContext()) { 670 switch (DiagnosticIDs::getDiagnosticSFINAEResponse(getDiagID())) { 671 case DiagnosticIDs::SFINAE_Report: 672 // We'll report the diagnostic below. 673 break; 674 675 case DiagnosticIDs::SFINAE_SubstitutionFailure: 676 // Count this failure so that we know that template argument deduction 677 // has failed. 678 ++SemaRef.NumSFINAEErrors; 679 SemaRef.Diags.setLastDiagnosticIgnored(); 680 SemaRef.Diags.Clear(); 681 Clear(); 682 return; 683 684 case DiagnosticIDs::SFINAE_AccessControl: { 685 // Per C++ Core Issue 1170, access control is part of SFINAE. 686 // Additionally, the AccessCheckingSFINAE flag can be used to temporary 687 // make access control a part of SFINAE for the purposes of checking 688 // type traits. 689 if (!SemaRef.AccessCheckingSFINAE && 690 !SemaRef.getLangOptions().CPlusPlus0x) 691 break; 692 693 SourceLocation Loc = getLocation(); 694 695 // Suppress this diagnostic. 696 ++SemaRef.NumSFINAEErrors; 697 SemaRef.Diags.setLastDiagnosticIgnored(); 698 SemaRef.Diags.Clear(); 699 Clear(); 700 701 // Now the diagnostic state is clear, produce a C++98 compatibility 702 // warning. 703 SemaRef.Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control); 704 705 // The last diagnostic which Sema produced was ignored. Suppress any 706 // notes attached to it. 707 SemaRef.Diags.setLastDiagnosticIgnored(); 708 return; 709 } 710 711 case DiagnosticIDs::SFINAE_Suppress: 712 // Make a copy of this suppressed diagnostic and store it with the 713 // template-deduction information; 714 FlushCounts(); 715 Diagnostic DiagInfo(&SemaRef.Diags); 716 717 if (*Info) 718 (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(), 719 PartialDiagnostic(DiagInfo, 720 SemaRef.Context.getDiagAllocator())); 721 722 // Suppress this diagnostic. 723 SemaRef.Diags.setLastDiagnosticIgnored(); 724 SemaRef.Diags.Clear(); 725 Clear(); 726 return; 727 } 728 } 729 730 // Set up the context's printing policy based on our current state. 731 SemaRef.Context.setPrintingPolicy(SemaRef.getPrintingPolicy()); 732 733 // Emit the diagnostic. 734 if (!this->Emit()) 735 return; 736 737 // If this is not a note, and we're in a template instantiation 738 // that is different from the last template instantiation where 739 // we emitted an error, print a template instantiation 740 // backtrace. 741 if (!DiagnosticIDs::isBuiltinNote(DiagID) && 742 !SemaRef.ActiveTemplateInstantiations.empty() && 743 SemaRef.ActiveTemplateInstantiations.back() 744 != SemaRef.LastTemplateInstantiationErrorContext) { 745 SemaRef.PrintInstantiationStack(); 746 SemaRef.LastTemplateInstantiationErrorContext 747 = SemaRef.ActiveTemplateInstantiations.back(); 748 } 749} 750 751Sema::SemaDiagnosticBuilder Sema::Diag(SourceLocation Loc, unsigned DiagID) { 752 DiagnosticBuilder DB = Diags.Report(Loc, DiagID); 753 return SemaDiagnosticBuilder(DB, *this, DiagID); 754} 755 756Sema::SemaDiagnosticBuilder 757Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) { 758 SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID())); 759 PD.Emit(Builder); 760 761 return Builder; 762} 763 764/// \brief Looks through the macro-expansion chain for the given 765/// location, looking for a macro expansion with the given name. 766/// If one is found, returns true and sets the location to that 767/// expansion loc. 768bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) { 769 SourceLocation loc = locref; 770 if (!loc.isMacroID()) return false; 771 772 // There's no good way right now to look at the intermediate 773 // expansions, so just jump to the expansion location. 774 loc = getSourceManager().getExpansionLoc(loc); 775 776 // If that's written with the name, stop here. 777 SmallVector<char, 16> buffer; 778 if (getPreprocessor().getSpelling(loc, buffer) == name) { 779 locref = loc; 780 return true; 781 } 782 return false; 783} 784 785/// \brief Determines the active Scope associated with the given declaration 786/// context. 787/// 788/// This routine maps a declaration context to the active Scope object that 789/// represents that declaration context in the parser. It is typically used 790/// from "scope-less" code (e.g., template instantiation, lazy creation of 791/// declarations) that injects a name for name-lookup purposes and, therefore, 792/// must update the Scope. 793/// 794/// \returns The scope corresponding to the given declaraion context, or NULL 795/// if no such scope is open. 796Scope *Sema::getScopeForContext(DeclContext *Ctx) { 797 798 if (!Ctx) 799 return 0; 800 801 Ctx = Ctx->getPrimaryContext(); 802 for (Scope *S = getCurScope(); S; S = S->getParent()) { 803 // Ignore scopes that cannot have declarations. This is important for 804 // out-of-line definitions of static class members. 805 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) 806 if (DeclContext *Entity = static_cast<DeclContext *> (S->getEntity())) 807 if (Ctx == Entity->getPrimaryContext()) 808 return S; 809 } 810 811 return 0; 812} 813 814/// \brief Enter a new function scope 815void Sema::PushFunctionScope() { 816 if (FunctionScopes.size() == 1) { 817 // Use the "top" function scope rather than having to allocate 818 // memory for a new scope. 819 FunctionScopes.back()->Clear(); 820 FunctionScopes.push_back(FunctionScopes.back()); 821 return; 822 } 823 824 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); 825} 826 827void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) { 828 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(), 829 BlockScope, Block)); 830} 831 832void Sema::PushLambdaScope(CXXRecordDecl *Lambda) { 833 FunctionScopes.push_back(new LambdaScopeInfo(getDiagnostics(), Lambda)); 834} 835 836void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 837 const Decl *D, const BlockExpr *blkExpr) { 838 FunctionScopeInfo *Scope = FunctionScopes.pop_back_val(); 839 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 840 841 // Issue any analysis-based warnings. 842 if (WP && D) 843 AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr); 844 else { 845 for (SmallVectorImpl<sema::PossiblyUnreachableDiag>::iterator 846 i = Scope->PossiblyUnreachableDiags.begin(), 847 e = Scope->PossiblyUnreachableDiags.end(); 848 i != e; ++i) { 849 const sema::PossiblyUnreachableDiag &D = *i; 850 Diag(D.Loc, D.PD); 851 } 852 } 853 854 if (FunctionScopes.back() != Scope) { 855 delete Scope; 856 } 857} 858 859/// \brief Determine whether any errors occurred within this function/method/ 860/// block. 861bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 862 return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred(); 863} 864 865BlockScopeInfo *Sema::getCurBlock() { 866 if (FunctionScopes.empty()) 867 return 0; 868 869 return dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 870} 871 872LambdaScopeInfo *Sema::getCurLambda() { 873 if (FunctionScopes.empty()) 874 return 0; 875 876 return dyn_cast<LambdaScopeInfo>(FunctionScopes.back()); 877} 878 879// Pin this vtable to this file. 880ExternalSemaSource::~ExternalSemaSource() {} 881 882void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 883 884void ExternalSemaSource::ReadKnownNamespaces( 885 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 886} 887 888void PrettyDeclStackTraceEntry::print(raw_ostream &OS) const { 889 SourceLocation Loc = this->Loc; 890 if (!Loc.isValid() && TheDecl) Loc = TheDecl->getLocation(); 891 if (Loc.isValid()) { 892 Loc.print(OS, S.getSourceManager()); 893 OS << ": "; 894 } 895 OS << Message; 896 897 if (TheDecl && isa<NamedDecl>(TheDecl)) { 898 std::string Name = cast<NamedDecl>(TheDecl)->getNameAsString(); 899 if (!Name.empty()) 900 OS << " '" << Name << '\''; 901 } 902 903 OS << '\n'; 904} 905 906/// \brief Figure out if an expression could be turned into a call. 907/// 908/// Use this when trying to recover from an error where the programmer may have 909/// written just the name of a function instead of actually calling it. 910/// 911/// \param E - The expression to examine. 912/// \param ZeroArgCallReturnTy - If the expression can be turned into a call 913/// with no arguments, this parameter is set to the type returned by such a 914/// call; otherwise, it is set to an empty QualType. 915/// \param OverloadSet - If the expression is an overloaded function 916/// name, this parameter is populated with the decls of the various overloads. 917bool Sema::isExprCallable(const Expr &E, QualType &ZeroArgCallReturnTy, 918 UnresolvedSetImpl &OverloadSet) { 919 ZeroArgCallReturnTy = QualType(); 920 OverloadSet.clear(); 921 922 if (E.getType() == Context.OverloadTy) { 923 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 924 const OverloadExpr *Overloads = FR.Expression; 925 926 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 927 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 928 OverloadSet.addDecl(*it); 929 930 // Check whether the function is a non-template which takes no 931 // arguments. 932 if (const FunctionDecl *OverloadDecl 933 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 934 if (OverloadDecl->getMinRequiredArguments() == 0) 935 ZeroArgCallReturnTy = OverloadDecl->getResultType(); 936 } 937 } 938 939 // Ignore overloads that are pointer-to-member constants. 940 if (FR.HasFormOfMemberPointer) 941 return false; 942 943 return true; 944 } 945 946 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 947 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 948 if (Fun->getMinRequiredArguments() == 0) 949 ZeroArgCallReturnTy = Fun->getResultType(); 950 return true; 951 } 952 } 953 954 // We don't have an expression that's convenient to get a FunctionDecl from, 955 // but we can at least check if the type is "function of 0 arguments". 956 QualType ExprTy = E.getType(); 957 const FunctionType *FunTy = NULL; 958 QualType PointeeTy = ExprTy->getPointeeType(); 959 if (!PointeeTy.isNull()) 960 FunTy = PointeeTy->getAs<FunctionType>(); 961 if (!FunTy) 962 FunTy = ExprTy->getAs<FunctionType>(); 963 if (!FunTy && ExprTy == Context.BoundMemberTy) { 964 // Look for the bound-member type. If it's still overloaded, give up, 965 // although we probably should have fallen into the OverloadExpr case above 966 // if we actually have an overloaded bound member. 967 QualType BoundMemberTy = Expr::findBoundMemberType(&E); 968 if (!BoundMemberTy.isNull()) 969 FunTy = BoundMemberTy->castAs<FunctionType>(); 970 } 971 972 if (const FunctionProtoType *FPT = 973 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 974 if (FPT->getNumArgs() == 0) 975 ZeroArgCallReturnTy = FunTy->getResultType(); 976 return true; 977 } 978 return false; 979} 980 981/// \brief Give notes for a set of overloads. 982/// 983/// A companion to isExprCallable. In cases when the name that the programmer 984/// wrote was an overloaded function, we may be able to make some guesses about 985/// plausible overloads based on their return types; such guesses can be handed 986/// off to this method to be emitted as notes. 987/// 988/// \param Overloads - The overloads to note. 989/// \param FinalNoteLoc - If we've suppressed printing some overloads due to 990/// -fshow-overloads=best, this is the location to attach to the note about too 991/// many candidates. Typically this will be the location of the original 992/// ill-formed expression. 993static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 994 const SourceLocation FinalNoteLoc) { 995 int ShownOverloads = 0; 996 int SuppressedOverloads = 0; 997 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 998 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 999 // FIXME: Magic number for max shown overloads stolen from 1000 // OverloadCandidateSet::NoteCandidates. 1001 if (ShownOverloads >= 4 && 1002 S.Diags.getShowOverloads() == DiagnosticsEngine::Ovl_Best) { 1003 ++SuppressedOverloads; 1004 continue; 1005 } 1006 1007 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 1008 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 1009 ++ShownOverloads; 1010 } 1011 1012 if (SuppressedOverloads) 1013 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 1014 << SuppressedOverloads; 1015} 1016 1017static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 1018 const UnresolvedSetImpl &Overloads, 1019 bool (*IsPlausibleResult)(QualType)) { 1020 if (!IsPlausibleResult) 1021 return noteOverloads(S, Overloads, Loc); 1022 1023 UnresolvedSet<2> PlausibleOverloads; 1024 for (OverloadExpr::decls_iterator It = Overloads.begin(), 1025 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 1026 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 1027 QualType OverloadResultTy = OverloadDecl->getResultType(); 1028 if (IsPlausibleResult(OverloadResultTy)) 1029 PlausibleOverloads.addDecl(It.getDecl()); 1030 } 1031 noteOverloads(S, PlausibleOverloads, Loc); 1032} 1033 1034/// Determine whether the given expression can be called by just 1035/// putting parentheses after it. Notably, expressions with unary 1036/// operators can't be because the unary operator will start parsing 1037/// outside the call. 1038static bool IsCallableWithAppend(Expr *E) { 1039 E = E->IgnoreImplicit(); 1040 return (!isa<CStyleCastExpr>(E) && 1041 !isa<UnaryOperator>(E) && 1042 !isa<BinaryOperator>(E) && 1043 !isa<CXXOperatorCallExpr>(E)); 1044} 1045 1046bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 1047 bool ForceComplain, 1048 bool (*IsPlausibleResult)(QualType)) { 1049 SourceLocation Loc = E.get()->getExprLoc(); 1050 SourceRange Range = E.get()->getSourceRange(); 1051 1052 QualType ZeroArgCallTy; 1053 UnresolvedSet<4> Overloads; 1054 if (isExprCallable(*E.get(), ZeroArgCallTy, Overloads) && 1055 !ZeroArgCallTy.isNull() && 1056 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 1057 // At this point, we know E is potentially callable with 0 1058 // arguments and that it returns something of a reasonable type, 1059 // so we can emit a fixit and carry on pretending that E was 1060 // actually a CallExpr. 1061 SourceLocation ParenInsertionLoc = 1062 PP.getLocForEndOfToken(Range.getEnd()); 1063 Diag(Loc, PD) 1064 << /*zero-arg*/ 1 << Range 1065 << (IsCallableWithAppend(E.get()) 1066 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 1067 : FixItHint()); 1068 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1069 1070 // FIXME: Try this before emitting the fixit, and suppress diagnostics 1071 // while doing so. 1072 E = ActOnCallExpr(0, E.take(), ParenInsertionLoc, 1073 MultiExprArg(*this, 0, 0), 1074 ParenInsertionLoc.getLocWithOffset(1)); 1075 return true; 1076 } 1077 1078 if (!ForceComplain) return false; 1079 1080 Diag(Loc, PD) << /*not zero-arg*/ 0 << Range; 1081 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1082 E = ExprError(); 1083 return true; 1084} 1085