1 //===--------------------- SemaLookup.cpp - Name Lookup ------------------===// 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 name lookup for C, C++, Objective-C, and 11 // Objective-C++. 12 // 13 //===----------------------------------------------------------------------===// 14 #include "clang/Sema/Lookup.h" 15 #include "clang/AST/ASTContext.h" 16 #include "clang/AST/CXXInheritance.h" 17 #include "clang/AST/Decl.h" 18 #include "clang/AST/DeclCXX.h" 19 #include "clang/AST/DeclLookups.h" 20 #include "clang/AST/DeclObjC.h" 21 #include "clang/AST/DeclTemplate.h" 22 #include "clang/AST/Expr.h" 23 #include "clang/AST/ExprCXX.h" 24 #include "clang/Basic/Builtins.h" 25 #include "clang/Basic/LangOptions.h" 26 #include "clang/Sema/DeclSpec.h" 27 #include "clang/Sema/ExternalSemaSource.h" 28 #include "clang/Sema/Overload.h" 29 #include "clang/Sema/Scope.h" 30 #include "clang/Sema/ScopeInfo.h" 31 #include "clang/Sema/Sema.h" 32 #include "clang/Sema/SemaInternal.h" 33 #include "clang/Sema/TemplateDeduction.h" 34 #include "clang/Sema/TypoCorrection.h" 35 #include "llvm/ADT/STLExtras.h" 36 #include "llvm/ADT/SetVector.h" 37 #include "llvm/ADT/SmallPtrSet.h" 38 #include "llvm/ADT/StringMap.h" 39 #include "llvm/ADT/TinyPtrVector.h" 40 #include "llvm/ADT/edit_distance.h" 41 #include "llvm/Support/ErrorHandling.h" 42 #include <algorithm> 43 #include <iterator> 44 #include <limits> 45 #include <list> 46 #include <map> 47 #include <set> 48 #include <utility> 49 #include <vector> 50 51 using namespace clang; 52 using namespace sema; 53 54 namespace { 55 class UnqualUsingEntry { 56 const DeclContext *Nominated; 57 const DeclContext *CommonAncestor; 58 59 public: 60 UnqualUsingEntry(const DeclContext *Nominated, 61 const DeclContext *CommonAncestor) 62 : Nominated(Nominated), CommonAncestor(CommonAncestor) { 63 } 64 65 const DeclContext *getCommonAncestor() const { 66 return CommonAncestor; 67 } 68 69 const DeclContext *getNominatedNamespace() const { 70 return Nominated; 71 } 72 73 // Sort by the pointer value of the common ancestor. 74 struct Comparator { 75 bool operator()(const UnqualUsingEntry &L, const UnqualUsingEntry &R) { 76 return L.getCommonAncestor() < R.getCommonAncestor(); 77 } 78 79 bool operator()(const UnqualUsingEntry &E, const DeclContext *DC) { 80 return E.getCommonAncestor() < DC; 81 } 82 83 bool operator()(const DeclContext *DC, const UnqualUsingEntry &E) { 84 return DC < E.getCommonAncestor(); 85 } 86 }; 87 }; 88 89 /// A collection of using directives, as used by C++ unqualified 90 /// lookup. 91 class UnqualUsingDirectiveSet { 92 typedef SmallVector<UnqualUsingEntry, 8> ListTy; 93 94 ListTy list; 95 llvm::SmallPtrSet<DeclContext*, 8> visited; 96 97 public: 98 UnqualUsingDirectiveSet() {} 99 100 void visitScopeChain(Scope *S, Scope *InnermostFileScope) { 101 // C++ [namespace.udir]p1: 102 // During unqualified name lookup, the names appear as if they 103 // were declared in the nearest enclosing namespace which contains 104 // both the using-directive and the nominated namespace. 105 DeclContext *InnermostFileDC 106 = static_cast<DeclContext*>(InnermostFileScope->getEntity()); 107 assert(InnermostFileDC && InnermostFileDC->isFileContext()); 108 109 for (; S; S = S->getParent()) { 110 // C++ [namespace.udir]p1: 111 // A using-directive shall not appear in class scope, but may 112 // appear in namespace scope or in block scope. 113 DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity()); 114 if (Ctx && Ctx->isFileContext()) { 115 visit(Ctx, Ctx); 116 } else if (!Ctx || Ctx->isFunctionOrMethod()) { 117 Scope::udir_iterator I = S->using_directives_begin(), 118 End = S->using_directives_end(); 119 for (; I != End; ++I) 120 visit(*I, InnermostFileDC); 121 } 122 } 123 } 124 125 // Visits a context and collect all of its using directives 126 // recursively. Treats all using directives as if they were 127 // declared in the context. 128 // 129 // A given context is only every visited once, so it is important 130 // that contexts be visited from the inside out in order to get 131 // the effective DCs right. 132 void visit(DeclContext *DC, DeclContext *EffectiveDC) { 133 if (!visited.insert(DC)) 134 return; 135 136 addUsingDirectives(DC, EffectiveDC); 137 } 138 139 // Visits a using directive and collects all of its using 140 // directives recursively. Treats all using directives as if they 141 // were declared in the effective DC. 142 void visit(UsingDirectiveDecl *UD, DeclContext *EffectiveDC) { 143 DeclContext *NS = UD->getNominatedNamespace(); 144 if (!visited.insert(NS)) 145 return; 146 147 addUsingDirective(UD, EffectiveDC); 148 addUsingDirectives(NS, EffectiveDC); 149 } 150 151 // Adds all the using directives in a context (and those nominated 152 // by its using directives, transitively) as if they appeared in 153 // the given effective context. 154 void addUsingDirectives(DeclContext *DC, DeclContext *EffectiveDC) { 155 SmallVector<DeclContext*,4> queue; 156 while (true) { 157 DeclContext::udir_iterator I, End; 158 for (llvm::tie(I, End) = DC->getUsingDirectives(); I != End; ++I) { 159 UsingDirectiveDecl *UD = *I; 160 DeclContext *NS = UD->getNominatedNamespace(); 161 if (visited.insert(NS)) { 162 addUsingDirective(UD, EffectiveDC); 163 queue.push_back(NS); 164 } 165 } 166 167 if (queue.empty()) 168 return; 169 170 DC = queue.back(); 171 queue.pop_back(); 172 } 173 } 174 175 // Add a using directive as if it had been declared in the given 176 // context. This helps implement C++ [namespace.udir]p3: 177 // The using-directive is transitive: if a scope contains a 178 // using-directive that nominates a second namespace that itself 179 // contains using-directives, the effect is as if the 180 // using-directives from the second namespace also appeared in 181 // the first. 182 void addUsingDirective(UsingDirectiveDecl *UD, DeclContext *EffectiveDC) { 183 // Find the common ancestor between the effective context and 184 // the nominated namespace. 185 DeclContext *Common = UD->getNominatedNamespace(); 186 while (!Common->Encloses(EffectiveDC)) 187 Common = Common->getParent(); 188 Common = Common->getPrimaryContext(); 189 190 list.push_back(UnqualUsingEntry(UD->getNominatedNamespace(), Common)); 191 } 192 193 void done() { 194 std::sort(list.begin(), list.end(), UnqualUsingEntry::Comparator()); 195 } 196 197 typedef ListTy::const_iterator const_iterator; 198 199 const_iterator begin() const { return list.begin(); } 200 const_iterator end() const { return list.end(); } 201 202 std::pair<const_iterator,const_iterator> 203 getNamespacesFor(DeclContext *DC) const { 204 return std::equal_range(begin(), end(), DC->getPrimaryContext(), 205 UnqualUsingEntry::Comparator()); 206 } 207 }; 208 } 209 210 // Retrieve the set of identifier namespaces that correspond to a 211 // specific kind of name lookup. 212 static inline unsigned getIDNS(Sema::LookupNameKind NameKind, 213 bool CPlusPlus, 214 bool Redeclaration) { 215 unsigned IDNS = 0; 216 switch (NameKind) { 217 case Sema::LookupObjCImplicitSelfParam: 218 case Sema::LookupOrdinaryName: 219 case Sema::LookupRedeclarationWithLinkage: 220 IDNS = Decl::IDNS_Ordinary; 221 if (CPlusPlus) { 222 IDNS |= Decl::IDNS_Tag | Decl::IDNS_Member | Decl::IDNS_Namespace; 223 if (Redeclaration) 224 IDNS |= Decl::IDNS_TagFriend | Decl::IDNS_OrdinaryFriend; 225 } 226 break; 227 228 case Sema::LookupOperatorName: 229 // Operator lookup is its own crazy thing; it is not the same 230 // as (e.g.) looking up an operator name for redeclaration. 231 assert(!Redeclaration && "cannot do redeclaration operator lookup"); 232 IDNS = Decl::IDNS_NonMemberOperator; 233 break; 234 235 case Sema::LookupTagName: 236 if (CPlusPlus) { 237 IDNS = Decl::IDNS_Type; 238 239 // When looking for a redeclaration of a tag name, we add: 240 // 1) TagFriend to find undeclared friend decls 241 // 2) Namespace because they can't "overload" with tag decls. 242 // 3) Tag because it includes class templates, which can't 243 // "overload" with tag decls. 244 if (Redeclaration) 245 IDNS |= Decl::IDNS_Tag | Decl::IDNS_TagFriend | Decl::IDNS_Namespace; 246 } else { 247 IDNS = Decl::IDNS_Tag; 248 } 249 break; 250 case Sema::LookupLabel: 251 IDNS = Decl::IDNS_Label; 252 break; 253 254 case Sema::LookupMemberName: 255 IDNS = Decl::IDNS_Member; 256 if (CPlusPlus) 257 IDNS |= Decl::IDNS_Tag | Decl::IDNS_Ordinary; 258 break; 259 260 case Sema::LookupNestedNameSpecifierName: 261 IDNS = Decl::IDNS_Type | Decl::IDNS_Namespace; 262 break; 263 264 case Sema::LookupNamespaceName: 265 IDNS = Decl::IDNS_Namespace; 266 break; 267 268 case Sema::LookupUsingDeclName: 269 IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Tag 270 | Decl::IDNS_Member | Decl::IDNS_Using; 271 break; 272 273 case Sema::LookupObjCProtocolName: 274 IDNS = Decl::IDNS_ObjCProtocol; 275 break; 276 277 case Sema::LookupAnyName: 278 IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Tag | Decl::IDNS_Member 279 | Decl::IDNS_Using | Decl::IDNS_Namespace | Decl::IDNS_ObjCProtocol 280 | Decl::IDNS_Type; 281 break; 282 } 283 return IDNS; 284 } 285 286 void LookupResult::configure() { 287 IDNS = getIDNS(LookupKind, SemaRef.getLangOpts().CPlusPlus, 288 isForRedeclaration()); 289 290 if (!isForRedeclaration()) { 291 // If we're looking for one of the allocation or deallocation 292 // operators, make sure that the implicitly-declared new and delete 293 // operators can be found. 294 switch (NameInfo.getName().getCXXOverloadedOperator()) { 295 case OO_New: 296 case OO_Delete: 297 case OO_Array_New: 298 case OO_Array_Delete: 299 SemaRef.DeclareGlobalNewDelete(); 300 break; 301 302 default: 303 break; 304 } 305 306 // Compiler builtins are always visible, regardless of where they end 307 // up being declared. 308 if (IdentifierInfo *Id = NameInfo.getName().getAsIdentifierInfo()) { 309 if (unsigned BuiltinID = Id->getBuiltinID()) { 310 if (!SemaRef.Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) 311 AllowHidden = true; 312 } 313 } 314 } 315 } 316 317 void LookupResult::sanityImpl() const { 318 // Note that this function is never called by NDEBUG builds. See 319 // LookupResult::sanity(). 320 assert(ResultKind != NotFound || Decls.size() == 0); 321 assert(ResultKind != Found || Decls.size() == 1); 322 assert(ResultKind != FoundOverloaded || Decls.size() > 1 || 323 (Decls.size() == 1 && 324 isa<FunctionTemplateDecl>((*begin())->getUnderlyingDecl()))); 325 assert(ResultKind != FoundUnresolvedValue || sanityCheckUnresolved()); 326 assert(ResultKind != Ambiguous || Decls.size() > 1 || 327 (Decls.size() == 1 && (Ambiguity == AmbiguousBaseSubobjects || 328 Ambiguity == AmbiguousBaseSubobjectTypes))); 329 assert((Paths != NULL) == (ResultKind == Ambiguous && 330 (Ambiguity == AmbiguousBaseSubobjectTypes || 331 Ambiguity == AmbiguousBaseSubobjects))); 332 } 333 334 // Necessary because CXXBasePaths is not complete in Sema.h 335 void LookupResult::deletePaths(CXXBasePaths *Paths) { 336 delete Paths; 337 } 338 339 static NamedDecl *getVisibleDecl(NamedDecl *D); 340 341 NamedDecl *LookupResult::getAcceptableDeclSlow(NamedDecl *D) const { 342 return getVisibleDecl(D); 343 } 344 345 /// Resolves the result kind of this lookup. 346 void LookupResult::resolveKind() { 347 unsigned N = Decls.size(); 348 349 // Fast case: no possible ambiguity. 350 if (N == 0) { 351 assert(ResultKind == NotFound || ResultKind == NotFoundInCurrentInstantiation); 352 return; 353 } 354 355 // If there's a single decl, we need to examine it to decide what 356 // kind of lookup this is. 357 if (N == 1) { 358 NamedDecl *D = (*Decls.begin())->getUnderlyingDecl(); 359 if (isa<FunctionTemplateDecl>(D)) 360 ResultKind = FoundOverloaded; 361 else if (isa<UnresolvedUsingValueDecl>(D)) 362 ResultKind = FoundUnresolvedValue; 363 return; 364 } 365 366 // Don't do any extra resolution if we've already resolved as ambiguous. 367 if (ResultKind == Ambiguous) return; 368 369 llvm::SmallPtrSet<NamedDecl*, 16> Unique; 370 llvm::SmallPtrSet<QualType, 16> UniqueTypes; 371 372 bool Ambiguous = false; 373 bool HasTag = false, HasFunction = false, HasNonFunction = false; 374 bool HasFunctionTemplate = false, HasUnresolved = false; 375 376 unsigned UniqueTagIndex = 0; 377 378 unsigned I = 0; 379 while (I < N) { 380 NamedDecl *D = Decls[I]->getUnderlyingDecl(); 381 D = cast<NamedDecl>(D->getCanonicalDecl()); 382 383 // Ignore an invalid declaration unless it's the only one left. 384 if (D->isInvalidDecl() && I < N-1) { 385 Decls[I] = Decls[--N]; 386 continue; 387 } 388 389 // Redeclarations of types via typedef can occur both within a scope 390 // and, through using declarations and directives, across scopes. There is 391 // no ambiguity if they all refer to the same type, so unique based on the 392 // canonical type. 393 if (TypeDecl *TD = dyn_cast<TypeDecl>(D)) { 394 if (!TD->getDeclContext()->isRecord()) { 395 QualType T = SemaRef.Context.getTypeDeclType(TD); 396 if (!UniqueTypes.insert(SemaRef.Context.getCanonicalType(T))) { 397 // The type is not unique; pull something off the back and continue 398 // at this index. 399 Decls[I] = Decls[--N]; 400 continue; 401 } 402 } 403 } 404 405 if (!Unique.insert(D)) { 406 // If it's not unique, pull something off the back (and 407 // continue at this index). 408 Decls[I] = Decls[--N]; 409 continue; 410 } 411 412 // Otherwise, do some decl type analysis and then continue. 413 414 if (isa<UnresolvedUsingValueDecl>(D)) { 415 HasUnresolved = true; 416 } else if (isa<TagDecl>(D)) { 417 if (HasTag) 418 Ambiguous = true; 419 UniqueTagIndex = I; 420 HasTag = true; 421 } else if (isa<FunctionTemplateDecl>(D)) { 422 HasFunction = true; 423 HasFunctionTemplate = true; 424 } else if (isa<FunctionDecl>(D)) { 425 HasFunction = true; 426 } else { 427 if (HasNonFunction) 428 Ambiguous = true; 429 HasNonFunction = true; 430 } 431 I++; 432 } 433 434 // C++ [basic.scope.hiding]p2: 435 // A class name or enumeration name can be hidden by the name of 436 // an object, function, or enumerator declared in the same 437 // scope. If a class or enumeration name and an object, function, 438 // or enumerator are declared in the same scope (in any order) 439 // with the same name, the class or enumeration name is hidden 440 // wherever the object, function, or enumerator name is visible. 441 // But it's still an error if there are distinct tag types found, 442 // even if they're not visible. (ref?) 443 if (HideTags && HasTag && !Ambiguous && 444 (HasFunction || HasNonFunction || HasUnresolved)) { 445 if (Decls[UniqueTagIndex]->getDeclContext()->getRedeclContext()->Equals( 446 Decls[UniqueTagIndex? 0 : N-1]->getDeclContext()->getRedeclContext())) 447 Decls[UniqueTagIndex] = Decls[--N]; 448 else 449 Ambiguous = true; 450 } 451 452 Decls.set_size(N); 453 454 if (HasNonFunction && (HasFunction || HasUnresolved)) 455 Ambiguous = true; 456 457 if (Ambiguous) 458 setAmbiguous(LookupResult::AmbiguousReference); 459 else if (HasUnresolved) 460 ResultKind = LookupResult::FoundUnresolvedValue; 461 else if (N > 1 || HasFunctionTemplate) 462 ResultKind = LookupResult::FoundOverloaded; 463 else 464 ResultKind = LookupResult::Found; 465 } 466 467 void LookupResult::addDeclsFromBasePaths(const CXXBasePaths &P) { 468 CXXBasePaths::const_paths_iterator I, E; 469 for (I = P.begin(), E = P.end(); I != E; ++I) 470 for (DeclContext::lookup_iterator DI = I->Decls.begin(), 471 DE = I->Decls.end(); DI != DE; ++DI) 472 addDecl(*DI); 473 } 474 475 void LookupResult::setAmbiguousBaseSubobjects(CXXBasePaths &P) { 476 Paths = new CXXBasePaths; 477 Paths->swap(P); 478 addDeclsFromBasePaths(*Paths); 479 resolveKind(); 480 setAmbiguous(AmbiguousBaseSubobjects); 481 } 482 483 void LookupResult::setAmbiguousBaseSubobjectTypes(CXXBasePaths &P) { 484 Paths = new CXXBasePaths; 485 Paths->swap(P); 486 addDeclsFromBasePaths(*Paths); 487 resolveKind(); 488 setAmbiguous(AmbiguousBaseSubobjectTypes); 489 } 490 491 void LookupResult::print(raw_ostream &Out) { 492 Out << Decls.size() << " result(s)"; 493 if (isAmbiguous()) Out << ", ambiguous"; 494 if (Paths) Out << ", base paths present"; 495 496 for (iterator I = begin(), E = end(); I != E; ++I) { 497 Out << "\n"; 498 (*I)->print(Out, 2); 499 } 500 } 501 502 /// \brief Lookup a builtin function, when name lookup would otherwise 503 /// fail. 504 static bool LookupBuiltin(Sema &S, LookupResult &R) { 505 Sema::LookupNameKind NameKind = R.getLookupKind(); 506 507 // If we didn't find a use of this identifier, and if the identifier 508 // corresponds to a compiler builtin, create the decl object for the builtin 509 // now, injecting it into translation unit scope, and return it. 510 if (NameKind == Sema::LookupOrdinaryName || 511 NameKind == Sema::LookupRedeclarationWithLinkage) { 512 IdentifierInfo *II = R.getLookupName().getAsIdentifierInfo(); 513 if (II) { 514 // If this is a builtin on this (or all) targets, create the decl. 515 if (unsigned BuiltinID = II->getBuiltinID()) { 516 // In C++, we don't have any predefined library functions like 517 // 'malloc'. Instead, we'll just error. 518 if (S.getLangOpts().CPlusPlus && 519 S.Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) 520 return false; 521 522 if (NamedDecl *D = S.LazilyCreateBuiltin((IdentifierInfo *)II, 523 BuiltinID, S.TUScope, 524 R.isForRedeclaration(), 525 R.getNameLoc())) { 526 R.addDecl(D); 527 return true; 528 } 529 530 if (R.isForRedeclaration()) { 531 // If we're redeclaring this function anyway, forget that 532 // this was a builtin at all. 533 S.Context.BuiltinInfo.ForgetBuiltin(BuiltinID, S.Context.Idents); 534 } 535 536 return false; 537 } 538 } 539 } 540 541 return false; 542 } 543 544 /// \brief Determine whether we can declare a special member function within 545 /// the class at this point. 546 static bool CanDeclareSpecialMemberFunction(const CXXRecordDecl *Class) { 547 // We need to have a definition for the class. 548 if (!Class->getDefinition() || Class->isDependentContext()) 549 return false; 550 551 // We can't be in the middle of defining the class. 552 return !Class->isBeingDefined(); 553 } 554 555 void Sema::ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class) { 556 if (!CanDeclareSpecialMemberFunction(Class)) 557 return; 558 559 // If the default constructor has not yet been declared, do so now. 560 if (Class->needsImplicitDefaultConstructor()) 561 DeclareImplicitDefaultConstructor(Class); 562 563 // If the copy constructor has not yet been declared, do so now. 564 if (Class->needsImplicitCopyConstructor()) 565 DeclareImplicitCopyConstructor(Class); 566 567 // If the copy assignment operator has not yet been declared, do so now. 568 if (Class->needsImplicitCopyAssignment()) 569 DeclareImplicitCopyAssignment(Class); 570 571 if (getLangOpts().CPlusPlus11) { 572 // If the move constructor has not yet been declared, do so now. 573 if (Class->needsImplicitMoveConstructor()) 574 DeclareImplicitMoveConstructor(Class); // might not actually do it 575 576 // If the move assignment operator has not yet been declared, do so now. 577 if (Class->needsImplicitMoveAssignment()) 578 DeclareImplicitMoveAssignment(Class); // might not actually do it 579 } 580 581 // If the destructor has not yet been declared, do so now. 582 if (Class->needsImplicitDestructor()) 583 DeclareImplicitDestructor(Class); 584 } 585 586 /// \brief Determine whether this is the name of an implicitly-declared 587 /// special member function. 588 static bool isImplicitlyDeclaredMemberFunctionName(DeclarationName Name) { 589 switch (Name.getNameKind()) { 590 case DeclarationName::CXXConstructorName: 591 case DeclarationName::CXXDestructorName: 592 return true; 593 594 case DeclarationName::CXXOperatorName: 595 return Name.getCXXOverloadedOperator() == OO_Equal; 596 597 default: 598 break; 599 } 600 601 return false; 602 } 603 604 /// \brief If there are any implicit member functions with the given name 605 /// that need to be declared in the given declaration context, do so. 606 static void DeclareImplicitMemberFunctionsWithName(Sema &S, 607 DeclarationName Name, 608 const DeclContext *DC) { 609 if (!DC) 610 return; 611 612 switch (Name.getNameKind()) { 613 case DeclarationName::CXXConstructorName: 614 if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC)) 615 if (Record->getDefinition() && CanDeclareSpecialMemberFunction(Record)) { 616 CXXRecordDecl *Class = const_cast<CXXRecordDecl *>(Record); 617 if (Record->needsImplicitDefaultConstructor()) 618 S.DeclareImplicitDefaultConstructor(Class); 619 if (Record->needsImplicitCopyConstructor()) 620 S.DeclareImplicitCopyConstructor(Class); 621 if (S.getLangOpts().CPlusPlus11 && 622 Record->needsImplicitMoveConstructor()) 623 S.DeclareImplicitMoveConstructor(Class); 624 } 625 break; 626 627 case DeclarationName::CXXDestructorName: 628 if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC)) 629 if (Record->getDefinition() && Record->needsImplicitDestructor() && 630 CanDeclareSpecialMemberFunction(Record)) 631 S.DeclareImplicitDestructor(const_cast<CXXRecordDecl *>(Record)); 632 break; 633 634 case DeclarationName::CXXOperatorName: 635 if (Name.getCXXOverloadedOperator() != OO_Equal) 636 break; 637 638 if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC)) { 639 if (Record->getDefinition() && CanDeclareSpecialMemberFunction(Record)) { 640 CXXRecordDecl *Class = const_cast<CXXRecordDecl *>(Record); 641 if (Record->needsImplicitCopyAssignment()) 642 S.DeclareImplicitCopyAssignment(Class); 643 if (S.getLangOpts().CPlusPlus11 && 644 Record->needsImplicitMoveAssignment()) 645 S.DeclareImplicitMoveAssignment(Class); 646 } 647 } 648 break; 649 650 default: 651 break; 652 } 653 } 654 655 // Adds all qualifying matches for a name within a decl context to the 656 // given lookup result. Returns true if any matches were found. 657 static bool LookupDirect(Sema &S, LookupResult &R, const DeclContext *DC) { 658 bool Found = false; 659 660 // Lazily declare C++ special member functions. 661 if (S.getLangOpts().CPlusPlus) 662 DeclareImplicitMemberFunctionsWithName(S, R.getLookupName(), DC); 663 664 // Perform lookup into this declaration context. 665 DeclContext::lookup_const_result DR = DC->lookup(R.getLookupName()); 666 for (DeclContext::lookup_const_iterator I = DR.begin(), E = DR.end(); I != E; 667 ++I) { 668 NamedDecl *D = *I; 669 if ((D = R.getAcceptableDecl(D))) { 670 R.addDecl(D); 671 Found = true; 672 } 673 } 674 675 if (!Found && DC->isTranslationUnit() && LookupBuiltin(S, R)) 676 return true; 677 678 if (R.getLookupName().getNameKind() 679 != DeclarationName::CXXConversionFunctionName || 680 R.getLookupName().getCXXNameType()->isDependentType() || 681 !isa<CXXRecordDecl>(DC)) 682 return Found; 683 684 // C++ [temp.mem]p6: 685 // A specialization of a conversion function template is not found by 686 // name lookup. Instead, any conversion function templates visible in the 687 // context of the use are considered. [...] 688 const CXXRecordDecl *Record = cast<CXXRecordDecl>(DC); 689 if (!Record->isCompleteDefinition()) 690 return Found; 691 692 for (CXXRecordDecl::conversion_iterator U = Record->conversion_begin(), 693 UEnd = Record->conversion_end(); U != UEnd; ++U) { 694 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(*U); 695 if (!ConvTemplate) 696 continue; 697 698 // When we're performing lookup for the purposes of redeclaration, just 699 // add the conversion function template. When we deduce template 700 // arguments for specializations, we'll end up unifying the return 701 // type of the new declaration with the type of the function template. 702 if (R.isForRedeclaration()) { 703 R.addDecl(ConvTemplate); 704 Found = true; 705 continue; 706 } 707 708 // C++ [temp.mem]p6: 709 // [...] For each such operator, if argument deduction succeeds 710 // (14.9.2.3), the resulting specialization is used as if found by 711 // name lookup. 712 // 713 // When referencing a conversion function for any purpose other than 714 // a redeclaration (such that we'll be building an expression with the 715 // result), perform template argument deduction and place the 716 // specialization into the result set. We do this to avoid forcing all 717 // callers to perform special deduction for conversion functions. 718 TemplateDeductionInfo Info(R.getNameLoc()); 719 FunctionDecl *Specialization = 0; 720 721 const FunctionProtoType *ConvProto 722 = ConvTemplate->getTemplatedDecl()->getType()->getAs<FunctionProtoType>(); 723 assert(ConvProto && "Nonsensical conversion function template type"); 724 725 // Compute the type of the function that we would expect the conversion 726 // function to have, if it were to match the name given. 727 // FIXME: Calling convention! 728 FunctionProtoType::ExtProtoInfo EPI = ConvProto->getExtProtoInfo(); 729 EPI.ExtInfo = EPI.ExtInfo.withCallingConv(CC_Default); 730 EPI.ExceptionSpecType = EST_None; 731 EPI.NumExceptions = 0; 732 QualType ExpectedType 733 = R.getSema().Context.getFunctionType(R.getLookupName().getCXXNameType(), 734 None, EPI); 735 736 // Perform template argument deduction against the type that we would 737 // expect the function to have. 738 if (R.getSema().DeduceTemplateArguments(ConvTemplate, 0, ExpectedType, 739 Specialization, Info) 740 == Sema::TDK_Success) { 741 R.addDecl(Specialization); 742 Found = true; 743 } 744 } 745 746 return Found; 747 } 748 749 // Performs C++ unqualified lookup into the given file context. 750 static bool 751 CppNamespaceLookup(Sema &S, LookupResult &R, ASTContext &Context, 752 DeclContext *NS, UnqualUsingDirectiveSet &UDirs) { 753 754 assert(NS && NS->isFileContext() && "CppNamespaceLookup() requires namespace!"); 755 756 // Perform direct name lookup into the LookupCtx. 757 bool Found = LookupDirect(S, R, NS); 758 759 // Perform direct name lookup into the namespaces nominated by the 760 // using directives whose common ancestor is this namespace. 761 UnqualUsingDirectiveSet::const_iterator UI, UEnd; 762 llvm::tie(UI, UEnd) = UDirs.getNamespacesFor(NS); 763 764 for (; UI != UEnd; ++UI) 765 if (LookupDirect(S, R, UI->getNominatedNamespace())) 766 Found = true; 767 768 R.resolveKind(); 769 770 return Found; 771 } 772 773 static bool isNamespaceOrTranslationUnitScope(Scope *S) { 774 if (DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity())) 775 return Ctx->isFileContext(); 776 return false; 777 } 778 779 // Find the next outer declaration context from this scope. This 780 // routine actually returns the semantic outer context, which may 781 // differ from the lexical context (encoded directly in the Scope 782 // stack) when we are parsing a member of a class template. In this 783 // case, the second element of the pair will be true, to indicate that 784 // name lookup should continue searching in this semantic context when 785 // it leaves the current template parameter scope. 786 static std::pair<DeclContext *, bool> findOuterContext(Scope *S) { 787 DeclContext *DC = static_cast<DeclContext *>(S->getEntity()); 788 DeclContext *Lexical = 0; 789 for (Scope *OuterS = S->getParent(); OuterS; 790 OuterS = OuterS->getParent()) { 791 if (OuterS->getEntity()) { 792 Lexical = static_cast<DeclContext *>(OuterS->getEntity()); 793 break; 794 } 795 } 796 797 // C++ [temp.local]p8: 798 // In the definition of a member of a class template that appears 799 // outside of the namespace containing the class template 800 // definition, the name of a template-parameter hides the name of 801 // a member of this namespace. 802 // 803 // Example: 804 // 805 // namespace N { 806 // class C { }; 807 // 808 // template<class T> class B { 809 // void f(T); 810 // }; 811 // } 812 // 813 // template<class C> void N::B<C>::f(C) { 814 // C b; // C is the template parameter, not N::C 815 // } 816 // 817 // In this example, the lexical context we return is the 818 // TranslationUnit, while the semantic context is the namespace N. 819 if (!Lexical || !DC || !S->getParent() || 820 !S->getParent()->isTemplateParamScope()) 821 return std::make_pair(Lexical, false); 822 823 // Find the outermost template parameter scope. 824 // For the example, this is the scope for the template parameters of 825 // template<class C>. 826 Scope *OutermostTemplateScope = S->getParent(); 827 while (OutermostTemplateScope->getParent() && 828 OutermostTemplateScope->getParent()->isTemplateParamScope()) 829 OutermostTemplateScope = OutermostTemplateScope->getParent(); 830 831 // Find the namespace context in which the original scope occurs. In 832 // the example, this is namespace N. 833 DeclContext *Semantic = DC; 834 while (!Semantic->isFileContext()) 835 Semantic = Semantic->getParent(); 836 837 // Find the declaration context just outside of the template 838 // parameter scope. This is the context in which the template is 839 // being lexically declaration (a namespace context). In the 840 // example, this is the global scope. 841 if (Lexical->isFileContext() && !Lexical->Equals(Semantic) && 842 Lexical->Encloses(Semantic)) 843 return std::make_pair(Semantic, true); 844 845 return std::make_pair(Lexical, false); 846 } 847 848 bool Sema::CppLookupName(LookupResult &R, Scope *S) { 849 assert(getLangOpts().CPlusPlus && "Can perform only C++ lookup"); 850 851 DeclarationName Name = R.getLookupName(); 852 853 // If this is the name of an implicitly-declared special member function, 854 // go through the scope stack to implicitly declare 855 if (isImplicitlyDeclaredMemberFunctionName(Name)) { 856 for (Scope *PreS = S; PreS; PreS = PreS->getParent()) 857 if (DeclContext *DC = static_cast<DeclContext *>(PreS->getEntity())) 858 DeclareImplicitMemberFunctionsWithName(*this, Name, DC); 859 } 860 861 // Implicitly declare member functions with the name we're looking for, if in 862 // fact we are in a scope where it matters. 863 864 Scope *Initial = S; 865 IdentifierResolver::iterator 866 I = IdResolver.begin(Name), 867 IEnd = IdResolver.end(); 868 869 // First we lookup local scope. 870 // We don't consider using-directives, as per 7.3.4.p1 [namespace.udir] 871 // ...During unqualified name lookup (3.4.1), the names appear as if 872 // they were declared in the nearest enclosing namespace which contains 873 // both the using-directive and the nominated namespace. 874 // [Note: in this context, "contains" means "contains directly or 875 // indirectly". 876 // 877 // For example: 878 // namespace A { int i; } 879 // void foo() { 880 // int i; 881 // { 882 // using namespace A; 883 // ++i; // finds local 'i', A::i appears at global scope 884 // } 885 // } 886 // 887 UnqualUsingDirectiveSet UDirs; 888 bool VisitedUsingDirectives = false; 889 DeclContext *OutsideOfTemplateParamDC = 0; 890 for (; S && !isNamespaceOrTranslationUnitScope(S); S = S->getParent()) { 891 DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity()); 892 893 // Check whether the IdResolver has anything in this scope. 894 bool Found = false; 895 for (; I != IEnd && S->isDeclScope(*I); ++I) { 896 if (NamedDecl *ND = R.getAcceptableDecl(*I)) { 897 Found = true; 898 R.addDecl(ND); 899 } 900 } 901 if (Found) { 902 R.resolveKind(); 903 if (S->isClassScope()) 904 if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(Ctx)) 905 R.setNamingClass(Record); 906 return true; 907 } 908 909 if (!Ctx && S->isTemplateParamScope() && OutsideOfTemplateParamDC && 910 S->getParent() && !S->getParent()->isTemplateParamScope()) { 911 // We've just searched the last template parameter scope and 912 // found nothing, so look into the contexts between the 913 // lexical and semantic declaration contexts returned by 914 // findOuterContext(). This implements the name lookup behavior 915 // of C++ [temp.local]p8. 916 Ctx = OutsideOfTemplateParamDC; 917 OutsideOfTemplateParamDC = 0; 918 } 919 920 if (Ctx) { 921 DeclContext *OuterCtx; 922 bool SearchAfterTemplateScope; 923 llvm::tie(OuterCtx, SearchAfterTemplateScope) = findOuterContext(S); 924 if (SearchAfterTemplateScope) 925 OutsideOfTemplateParamDC = OuterCtx; 926 927 for (; Ctx && !Ctx->Equals(OuterCtx); Ctx = Ctx->getLookupParent()) { 928 // We do not directly look into transparent contexts, since 929 // those entities will be found in the nearest enclosing 930 // non-transparent context. 931 if (Ctx->isTransparentContext()) 932 continue; 933 934 // We do not look directly into function or method contexts, 935 // since all of the local variables and parameters of the 936 // function/method are present within the Scope. 937 if (Ctx->isFunctionOrMethod()) { 938 // If we have an Objective-C instance method, look for ivars 939 // in the corresponding interface. 940 if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(Ctx)) { 941 if (Method->isInstanceMethod() && Name.getAsIdentifierInfo()) 942 if (ObjCInterfaceDecl *Class = Method->getClassInterface()) { 943 ObjCInterfaceDecl *ClassDeclared; 944 if (ObjCIvarDecl *Ivar = Class->lookupInstanceVariable( 945 Name.getAsIdentifierInfo(), 946 ClassDeclared)) { 947 if (NamedDecl *ND = R.getAcceptableDecl(Ivar)) { 948 R.addDecl(ND); 949 R.resolveKind(); 950 return true; 951 } 952 } 953 } 954 } 955 956 continue; 957 } 958 959 // If this is a file context, we need to perform unqualified name 960 // lookup considering using directives. 961 if (Ctx->isFileContext()) { 962 // If we haven't handled using directives yet, do so now. 963 if (!VisitedUsingDirectives) { 964 // Add using directives from this context up to the top level. 965 for (DeclContext *UCtx = Ctx; UCtx; UCtx = UCtx->getParent()) { 966 if (UCtx->isTransparentContext()) 967 continue; 968 969 UDirs.visit(UCtx, UCtx); 970 } 971 972 // Find the innermost file scope, so we can add using directives 973 // from local scopes. 974 Scope *InnermostFileScope = S; 975 while (InnermostFileScope && 976 !isNamespaceOrTranslationUnitScope(InnermostFileScope)) 977 InnermostFileScope = InnermostFileScope->getParent(); 978 UDirs.visitScopeChain(Initial, InnermostFileScope); 979 980 UDirs.done(); 981 982 VisitedUsingDirectives = true; 983 } 984 985 if (CppNamespaceLookup(*this, R, Context, Ctx, UDirs)) { 986 R.resolveKind(); 987 return true; 988 } 989 990 continue; 991 } 992 993 // Perform qualified name lookup into this context. 994 // FIXME: In some cases, we know that every name that could be found by 995 // this qualified name lookup will also be on the identifier chain. For 996 // example, inside a class without any base classes, we never need to 997 // perform qualified lookup because all of the members are on top of the 998 // identifier chain. 999 if (LookupQualifiedName(R, Ctx, /*InUnqualifiedLookup=*/true)) 1000 return true; 1001 } 1002 } 1003 } 1004 1005 // Stop if we ran out of scopes. 1006 // FIXME: This really, really shouldn't be happening. 1007 if (!S) return false; 1008 1009 // If we are looking for members, no need to look into global/namespace scope. 1010 if (R.getLookupKind() == LookupMemberName) 1011 return false; 1012 1013 // Collect UsingDirectiveDecls in all scopes, and recursively all 1014 // nominated namespaces by those using-directives. 1015 // 1016 // FIXME: Cache this sorted list in Scope structure, and DeclContext, so we 1017 // don't build it for each lookup! 1018 if (!VisitedUsingDirectives) { 1019 UDirs.visitScopeChain(Initial, S); 1020 UDirs.done(); 1021 } 1022 1023 // Lookup namespace scope, and global scope. 1024 // Unqualified name lookup in C++ requires looking into scopes 1025 // that aren't strictly lexical, and therefore we walk through the 1026 // context as well as walking through the scopes. 1027 for (; S; S = S->getParent()) { 1028 // Check whether the IdResolver has anything in this scope. 1029 bool Found = false; 1030 for (; I != IEnd && S->isDeclScope(*I); ++I) { 1031 if (NamedDecl *ND = R.getAcceptableDecl(*I)) { 1032 // We found something. Look for anything else in our scope 1033 // with this same name and in an acceptable identifier 1034 // namespace, so that we can construct an overload set if we 1035 // need to. 1036 Found = true; 1037 R.addDecl(ND); 1038 } 1039 } 1040 1041 if (Found && S->isTemplateParamScope()) { 1042 R.resolveKind(); 1043 return true; 1044 } 1045 1046 DeclContext *Ctx = static_cast<DeclContext *>(S->getEntity()); 1047 if (!Ctx && S->isTemplateParamScope() && OutsideOfTemplateParamDC && 1048 S->getParent() && !S->getParent()->isTemplateParamScope()) { 1049 // We've just searched the last template parameter scope and 1050 // found nothing, so look into the contexts between the 1051 // lexical and semantic declaration contexts returned by 1052 // findOuterContext(). This implements the name lookup behavior 1053 // of C++ [temp.local]p8. 1054 Ctx = OutsideOfTemplateParamDC; 1055 OutsideOfTemplateParamDC = 0; 1056 } 1057 1058 if (Ctx) { 1059 DeclContext *OuterCtx; 1060 bool SearchAfterTemplateScope; 1061 llvm::tie(OuterCtx, SearchAfterTemplateScope) = findOuterContext(S); 1062 if (SearchAfterTemplateScope) 1063 OutsideOfTemplateParamDC = OuterCtx; 1064 1065 for (; Ctx && !Ctx->Equals(OuterCtx); Ctx = Ctx->getLookupParent()) { 1066 // We do not directly look into transparent contexts, since 1067 // those entities will be found in the nearest enclosing 1068 // non-transparent context. 1069 if (Ctx->isTransparentContext()) 1070 continue; 1071 1072 // If we have a context, and it's not a context stashed in the 1073 // template parameter scope for an out-of-line definition, also 1074 // look into that context. 1075 if (!(Found && S && S->isTemplateParamScope())) { 1076 assert(Ctx->isFileContext() && 1077 "We should have been looking only at file context here already."); 1078 1079 // Look into context considering using-directives. 1080 if (CppNamespaceLookup(*this, R, Context, Ctx, UDirs)) 1081 Found = true; 1082 } 1083 1084 if (Found) { 1085 R.resolveKind(); 1086 return true; 1087 } 1088 1089 if (R.isForRedeclaration() && !Ctx->isTransparentContext()) 1090 return false; 1091 } 1092 } 1093 1094 if (R.isForRedeclaration() && Ctx && !Ctx->isTransparentContext()) 1095 return false; 1096 } 1097 1098 return !R.empty(); 1099 } 1100 1101 /// \brief Retrieve the visible declaration corresponding to D, if any. 1102 /// 1103 /// This routine determines whether the declaration D is visible in the current 1104 /// module, with the current imports. If not, it checks whether any 1105 /// redeclaration of D is visible, and if so, returns that declaration. 1106 /// 1107 /// \returns D, or a visible previous declaration of D, whichever is more recent 1108 /// and visible. If no declaration of D is visible, returns null. 1109 static NamedDecl *getVisibleDecl(NamedDecl *D) { 1110 if (LookupResult::isVisible(D)) 1111 return D; 1112 1113 for (Decl::redecl_iterator RD = D->redecls_begin(), RDEnd = D->redecls_end(); 1114 RD != RDEnd; ++RD) { 1115 if (NamedDecl *ND = dyn_cast<NamedDecl>(*RD)) { 1116 if (LookupResult::isVisible(ND)) 1117 return ND; 1118 } 1119 } 1120 1121 return 0; 1122 } 1123 1124 /// @brief Perform unqualified name lookup starting from a given 1125 /// scope. 1126 /// 1127 /// Unqualified name lookup (C++ [basic.lookup.unqual], C99 6.2.1) is 1128 /// used to find names within the current scope. For example, 'x' in 1129 /// @code 1130 /// int x; 1131 /// int f() { 1132 /// return x; // unqualified name look finds 'x' in the global scope 1133 /// } 1134 /// @endcode 1135 /// 1136 /// Different lookup criteria can find different names. For example, a 1137 /// particular scope can have both a struct and a function of the same 1138 /// name, and each can be found by certain lookup criteria. For more 1139 /// information about lookup criteria, see the documentation for the 1140 /// class LookupCriteria. 1141 /// 1142 /// @param S The scope from which unqualified name lookup will 1143 /// begin. If the lookup criteria permits, name lookup may also search 1144 /// in the parent scopes. 1145 /// 1146 /// @param [in,out] R Specifies the lookup to perform (e.g., the name to 1147 /// look up and the lookup kind), and is updated with the results of lookup 1148 /// including zero or more declarations and possibly additional information 1149 /// used to diagnose ambiguities. 1150 /// 1151 /// @returns \c true if lookup succeeded and false otherwise. 1152 bool Sema::LookupName(LookupResult &R, Scope *S, bool AllowBuiltinCreation) { 1153 DeclarationName Name = R.getLookupName(); 1154 if (!Name) return false; 1155 1156 LookupNameKind NameKind = R.getLookupKind(); 1157 1158 if (!getLangOpts().CPlusPlus) { 1159 // Unqualified name lookup in C/Objective-C is purely lexical, so 1160 // search in the declarations attached to the name. 1161 if (NameKind == Sema::LookupRedeclarationWithLinkage) { 1162 // Find the nearest non-transparent declaration scope. 1163 while (!(S->getFlags() & Scope::DeclScope) || 1164 (S->getEntity() && 1165 static_cast<DeclContext *>(S->getEntity()) 1166 ->isTransparentContext())) 1167 S = S->getParent(); 1168 } 1169 1170 unsigned IDNS = R.getIdentifierNamespace(); 1171 1172 // Scan up the scope chain looking for a decl that matches this 1173 // identifier that is in the appropriate namespace. This search 1174 // should not take long, as shadowing of names is uncommon, and 1175 // deep shadowing is extremely uncommon. 1176 bool LeftStartingScope = false; 1177 1178 for (IdentifierResolver::iterator I = IdResolver.begin(Name), 1179 IEnd = IdResolver.end(); 1180 I != IEnd; ++I) 1181 if ((*I)->isInIdentifierNamespace(IDNS)) { 1182 if (NameKind == LookupRedeclarationWithLinkage) { 1183 // Determine whether this (or a previous) declaration is 1184 // out-of-scope. 1185 if (!LeftStartingScope && !S->isDeclScope(*I)) 1186 LeftStartingScope = true; 1187 1188 // If we found something outside of our starting scope that 1189 // does not have linkage, skip it. 1190 if (LeftStartingScope && !((*I)->hasLinkage())) 1191 continue; 1192 } 1193 else if (NameKind == LookupObjCImplicitSelfParam && 1194 !isa<ImplicitParamDecl>(*I)) 1195 continue; 1196 1197 // If this declaration is module-private and it came from an AST 1198 // file, we can't see it. 1199 NamedDecl *D = R.isHiddenDeclarationVisible()? *I : getVisibleDecl(*I); 1200 if (!D) 1201 continue; 1202 1203 R.addDecl(D); 1204 1205 // Check whether there are any other declarations with the same name 1206 // and in the same scope. 1207 if (I != IEnd) { 1208 // Find the scope in which this declaration was declared (if it 1209 // actually exists in a Scope). 1210 while (S && !S->isDeclScope(D)) 1211 S = S->getParent(); 1212 1213 // If the scope containing the declaration is the translation unit, 1214 // then we'll need to perform our checks based on the matching 1215 // DeclContexts rather than matching scopes. 1216 if (S && isNamespaceOrTranslationUnitScope(S)) 1217 S = 0; 1218 1219 // Compute the DeclContext, if we need it. 1220 DeclContext *DC = 0; 1221 if (!S) 1222 DC = (*I)->getDeclContext()->getRedeclContext(); 1223 1224 IdentifierResolver::iterator LastI = I; 1225 for (++LastI; LastI != IEnd; ++LastI) { 1226 if (S) { 1227 // Match based on scope. 1228 if (!S->isDeclScope(*LastI)) 1229 break; 1230 } else { 1231 // Match based on DeclContext. 1232 DeclContext *LastDC 1233 = (*LastI)->getDeclContext()->getRedeclContext(); 1234 if (!LastDC->Equals(DC)) 1235 break; 1236 } 1237 1238 // If the declaration isn't in the right namespace, skip it. 1239 if (!(*LastI)->isInIdentifierNamespace(IDNS)) 1240 continue; 1241 1242 D = R.isHiddenDeclarationVisible()? *LastI : getVisibleDecl(*LastI); 1243 if (D) 1244 R.addDecl(D); 1245 } 1246 1247 R.resolveKind(); 1248 } 1249 return true; 1250 } 1251 } else { 1252 // Perform C++ unqualified name lookup. 1253 if (CppLookupName(R, S)) 1254 return true; 1255 } 1256 1257 // If we didn't find a use of this identifier, and if the identifier 1258 // corresponds to a compiler builtin, create the decl object for the builtin 1259 // now, injecting it into translation unit scope, and return it. 1260 if (AllowBuiltinCreation && LookupBuiltin(*this, R)) 1261 return true; 1262 1263 // If we didn't find a use of this identifier, the ExternalSource 1264 // may be able to handle the situation. 1265 // Note: some lookup failures are expected! 1266 // See e.g. R.isForRedeclaration(). 1267 return (ExternalSource && ExternalSource->LookupUnqualified(R, S)); 1268 } 1269 1270 /// @brief Perform qualified name lookup in the namespaces nominated by 1271 /// using directives by the given context. 1272 /// 1273 /// C++98 [namespace.qual]p2: 1274 /// Given X::m (where X is a user-declared namespace), or given \::m 1275 /// (where X is the global namespace), let S be the set of all 1276 /// declarations of m in X and in the transitive closure of all 1277 /// namespaces nominated by using-directives in X and its used 1278 /// namespaces, except that using-directives are ignored in any 1279 /// namespace, including X, directly containing one or more 1280 /// declarations of m. No namespace is searched more than once in 1281 /// the lookup of a name. If S is the empty set, the program is 1282 /// ill-formed. Otherwise, if S has exactly one member, or if the 1283 /// context of the reference is a using-declaration 1284 /// (namespace.udecl), S is the required set of declarations of 1285 /// m. Otherwise if the use of m is not one that allows a unique 1286 /// declaration to be chosen from S, the program is ill-formed. 1287 /// 1288 /// C++98 [namespace.qual]p5: 1289 /// During the lookup of a qualified namespace member name, if the 1290 /// lookup finds more than one declaration of the member, and if one 1291 /// declaration introduces a class name or enumeration name and the 1292 /// other declarations either introduce the same object, the same 1293 /// enumerator or a set of functions, the non-type name hides the 1294 /// class or enumeration name if and only if the declarations are 1295 /// from the same namespace; otherwise (the declarations are from 1296 /// different namespaces), the program is ill-formed. 1297 static bool LookupQualifiedNameInUsingDirectives(Sema &S, LookupResult &R, 1298 DeclContext *StartDC) { 1299 assert(StartDC->isFileContext() && "start context is not a file context"); 1300 1301 DeclContext::udir_iterator I = StartDC->using_directives_begin(); 1302 DeclContext::udir_iterator E = StartDC->using_directives_end(); 1303 1304 if (I == E) return false; 1305 1306 // We have at least added all these contexts to the queue. 1307 llvm::SmallPtrSet<DeclContext*, 8> Visited; 1308 Visited.insert(StartDC); 1309 1310 // We have not yet looked into these namespaces, much less added 1311 // their "using-children" to the queue. 1312 SmallVector<NamespaceDecl*, 8> Queue; 1313 1314 // We have already looked into the initial namespace; seed the queue 1315 // with its using-children. 1316 for (; I != E; ++I) { 1317 NamespaceDecl *ND = (*I)->getNominatedNamespace()->getOriginalNamespace(); 1318 if (Visited.insert(ND)) 1319 Queue.push_back(ND); 1320 } 1321 1322 // The easiest way to implement the restriction in [namespace.qual]p5 1323 // is to check whether any of the individual results found a tag 1324 // and, if so, to declare an ambiguity if the final result is not 1325 // a tag. 1326 bool FoundTag = false; 1327 bool FoundNonTag = false; 1328 1329 LookupResult LocalR(LookupResult::Temporary, R); 1330 1331 bool Found = false; 1332 while (!Queue.empty()) { 1333 NamespaceDecl *ND = Queue.back(); 1334 Queue.pop_back(); 1335 1336 // We go through some convolutions here to avoid copying results 1337 // between LookupResults. 1338 bool UseLocal = !R.empty(); 1339 LookupResult &DirectR = UseLocal ? LocalR : R; 1340 bool FoundDirect = LookupDirect(S, DirectR, ND); 1341 1342 if (FoundDirect) { 1343 // First do any local hiding. 1344 DirectR.resolveKind(); 1345 1346 // If the local result is a tag, remember that. 1347 if (DirectR.isSingleTagDecl()) 1348 FoundTag = true; 1349 else 1350 FoundNonTag = true; 1351 1352 // Append the local results to the total results if necessary. 1353 if (UseLocal) { 1354 R.addAllDecls(LocalR); 1355 LocalR.clear(); 1356 } 1357 } 1358 1359 // If we find names in this namespace, ignore its using directives. 1360 if (FoundDirect) { 1361 Found = true; 1362 continue; 1363 } 1364 1365 for (llvm::tie(I,E) = ND->getUsingDirectives(); I != E; ++I) { 1366 NamespaceDecl *Nom = (*I)->getNominatedNamespace(); 1367 if (Visited.insert(Nom)) 1368 Queue.push_back(Nom); 1369 } 1370 } 1371 1372 if (Found) { 1373 if (FoundTag && FoundNonTag) 1374 R.setAmbiguousQualifiedTagHiding(); 1375 else 1376 R.resolveKind(); 1377 } 1378 1379 return Found; 1380 } 1381 1382 /// \brief Callback that looks for any member of a class with the given name. 1383 static bool LookupAnyMember(const CXXBaseSpecifier *Specifier, 1384 CXXBasePath &Path, 1385 void *Name) { 1386 RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl(); 1387 1388 DeclarationName N = DeclarationName::getFromOpaquePtr(Name); 1389 Path.Decls = BaseRecord->lookup(N); 1390 return !Path.Decls.empty(); 1391 } 1392 1393 /// \brief Determine whether the given set of member declarations contains only 1394 /// static members, nested types, and enumerators. 1395 template<typename InputIterator> 1396 static bool HasOnlyStaticMembers(InputIterator First, InputIterator Last) { 1397 Decl *D = (*First)->getUnderlyingDecl(); 1398 if (isa<VarDecl>(D) || isa<TypeDecl>(D) || isa<EnumConstantDecl>(D)) 1399 return true; 1400 1401 if (isa<CXXMethodDecl>(D)) { 1402 // Determine whether all of the methods are static. 1403 bool AllMethodsAreStatic = true; 1404 for(; First != Last; ++First) { 1405 D = (*First)->getUnderlyingDecl(); 1406 1407 if (!isa<CXXMethodDecl>(D)) { 1408 assert(isa<TagDecl>(D) && "Non-function must be a tag decl"); 1409 break; 1410 } 1411 1412 if (!cast<CXXMethodDecl>(D)->isStatic()) { 1413 AllMethodsAreStatic = false; 1414 break; 1415 } 1416 } 1417 1418 if (AllMethodsAreStatic) 1419 return true; 1420 } 1421 1422 return false; 1423 } 1424 1425 /// \brief Perform qualified name lookup into a given context. 1426 /// 1427 /// Qualified name lookup (C++ [basic.lookup.qual]) is used to find 1428 /// names when the context of those names is explicit specified, e.g., 1429 /// "std::vector" or "x->member", or as part of unqualified name lookup. 1430 /// 1431 /// Different lookup criteria can find different names. For example, a 1432 /// particular scope can have both a struct and a function of the same 1433 /// name, and each can be found by certain lookup criteria. For more 1434 /// information about lookup criteria, see the documentation for the 1435 /// class LookupCriteria. 1436 /// 1437 /// \param R captures both the lookup criteria and any lookup results found. 1438 /// 1439 /// \param LookupCtx The context in which qualified name lookup will 1440 /// search. If the lookup criteria permits, name lookup may also search 1441 /// in the parent contexts or (for C++ classes) base classes. 1442 /// 1443 /// \param InUnqualifiedLookup true if this is qualified name lookup that 1444 /// occurs as part of unqualified name lookup. 1445 /// 1446 /// \returns true if lookup succeeded, false if it failed. 1447 bool Sema::LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, 1448 bool InUnqualifiedLookup) { 1449 assert(LookupCtx && "Sema::LookupQualifiedName requires a lookup context"); 1450 1451 if (!R.getLookupName()) 1452 return false; 1453 1454 // Make sure that the declaration context is complete. 1455 assert((!isa<TagDecl>(LookupCtx) || 1456 LookupCtx->isDependentContext() || 1457 cast<TagDecl>(LookupCtx)->isCompleteDefinition() || 1458 cast<TagDecl>(LookupCtx)->isBeingDefined()) && 1459 "Declaration context must already be complete!"); 1460 1461 // Perform qualified name lookup into the LookupCtx. 1462 if (LookupDirect(*this, R, LookupCtx)) { 1463 R.resolveKind(); 1464 if (isa<CXXRecordDecl>(LookupCtx)) 1465 R.setNamingClass(cast<CXXRecordDecl>(LookupCtx)); 1466 return true; 1467 } 1468 1469 // Don't descend into implied contexts for redeclarations. 1470 // C++98 [namespace.qual]p6: 1471 // In a declaration for a namespace member in which the 1472 // declarator-id is a qualified-id, given that the qualified-id 1473 // for the namespace member has the form 1474 // nested-name-specifier unqualified-id 1475 // the unqualified-id shall name a member of the namespace 1476 // designated by the nested-name-specifier. 1477 // See also [class.mfct]p5 and [class.static.data]p2. 1478 if (R.isForRedeclaration()) 1479 return false; 1480 1481 // If this is a namespace, look it up in the implied namespaces. 1482 if (LookupCtx->isFileContext()) 1483 return LookupQualifiedNameInUsingDirectives(*this, R, LookupCtx); 1484 1485 // If this isn't a C++ class, we aren't allowed to look into base 1486 // classes, we're done. 1487 CXXRecordDecl *LookupRec = dyn_cast<CXXRecordDecl>(LookupCtx); 1488 if (!LookupRec || !LookupRec->getDefinition()) 1489 return false; 1490 1491 // If we're performing qualified name lookup into a dependent class, 1492 // then we are actually looking into a current instantiation. If we have any 1493 // dependent base classes, then we either have to delay lookup until 1494 // template instantiation time (at which point all bases will be available) 1495 // or we have to fail. 1496 if (!InUnqualifiedLookup && LookupRec->isDependentContext() && 1497 LookupRec->hasAnyDependentBases()) { 1498 R.setNotFoundInCurrentInstantiation(); 1499 return false; 1500 } 1501 1502 // Perform lookup into our base classes. 1503 CXXBasePaths Paths; 1504 Paths.setOrigin(LookupRec); 1505 1506 // Look for this member in our base classes 1507 CXXRecordDecl::BaseMatchesCallback *BaseCallback = 0; 1508 switch (R.getLookupKind()) { 1509 case LookupObjCImplicitSelfParam: 1510 case LookupOrdinaryName: 1511 case LookupMemberName: 1512 case LookupRedeclarationWithLinkage: 1513 BaseCallback = &CXXRecordDecl::FindOrdinaryMember; 1514 break; 1515 1516 case LookupTagName: 1517 BaseCallback = &CXXRecordDecl::FindTagMember; 1518 break; 1519 1520 case LookupAnyName: 1521 BaseCallback = &LookupAnyMember; 1522 break; 1523 1524 case LookupUsingDeclName: 1525 // This lookup is for redeclarations only. 1526 1527 case LookupOperatorName: 1528 case LookupNamespaceName: 1529 case LookupObjCProtocolName: 1530 case LookupLabel: 1531 // These lookups will never find a member in a C++ class (or base class). 1532 return false; 1533 1534 case LookupNestedNameSpecifierName: 1535 BaseCallback = &CXXRecordDecl::FindNestedNameSpecifierMember; 1536 break; 1537 } 1538 1539 if (!LookupRec->lookupInBases(BaseCallback, 1540 R.getLookupName().getAsOpaquePtr(), Paths)) 1541 return false; 1542 1543 R.setNamingClass(LookupRec); 1544 1545 // C++ [class.member.lookup]p2: 1546 // [...] If the resulting set of declarations are not all from 1547 // sub-objects of the same type, or the set has a nonstatic member 1548 // and includes members from distinct sub-objects, there is an 1549 // ambiguity and the program is ill-formed. Otherwise that set is 1550 // the result of the lookup. 1551 QualType SubobjectType; 1552 int SubobjectNumber = 0; 1553 AccessSpecifier SubobjectAccess = AS_none; 1554 1555 for (CXXBasePaths::paths_iterator Path = Paths.begin(), PathEnd = Paths.end(); 1556 Path != PathEnd; ++Path) { 1557 const CXXBasePathElement &PathElement = Path->back(); 1558 1559 // Pick the best (i.e. most permissive i.e. numerically lowest) access 1560 // across all paths. 1561 SubobjectAccess = std::min(SubobjectAccess, Path->Access); 1562 1563 // Determine whether we're looking at a distinct sub-object or not. 1564 if (SubobjectType.isNull()) { 1565 // This is the first subobject we've looked at. Record its type. 1566 SubobjectType = Context.getCanonicalType(PathElement.Base->getType()); 1567 SubobjectNumber = PathElement.SubobjectNumber; 1568 continue; 1569 } 1570 1571 if (SubobjectType 1572 != Context.getCanonicalType(PathElement.Base->getType())) { 1573 // We found members of the given name in two subobjects of 1574 // different types. If the declaration sets aren't the same, this 1575 // this lookup is ambiguous. 1576 if (HasOnlyStaticMembers(Path->Decls.begin(), Path->Decls.end())) { 1577 CXXBasePaths::paths_iterator FirstPath = Paths.begin(); 1578 DeclContext::lookup_iterator FirstD = FirstPath->Decls.begin(); 1579 DeclContext::lookup_iterator CurrentD = Path->Decls.begin(); 1580 1581 while (FirstD != FirstPath->Decls.end() && 1582 CurrentD != Path->Decls.end()) { 1583 if ((*FirstD)->getUnderlyingDecl()->getCanonicalDecl() != 1584 (*CurrentD)->getUnderlyingDecl()->getCanonicalDecl()) 1585 break; 1586 1587 ++FirstD; 1588 ++CurrentD; 1589 } 1590 1591 if (FirstD == FirstPath->Decls.end() && 1592 CurrentD == Path->Decls.end()) 1593 continue; 1594 } 1595 1596 R.setAmbiguousBaseSubobjectTypes(Paths); 1597 return true; 1598 } 1599 1600 if (SubobjectNumber != PathElement.SubobjectNumber) { 1601 // We have a different subobject of the same type. 1602 1603 // C++ [class.member.lookup]p5: 1604 // A static member, a nested type or an enumerator defined in 1605 // a base class T can unambiguously be found even if an object 1606 // has more than one base class subobject of type T. 1607 if (HasOnlyStaticMembers(Path->Decls.begin(), Path->Decls.end())) 1608 continue; 1609 1610 // We have found a nonstatic member name in multiple, distinct 1611 // subobjects. Name lookup is ambiguous. 1612 R.setAmbiguousBaseSubobjects(Paths); 1613 return true; 1614 } 1615 } 1616 1617 // Lookup in a base class succeeded; return these results. 1618 1619 DeclContext::lookup_result DR = Paths.front().Decls; 1620 for (DeclContext::lookup_iterator I = DR.begin(), E = DR.end(); I != E; ++I) { 1621 NamedDecl *D = *I; 1622 AccessSpecifier AS = CXXRecordDecl::MergeAccess(SubobjectAccess, 1623 D->getAccess()); 1624 R.addDecl(D, AS); 1625 } 1626 R.resolveKind(); 1627 return true; 1628 } 1629 1630 /// @brief Performs name lookup for a name that was parsed in the 1631 /// source code, and may contain a C++ scope specifier. 1632 /// 1633 /// This routine is a convenience routine meant to be called from 1634 /// contexts that receive a name and an optional C++ scope specifier 1635 /// (e.g., "N::M::x"). It will then perform either qualified or 1636 /// unqualified name lookup (with LookupQualifiedName or LookupName, 1637 /// respectively) on the given name and return those results. 1638 /// 1639 /// @param S The scope from which unqualified name lookup will 1640 /// begin. 1641 /// 1642 /// @param SS An optional C++ scope-specifier, e.g., "::N::M". 1643 /// 1644 /// @param EnteringContext Indicates whether we are going to enter the 1645 /// context of the scope-specifier SS (if present). 1646 /// 1647 /// @returns True if any decls were found (but possibly ambiguous) 1648 bool Sema::LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS, 1649 bool AllowBuiltinCreation, bool EnteringContext) { 1650 if (SS && SS->isInvalid()) { 1651 // When the scope specifier is invalid, don't even look for 1652 // anything. 1653 return false; 1654 } 1655 1656 if (SS && SS->isSet()) { 1657 if (DeclContext *DC = computeDeclContext(*SS, EnteringContext)) { 1658 // We have resolved the scope specifier to a particular declaration 1659 // contex, and will perform name lookup in that context. 1660 if (!DC->isDependentContext() && RequireCompleteDeclContext(*SS, DC)) 1661 return false; 1662 1663 R.setContextRange(SS->getRange()); 1664 return LookupQualifiedName(R, DC); 1665 } 1666 1667 // We could not resolve the scope specified to a specific declaration 1668 // context, which means that SS refers to an unknown specialization. 1669 // Name lookup can't find anything in this case. 1670 R.setNotFoundInCurrentInstantiation(); 1671 R.setContextRange(SS->getRange()); 1672 return false; 1673 } 1674 1675 // Perform unqualified name lookup starting in the given scope. 1676 return LookupName(R, S, AllowBuiltinCreation); 1677 } 1678 1679 1680 /// \brief Produce a diagnostic describing the ambiguity that resulted 1681 /// from name lookup. 1682 /// 1683 /// \param Result The result of the ambiguous lookup to be diagnosed. 1684 /// 1685 /// \returns true 1686 bool Sema::DiagnoseAmbiguousLookup(LookupResult &Result) { 1687 assert(Result.isAmbiguous() && "Lookup result must be ambiguous"); 1688 1689 DeclarationName Name = Result.getLookupName(); 1690 SourceLocation NameLoc = Result.getNameLoc(); 1691 SourceRange LookupRange = Result.getContextRange(); 1692 1693 switch (Result.getAmbiguityKind()) { 1694 case LookupResult::AmbiguousBaseSubobjects: { 1695 CXXBasePaths *Paths = Result.getBasePaths(); 1696 QualType SubobjectType = Paths->front().back().Base->getType(); 1697 Diag(NameLoc, diag::err_ambiguous_member_multiple_subobjects) 1698 << Name << SubobjectType << getAmbiguousPathsDisplayString(*Paths) 1699 << LookupRange; 1700 1701 DeclContext::lookup_iterator Found = Paths->front().Decls.begin(); 1702 while (isa<CXXMethodDecl>(*Found) && 1703 cast<CXXMethodDecl>(*Found)->isStatic()) 1704 ++Found; 1705 1706 Diag((*Found)->getLocation(), diag::note_ambiguous_member_found); 1707 1708 return true; 1709 } 1710 1711 case LookupResult::AmbiguousBaseSubobjectTypes: { 1712 Diag(NameLoc, diag::err_ambiguous_member_multiple_subobject_types) 1713 << Name << LookupRange; 1714 1715 CXXBasePaths *Paths = Result.getBasePaths(); 1716 std::set<Decl *> DeclsPrinted; 1717 for (CXXBasePaths::paths_iterator Path = Paths->begin(), 1718 PathEnd = Paths->end(); 1719 Path != PathEnd; ++Path) { 1720 Decl *D = Path->Decls.front(); 1721 if (DeclsPrinted.insert(D).second) 1722 Diag(D->getLocation(), diag::note_ambiguous_member_found); 1723 } 1724 1725 return true; 1726 } 1727 1728 case LookupResult::AmbiguousTagHiding: { 1729 Diag(NameLoc, diag::err_ambiguous_tag_hiding) << Name << LookupRange; 1730 1731 llvm::SmallPtrSet<NamedDecl*,8> TagDecls; 1732 1733 LookupResult::iterator DI, DE = Result.end(); 1734 for (DI = Result.begin(); DI != DE; ++DI) 1735 if (TagDecl *TD = dyn_cast<TagDecl>(*DI)) { 1736 TagDecls.insert(TD); 1737 Diag(TD->getLocation(), diag::note_hidden_tag); 1738 } 1739 1740 for (DI = Result.begin(); DI != DE; ++DI) 1741 if (!isa<TagDecl>(*DI)) 1742 Diag((*DI)->getLocation(), diag::note_hiding_object); 1743 1744 // For recovery purposes, go ahead and implement the hiding. 1745 LookupResult::Filter F = Result.makeFilter(); 1746 while (F.hasNext()) { 1747 if (TagDecls.count(F.next())) 1748 F.erase(); 1749 } 1750 F.done(); 1751 1752 return true; 1753 } 1754 1755 case LookupResult::AmbiguousReference: { 1756 Diag(NameLoc, diag::err_ambiguous_reference) << Name << LookupRange; 1757 1758 LookupResult::iterator DI = Result.begin(), DE = Result.end(); 1759 for (; DI != DE; ++DI) 1760 Diag((*DI)->getLocation(), diag::note_ambiguous_candidate) << *DI; 1761 1762 return true; 1763 } 1764 } 1765 1766 llvm_unreachable("unknown ambiguity kind"); 1767 } 1768 1769 namespace { 1770 struct AssociatedLookup { 1771 AssociatedLookup(Sema &S, SourceLocation InstantiationLoc, 1772 Sema::AssociatedNamespaceSet &Namespaces, 1773 Sema::AssociatedClassSet &Classes) 1774 : S(S), Namespaces(Namespaces), Classes(Classes), 1775 InstantiationLoc(InstantiationLoc) { 1776 } 1777 1778 Sema &S; 1779 Sema::AssociatedNamespaceSet &Namespaces; 1780 Sema::AssociatedClassSet &Classes; 1781 SourceLocation InstantiationLoc; 1782 }; 1783 } 1784 1785 static void 1786 addAssociatedClassesAndNamespaces(AssociatedLookup &Result, QualType T); 1787 1788 static void CollectEnclosingNamespace(Sema::AssociatedNamespaceSet &Namespaces, 1789 DeclContext *Ctx) { 1790 // Add the associated namespace for this class. 1791 1792 // We don't use DeclContext::getEnclosingNamespaceContext() as this may 1793 // be a locally scoped record. 1794 1795 // We skip out of inline namespaces. The innermost non-inline namespace 1796 // contains all names of all its nested inline namespaces anyway, so we can 1797 // replace the entire inline namespace tree with its root. 1798 while (Ctx->isRecord() || Ctx->isTransparentContext() || 1799 Ctx->isInlineNamespace()) 1800 Ctx = Ctx->getParent(); 1801 1802 if (Ctx->isFileContext()) 1803 Namespaces.insert(Ctx->getPrimaryContext()); 1804 } 1805 1806 // \brief Add the associated classes and namespaces for argument-dependent 1807 // lookup that involves a template argument (C++ [basic.lookup.koenig]p2). 1808 static void 1809 addAssociatedClassesAndNamespaces(AssociatedLookup &Result, 1810 const TemplateArgument &Arg) { 1811 // C++ [basic.lookup.koenig]p2, last bullet: 1812 // -- [...] ; 1813 switch (Arg.getKind()) { 1814 case TemplateArgument::Null: 1815 break; 1816 1817 case TemplateArgument::Type: 1818 // [...] the namespaces and classes associated with the types of the 1819 // template arguments provided for template type parameters (excluding 1820 // template template parameters) 1821 addAssociatedClassesAndNamespaces(Result, Arg.getAsType()); 1822 break; 1823 1824 case TemplateArgument::Template: 1825 case TemplateArgument::TemplateExpansion: { 1826 // [...] the namespaces in which any template template arguments are 1827 // defined; and the classes in which any member templates used as 1828 // template template arguments are defined. 1829 TemplateName Template = Arg.getAsTemplateOrTemplatePattern(); 1830 if (ClassTemplateDecl *ClassTemplate 1831 = dyn_cast<ClassTemplateDecl>(Template.getAsTemplateDecl())) { 1832 DeclContext *Ctx = ClassTemplate->getDeclContext(); 1833 if (CXXRecordDecl *EnclosingClass = dyn_cast<CXXRecordDecl>(Ctx)) 1834 Result.Classes.insert(EnclosingClass); 1835 // Add the associated namespace for this class. 1836 CollectEnclosingNamespace(Result.Namespaces, Ctx); 1837 } 1838 break; 1839 } 1840 1841 case TemplateArgument::Declaration: 1842 case TemplateArgument::Integral: 1843 case TemplateArgument::Expression: 1844 case TemplateArgument::NullPtr: 1845 // [Note: non-type template arguments do not contribute to the set of 1846 // associated namespaces. ] 1847 break; 1848 1849 case TemplateArgument::Pack: 1850 for (TemplateArgument::pack_iterator P = Arg.pack_begin(), 1851 PEnd = Arg.pack_end(); 1852 P != PEnd; ++P) 1853 addAssociatedClassesAndNamespaces(Result, *P); 1854 break; 1855 } 1856 } 1857 1858 // \brief Add the associated classes and namespaces for 1859 // argument-dependent lookup with an argument of class type 1860 // (C++ [basic.lookup.koenig]p2). 1861 static void 1862 addAssociatedClassesAndNamespaces(AssociatedLookup &Result, 1863 CXXRecordDecl *Class) { 1864 1865 // Just silently ignore anything whose name is __va_list_tag. 1866 if (Class->getDeclName() == Result.S.VAListTagName) 1867 return; 1868 1869 // C++ [basic.lookup.koenig]p2: 1870 // [...] 1871 // -- If T is a class type (including unions), its associated 1872 // classes are: the class itself; the class of which it is a 1873 // member, if any; and its direct and indirect base 1874 // classes. Its associated namespaces are the namespaces in 1875 // which its associated classes are defined. 1876 1877 // Add the class of which it is a member, if any. 1878 DeclContext *Ctx = Class->getDeclContext(); 1879 if (CXXRecordDecl *EnclosingClass = dyn_cast<CXXRecordDecl>(Ctx)) 1880 Result.Classes.insert(EnclosingClass); 1881 // Add the associated namespace for this class. 1882 CollectEnclosingNamespace(Result.Namespaces, Ctx); 1883 1884 // Add the class itself. If we've already seen this class, we don't 1885 // need to visit base classes. 1886 if (!Result.Classes.insert(Class)) 1887 return; 1888 1889 // -- If T is a template-id, its associated namespaces and classes are 1890 // the namespace in which the template is defined; for member 1891 // templates, the member template's class; the namespaces and classes 1892 // associated with the types of the template arguments provided for 1893 // template type parameters (excluding template template parameters); the 1894 // namespaces in which any template template arguments are defined; and 1895 // the classes in which any member templates used as template template 1896 // arguments are defined. [Note: non-type template arguments do not 1897 // contribute to the set of associated namespaces. ] 1898 if (ClassTemplateSpecializationDecl *Spec 1899 = dyn_cast<ClassTemplateSpecializationDecl>(Class)) { 1900 DeclContext *Ctx = Spec->getSpecializedTemplate()->getDeclContext(); 1901 if (CXXRecordDecl *EnclosingClass = dyn_cast<CXXRecordDecl>(Ctx)) 1902 Result.Classes.insert(EnclosingClass); 1903 // Add the associated namespace for this class. 1904 CollectEnclosingNamespace(Result.Namespaces, Ctx); 1905 1906 const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs(); 1907 for (unsigned I = 0, N = TemplateArgs.size(); I != N; ++I) 1908 addAssociatedClassesAndNamespaces(Result, TemplateArgs[I]); 1909 } 1910 1911 // Only recurse into base classes for complete types. 1912 if (!Class->hasDefinition()) { 1913 QualType type = Result.S.Context.getTypeDeclType(Class); 1914 if (Result.S.RequireCompleteType(Result.InstantiationLoc, type, 1915 /*no diagnostic*/ 0)) 1916 return; 1917 } 1918 1919 // Add direct and indirect base classes along with their associated 1920 // namespaces. 1921 SmallVector<CXXRecordDecl *, 32> Bases; 1922 Bases.push_back(Class); 1923 while (!Bases.empty()) { 1924 // Pop this class off the stack. 1925 Class = Bases.back(); 1926 Bases.pop_back(); 1927 1928 // Visit the base classes. 1929 for (CXXRecordDecl::base_class_iterator Base = Class->bases_begin(), 1930 BaseEnd = Class->bases_end(); 1931 Base != BaseEnd; ++Base) { 1932 const RecordType *BaseType = Base->getType()->getAs<RecordType>(); 1933 // In dependent contexts, we do ADL twice, and the first time around, 1934 // the base type might be a dependent TemplateSpecializationType, or a 1935 // TemplateTypeParmType. If that happens, simply ignore it. 1936 // FIXME: If we want to support export, we probably need to add the 1937 // namespace of the template in a TemplateSpecializationType, or even 1938 // the classes and namespaces of known non-dependent arguments. 1939 if (!BaseType) 1940 continue; 1941 CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(BaseType->getDecl()); 1942 if (Result.Classes.insert(BaseDecl)) { 1943 // Find the associated namespace for this base class. 1944 DeclContext *BaseCtx = BaseDecl->getDeclContext(); 1945 CollectEnclosingNamespace(Result.Namespaces, BaseCtx); 1946 1947 // Make sure we visit the bases of this base class. 1948 if (BaseDecl->bases_begin() != BaseDecl->bases_end()) 1949 Bases.push_back(BaseDecl); 1950 } 1951 } 1952 } 1953 } 1954 1955 // \brief Add the associated classes and namespaces for 1956 // argument-dependent lookup with an argument of type T 1957 // (C++ [basic.lookup.koenig]p2). 1958 static void 1959 addAssociatedClassesAndNamespaces(AssociatedLookup &Result, QualType Ty) { 1960 // C++ [basic.lookup.koenig]p2: 1961 // 1962 // For each argument type T in the function call, there is a set 1963 // of zero or more associated namespaces and a set of zero or more 1964 // associated classes to be considered. The sets of namespaces and 1965 // classes is determined entirely by the types of the function 1966 // arguments (and the namespace of any template template 1967 // argument). Typedef names and using-declarations used to specify 1968 // the types do not contribute to this set. The sets of namespaces 1969 // and classes are determined in the following way: 1970 1971 SmallVector<const Type *, 16> Queue; 1972 const Type *T = Ty->getCanonicalTypeInternal().getTypePtr(); 1973 1974 while (true) { 1975 switch (T->getTypeClass()) { 1976 1977 #define TYPE(Class, Base) 1978 #define DEPENDENT_TYPE(Class, Base) case Type::Class: 1979 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class: 1980 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class: 1981 #define ABSTRACT_TYPE(Class, Base) 1982 #include "clang/AST/TypeNodes.def" 1983 // T is canonical. We can also ignore dependent types because 1984 // we don't need to do ADL at the definition point, but if we 1985 // wanted to implement template export (or if we find some other 1986 // use for associated classes and namespaces...) this would be 1987 // wrong. 1988 break; 1989 1990 // -- If T is a pointer to U or an array of U, its associated 1991 // namespaces and classes are those associated with U. 1992 case Type::Pointer: 1993 T = cast<PointerType>(T)->getPointeeType().getTypePtr(); 1994 continue; 1995 case Type::ConstantArray: 1996 case Type::IncompleteArray: 1997 case Type::VariableArray: 1998 T = cast<ArrayType>(T)->getElementType().getTypePtr(); 1999 continue; 2000 2001 // -- If T is a fundamental type, its associated sets of 2002 // namespaces and classes are both empty. 2003 case Type::Builtin: 2004 break; 2005 2006 // -- If T is a class type (including unions), its associated 2007 // classes are: the class itself; the class of which it is a 2008 // member, if any; and its direct and indirect base 2009 // classes. Its associated namespaces are the namespaces in 2010 // which its associated classes are defined. 2011 case Type::Record: { 2012 CXXRecordDecl *Class 2013 = cast<CXXRecordDecl>(cast<RecordType>(T)->getDecl()); 2014 addAssociatedClassesAndNamespaces(Result, Class); 2015 break; 2016 } 2017 2018 // -- If T is an enumeration type, its associated namespace is 2019 // the namespace in which it is defined. If it is class 2020 // member, its associated class is the member's class; else 2021 // it has no associated class. 2022 case Type::Enum: { 2023 EnumDecl *Enum = cast<EnumType>(T)->getDecl(); 2024 2025 DeclContext *Ctx = Enum->getDeclContext(); 2026 if (CXXRecordDecl *EnclosingClass = dyn_cast<CXXRecordDecl>(Ctx)) 2027 Result.Classes.insert(EnclosingClass); 2028 2029 // Add the associated namespace for this class. 2030 CollectEnclosingNamespace(Result.Namespaces, Ctx); 2031 2032 break; 2033 } 2034 2035 // -- If T is a function type, its associated namespaces and 2036 // classes are those associated with the function parameter 2037 // types and those associated with the return type. 2038 case Type::FunctionProto: { 2039 const FunctionProtoType *Proto = cast<FunctionProtoType>(T); 2040 for (FunctionProtoType::arg_type_iterator Arg = Proto->arg_type_begin(), 2041 ArgEnd = Proto->arg_type_end(); 2042 Arg != ArgEnd; ++Arg) 2043 Queue.push_back(Arg->getTypePtr()); 2044 // fallthrough 2045 } 2046 case Type::FunctionNoProto: { 2047 const FunctionType *FnType = cast<FunctionType>(T); 2048 T = FnType->getResultType().getTypePtr(); 2049 continue; 2050 } 2051 2052 // -- If T is a pointer to a member function of a class X, its 2053 // associated namespaces and classes are those associated 2054 // with the function parameter types and return type, 2055 // together with those associated with X. 2056 // 2057 // -- If T is a pointer to a data member of class X, its 2058 // associated namespaces and classes are those associated 2059 // with the member type together with those associated with 2060 // X. 2061 case Type::MemberPointer: { 2062 const MemberPointerType *MemberPtr = cast<MemberPointerType>(T); 2063 2064 // Queue up the class type into which this points. 2065 Queue.push_back(MemberPtr->getClass()); 2066 2067 // And directly continue with the pointee type. 2068 T = MemberPtr->getPointeeType().getTypePtr(); 2069 continue; 2070 } 2071 2072 // As an extension, treat this like a normal pointer. 2073 case Type::BlockPointer: 2074 T = cast<BlockPointerType>(T)->getPointeeType().getTypePtr(); 2075 continue; 2076 2077 // References aren't covered by the standard, but that's such an 2078 // obvious defect that we cover them anyway. 2079 case Type::LValueReference: 2080 case Type::RValueReference: 2081 T = cast<ReferenceType>(T)->getPointeeType().getTypePtr(); 2082 continue; 2083 2084 // These are fundamental types. 2085 case Type::Vector: 2086 case Type::ExtVector: 2087 case Type::Complex: 2088 break; 2089 2090 // Non-deduced auto types only get here for error cases. 2091 case Type::Auto: 2092 break; 2093 2094 // If T is an Objective-C object or interface type, or a pointer to an 2095 // object or interface type, the associated namespace is the global 2096 // namespace. 2097 case Type::ObjCObject: 2098 case Type::ObjCInterface: 2099 case Type::ObjCObjectPointer: 2100 Result.Namespaces.insert(Result.S.Context.getTranslationUnitDecl()); 2101 break; 2102 2103 // Atomic types are just wrappers; use the associations of the 2104 // contained type. 2105 case Type::Atomic: 2106 T = cast<AtomicType>(T)->getValueType().getTypePtr(); 2107 continue; 2108 } 2109 2110 if (Queue.empty()) break; 2111 T = Queue.back(); 2112 Queue.pop_back(); 2113 } 2114 } 2115 2116 /// \brief Find the associated classes and namespaces for 2117 /// argument-dependent lookup for a call with the given set of 2118 /// arguments. 2119 /// 2120 /// This routine computes the sets of associated classes and associated 2121 /// namespaces searched by argument-dependent lookup 2122 /// (C++ [basic.lookup.argdep]) for a given set of arguments. 2123 void 2124 Sema::FindAssociatedClassesAndNamespaces(SourceLocation InstantiationLoc, 2125 llvm::ArrayRef<Expr *> Args, 2126 AssociatedNamespaceSet &AssociatedNamespaces, 2127 AssociatedClassSet &AssociatedClasses) { 2128 AssociatedNamespaces.clear(); 2129 AssociatedClasses.clear(); 2130 2131 AssociatedLookup Result(*this, InstantiationLoc, 2132 AssociatedNamespaces, AssociatedClasses); 2133 2134 // C++ [basic.lookup.koenig]p2: 2135 // For each argument type T in the function call, there is a set 2136 // of zero or more associated namespaces and a set of zero or more 2137 // associated classes to be considered. The sets of namespaces and 2138 // classes is determined entirely by the types of the function 2139 // arguments (and the namespace of any template template 2140 // argument). 2141 for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) { 2142 Expr *Arg = Args[ArgIdx]; 2143 2144 if (Arg->getType() != Context.OverloadTy) { 2145 addAssociatedClassesAndNamespaces(Result, Arg->getType()); 2146 continue; 2147 } 2148 2149 // [...] In addition, if the argument is the name or address of a 2150 // set of overloaded functions and/or function templates, its 2151 // associated classes and namespaces are the union of those 2152 // associated with each of the members of the set: the namespace 2153 // in which the function or function template is defined and the 2154 // classes and namespaces associated with its (non-dependent) 2155 // parameter types and return type. 2156 Arg = Arg->IgnoreParens(); 2157 if (UnaryOperator *unaryOp = dyn_cast<UnaryOperator>(Arg)) 2158 if (unaryOp->getOpcode() == UO_AddrOf) 2159 Arg = unaryOp->getSubExpr(); 2160 2161 UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(Arg); 2162 if (!ULE) continue; 2163 2164 for (UnresolvedSetIterator I = ULE->decls_begin(), E = ULE->decls_end(); 2165 I != E; ++I) { 2166 // Look through any using declarations to find the underlying function. 2167 NamedDecl *Fn = (*I)->getUnderlyingDecl(); 2168 2169 FunctionDecl *FDecl = dyn_cast<FunctionDecl>(Fn); 2170 if (!FDecl) 2171 FDecl = cast<FunctionTemplateDecl>(Fn)->getTemplatedDecl(); 2172 2173 // Add the classes and namespaces associated with the parameter 2174 // types and return type of this function. 2175 addAssociatedClassesAndNamespaces(Result, FDecl->getType()); 2176 } 2177 } 2178 } 2179 2180 /// IsAcceptableNonMemberOperatorCandidate - Determine whether Fn is 2181 /// an acceptable non-member overloaded operator for a call whose 2182 /// arguments have types T1 (and, if non-empty, T2). This routine 2183 /// implements the check in C++ [over.match.oper]p3b2 concerning 2184 /// enumeration types. 2185 static bool 2186 IsAcceptableNonMemberOperatorCandidate(FunctionDecl *Fn, 2187 QualType T1, QualType T2, 2188 ASTContext &Context) { 2189 if (T1->isDependentType() || (!T2.isNull() && T2->isDependentType())) 2190 return true; 2191 2192 if (T1->isRecordType() || (!T2.isNull() && T2->isRecordType())) 2193 return true; 2194 2195 const FunctionProtoType *Proto = Fn->getType()->getAs<FunctionProtoType>(); 2196 if (Proto->getNumArgs() < 1) 2197 return false; 2198 2199 if (T1->isEnumeralType()) { 2200 QualType ArgType = Proto->getArgType(0).getNonReferenceType(); 2201 if (Context.hasSameUnqualifiedType(T1, ArgType)) 2202 return true; 2203 } 2204 2205 if (Proto->getNumArgs() < 2) 2206 return false; 2207 2208 if (!T2.isNull() && T2->isEnumeralType()) { 2209 QualType ArgType = Proto->getArgType(1).getNonReferenceType(); 2210 if (Context.hasSameUnqualifiedType(T2, ArgType)) 2211 return true; 2212 } 2213 2214 return false; 2215 } 2216 2217 NamedDecl *Sema::LookupSingleName(Scope *S, DeclarationName Name, 2218 SourceLocation Loc, 2219 LookupNameKind NameKind, 2220 RedeclarationKind Redecl) { 2221 LookupResult R(*this, Name, Loc, NameKind, Redecl); 2222 LookupName(R, S); 2223 return R.getAsSingle<NamedDecl>(); 2224 } 2225 2226 /// \brief Find the protocol with the given name, if any. 2227 ObjCProtocolDecl *Sema::LookupProtocol(IdentifierInfo *II, 2228 SourceLocation IdLoc, 2229 RedeclarationKind Redecl) { 2230 Decl *D = LookupSingleName(TUScope, II, IdLoc, 2231 LookupObjCProtocolName, Redecl); 2232 return cast_or_null<ObjCProtocolDecl>(D); 2233 } 2234 2235 void Sema::LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S, 2236 QualType T1, QualType T2, 2237 UnresolvedSetImpl &Functions) { 2238 // C++ [over.match.oper]p3: 2239 // -- The set of non-member candidates is the result of the 2240 // unqualified lookup of operator@ in the context of the 2241 // expression according to the usual rules for name lookup in 2242 // unqualified function calls (3.4.2) except that all member 2243 // functions are ignored. However, if no operand has a class 2244 // type, only those non-member functions in the lookup set 2245 // that have a first parameter of type T1 or "reference to 2246 // (possibly cv-qualified) T1", when T1 is an enumeration 2247 // type, or (if there is a right operand) a second parameter 2248 // of type T2 or "reference to (possibly cv-qualified) T2", 2249 // when T2 is an enumeration type, are candidate functions. 2250 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 2251 LookupResult Operators(*this, OpName, SourceLocation(), LookupOperatorName); 2252 LookupName(Operators, S); 2253 2254 assert(!Operators.isAmbiguous() && "Operator lookup cannot be ambiguous"); 2255 2256 if (Operators.empty()) 2257 return; 2258 2259 for (LookupResult::iterator Op = Operators.begin(), OpEnd = Operators.end(); 2260 Op != OpEnd; ++Op) { 2261 NamedDecl *Found = (*Op)->getUnderlyingDecl(); 2262 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Found)) { 2263 if (IsAcceptableNonMemberOperatorCandidate(FD, T1, T2, Context)) 2264 Functions.addDecl(*Op, Op.getAccess()); // FIXME: canonical FD 2265 } else if (FunctionTemplateDecl *FunTmpl 2266 = dyn_cast<FunctionTemplateDecl>(Found)) { 2267 // FIXME: friend operators? 2268 // FIXME: do we need to check IsAcceptableNonMemberOperatorCandidate, 2269 // later? 2270 if (!FunTmpl->getDeclContext()->isRecord()) 2271 Functions.addDecl(*Op, Op.getAccess()); 2272 } 2273 } 2274 } 2275 2276 Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD, 2277 CXXSpecialMember SM, 2278 bool ConstArg, 2279 bool VolatileArg, 2280 bool RValueThis, 2281 bool ConstThis, 2282 bool VolatileThis) { 2283 assert(CanDeclareSpecialMemberFunction(RD) && 2284 "doing special member lookup into record that isn't fully complete"); 2285 RD = RD->getDefinition(); 2286 if (RValueThis || ConstThis || VolatileThis) 2287 assert((SM == CXXCopyAssignment || SM == CXXMoveAssignment) && 2288 "constructors and destructors always have unqualified lvalue this"); 2289 if (ConstArg || VolatileArg) 2290 assert((SM != CXXDefaultConstructor && SM != CXXDestructor) && 2291 "parameter-less special members can't have qualified arguments"); 2292 2293 llvm::FoldingSetNodeID ID; 2294 ID.AddPointer(RD); 2295 ID.AddInteger(SM); 2296 ID.AddInteger(ConstArg); 2297 ID.AddInteger(VolatileArg); 2298 ID.AddInteger(RValueThis); 2299 ID.AddInteger(ConstThis); 2300 ID.AddInteger(VolatileThis); 2301 2302 void *InsertPoint; 2303 SpecialMemberOverloadResult *Result = 2304 SpecialMemberCache.FindNodeOrInsertPos(ID, InsertPoint); 2305 2306 // This was already cached 2307 if (Result) 2308 return Result; 2309 2310 Result = BumpAlloc.Allocate<SpecialMemberOverloadResult>(); 2311 Result = new (Result) SpecialMemberOverloadResult(ID); 2312 SpecialMemberCache.InsertNode(Result, InsertPoint); 2313 2314 if (SM == CXXDestructor) { 2315 if (RD->needsImplicitDestructor()) 2316 DeclareImplicitDestructor(RD); 2317 CXXDestructorDecl *DD = RD->getDestructor(); 2318 assert(DD && "record without a destructor"); 2319 Result->setMethod(DD); 2320 Result->setKind(DD->isDeleted() ? 2321 SpecialMemberOverloadResult::NoMemberOrDeleted : 2322 SpecialMemberOverloadResult::Success); 2323 return Result; 2324 } 2325 2326 // Prepare for overload resolution. Here we construct a synthetic argument 2327 // if necessary and make sure that implicit functions are declared. 2328 CanQualType CanTy = Context.getCanonicalType(Context.getTagDeclType(RD)); 2329 DeclarationName Name; 2330 Expr *Arg = 0; 2331 unsigned NumArgs; 2332 2333 QualType ArgType = CanTy; 2334 ExprValueKind VK = VK_LValue; 2335 2336 if (SM == CXXDefaultConstructor) { 2337 Name = Context.DeclarationNames.getCXXConstructorName(CanTy); 2338 NumArgs = 0; 2339 if (RD->needsImplicitDefaultConstructor()) 2340 DeclareImplicitDefaultConstructor(RD); 2341 } else { 2342 if (SM == CXXCopyConstructor || SM == CXXMoveConstructor) { 2343 Name = Context.DeclarationNames.getCXXConstructorName(CanTy); 2344 if (RD->needsImplicitCopyConstructor()) 2345 DeclareImplicitCopyConstructor(RD); 2346 if (getLangOpts().CPlusPlus11 && RD->needsImplicitMoveConstructor()) 2347 DeclareImplicitMoveConstructor(RD); 2348 } else { 2349 Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal); 2350 if (RD->needsImplicitCopyAssignment()) 2351 DeclareImplicitCopyAssignment(RD); 2352 if (getLangOpts().CPlusPlus11 && RD->needsImplicitMoveAssignment()) 2353 DeclareImplicitMoveAssignment(RD); 2354 } 2355 2356 if (ConstArg) 2357 ArgType.addConst(); 2358 if (VolatileArg) 2359 ArgType.addVolatile(); 2360 2361 // This isn't /really/ specified by the standard, but it's implied 2362 // we should be working from an RValue in the case of move to ensure 2363 // that we prefer to bind to rvalue references, and an LValue in the 2364 // case of copy to ensure we don't bind to rvalue references. 2365 // Possibly an XValue is actually correct in the case of move, but 2366 // there is no semantic difference for class types in this restricted 2367 // case. 2368 if (SM == CXXCopyConstructor || SM == CXXCopyAssignment) 2369 VK = VK_LValue; 2370 else 2371 VK = VK_RValue; 2372 } 2373 2374 OpaqueValueExpr FakeArg(SourceLocation(), ArgType, VK); 2375 2376 if (SM != CXXDefaultConstructor) { 2377 NumArgs = 1; 2378 Arg = &FakeArg; 2379 } 2380 2381 // Create the object argument 2382 QualType ThisTy = CanTy; 2383 if (ConstThis) 2384 ThisTy.addConst(); 2385 if (VolatileThis) 2386 ThisTy.addVolatile(); 2387 Expr::Classification Classification = 2388 OpaqueValueExpr(SourceLocation(), ThisTy, 2389 RValueThis ? VK_RValue : VK_LValue).Classify(Context); 2390 2391 // Now we perform lookup on the name we computed earlier and do overload 2392 // resolution. Lookup is only performed directly into the class since there 2393 // will always be a (possibly implicit) declaration to shadow any others. 2394 OverloadCandidateSet OCS((SourceLocation())); 2395 DeclContext::lookup_result R = RD->lookup(Name); 2396 2397 assert(!R.empty() && 2398 "lookup for a constructor or assignment operator was empty"); 2399 for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) { 2400 Decl *Cand = *I; 2401 2402 if (Cand->isInvalidDecl()) 2403 continue; 2404 2405 if (UsingShadowDecl *U = dyn_cast<UsingShadowDecl>(Cand)) { 2406 // FIXME: [namespace.udecl]p15 says that we should only consider a 2407 // using declaration here if it does not match a declaration in the 2408 // derived class. We do not implement this correctly in other cases 2409 // either. 2410 Cand = U->getTargetDecl(); 2411 2412 if (Cand->isInvalidDecl()) 2413 continue; 2414 } 2415 2416 if (CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(Cand)) { 2417 if (SM == CXXCopyAssignment || SM == CXXMoveAssignment) 2418 AddMethodCandidate(M, DeclAccessPair::make(M, AS_public), RD, ThisTy, 2419 Classification, llvm::makeArrayRef(&Arg, NumArgs), 2420 OCS, true); 2421 else 2422 AddOverloadCandidate(M, DeclAccessPair::make(M, AS_public), 2423 llvm::makeArrayRef(&Arg, NumArgs), OCS, true); 2424 } else if (FunctionTemplateDecl *Tmpl = 2425 dyn_cast<FunctionTemplateDecl>(Cand)) { 2426 if (SM == CXXCopyAssignment || SM == CXXMoveAssignment) 2427 AddMethodTemplateCandidate(Tmpl, DeclAccessPair::make(Tmpl, AS_public), 2428 RD, 0, ThisTy, Classification, 2429 llvm::makeArrayRef(&Arg, NumArgs), 2430 OCS, true); 2431 else 2432 AddTemplateOverloadCandidate(Tmpl, DeclAccessPair::make(Tmpl, AS_public), 2433 0, llvm::makeArrayRef(&Arg, NumArgs), 2434 OCS, true); 2435 } else { 2436 assert(isa<UsingDecl>(Cand) && "illegal Kind of operator = Decl"); 2437 } 2438 } 2439 2440 OverloadCandidateSet::iterator Best; 2441 switch (OCS.BestViableFunction(*this, SourceLocation(), Best)) { 2442 case OR_Success: 2443 Result->setMethod(cast<CXXMethodDecl>(Best->Function)); 2444 Result->setKind(SpecialMemberOverloadResult::Success); 2445 break; 2446 2447 case OR_Deleted: 2448 Result->setMethod(cast<CXXMethodDecl>(Best->Function)); 2449 Result->setKind(SpecialMemberOverloadResult::NoMemberOrDeleted); 2450 break; 2451 2452 case OR_Ambiguous: 2453 Result->setMethod(0); 2454 Result->setKind(SpecialMemberOverloadResult::Ambiguous); 2455 break; 2456 2457 case OR_No_Viable_Function: 2458 Result->setMethod(0); 2459 Result->setKind(SpecialMemberOverloadResult::NoMemberOrDeleted); 2460 break; 2461 } 2462 2463 return Result; 2464 } 2465 2466 /// \brief Look up the default constructor for the given class. 2467 CXXConstructorDecl *Sema::LookupDefaultConstructor(CXXRecordDecl *Class) { 2468 SpecialMemberOverloadResult *Result = 2469 LookupSpecialMember(Class, CXXDefaultConstructor, false, false, false, 2470 false, false); 2471 2472 return cast_or_null<CXXConstructorDecl>(Result->getMethod()); 2473 } 2474 2475 /// \brief Look up the copying constructor for the given class. 2476 CXXConstructorDecl *Sema::LookupCopyingConstructor(CXXRecordDecl *Class, 2477 unsigned Quals) { 2478 assert(!(Quals & ~(Qualifiers::Const | Qualifiers::Volatile)) && 2479 "non-const, non-volatile qualifiers for copy ctor arg"); 2480 SpecialMemberOverloadResult *Result = 2481 LookupSpecialMember(Class, CXXCopyConstructor, Quals & Qualifiers::Const, 2482 Quals & Qualifiers::Volatile, false, false, false); 2483 2484 return cast_or_null<CXXConstructorDecl>(Result->getMethod()); 2485 } 2486 2487 /// \brief Look up the moving constructor for the given class. 2488 CXXConstructorDecl *Sema::LookupMovingConstructor(CXXRecordDecl *Class, 2489 unsigned Quals) { 2490 SpecialMemberOverloadResult *Result = 2491 LookupSpecialMember(Class, CXXMoveConstructor, Quals & Qualifiers::Const, 2492 Quals & Qualifiers::Volatile, false, false, false); 2493 2494 return cast_or_null<CXXConstructorDecl>(Result->getMethod()); 2495 } 2496 2497 /// \brief Look up the constructors for the given class. 2498 DeclContext::lookup_result Sema::LookupConstructors(CXXRecordDecl *Class) { 2499 // If the implicit constructors have not yet been declared, do so now. 2500 if (CanDeclareSpecialMemberFunction(Class)) { 2501 if (Class->needsImplicitDefaultConstructor()) 2502 DeclareImplicitDefaultConstructor(Class); 2503 if (Class->needsImplicitCopyConstructor()) 2504 DeclareImplicitCopyConstructor(Class); 2505 if (getLangOpts().CPlusPlus11 && Class->needsImplicitMoveConstructor()) 2506 DeclareImplicitMoveConstructor(Class); 2507 } 2508 2509 CanQualType T = Context.getCanonicalType(Context.getTypeDeclType(Class)); 2510 DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(T); 2511 return Class->lookup(Name); 2512 } 2513 2514 /// \brief Look up the copying assignment operator for the given class. 2515 CXXMethodDecl *Sema::LookupCopyingAssignment(CXXRecordDecl *Class, 2516 unsigned Quals, bool RValueThis, 2517 unsigned ThisQuals) { 2518 assert(!(Quals & ~(Qualifiers::Const | Qualifiers::Volatile)) && 2519 "non-const, non-volatile qualifiers for copy assignment arg"); 2520 assert(!(ThisQuals & ~(Qualifiers::Const | Qualifiers::Volatile)) && 2521 "non-const, non-volatile qualifiers for copy assignment this"); 2522 SpecialMemberOverloadResult *Result = 2523 LookupSpecialMember(Class, CXXCopyAssignment, Quals & Qualifiers::Const, 2524 Quals & Qualifiers::Volatile, RValueThis, 2525 ThisQuals & Qualifiers::Const, 2526 ThisQuals & Qualifiers::Volatile); 2527 2528 return Result->getMethod(); 2529 } 2530 2531 /// \brief Look up the moving assignment operator for the given class. 2532 CXXMethodDecl *Sema::LookupMovingAssignment(CXXRecordDecl *Class, 2533 unsigned Quals, 2534 bool RValueThis, 2535 unsigned ThisQuals) { 2536 assert(!(ThisQuals & ~(Qualifiers::Const | Qualifiers::Volatile)) && 2537 "non-const, non-volatile qualifiers for copy assignment this"); 2538 SpecialMemberOverloadResult *Result = 2539 LookupSpecialMember(Class, CXXMoveAssignment, Quals & Qualifiers::Const, 2540 Quals & Qualifiers::Volatile, RValueThis, 2541 ThisQuals & Qualifiers::Const, 2542 ThisQuals & Qualifiers::Volatile); 2543 2544 return Result->getMethod(); 2545 } 2546 2547 /// \brief Look for the destructor of the given class. 2548 /// 2549 /// During semantic analysis, this routine should be used in lieu of 2550 /// CXXRecordDecl::getDestructor(). 2551 /// 2552 /// \returns The destructor for this class. 2553 CXXDestructorDecl *Sema::LookupDestructor(CXXRecordDecl *Class) { 2554 return cast<CXXDestructorDecl>(LookupSpecialMember(Class, CXXDestructor, 2555 false, false, false, 2556 false, false)->getMethod()); 2557 } 2558 2559 /// LookupLiteralOperator - Determine which literal operator should be used for 2560 /// a user-defined literal, per C++11 [lex.ext]. 2561 /// 2562 /// Normal overload resolution is not used to select which literal operator to 2563 /// call for a user-defined literal. Look up the provided literal operator name, 2564 /// and filter the results to the appropriate set for the given argument types. 2565 Sema::LiteralOperatorLookupResult 2566 Sema::LookupLiteralOperator(Scope *S, LookupResult &R, 2567 ArrayRef<QualType> ArgTys, 2568 bool AllowRawAndTemplate) { 2569 LookupName(R, S); 2570 assert(R.getResultKind() != LookupResult::Ambiguous && 2571 "literal operator lookup can't be ambiguous"); 2572 2573 // Filter the lookup results appropriately. 2574 LookupResult::Filter F = R.makeFilter(); 2575 2576 bool FoundTemplate = false; 2577 bool FoundRaw = false; 2578 bool FoundExactMatch = false; 2579 2580 while (F.hasNext()) { 2581 Decl *D = F.next(); 2582 if (UsingShadowDecl *USD = dyn_cast<UsingShadowDecl>(D)) 2583 D = USD->getTargetDecl(); 2584 2585 bool IsTemplate = isa<FunctionTemplateDecl>(D); 2586 bool IsRaw = false; 2587 bool IsExactMatch = false; 2588 2589 // If the declaration we found is invalid, skip it. 2590 if (D->isInvalidDecl()) { 2591 F.erase(); 2592 continue; 2593 } 2594 2595 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 2596 if (FD->getNumParams() == 1 && 2597 FD->getParamDecl(0)->getType()->getAs<PointerType>()) 2598 IsRaw = true; 2599 else if (FD->getNumParams() == ArgTys.size()) { 2600 IsExactMatch = true; 2601 for (unsigned ArgIdx = 0; ArgIdx != ArgTys.size(); ++ArgIdx) { 2602 QualType ParamTy = FD->getParamDecl(ArgIdx)->getType(); 2603 if (!Context.hasSameUnqualifiedType(ArgTys[ArgIdx], ParamTy)) { 2604 IsExactMatch = false; 2605 break; 2606 } 2607 } 2608 } 2609 } 2610 2611 if (IsExactMatch) { 2612 FoundExactMatch = true; 2613 AllowRawAndTemplate = false; 2614 if (FoundRaw || FoundTemplate) { 2615 // Go through again and remove the raw and template decls we've 2616 // already found. 2617 F.restart(); 2618 FoundRaw = FoundTemplate = false; 2619 } 2620 } else if (AllowRawAndTemplate && (IsTemplate || IsRaw)) { 2621 FoundTemplate |= IsTemplate; 2622 FoundRaw |= IsRaw; 2623 } else { 2624 F.erase(); 2625 } 2626 } 2627 2628 F.done(); 2629 2630 // C++11 [lex.ext]p3, p4: If S contains a literal operator with a matching 2631 // parameter type, that is used in preference to a raw literal operator 2632 // or literal operator template. 2633 if (FoundExactMatch) 2634 return LOLR_Cooked; 2635 2636 // C++11 [lex.ext]p3, p4: S shall contain a raw literal operator or a literal 2637 // operator template, but not both. 2638 if (FoundRaw && FoundTemplate) { 2639 Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName(); 2640 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) { 2641 Decl *D = *I; 2642 if (UsingShadowDecl *USD = dyn_cast<UsingShadowDecl>(D)) 2643 D = USD->getTargetDecl(); 2644 if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D)) 2645 D = FunTmpl->getTemplatedDecl(); 2646 NoteOverloadCandidate(cast<FunctionDecl>(D)); 2647 } 2648 return LOLR_Error; 2649 } 2650 2651 if (FoundRaw) 2652 return LOLR_Raw; 2653 2654 if (FoundTemplate) 2655 return LOLR_Template; 2656 2657 // Didn't find anything we could use. 2658 Diag(R.getNameLoc(), diag::err_ovl_no_viable_literal_operator) 2659 << R.getLookupName() << (int)ArgTys.size() << ArgTys[0] 2660 << (ArgTys.size() == 2 ? ArgTys[1] : QualType()) << AllowRawAndTemplate; 2661 return LOLR_Error; 2662 } 2663 2664 void ADLResult::insert(NamedDecl *New) { 2665 NamedDecl *&Old = Decls[cast<NamedDecl>(New->getCanonicalDecl())]; 2666 2667 // If we haven't yet seen a decl for this key, or the last decl 2668 // was exactly this one, we're done. 2669 if (Old == 0 || Old == New) { 2670 Old = New; 2671 return; 2672 } 2673 2674 // Otherwise, decide which is a more recent redeclaration. 2675 FunctionDecl *OldFD, *NewFD; 2676 if (isa<FunctionTemplateDecl>(New)) { 2677 OldFD = cast<FunctionTemplateDecl>(Old)->getTemplatedDecl(); 2678 NewFD = cast<FunctionTemplateDecl>(New)->getTemplatedDecl(); 2679 } else { 2680 OldFD = cast<FunctionDecl>(Old); 2681 NewFD = cast<FunctionDecl>(New); 2682 } 2683 2684 FunctionDecl *Cursor = NewFD; 2685 while (true) { 2686 Cursor = Cursor->getPreviousDecl(); 2687 2688 // If we got to the end without finding OldFD, OldFD is the newer 2689 // declaration; leave things as they are. 2690 if (!Cursor) return; 2691 2692 // If we do find OldFD, then NewFD is newer. 2693 if (Cursor == OldFD) break; 2694 2695 // Otherwise, keep looking. 2696 } 2697 2698 Old = New; 2699 } 2700 2701 void Sema::ArgumentDependentLookup(DeclarationName Name, bool Operator, 2702 SourceLocation Loc, 2703 llvm::ArrayRef<Expr *> Args, 2704 ADLResult &Result) { 2705 // Find all of the associated namespaces and classes based on the 2706 // arguments we have. 2707 AssociatedNamespaceSet AssociatedNamespaces; 2708 AssociatedClassSet AssociatedClasses; 2709 FindAssociatedClassesAndNamespaces(Loc, Args, 2710 AssociatedNamespaces, 2711 AssociatedClasses); 2712 2713 QualType T1, T2; 2714 if (Operator) { 2715 T1 = Args[0]->getType(); 2716 if (Args.size() >= 2) 2717 T2 = Args[1]->getType(); 2718 } 2719 2720 // C++ [basic.lookup.argdep]p3: 2721 // Let X be the lookup set produced by unqualified lookup (3.4.1) 2722 // and let Y be the lookup set produced by argument dependent 2723 // lookup (defined as follows). If X contains [...] then Y is 2724 // empty. Otherwise Y is the set of declarations found in the 2725 // namespaces associated with the argument types as described 2726 // below. The set of declarations found by the lookup of the name 2727 // is the union of X and Y. 2728 // 2729 // Here, we compute Y and add its members to the overloaded 2730 // candidate set. 2731 for (AssociatedNamespaceSet::iterator NS = AssociatedNamespaces.begin(), 2732 NSEnd = AssociatedNamespaces.end(); 2733 NS != NSEnd; ++NS) { 2734 // When considering an associated namespace, the lookup is the 2735 // same as the lookup performed when the associated namespace is 2736 // used as a qualifier (3.4.3.2) except that: 2737 // 2738 // -- Any using-directives in the associated namespace are 2739 // ignored. 2740 // 2741 // -- Any namespace-scope friend functions declared in 2742 // associated classes are visible within their respective 2743 // namespaces even if they are not visible during an ordinary 2744 // lookup (11.4). 2745 DeclContext::lookup_result R = (*NS)->lookup(Name); 2746 for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; 2747 ++I) { 2748 NamedDecl *D = *I; 2749 // If the only declaration here is an ordinary friend, consider 2750 // it only if it was declared in an associated classes. 2751 if (D->getIdentifierNamespace() == Decl::IDNS_OrdinaryFriend) { 2752 DeclContext *LexDC = D->getLexicalDeclContext(); 2753 if (!AssociatedClasses.count(cast<CXXRecordDecl>(LexDC))) 2754 continue; 2755 } 2756 2757 if (isa<UsingShadowDecl>(D)) 2758 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 2759 2760 if (isa<FunctionDecl>(D)) { 2761 if (Operator && 2762 !IsAcceptableNonMemberOperatorCandidate(cast<FunctionDecl>(D), 2763 T1, T2, Context)) 2764 continue; 2765 } else if (!isa<FunctionTemplateDecl>(D)) 2766 continue; 2767 2768 Result.insert(D); 2769 } 2770 } 2771 } 2772 2773 //---------------------------------------------------------------------------- 2774 // Search for all visible declarations. 2775 //---------------------------------------------------------------------------- 2776 VisibleDeclConsumer::~VisibleDeclConsumer() { } 2777 2778 namespace { 2779 2780 class ShadowContextRAII; 2781 2782 class VisibleDeclsRecord { 2783 public: 2784 /// \brief An entry in the shadow map, which is optimized to store a 2785 /// single declaration (the common case) but can also store a list 2786 /// of declarations. 2787 typedef llvm::TinyPtrVector<NamedDecl*> ShadowMapEntry; 2788 2789 private: 2790 /// \brief A mapping from declaration names to the declarations that have 2791 /// this name within a particular scope. 2792 typedef llvm::DenseMap<DeclarationName, ShadowMapEntry> ShadowMap; 2793 2794 /// \brief A list of shadow maps, which is used to model name hiding. 2795 std::list<ShadowMap> ShadowMaps; 2796 2797 /// \brief The declaration contexts we have already visited. 2798 llvm::SmallPtrSet<DeclContext *, 8> VisitedContexts; 2799 2800 friend class ShadowContextRAII; 2801 2802 public: 2803 /// \brief Determine whether we have already visited this context 2804 /// (and, if not, note that we are going to visit that context now). 2805 bool visitedContext(DeclContext *Ctx) { 2806 return !VisitedContexts.insert(Ctx); 2807 } 2808 2809 bool alreadyVisitedContext(DeclContext *Ctx) { 2810 return VisitedContexts.count(Ctx); 2811 } 2812 2813 /// \brief Determine whether the given declaration is hidden in the 2814 /// current scope. 2815 /// 2816 /// \returns the declaration that hides the given declaration, or 2817 /// NULL if no such declaration exists. 2818 NamedDecl *checkHidden(NamedDecl *ND); 2819 2820 /// \brief Add a declaration to the current shadow map. 2821 void add(NamedDecl *ND) { 2822 ShadowMaps.back()[ND->getDeclName()].push_back(ND); 2823 } 2824 }; 2825 2826 /// \brief RAII object that records when we've entered a shadow context. 2827 class ShadowContextRAII { 2828 VisibleDeclsRecord &Visible; 2829 2830 typedef VisibleDeclsRecord::ShadowMap ShadowMap; 2831 2832 public: 2833 ShadowContextRAII(VisibleDeclsRecord &Visible) : Visible(Visible) { 2834 Visible.ShadowMaps.push_back(ShadowMap()); 2835 } 2836 2837 ~ShadowContextRAII() { 2838 Visible.ShadowMaps.pop_back(); 2839 } 2840 }; 2841 2842 } // end anonymous namespace 2843 2844 NamedDecl *VisibleDeclsRecord::checkHidden(NamedDecl *ND) { 2845 // Look through using declarations. 2846 ND = ND->getUnderlyingDecl(); 2847 2848 unsigned IDNS = ND->getIdentifierNamespace(); 2849 std::list<ShadowMap>::reverse_iterator SM = ShadowMaps.rbegin(); 2850 for (std::list<ShadowMap>::reverse_iterator SMEnd = ShadowMaps.rend(); 2851 SM != SMEnd; ++SM) { 2852 ShadowMap::iterator Pos = SM->find(ND->getDeclName()); 2853 if (Pos == SM->end()) 2854 continue; 2855 2856 for (ShadowMapEntry::iterator I = Pos->second.begin(), 2857 IEnd = Pos->second.end(); 2858 I != IEnd; ++I) { 2859 // A tag declaration does not hide a non-tag declaration. 2860 if ((*I)->hasTagIdentifierNamespace() && 2861 (IDNS & (Decl::IDNS_Member | Decl::IDNS_Ordinary | 2862 Decl::IDNS_ObjCProtocol))) 2863 continue; 2864 2865 // Protocols are in distinct namespaces from everything else. 2866 if ((((*I)->getIdentifierNamespace() & Decl::IDNS_ObjCProtocol) 2867 || (IDNS & Decl::IDNS_ObjCProtocol)) && 2868 (*I)->getIdentifierNamespace() != IDNS) 2869 continue; 2870 2871 // Functions and function templates in the same scope overload 2872 // rather than hide. FIXME: Look for hiding based on function 2873 // signatures! 2874 if ((*I)->isFunctionOrFunctionTemplate() && 2875 ND->isFunctionOrFunctionTemplate() && 2876 SM == ShadowMaps.rbegin()) 2877 continue; 2878 2879 // We've found a declaration that hides this one. 2880 return *I; 2881 } 2882 } 2883 2884 return 0; 2885 } 2886 2887 static void LookupVisibleDecls(DeclContext *Ctx, LookupResult &Result, 2888 bool QualifiedNameLookup, 2889 bool InBaseClass, 2890 VisibleDeclConsumer &Consumer, 2891 VisibleDeclsRecord &Visited) { 2892 if (!Ctx) 2893 return; 2894 2895 // Make sure we don't visit the same context twice. 2896 if (Visited.visitedContext(Ctx->getPrimaryContext())) 2897 return; 2898 2899 if (CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(Ctx)) 2900 Result.getSema().ForceDeclarationOfImplicitMembers(Class); 2901 2902 // Enumerate all of the results in this context. 2903 for (DeclContext::all_lookups_iterator L = Ctx->lookups_begin(), 2904 LEnd = Ctx->lookups_end(); 2905 L != LEnd; ++L) { 2906 DeclContext::lookup_result R = *L; 2907 for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; 2908 ++I) { 2909 if (NamedDecl *ND = dyn_cast<NamedDecl>(*I)) { 2910 if ((ND = Result.getAcceptableDecl(ND))) { 2911 Consumer.FoundDecl(ND, Visited.checkHidden(ND), Ctx, InBaseClass); 2912 Visited.add(ND); 2913 } 2914 } 2915 } 2916 } 2917 2918 // Traverse using directives for qualified name lookup. 2919 if (QualifiedNameLookup) { 2920 ShadowContextRAII Shadow(Visited); 2921 DeclContext::udir_iterator I, E; 2922 for (llvm::tie(I, E) = Ctx->getUsingDirectives(); I != E; ++I) { 2923 LookupVisibleDecls((*I)->getNominatedNamespace(), Result, 2924 QualifiedNameLookup, InBaseClass, Consumer, Visited); 2925 } 2926 } 2927 2928 // Traverse the contexts of inherited C++ classes. 2929 if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Ctx)) { 2930 if (!Record->hasDefinition()) 2931 return; 2932 2933 for (CXXRecordDecl::base_class_iterator B = Record->bases_begin(), 2934 BEnd = Record->bases_end(); 2935 B != BEnd; ++B) { 2936 QualType BaseType = B->getType(); 2937 2938 // Don't look into dependent bases, because name lookup can't look 2939 // there anyway. 2940 if (BaseType->isDependentType()) 2941 continue; 2942 2943 const RecordType *Record = BaseType->getAs<RecordType>(); 2944 if (!Record) 2945 continue; 2946 2947 // FIXME: It would be nice to be able to determine whether referencing 2948 // a particular member would be ambiguous. For example, given 2949 // 2950 // struct A { int member; }; 2951 // struct B { int member; }; 2952 // struct C : A, B { }; 2953 // 2954 // void f(C *c) { c->### } 2955 // 2956 // accessing 'member' would result in an ambiguity. However, we 2957 // could be smart enough to qualify the member with the base 2958 // class, e.g., 2959 // 2960 // c->B::member 2961 // 2962 // or 2963 // 2964 // c->A::member 2965 2966 // Find results in this base class (and its bases). 2967 ShadowContextRAII Shadow(Visited); 2968 LookupVisibleDecls(Record->getDecl(), Result, QualifiedNameLookup, 2969 true, Consumer, Visited); 2970 } 2971 } 2972 2973 // Traverse the contexts of Objective-C classes. 2974 if (ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Ctx)) { 2975 // Traverse categories. 2976 for (ObjCInterfaceDecl::visible_categories_iterator 2977 Cat = IFace->visible_categories_begin(), 2978 CatEnd = IFace->visible_categories_end(); 2979 Cat != CatEnd; ++Cat) { 2980 ShadowContextRAII Shadow(Visited); 2981 LookupVisibleDecls(*Cat, Result, QualifiedNameLookup, false, 2982 Consumer, Visited); 2983 } 2984 2985 // Traverse protocols. 2986 for (ObjCInterfaceDecl::all_protocol_iterator 2987 I = IFace->all_referenced_protocol_begin(), 2988 E = IFace->all_referenced_protocol_end(); I != E; ++I) { 2989 ShadowContextRAII Shadow(Visited); 2990 LookupVisibleDecls(*I, Result, QualifiedNameLookup, false, Consumer, 2991 Visited); 2992 } 2993 2994 // Traverse the superclass. 2995 if (IFace->getSuperClass()) { 2996 ShadowContextRAII Shadow(Visited); 2997 LookupVisibleDecls(IFace->getSuperClass(), Result, QualifiedNameLookup, 2998 true, Consumer, Visited); 2999 } 3000 3001 // If there is an implementation, traverse it. We do this to find 3002 // synthesized ivars. 3003 if (IFace->getImplementation()) { 3004 ShadowContextRAII Shadow(Visited); 3005 LookupVisibleDecls(IFace->getImplementation(), Result, 3006 QualifiedNameLookup, InBaseClass, Consumer, Visited); 3007 } 3008 } else if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Ctx)) { 3009 for (ObjCProtocolDecl::protocol_iterator I = Protocol->protocol_begin(), 3010 E = Protocol->protocol_end(); I != E; ++I) { 3011 ShadowContextRAII Shadow(Visited); 3012 LookupVisibleDecls(*I, Result, QualifiedNameLookup, false, Consumer, 3013 Visited); 3014 } 3015 } else if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(Ctx)) { 3016 for (ObjCCategoryDecl::protocol_iterator I = Category->protocol_begin(), 3017 E = Category->protocol_end(); I != E; ++I) { 3018 ShadowContextRAII Shadow(Visited); 3019 LookupVisibleDecls(*I, Result, QualifiedNameLookup, false, Consumer, 3020 Visited); 3021 } 3022 3023 // If there is an implementation, traverse it. 3024 if (Category->getImplementation()) { 3025 ShadowContextRAII Shadow(Visited); 3026 LookupVisibleDecls(Category->getImplementation(), Result, 3027 QualifiedNameLookup, true, Consumer, Visited); 3028 } 3029 } 3030 } 3031 3032 static void LookupVisibleDecls(Scope *S, LookupResult &Result, 3033 UnqualUsingDirectiveSet &UDirs, 3034 VisibleDeclConsumer &Consumer, 3035 VisibleDeclsRecord &Visited) { 3036 if (!S) 3037 return; 3038 3039 if (!S->getEntity() || 3040 (!S->getParent() && 3041 !Visited.alreadyVisitedContext((DeclContext *)S->getEntity())) || 3042 ((DeclContext *)S->getEntity())->isFunctionOrMethod()) { 3043 // Walk through the declarations in this Scope. 3044 for (Scope::decl_iterator D = S->decl_begin(), DEnd = S->decl_end(); 3045 D != DEnd; ++D) { 3046 if (NamedDecl *ND = dyn_cast<NamedDecl>(*D)) 3047 if ((ND = Result.getAcceptableDecl(ND))) { 3048 Consumer.FoundDecl(ND, Visited.checkHidden(ND), 0, false); 3049 Visited.add(ND); 3050 } 3051 } 3052 } 3053 3054 // FIXME: C++ [temp.local]p8 3055 DeclContext *Entity = 0; 3056 if (S->getEntity()) { 3057 // Look into this scope's declaration context, along with any of its 3058 // parent lookup contexts (e.g., enclosing classes), up to the point 3059 // where we hit the context stored in the next outer scope. 3060 Entity = (DeclContext *)S->getEntity(); 3061 DeclContext *OuterCtx = findOuterContext(S).first; // FIXME 3062 3063 for (DeclContext *Ctx = Entity; Ctx && !Ctx->Equals(OuterCtx); 3064 Ctx = Ctx->getLookupParent()) { 3065 if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(Ctx)) { 3066 if (Method->isInstanceMethod()) { 3067 // For instance methods, look for ivars in the method's interface. 3068 LookupResult IvarResult(Result.getSema(), Result.getLookupName(), 3069 Result.getNameLoc(), Sema::LookupMemberName); 3070 if (ObjCInterfaceDecl *IFace = Method->getClassInterface()) { 3071 LookupVisibleDecls(IFace, IvarResult, /*QualifiedNameLookup=*/false, 3072 /*InBaseClass=*/false, Consumer, Visited); 3073 } 3074 } 3075 3076 // We've already performed all of the name lookup that we need 3077 // to for Objective-C methods; the next context will be the 3078 // outer scope. 3079 break; 3080 } 3081 3082 if (Ctx->isFunctionOrMethod()) 3083 continue; 3084 3085 LookupVisibleDecls(Ctx, Result, /*QualifiedNameLookup=*/false, 3086 /*InBaseClass=*/false, Consumer, Visited); 3087 } 3088 } else if (!S->getParent()) { 3089 // Look into the translation unit scope. We walk through the translation 3090 // unit's declaration context, because the Scope itself won't have all of 3091 // the declarations if we loaded a precompiled header. 3092 // FIXME: We would like the translation unit's Scope object to point to the 3093 // translation unit, so we don't need this special "if" branch. However, 3094 // doing so would force the normal C++ name-lookup code to look into the 3095 // translation unit decl when the IdentifierInfo chains would suffice. 3096 // Once we fix that problem (which is part of a more general "don't look 3097 // in DeclContexts unless we have to" optimization), we can eliminate this. 3098 Entity = Result.getSema().Context.getTranslationUnitDecl(); 3099 LookupVisibleDecls(Entity, Result, /*QualifiedNameLookup=*/false, 3100 /*InBaseClass=*/false, Consumer, Visited); 3101 } 3102 3103 if (Entity) { 3104 // Lookup visible declarations in any namespaces found by using 3105 // directives. 3106 UnqualUsingDirectiveSet::const_iterator UI, UEnd; 3107 llvm::tie(UI, UEnd) = UDirs.getNamespacesFor(Entity); 3108 for (; UI != UEnd; ++UI) 3109 LookupVisibleDecls(const_cast<DeclContext *>(UI->getNominatedNamespace()), 3110 Result, /*QualifiedNameLookup=*/false, 3111 /*InBaseClass=*/false, Consumer, Visited); 3112 } 3113 3114 // Lookup names in the parent scope. 3115 ShadowContextRAII Shadow(Visited); 3116 LookupVisibleDecls(S->getParent(), Result, UDirs, Consumer, Visited); 3117 } 3118 3119 void Sema::LookupVisibleDecls(Scope *S, LookupNameKind Kind, 3120 VisibleDeclConsumer &Consumer, 3121 bool IncludeGlobalScope) { 3122 // Determine the set of using directives available during 3123 // unqualified name lookup. 3124 Scope *Initial = S; 3125 UnqualUsingDirectiveSet UDirs; 3126 if (getLangOpts().CPlusPlus) { 3127 // Find the first namespace or translation-unit scope. 3128 while (S && !isNamespaceOrTranslationUnitScope(S)) 3129 S = S->getParent(); 3130 3131 UDirs.visitScopeChain(Initial, S); 3132 } 3133 UDirs.done(); 3134 3135 // Look for visible declarations. 3136 LookupResult Result(*this, DeclarationName(), SourceLocation(), Kind); 3137 VisibleDeclsRecord Visited; 3138 if (!IncludeGlobalScope) 3139 Visited.visitedContext(Context.getTranslationUnitDecl()); 3140 ShadowContextRAII Shadow(Visited); 3141 ::LookupVisibleDecls(Initial, Result, UDirs, Consumer, Visited); 3142 } 3143 3144 void Sema::LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind, 3145 VisibleDeclConsumer &Consumer, 3146 bool IncludeGlobalScope) { 3147 LookupResult Result(*this, DeclarationName(), SourceLocation(), Kind); 3148 VisibleDeclsRecord Visited; 3149 if (!IncludeGlobalScope) 3150 Visited.visitedContext(Context.getTranslationUnitDecl()); 3151 ShadowContextRAII Shadow(Visited); 3152 ::LookupVisibleDecls(Ctx, Result, /*QualifiedNameLookup=*/true, 3153 /*InBaseClass=*/false, Consumer, Visited); 3154 } 3155 3156 /// LookupOrCreateLabel - Do a name lookup of a label with the specified name. 3157 /// If GnuLabelLoc is a valid source location, then this is a definition 3158 /// of an __label__ label name, otherwise it is a normal label definition 3159 /// or use. 3160 LabelDecl *Sema::LookupOrCreateLabel(IdentifierInfo *II, SourceLocation Loc, 3161 SourceLocation GnuLabelLoc) { 3162 // Do a lookup to see if we have a label with this name already. 3163 NamedDecl *Res = 0; 3164 3165 if (GnuLabelLoc.isValid()) { 3166 // Local label definitions always shadow existing labels. 3167 Res = LabelDecl::Create(Context, CurContext, Loc, II, GnuLabelLoc); 3168 Scope *S = CurScope; 3169 PushOnScopeChains(Res, S, true); 3170 return cast<LabelDecl>(Res); 3171 } 3172 3173 // Not a GNU local label. 3174 Res = LookupSingleName(CurScope, II, Loc, LookupLabel, NotForRedeclaration); 3175 // If we found a label, check to see if it is in the same context as us. 3176 // When in a Block, we don't want to reuse a label in an enclosing function. 3177 if (Res && Res->getDeclContext() != CurContext) 3178 Res = 0; 3179 if (Res == 0) { 3180 // If not forward referenced or defined already, create the backing decl. 3181 Res = LabelDecl::Create(Context, CurContext, Loc, II); 3182 Scope *S = CurScope->getFnParent(); 3183 assert(S && "Not in a function?"); 3184 PushOnScopeChains(Res, S, true); 3185 } 3186 return cast<LabelDecl>(Res); 3187 } 3188 3189 //===----------------------------------------------------------------------===// 3190 // Typo correction 3191 //===----------------------------------------------------------------------===// 3192 3193 namespace { 3194 3195 typedef SmallVector<TypoCorrection, 1> TypoResultList; 3196 typedef llvm::StringMap<TypoResultList, llvm::BumpPtrAllocator> TypoResultsMap; 3197 typedef std::map<unsigned, TypoResultsMap> TypoEditDistanceMap; 3198 3199 static const unsigned MaxTypoDistanceResultSets = 5; 3200 3201 class TypoCorrectionConsumer : public VisibleDeclConsumer { 3202 /// \brief The name written that is a typo in the source. 3203 StringRef Typo; 3204 3205 /// \brief The results found that have the smallest edit distance 3206 /// found (so far) with the typo name. 3207 /// 3208 /// The pointer value being set to the current DeclContext indicates 3209 /// whether there is a keyword with this name. 3210 TypoEditDistanceMap CorrectionResults; 3211 3212 Sema &SemaRef; 3213 3214 public: 3215 explicit TypoCorrectionConsumer(Sema &SemaRef, IdentifierInfo *Typo) 3216 : Typo(Typo->getName()), 3217 SemaRef(SemaRef) { } 3218 3219 virtual void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx, 3220 bool InBaseClass); 3221 void FoundName(StringRef Name); 3222 void addKeywordResult(StringRef Keyword); 3223 void addName(StringRef Name, NamedDecl *ND, unsigned Distance, 3224 NestedNameSpecifier *NNS=NULL, bool isKeyword=false); 3225 void addCorrection(TypoCorrection Correction); 3226 3227 typedef TypoResultsMap::iterator result_iterator; 3228 typedef TypoEditDistanceMap::iterator distance_iterator; 3229 distance_iterator begin() { return CorrectionResults.begin(); } 3230 distance_iterator end() { return CorrectionResults.end(); } 3231 void erase(distance_iterator I) { CorrectionResults.erase(I); } 3232 unsigned size() const { return CorrectionResults.size(); } 3233 bool empty() const { return CorrectionResults.empty(); } 3234 3235 TypoResultList &operator[](StringRef Name) { 3236 return CorrectionResults.begin()->second[Name]; 3237 } 3238 3239 unsigned getBestEditDistance(bool Normalized) { 3240 if (CorrectionResults.empty()) 3241 return (std::numeric_limits<unsigned>::max)(); 3242 3243 unsigned BestED = CorrectionResults.begin()->first; 3244 return Normalized ? TypoCorrection::NormalizeEditDistance(BestED) : BestED; 3245 } 3246 3247 TypoResultsMap &getBestResults() { 3248 return CorrectionResults.begin()->second; 3249 } 3250 3251 }; 3252 3253 } 3254 3255 void TypoCorrectionConsumer::FoundDecl(NamedDecl *ND, NamedDecl *Hiding, 3256 DeclContext *Ctx, bool InBaseClass) { 3257 // Don't consider hidden names for typo correction. 3258 if (Hiding) 3259 return; 3260 3261 // Only consider entities with identifiers for names, ignoring 3262 // special names (constructors, overloaded operators, selectors, 3263 // etc.). 3264 IdentifierInfo *Name = ND->getIdentifier(); 3265 if (!Name) 3266 return; 3267 3268 FoundName(Name->getName()); 3269 } 3270 3271 void TypoCorrectionConsumer::FoundName(StringRef Name) { 3272 // Use a simple length-based heuristic to determine the minimum possible 3273 // edit distance. If the minimum isn't good enough, bail out early. 3274 unsigned MinED = abs((int)Name.size() - (int)Typo.size()); 3275 if (MinED && Typo.size() / MinED < 3) 3276 return; 3277 3278 // Compute an upper bound on the allowable edit distance, so that the 3279 // edit-distance algorithm can short-circuit. 3280 unsigned UpperBound = (Typo.size() + 2) / 3; 3281 3282 // Compute the edit distance between the typo and the name of this 3283 // entity, and add the identifier to the list of results. 3284 addName(Name, NULL, Typo.edit_distance(Name, true, UpperBound)); 3285 } 3286 3287 void TypoCorrectionConsumer::addKeywordResult(StringRef Keyword) { 3288 // Compute the edit distance between the typo and this keyword, 3289 // and add the keyword to the list of results. 3290 addName(Keyword, NULL, Typo.edit_distance(Keyword), NULL, true); 3291 } 3292 3293 void TypoCorrectionConsumer::addName(StringRef Name, 3294 NamedDecl *ND, 3295 unsigned Distance, 3296 NestedNameSpecifier *NNS, 3297 bool isKeyword) { 3298 TypoCorrection TC(&SemaRef.Context.Idents.get(Name), ND, NNS, Distance); 3299 if (isKeyword) TC.makeKeyword(); 3300 addCorrection(TC); 3301 } 3302 3303 void TypoCorrectionConsumer::addCorrection(TypoCorrection Correction) { 3304 StringRef Name = Correction.getCorrectionAsIdentifierInfo()->getName(); 3305 TypoResultList &CList = 3306 CorrectionResults[Correction.getEditDistance(false)][Name]; 3307 3308 if (!CList.empty() && !CList.back().isResolved()) 3309 CList.pop_back(); 3310 if (NamedDecl *NewND = Correction.getCorrectionDecl()) { 3311 std::string CorrectionStr = Correction.getAsString(SemaRef.getLangOpts()); 3312 for (TypoResultList::iterator RI = CList.begin(), RIEnd = CList.end(); 3313 RI != RIEnd; ++RI) { 3314 // If the Correction refers to a decl already in the result list, 3315 // replace the existing result if the string representation of Correction 3316 // comes before the current result alphabetically, then stop as there is 3317 // nothing more to be done to add Correction to the candidate set. 3318 if (RI->getCorrectionDecl() == NewND) { 3319 if (CorrectionStr < RI->getAsString(SemaRef.getLangOpts())) 3320 *RI = Correction; 3321 return; 3322 } 3323 } 3324 } 3325 if (CList.empty() || Correction.isResolved()) 3326 CList.push_back(Correction); 3327 3328 while (CorrectionResults.size() > MaxTypoDistanceResultSets) 3329 erase(llvm::prior(CorrectionResults.end())); 3330 } 3331 3332 // Fill the supplied vector with the IdentifierInfo pointers for each piece of 3333 // the given NestedNameSpecifier (i.e. given a NestedNameSpecifier "foo::bar::", 3334 // fill the vector with the IdentifierInfo pointers for "foo" and "bar"). 3335 static void getNestedNameSpecifierIdentifiers( 3336 NestedNameSpecifier *NNS, 3337 SmallVectorImpl<const IdentifierInfo*> &Identifiers) { 3338 if (NestedNameSpecifier *Prefix = NNS->getPrefix()) 3339 getNestedNameSpecifierIdentifiers(Prefix, Identifiers); 3340 else 3341 Identifiers.clear(); 3342 3343 const IdentifierInfo *II = NULL; 3344 3345 switch (NNS->getKind()) { 3346 case NestedNameSpecifier::Identifier: 3347 II = NNS->getAsIdentifier(); 3348 break; 3349 3350 case NestedNameSpecifier::Namespace: 3351 if (NNS->getAsNamespace()->isAnonymousNamespace()) 3352 return; 3353 II = NNS->getAsNamespace()->getIdentifier(); 3354 break; 3355 3356 case NestedNameSpecifier::NamespaceAlias: 3357 II = NNS->getAsNamespaceAlias()->getIdentifier(); 3358 break; 3359 3360 case NestedNameSpecifier::TypeSpecWithTemplate: 3361 case NestedNameSpecifier::TypeSpec: 3362 II = QualType(NNS->getAsType(), 0).getBaseTypeIdentifier(); 3363 break; 3364 3365 case NestedNameSpecifier::Global: 3366 return; 3367 } 3368 3369 if (II) 3370 Identifiers.push_back(II); 3371 } 3372 3373 namespace { 3374 3375 class SpecifierInfo { 3376 public: 3377 DeclContext* DeclCtx; 3378 NestedNameSpecifier* NameSpecifier; 3379 unsigned EditDistance; 3380 3381 SpecifierInfo(DeclContext *Ctx, NestedNameSpecifier *NNS, unsigned ED) 3382 : DeclCtx(Ctx), NameSpecifier(NNS), EditDistance(ED) {} 3383 }; 3384 3385 typedef SmallVector<DeclContext*, 4> DeclContextList; 3386 typedef SmallVector<SpecifierInfo, 16> SpecifierInfoList; 3387 3388 class NamespaceSpecifierSet { 3389 ASTContext &Context; 3390 DeclContextList CurContextChain; 3391 SmallVector<const IdentifierInfo*, 4> CurContextIdentifiers; 3392 SmallVector<const IdentifierInfo*, 4> CurNameSpecifierIdentifiers; 3393 bool isSorted; 3394 3395 SpecifierInfoList Specifiers; 3396 llvm::SmallSetVector<unsigned, 4> Distances; 3397 llvm::DenseMap<unsigned, SpecifierInfoList> DistanceMap; 3398 3399 /// \brief Helper for building the list of DeclContexts between the current 3400 /// context and the top of the translation unit 3401 static DeclContextList BuildContextChain(DeclContext *Start); 3402 3403 void SortNamespaces(); 3404 3405 public: 3406 NamespaceSpecifierSet(ASTContext &Context, DeclContext *CurContext, 3407 CXXScopeSpec *CurScopeSpec) 3408 : Context(Context), CurContextChain(BuildContextChain(CurContext)), 3409 isSorted(true) { 3410 if (CurScopeSpec && CurScopeSpec->getScopeRep()) 3411 getNestedNameSpecifierIdentifiers(CurScopeSpec->getScopeRep(), 3412 CurNameSpecifierIdentifiers); 3413 // Build the list of identifiers that would be used for an absolute 3414 // (from the global context) NestedNameSpecifier referring to the current 3415 // context. 3416 for (DeclContextList::reverse_iterator C = CurContextChain.rbegin(), 3417 CEnd = CurContextChain.rend(); 3418 C != CEnd; ++C) { 3419 if (NamespaceDecl *ND = dyn_cast_or_null<NamespaceDecl>(*C)) 3420 CurContextIdentifiers.push_back(ND->getIdentifier()); 3421 } 3422 } 3423 3424 /// \brief Add the namespace to the set, computing the corresponding 3425 /// NestedNameSpecifier and its distance in the process. 3426 void AddNamespace(NamespaceDecl *ND); 3427 3428 typedef SpecifierInfoList::iterator iterator; 3429 iterator begin() { 3430 if (!isSorted) SortNamespaces(); 3431 return Specifiers.begin(); 3432 } 3433 iterator end() { return Specifiers.end(); } 3434 }; 3435 3436 } 3437 3438 DeclContextList NamespaceSpecifierSet::BuildContextChain(DeclContext *Start) { 3439 assert(Start && "Building a context chain from a null context"); 3440 DeclContextList Chain; 3441 for (DeclContext *DC = Start->getPrimaryContext(); DC != NULL; 3442 DC = DC->getLookupParent()) { 3443 NamespaceDecl *ND = dyn_cast_or_null<NamespaceDecl>(DC); 3444 if (!DC->isInlineNamespace() && !DC->isTransparentContext() && 3445 !(ND && ND->isAnonymousNamespace())) 3446 Chain.push_back(DC->getPrimaryContext()); 3447 } 3448 return Chain; 3449 } 3450 3451 void NamespaceSpecifierSet::SortNamespaces() { 3452 SmallVector<unsigned, 4> sortedDistances; 3453 sortedDistances.append(Distances.begin(), Distances.end()); 3454 3455 if (sortedDistances.size() > 1) 3456 std::sort(sortedDistances.begin(), sortedDistances.end()); 3457 3458 Specifiers.clear(); 3459 for (SmallVector<unsigned, 4>::iterator DI = sortedDistances.begin(), 3460 DIEnd = sortedDistances.end(); 3461 DI != DIEnd; ++DI) { 3462 SpecifierInfoList &SpecList = DistanceMap[*DI]; 3463 Specifiers.append(SpecList.begin(), SpecList.end()); 3464 } 3465 3466 isSorted = true; 3467 } 3468 3469 void NamespaceSpecifierSet::AddNamespace(NamespaceDecl *ND) { 3470 DeclContext *Ctx = cast<DeclContext>(ND); 3471 NestedNameSpecifier *NNS = NULL; 3472 unsigned NumSpecifiers = 0; 3473 DeclContextList NamespaceDeclChain(BuildContextChain(Ctx)); 3474 DeclContextList FullNamespaceDeclChain(NamespaceDeclChain); 3475 3476 // Eliminate common elements from the two DeclContext chains. 3477 for (DeclContextList::reverse_iterator C = CurContextChain.rbegin(), 3478 CEnd = CurContextChain.rend(); 3479 C != CEnd && !NamespaceDeclChain.empty() && 3480 NamespaceDeclChain.back() == *C; ++C) { 3481 NamespaceDeclChain.pop_back(); 3482 } 3483 3484 // Add an explicit leading '::' specifier if needed. 3485 if (NamespaceDecl *ND = 3486 NamespaceDeclChain.empty() ? NULL : 3487 dyn_cast_or_null<NamespaceDecl>(NamespaceDeclChain.back())) { 3488 IdentifierInfo *Name = ND->getIdentifier(); 3489 if (std::find(CurContextIdentifiers.begin(), CurContextIdentifiers.end(), 3490 Name) != CurContextIdentifiers.end() || 3491 std::find(CurNameSpecifierIdentifiers.begin(), 3492 CurNameSpecifierIdentifiers.end(), 3493 Name) != CurNameSpecifierIdentifiers.end()) { 3494 NamespaceDeclChain = FullNamespaceDeclChain; 3495 NNS = NestedNameSpecifier::GlobalSpecifier(Context); 3496 } 3497 } 3498 3499 // Build the NestedNameSpecifier from what is left of the NamespaceDeclChain 3500 for (DeclContextList::reverse_iterator C = NamespaceDeclChain.rbegin(), 3501 CEnd = NamespaceDeclChain.rend(); 3502 C != CEnd; ++C) { 3503 NamespaceDecl *ND = dyn_cast_or_null<NamespaceDecl>(*C); 3504 if (ND) { 3505 NNS = NestedNameSpecifier::Create(Context, NNS, ND); 3506 ++NumSpecifiers; 3507 } 3508 } 3509 3510 // If the built NestedNameSpecifier would be replacing an existing 3511 // NestedNameSpecifier, use the number of component identifiers that 3512 // would need to be changed as the edit distance instead of the number 3513 // of components in the built NestedNameSpecifier. 3514 if (NNS && !CurNameSpecifierIdentifiers.empty()) { 3515 SmallVector<const IdentifierInfo*, 4> NewNameSpecifierIdentifiers; 3516 getNestedNameSpecifierIdentifiers(NNS, NewNameSpecifierIdentifiers); 3517 NumSpecifiers = llvm::ComputeEditDistance( 3518 llvm::ArrayRef<const IdentifierInfo*>(CurNameSpecifierIdentifiers), 3519 llvm::ArrayRef<const IdentifierInfo*>(NewNameSpecifierIdentifiers)); 3520 } 3521 3522 isSorted = false; 3523 Distances.insert(NumSpecifiers); 3524 DistanceMap[NumSpecifiers].push_back(SpecifierInfo(Ctx, NNS, NumSpecifiers)); 3525 } 3526 3527 /// \brief Perform name lookup for a possible result for typo correction. 3528 static void LookupPotentialTypoResult(Sema &SemaRef, 3529 LookupResult &Res, 3530 IdentifierInfo *Name, 3531 Scope *S, CXXScopeSpec *SS, 3532 DeclContext *MemberContext, 3533 bool EnteringContext, 3534 bool isObjCIvarLookup) { 3535 Res.suppressDiagnostics(); 3536 Res.clear(); 3537 Res.setLookupName(Name); 3538 if (MemberContext) { 3539 if (ObjCInterfaceDecl *Class = dyn_cast<ObjCInterfaceDecl>(MemberContext)) { 3540 if (isObjCIvarLookup) { 3541 if (ObjCIvarDecl *Ivar = Class->lookupInstanceVariable(Name)) { 3542 Res.addDecl(Ivar); 3543 Res.resolveKind(); 3544 return; 3545 } 3546 } 3547 3548 if (ObjCPropertyDecl *Prop = Class->FindPropertyDeclaration(Name)) { 3549 Res.addDecl(Prop); 3550 Res.resolveKind(); 3551 return; 3552 } 3553 } 3554 3555 SemaRef.LookupQualifiedName(Res, MemberContext); 3556 return; 3557 } 3558 3559 SemaRef.LookupParsedName(Res, S, SS, /*AllowBuiltinCreation=*/false, 3560 EnteringContext); 3561 3562 // Fake ivar lookup; this should really be part of 3563 // LookupParsedName. 3564 if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl()) { 3565 if (Method->isInstanceMethod() && Method->getClassInterface() && 3566 (Res.empty() || 3567 (Res.isSingleResult() && 3568 Res.getFoundDecl()->isDefinedOutsideFunctionOrMethod()))) { 3569 if (ObjCIvarDecl *IV 3570 = Method->getClassInterface()->lookupInstanceVariable(Name)) { 3571 Res.addDecl(IV); 3572 Res.resolveKind(); 3573 } 3574 } 3575 } 3576 } 3577 3578 /// \brief Add keywords to the consumer as possible typo corrections. 3579 static void AddKeywordsToConsumer(Sema &SemaRef, 3580 TypoCorrectionConsumer &Consumer, 3581 Scope *S, CorrectionCandidateCallback &CCC, 3582 bool AfterNestedNameSpecifier) { 3583 if (AfterNestedNameSpecifier) { 3584 // For 'X::', we know exactly which keywords can appear next. 3585 Consumer.addKeywordResult("template"); 3586 if (CCC.WantExpressionKeywords) 3587 Consumer.addKeywordResult("operator"); 3588 return; 3589 } 3590 3591 if (CCC.WantObjCSuper) 3592 Consumer.addKeywordResult("super"); 3593 3594 if (CCC.WantTypeSpecifiers) { 3595 // Add type-specifier keywords to the set of results. 3596 const char *CTypeSpecs[] = { 3597 "char", "const", "double", "enum", "float", "int", "long", "short", 3598 "signed", "struct", "union", "unsigned", "void", "volatile", 3599 "_Complex", "_Imaginary", 3600 // storage-specifiers as well 3601 "extern", "inline", "static", "typedef" 3602 }; 3603 3604 const unsigned NumCTypeSpecs = sizeof(CTypeSpecs) / sizeof(CTypeSpecs[0]); 3605 for (unsigned I = 0; I != NumCTypeSpecs; ++I) 3606 Consumer.addKeywordResult(CTypeSpecs[I]); 3607 3608 if (SemaRef.getLangOpts().C99) 3609 Consumer.addKeywordResult("restrict"); 3610 if (SemaRef.getLangOpts().Bool || SemaRef.getLangOpts().CPlusPlus) 3611 Consumer.addKeywordResult("bool"); 3612 else if (SemaRef.getLangOpts().C99) 3613 Consumer.addKeywordResult("_Bool"); 3614 3615 if (SemaRef.getLangOpts().CPlusPlus) { 3616 Consumer.addKeywordResult("class"); 3617 Consumer.addKeywordResult("typename"); 3618 Consumer.addKeywordResult("wchar_t"); 3619 3620 if (SemaRef.getLangOpts().CPlusPlus11) { 3621 Consumer.addKeywordResult("char16_t"); 3622 Consumer.addKeywordResult("char32_t"); 3623 Consumer.addKeywordResult("constexpr"); 3624 Consumer.addKeywordResult("decltype"); 3625 Consumer.addKeywordResult("thread_local"); 3626 } 3627 } 3628 3629 if (SemaRef.getLangOpts().GNUMode) 3630 Consumer.addKeywordResult("typeof"); 3631 } 3632 3633 if (CCC.WantCXXNamedCasts && SemaRef.getLangOpts().CPlusPlus) { 3634 Consumer.addKeywordResult("const_cast"); 3635 Consumer.addKeywordResult("dynamic_cast"); 3636 Consumer.addKeywordResult("reinterpret_cast"); 3637 Consumer.addKeywordResult("static_cast"); 3638 } 3639 3640 if (CCC.WantExpressionKeywords) { 3641 Consumer.addKeywordResult("sizeof"); 3642 if (SemaRef.getLangOpts().Bool || SemaRef.getLangOpts().CPlusPlus) { 3643 Consumer.addKeywordResult("false"); 3644 Consumer.addKeywordResult("true"); 3645 } 3646 3647 if (SemaRef.getLangOpts().CPlusPlus) { 3648 const char *CXXExprs[] = { 3649 "delete", "new", "operator", "throw", "typeid" 3650 }; 3651 const unsigned NumCXXExprs = sizeof(CXXExprs) / sizeof(CXXExprs[0]); 3652 for (unsigned I = 0; I != NumCXXExprs; ++I) 3653 Consumer.addKeywordResult(CXXExprs[I]); 3654 3655 if (isa<CXXMethodDecl>(SemaRef.CurContext) && 3656 cast<CXXMethodDecl>(SemaRef.CurContext)->isInstance()) 3657 Consumer.addKeywordResult("this"); 3658 3659 if (SemaRef.getLangOpts().CPlusPlus11) { 3660 Consumer.addKeywordResult("alignof"); 3661 Consumer.addKeywordResult("nullptr"); 3662 } 3663 } 3664 3665 if (SemaRef.getLangOpts().C11) { 3666 // FIXME: We should not suggest _Alignof if the alignof macro 3667 // is present. 3668 Consumer.addKeywordResult("_Alignof"); 3669 } 3670 } 3671 3672 if (CCC.WantRemainingKeywords) { 3673 if (SemaRef.getCurFunctionOrMethodDecl() || SemaRef.getCurBlock()) { 3674 // Statements. 3675 const char *CStmts[] = { 3676 "do", "else", "for", "goto", "if", "return", "switch", "while" }; 3677 const unsigned NumCStmts = sizeof(CStmts) / sizeof(CStmts[0]); 3678 for (unsigned I = 0; I != NumCStmts; ++I) 3679 Consumer.addKeywordResult(CStmts[I]); 3680 3681 if (SemaRef.getLangOpts().CPlusPlus) { 3682 Consumer.addKeywordResult("catch"); 3683 Consumer.addKeywordResult("try"); 3684 } 3685 3686 if (S && S->getBreakParent()) 3687 Consumer.addKeywordResult("break"); 3688 3689 if (S && S->getContinueParent()) 3690 Consumer.addKeywordResult("continue"); 3691 3692 if (!SemaRef.getCurFunction()->SwitchStack.empty()) { 3693 Consumer.addKeywordResult("case"); 3694 Consumer.addKeywordResult("default"); 3695 } 3696 } else { 3697 if (SemaRef.getLangOpts().CPlusPlus) { 3698 Consumer.addKeywordResult("namespace"); 3699 Consumer.addKeywordResult("template"); 3700 } 3701 3702 if (S && S->isClassScope()) { 3703 Consumer.addKeywordResult("explicit"); 3704 Consumer.addKeywordResult("friend"); 3705 Consumer.addKeywordResult("mutable"); 3706 Consumer.addKeywordResult("private"); 3707 Consumer.addKeywordResult("protected"); 3708 Consumer.addKeywordResult("public"); 3709 Consumer.addKeywordResult("virtual"); 3710 } 3711 } 3712 3713 if (SemaRef.getLangOpts().CPlusPlus) { 3714 Consumer.addKeywordResult("using"); 3715 3716 if (SemaRef.getLangOpts().CPlusPlus11) 3717 Consumer.addKeywordResult("static_assert"); 3718 } 3719 } 3720 } 3721 3722 static bool isCandidateViable(CorrectionCandidateCallback &CCC, 3723 TypoCorrection &Candidate) { 3724 Candidate.setCallbackDistance(CCC.RankCandidate(Candidate)); 3725 return Candidate.getEditDistance(false) != TypoCorrection::InvalidDistance; 3726 } 3727 3728 /// \brief Try to "correct" a typo in the source code by finding 3729 /// visible declarations whose names are similar to the name that was 3730 /// present in the source code. 3731 /// 3732 /// \param TypoName the \c DeclarationNameInfo structure that contains 3733 /// the name that was present in the source code along with its location. 3734 /// 3735 /// \param LookupKind the name-lookup criteria used to search for the name. 3736 /// 3737 /// \param S the scope in which name lookup occurs. 3738 /// 3739 /// \param SS the nested-name-specifier that precedes the name we're 3740 /// looking for, if present. 3741 /// 3742 /// \param CCC A CorrectionCandidateCallback object that provides further 3743 /// validation of typo correction candidates. It also provides flags for 3744 /// determining the set of keywords permitted. 3745 /// 3746 /// \param MemberContext if non-NULL, the context in which to look for 3747 /// a member access expression. 3748 /// 3749 /// \param EnteringContext whether we're entering the context described by 3750 /// the nested-name-specifier SS. 3751 /// 3752 /// \param OPT when non-NULL, the search for visible declarations will 3753 /// also walk the protocols in the qualified interfaces of \p OPT. 3754 /// 3755 /// \returns a \c TypoCorrection containing the corrected name if the typo 3756 /// along with information such as the \c NamedDecl where the corrected name 3757 /// was declared, and any additional \c NestedNameSpecifier needed to access 3758 /// it (C++ only). The \c TypoCorrection is empty if there is no correction. 3759 TypoCorrection Sema::CorrectTypo(const DeclarationNameInfo &TypoName, 3760 Sema::LookupNameKind LookupKind, 3761 Scope *S, CXXScopeSpec *SS, 3762 CorrectionCandidateCallback &CCC, 3763 DeclContext *MemberContext, 3764 bool EnteringContext, 3765 const ObjCObjectPointerType *OPT) { 3766 if (Diags.hasFatalErrorOccurred() || !getLangOpts().SpellChecking) 3767 return TypoCorrection(); 3768 3769 // In Microsoft mode, don't perform typo correction in a template member 3770 // function dependent context because it interferes with the "lookup into 3771 // dependent bases of class templates" feature. 3772 if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() && 3773 isa<CXXMethodDecl>(CurContext)) 3774 return TypoCorrection(); 3775 3776 // We only attempt to correct typos for identifiers. 3777 IdentifierInfo *Typo = TypoName.getName().getAsIdentifierInfo(); 3778 if (!Typo) 3779 return TypoCorrection(); 3780 3781 // If the scope specifier itself was invalid, don't try to correct 3782 // typos. 3783 if (SS && SS->isInvalid()) 3784 return TypoCorrection(); 3785 3786 // Never try to correct typos during template deduction or 3787 // instantiation. 3788 if (!ActiveTemplateInstantiations.empty()) 3789 return TypoCorrection(); 3790 3791 // Don't try to correct 'super'. 3792 if (S && S->isInObjcMethodScope() && Typo == getSuperIdentifier()) 3793 return TypoCorrection(); 3794 3795 NamespaceSpecifierSet Namespaces(Context, CurContext, SS); 3796 3797 TypoCorrectionConsumer Consumer(*this, Typo); 3798 3799 // If a callback object considers an empty typo correction candidate to be 3800 // viable, assume it does not do any actual validation of the candidates. 3801 TypoCorrection EmptyCorrection; 3802 bool ValidatingCallback = !isCandidateViable(CCC, EmptyCorrection); 3803 3804 // Perform name lookup to find visible, similarly-named entities. 3805 bool IsUnqualifiedLookup = false; 3806 DeclContext *QualifiedDC = MemberContext; 3807 if (MemberContext) { 3808 LookupVisibleDecls(MemberContext, LookupKind, Consumer); 3809 3810 // Look in qualified interfaces. 3811 if (OPT) { 3812 for (ObjCObjectPointerType::qual_iterator 3813 I = OPT->qual_begin(), E = OPT->qual_end(); 3814 I != E; ++I) 3815 LookupVisibleDecls(*I, LookupKind, Consumer); 3816 } 3817 } else if (SS && SS->isSet()) { 3818 QualifiedDC = computeDeclContext(*SS, EnteringContext); 3819 if (!QualifiedDC) 3820 return TypoCorrection(); 3821 3822 // Provide a stop gap for files that are just seriously broken. Trying 3823 // to correct all typos can turn into a HUGE performance penalty, causing 3824 // some files to take minutes to get rejected by the parser. 3825 if (TyposCorrected + UnqualifiedTyposCorrected.size() >= 20) 3826 return TypoCorrection(); 3827 ++TyposCorrected; 3828 3829 LookupVisibleDecls(QualifiedDC, LookupKind, Consumer); 3830 } else { 3831 IsUnqualifiedLookup = true; 3832 UnqualifiedTyposCorrectedMap::iterator Cached 3833 = UnqualifiedTyposCorrected.find(Typo); 3834 if (Cached != UnqualifiedTyposCorrected.end()) { 3835 // Add the cached value, unless it's a keyword or fails validation. In the 3836 // keyword case, we'll end up adding the keyword below. 3837 if (Cached->second) { 3838 if (!Cached->second.isKeyword() && 3839 isCandidateViable(CCC, Cached->second)) 3840 Consumer.addCorrection(Cached->second); 3841 } else { 3842 // Only honor no-correction cache hits when a callback that will validate 3843 // correction candidates is not being used. 3844 if (!ValidatingCallback) 3845 return TypoCorrection(); 3846 } 3847 } 3848 if (Cached == UnqualifiedTyposCorrected.end()) { 3849 // Provide a stop gap for files that are just seriously broken. Trying 3850 // to correct all typos can turn into a HUGE performance penalty, causing 3851 // some files to take minutes to get rejected by the parser. 3852 if (TyposCorrected + UnqualifiedTyposCorrected.size() >= 20) 3853 return TypoCorrection(); 3854 } 3855 } 3856 3857 // Determine whether we are going to search in the various namespaces for 3858 // corrections. 3859 bool SearchNamespaces 3860 = getLangOpts().CPlusPlus && 3861 (IsUnqualifiedLookup || (QualifiedDC && QualifiedDC->isNamespace())); 3862 // In a few cases we *only* want to search for corrections bases on just 3863 // adding or changing the nested name specifier. 3864 bool AllowOnlyNNSChanges = Typo->getName().size() < 3; 3865 3866 if (IsUnqualifiedLookup || SearchNamespaces) { 3867 // For unqualified lookup, look through all of the names that we have 3868 // seen in this translation unit. 3869 // FIXME: Re-add the ability to skip very unlikely potential corrections. 3870 for (IdentifierTable::iterator I = Context.Idents.begin(), 3871 IEnd = Context.Idents.end(); 3872 I != IEnd; ++I) 3873 Consumer.FoundName(I->getKey()); 3874 3875 // Walk through identifiers in external identifier sources. 3876 // FIXME: Re-add the ability to skip very unlikely potential corrections. 3877 if (IdentifierInfoLookup *External 3878 = Context.Idents.getExternalIdentifierLookup()) { 3879 OwningPtr<IdentifierIterator> Iter(External->getIdentifiers()); 3880 do { 3881 StringRef Name = Iter->Next(); 3882 if (Name.empty()) 3883 break; 3884 3885 Consumer.FoundName(Name); 3886 } while (true); 3887 } 3888 } 3889 3890 AddKeywordsToConsumer(*this, Consumer, S, CCC, SS && SS->isNotEmpty()); 3891 3892 // If we haven't found anything, we're done. 3893 if (Consumer.empty()) { 3894 // If this was an unqualified lookup, note that no correction was found. 3895 if (IsUnqualifiedLookup) 3896 (void)UnqualifiedTyposCorrected[Typo]; 3897 3898 return TypoCorrection(); 3899 } 3900 3901 // Make sure the best edit distance (prior to adding any namespace qualifiers) 3902 // is not more that about a third of the length of the typo's identifier. 3903 unsigned ED = Consumer.getBestEditDistance(true); 3904 if (ED > 0 && Typo->getName().size() / ED < 3) { 3905 // If this was an unqualified lookup, note that no correction was found. 3906 if (IsUnqualifiedLookup) 3907 (void)UnqualifiedTyposCorrected[Typo]; 3908 3909 return TypoCorrection(); 3910 } 3911 3912 // Build the NestedNameSpecifiers for the KnownNamespaces, if we're going 3913 // to search those namespaces. 3914 if (SearchNamespaces) { 3915 // Load any externally-known namespaces. 3916 if (ExternalSource && !LoadedExternalKnownNamespaces) { 3917 SmallVector<NamespaceDecl *, 4> ExternalKnownNamespaces; 3918 LoadedExternalKnownNamespaces = true; 3919 ExternalSource->ReadKnownNamespaces(ExternalKnownNamespaces); 3920 for (unsigned I = 0, N = ExternalKnownNamespaces.size(); I != N; ++I) 3921 KnownNamespaces[ExternalKnownNamespaces[I]] = true; 3922 } 3923 3924 for (llvm::MapVector<NamespaceDecl*, bool>::iterator 3925 KNI = KnownNamespaces.begin(), 3926 KNIEnd = KnownNamespaces.end(); 3927 KNI != KNIEnd; ++KNI) 3928 Namespaces.AddNamespace(KNI->first); 3929 } 3930 3931 // Weed out any names that could not be found by name lookup or, if a 3932 // CorrectionCandidateCallback object was provided, failed validation. 3933 SmallVector<TypoCorrection, 16> QualifiedResults; 3934 LookupResult TmpRes(*this, TypoName, LookupKind); 3935 TmpRes.suppressDiagnostics(); 3936 while (!Consumer.empty()) { 3937 TypoCorrectionConsumer::distance_iterator DI = Consumer.begin(); 3938 unsigned ED = DI->first; 3939 for (TypoCorrectionConsumer::result_iterator I = DI->second.begin(), 3940 IEnd = DI->second.end(); 3941 I != IEnd; /* Increment in loop. */) { 3942 // If we only want nested name specifier corrections, ignore potential 3943 // corrections that have a different base identifier from the typo. 3944 if (AllowOnlyNNSChanges && 3945 I->second.front().getCorrectionAsIdentifierInfo() != Typo) { 3946 TypoCorrectionConsumer::result_iterator Prev = I; 3947 ++I; 3948 DI->second.erase(Prev); 3949 continue; 3950 } 3951 3952 // If the item already has been looked up or is a keyword, keep it. 3953 // If a validator callback object was given, drop the correction 3954 // unless it passes validation. 3955 bool Viable = false; 3956 for (TypoResultList::iterator RI = I->second.begin(); 3957 RI != I->second.end(); /* Increment in loop. */) { 3958 TypoResultList::iterator Prev = RI; 3959 ++RI; 3960 if (Prev->isResolved()) { 3961 if (!isCandidateViable(CCC, *Prev)) 3962 RI = I->second.erase(Prev); 3963 else 3964 Viable = true; 3965 } 3966 } 3967 if (Viable || I->second.empty()) { 3968 TypoCorrectionConsumer::result_iterator Prev = I; 3969 ++I; 3970 if (!Viable) 3971 DI->second.erase(Prev); 3972 continue; 3973 } 3974 assert(I->second.size() == 1 && "Expected a single unresolved candidate"); 3975 3976 // Perform name lookup on this name. 3977 TypoCorrection &Candidate = I->second.front(); 3978 IdentifierInfo *Name = Candidate.getCorrectionAsIdentifierInfo(); 3979 LookupPotentialTypoResult(*this, TmpRes, Name, S, SS, MemberContext, 3980 EnteringContext, CCC.IsObjCIvarLookup); 3981 3982 switch (TmpRes.getResultKind()) { 3983 case LookupResult::NotFound: 3984 case LookupResult::NotFoundInCurrentInstantiation: 3985 case LookupResult::FoundUnresolvedValue: 3986 QualifiedResults.push_back(Candidate); 3987 // We didn't find this name in our scope, or didn't like what we found; 3988 // ignore it. 3989 { 3990 TypoCorrectionConsumer::result_iterator Next = I; 3991 ++Next; 3992 DI->second.erase(I); 3993 I = Next; 3994 } 3995 break; 3996 3997 case LookupResult::Ambiguous: 3998 // We don't deal with ambiguities. 3999 return TypoCorrection(); 4000 4001 case LookupResult::FoundOverloaded: { 4002 TypoCorrectionConsumer::result_iterator Prev = I; 4003 // Store all of the Decls for overloaded symbols 4004 for (LookupResult::iterator TRD = TmpRes.begin(), 4005 TRDEnd = TmpRes.end(); 4006 TRD != TRDEnd; ++TRD) 4007 Candidate.addCorrectionDecl(*TRD); 4008 ++I; 4009 if (!isCandidateViable(CCC, Candidate)) 4010 DI->second.erase(Prev); 4011 break; 4012 } 4013 4014 case LookupResult::Found: { 4015 TypoCorrectionConsumer::result_iterator Prev = I; 4016 Candidate.setCorrectionDecl(TmpRes.getAsSingle<NamedDecl>()); 4017 ++I; 4018 if (!isCandidateViable(CCC, Candidate)) 4019 DI->second.erase(Prev); 4020 break; 4021 } 4022 4023 } 4024 } 4025 4026 if (DI->second.empty()) 4027 Consumer.erase(DI); 4028 else if (!getLangOpts().CPlusPlus || QualifiedResults.empty() || !ED) 4029 // If there are results in the closest possible bucket, stop 4030 break; 4031 4032 // Only perform the qualified lookups for C++ 4033 if (SearchNamespaces) { 4034 TmpRes.suppressDiagnostics(); 4035 for (SmallVector<TypoCorrection, 4036 16>::iterator QRI = QualifiedResults.begin(), 4037 QRIEnd = QualifiedResults.end(); 4038 QRI != QRIEnd; ++QRI) { 4039 for (NamespaceSpecifierSet::iterator NI = Namespaces.begin(), 4040 NIEnd = Namespaces.end(); 4041 NI != NIEnd; ++NI) { 4042 DeclContext *Ctx = NI->DeclCtx; 4043 4044 // FIXME: Stop searching once the namespaces are too far away to create 4045 // acceptable corrections for this identifier (since the namespaces 4046 // are sorted in ascending order by edit distance). 4047 4048 TmpRes.clear(); 4049 TmpRes.setLookupName(QRI->getCorrectionAsIdentifierInfo()); 4050 if (!LookupQualifiedName(TmpRes, Ctx)) continue; 4051 4052 // Any corrections added below will be validated in subsequent 4053 // iterations of the main while() loop over the Consumer's contents. 4054 switch (TmpRes.getResultKind()) { 4055 case LookupResult::Found: { 4056 TypoCorrection TC(*QRI); 4057 TC.setCorrectionDecl(TmpRes.getAsSingle<NamedDecl>()); 4058 TC.setCorrectionSpecifier(NI->NameSpecifier); 4059 TC.setQualifierDistance(NI->EditDistance); 4060 Consumer.addCorrection(TC); 4061 break; 4062 } 4063 case LookupResult::FoundOverloaded: { 4064 TypoCorrection TC(*QRI); 4065 TC.setCorrectionSpecifier(NI->NameSpecifier); 4066 TC.setQualifierDistance(NI->EditDistance); 4067 for (LookupResult::iterator TRD = TmpRes.begin(), 4068 TRDEnd = TmpRes.end(); 4069 TRD != TRDEnd; ++TRD) 4070 TC.addCorrectionDecl(*TRD); 4071 Consumer.addCorrection(TC); 4072 break; 4073 } 4074 case LookupResult::NotFound: 4075 case LookupResult::NotFoundInCurrentInstantiation: 4076 case LookupResult::Ambiguous: 4077 case LookupResult::FoundUnresolvedValue: 4078 break; 4079 } 4080 } 4081 } 4082 } 4083 4084 QualifiedResults.clear(); 4085 } 4086 4087 // No corrections remain... 4088 if (Consumer.empty()) return TypoCorrection(); 4089 4090 TypoResultsMap &BestResults = Consumer.getBestResults(); 4091 ED = Consumer.getBestEditDistance(true); 4092 4093 if (!AllowOnlyNNSChanges && ED > 0 && Typo->getName().size() / ED < 3) { 4094 // If this was an unqualified lookup and we believe the callback 4095 // object wouldn't have filtered out possible corrections, note 4096 // that no correction was found. 4097 if (IsUnqualifiedLookup && !ValidatingCallback) 4098 (void)UnqualifiedTyposCorrected[Typo]; 4099 4100 return TypoCorrection(); 4101 } 4102 4103 // If only a single name remains, return that result. 4104 if (BestResults.size() == 1) { 4105 const TypoResultList &CorrectionList = BestResults.begin()->second; 4106 const TypoCorrection &Result = CorrectionList.front(); 4107 if (CorrectionList.size() != 1) return TypoCorrection(); 4108 4109 // Don't correct to a keyword that's the same as the typo; the keyword 4110 // wasn't actually in scope. 4111 if (ED == 0 && Result.isKeyword()) return TypoCorrection(); 4112 4113 // Record the correction for unqualified lookup. 4114 if (IsUnqualifiedLookup) 4115 UnqualifiedTyposCorrected[Typo] = Result; 4116 4117 TypoCorrection TC = Result; 4118 TC.setCorrectionRange(SS, TypoName); 4119 return TC; 4120 } 4121 else if (BestResults.size() > 1 4122 // Ugly hack equivalent to CTC == CTC_ObjCMessageReceiver; 4123 // WantObjCSuper is only true for CTC_ObjCMessageReceiver and for 4124 // some instances of CTC_Unknown, while WantRemainingKeywords is true 4125 // for CTC_Unknown but not for CTC_ObjCMessageReceiver. 4126 && CCC.WantObjCSuper && !CCC.WantRemainingKeywords 4127 && BestResults["super"].front().isKeyword()) { 4128 // Prefer 'super' when we're completing in a message-receiver 4129 // context. 4130 4131 // Don't correct to a keyword that's the same as the typo; the keyword 4132 // wasn't actually in scope. 4133 if (ED == 0) return TypoCorrection(); 4134 4135 // Record the correction for unqualified lookup. 4136 if (IsUnqualifiedLookup) 4137 UnqualifiedTyposCorrected[Typo] = BestResults["super"].front(); 4138 4139 TypoCorrection TC = BestResults["super"].front(); 4140 TC.setCorrectionRange(SS, TypoName); 4141 return TC; 4142 } 4143 4144 // If this was an unqualified lookup and we believe the callback object did 4145 // not filter out possible corrections, note that no correction was found. 4146 if (IsUnqualifiedLookup && !ValidatingCallback) 4147 (void)UnqualifiedTyposCorrected[Typo]; 4148 4149 return TypoCorrection(); 4150 } 4151 4152 void TypoCorrection::addCorrectionDecl(NamedDecl *CDecl) { 4153 if (!CDecl) return; 4154 4155 if (isKeyword()) 4156 CorrectionDecls.clear(); 4157 4158 CorrectionDecls.push_back(CDecl->getUnderlyingDecl()); 4159 4160 if (!CorrectionName) 4161 CorrectionName = CDecl->getDeclName(); 4162 } 4163 4164 std::string TypoCorrection::getAsString(const LangOptions &LO) const { 4165 if (CorrectionNameSpec) { 4166 std::string tmpBuffer; 4167 llvm::raw_string_ostream PrefixOStream(tmpBuffer); 4168 CorrectionNameSpec->print(PrefixOStream, PrintingPolicy(LO)); 4169 CorrectionName.printName(PrefixOStream); 4170 return PrefixOStream.str(); 4171 } 4172 4173 return CorrectionName.getAsString(); 4174 } 4175 4176 bool CorrectionCandidateCallback::ValidateCandidate(const TypoCorrection &candidate) { 4177 if (!candidate.isResolved()) 4178 return true; 4179 4180 if (candidate.isKeyword()) 4181 return WantTypeSpecifiers || WantExpressionKeywords || WantCXXNamedCasts || 4182 WantRemainingKeywords || WantObjCSuper; 4183 4184 for (TypoCorrection::const_decl_iterator CDecl = candidate.begin(), 4185 CDeclEnd = candidate.end(); 4186 CDecl != CDeclEnd; ++CDecl) { 4187 if (!isa<TypeDecl>(*CDecl)) 4188 return true; 4189 } 4190 4191 return WantTypeSpecifiers; 4192 } 4193