diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 0ad18cdb31..3ca8849e6c 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -589,10 +589,8 @@ bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, DeclarationName Name, Expr** Args, unsigned NumArgs, DeclContext *Ctx, bool AllowMissing, FunctionDecl *&Operator) { - // FIXME: Change to use LookupQualifiedName! - DeclContext::lookup_iterator Alloc, AllocEnd; - llvm::tie(Alloc, AllocEnd) = Ctx->lookup(Name); - if (Alloc == AllocEnd) { + LookupResult R = LookupQualifiedName(Ctx, Name, LookupOrdinaryName); + if (!R) { if (AllowMissing) return false; return Diag(StartLoc, diag::err_ovl_no_viable_function_in_call) @@ -600,7 +598,8 @@ bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, } OverloadCandidateSet Candidates; - for (; Alloc != AllocEnd; ++Alloc) { + for (LookupResult::iterator Alloc = R.begin(), AllocEnd = R.end(); + Alloc != AllocEnd; ++Alloc) { // Even member operator new/delete are implicitly treated as // static, so don't use AddMemberCandidate. if (FunctionDecl *Fn = dyn_cast(*Alloc)) { diff --git a/test/SemaCXX/new-delete.cpp b/test/SemaCXX/new-delete.cpp index 682ebd8243..c67a3f6539 100644 --- a/test/SemaCXX/new-delete.cpp +++ b/test/SemaCXX/new-delete.cpp @@ -38,8 +38,7 @@ void good_news() ia4 *pai = new (int[3][4]); pi = ::new int; U *pu = new (ps) U; - // FIXME: Inherited functions are not looked up currently. - //V *pv = new (ps) V; + V *pv = new (ps) V; pi = new (S(1.0f, 2)) int; @@ -133,7 +132,7 @@ void X4::release(X3 *x) { delete x; } -class X6 { +class X5 { public: void Destroy() const { delete this; } };