diff options
| author | Ed Schouten <ed@FreeBSD.org> | 2009-07-04 13:58:54 +0000 | 
|---|---|---|
| committer | Ed Schouten <ed@FreeBSD.org> | 2009-07-04 13:58:54 +0000 | 
| commit | 5362a71c02e7d448a8ce98cf00c47e353fba5d04 (patch) | |
| tree | 8ddfe382e1c6d590dc240e76f7cd45cea5c78e24 /lib/Sema/SemaLookup.cpp | |
| parent | 4ebdf5c4f587daef4e0be499802eac3a7a49bf2f (diff) | |
Notes
Diffstat (limited to 'lib/Sema/SemaLookup.cpp')
| -rw-r--r-- | lib/Sema/SemaLookup.cpp | 42 | 
1 files changed, 24 insertions, 18 deletions
diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index cc9e783f6166..6f2fc5e0c434 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -65,7 +65,7 @@ void AddNamespaceUsingDirectives(ASTContext &Context,                                   NamespaceSet &Visited) {    DeclContext::udir_iterator I, End; -  for (llvm::tie(I, End) = NS->getUsingDirectives(Context); I !=End; ++I) { +  for (llvm::tie(I, End) = NS->getUsingDirectives(); I !=End; ++I) {      UDirs.push_back(*I);      std::push_heap(UDirs.begin(), UDirs.end(), UsingDirAncestorCompare());      NamespaceDecl *Nominated = (*I)->getNominatedNamespace(); @@ -609,7 +609,7 @@ CppNamespaceLookup(ASTContext &Context, DeclContext *NS,    // Perform qualified name lookup into the LookupCtx.    DeclContext::lookup_iterator I, E; -  for (llvm::tie(I, E) = NS->lookup(Context, Name); I != E; ++I) +  for (llvm::tie(I, E) = NS->lookup(Name); I != E; ++I)      if (Sema::isAcceptableLookupResult(*I, NameKind, IDNS)) {        Results.push_back(Sema::LookupResult::CreateLookupResult(Context, I, E));        break; @@ -903,7 +903,7 @@ Sema::LookupName(Scope *S, DeclarationName Name, LookupNameKind NameKind,              continue;          } -        if ((*I)->getAttr<OverloadableAttr>(Context)) { +        if ((*I)->getAttr<OverloadableAttr>()) {            // If this declaration has the "overloadable" attribute, we            // might have a set of overloaded functions. @@ -1005,7 +1005,7 @@ Sema::LookupQualifiedName(DeclContext *LookupCtx, DeclarationName Name,    // Perform qualified name lookup into the LookupCtx.    DeclContext::lookup_iterator I, E; -  for (llvm::tie(I, E) = LookupCtx->lookup(Context, Name); I != E; ++I) +  for (llvm::tie(I, E) = LookupCtx->lookup(Name); I != E; ++I)      if (isAcceptableLookupResult(*I, NameKind, IDNS))        return LookupResult::CreateLookupResult(Context, I, E); @@ -1148,7 +1148,7 @@ Sema::LookupParsedName(Scope *S, const CXXScopeSpec *SS,        // (C++0x [temp.dep.type]).        unsigned IDNS = getIdentifierNamespacesFromLookupNameKind(NameKind, true);        DeclContext::lookup_iterator I, E; -      for (llvm::tie(I, E) = Current->lookup(Context, Name); I != E; ++I) +      for (llvm::tie(I, E) = Current->lookup(Name); I != E; ++I)          if (isAcceptableLookupResult(*I, NameKind, IDNS))            return LookupResult::CreateLookupResult(Context, I, E);      } @@ -1604,9 +1604,17 @@ void Sema::LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,    for (LookupResult::iterator Op = Operators.begin(), OpEnd = Operators.end();         Op != OpEnd; ++Op) { -    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*Op)) +    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*Op)) {        if (IsAcceptableNonMemberOperatorCandidate(FD, T1, T2, Context))          Functions.insert(FD); // FIXME: canonical FD +    } else if (FunctionTemplateDecl *FunTmpl  +                 = dyn_cast<FunctionTemplateDecl>(*Op)) { +      // FIXME: friend operators? +      // FIXME: do we need to check IsAcceptableNonMemberOperatorCandidate,  +      // later? +      if (!FunTmpl->getDeclContext()->isRecord()) +        Functions.insert(FunTmpl); +    }    }  } @@ -1648,25 +1656,23 @@ void Sema::ArgumentDependentLookup(DeclarationName Name,      //        namespaces even if they are not visible during an ordinary      //        lookup (11.4).      DeclContext::lookup_iterator I, E; -    for (llvm::tie(I, E) = (*NS)->lookup(Context, Name); I != E; ++I) { -      FunctionDecl *Func = dyn_cast<FunctionDecl>(*I); -      if (!Func) -        break; - -      Functions.insert(Func); +    for (llvm::tie(I, E) = (*NS)->lookup(Name); I != E; ++I) { +      if (FunctionDecl *Func = dyn_cast<FunctionDecl>(*I)) +        Functions.insert(Func); +      else if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(*I)) +        Functions.insert(FunTmpl);      }    }    if (GlobalScope) {      DeclContext::lookup_iterator I, E;      for (llvm::tie(I, E)  -           = Context.getTranslationUnitDecl()->lookup(Context, Name);  +           = Context.getTranslationUnitDecl()->lookup(Name);            I != E; ++I) { -      FunctionDecl *Func = dyn_cast<FunctionDecl>(*I); -      if (!Func) -        break; -       -      Functions.insert(Func); +      if (FunctionDecl *Func = dyn_cast<FunctionDecl>(*I)) +        Functions.insert(Func); +      else if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(*I)) +        Functions.insert(FunTmpl);      }    }  }  | 
