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