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