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