From: Anders Carlsson Date: Wed, 7 Oct 2009 22:26:29 +0000 (+0000) Subject: Handle MemberExprs in ResolveAddressOfOverloadedFunction. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e8f550439c09f3f044d651354e297518b553712;p=clang Handle MemberExprs in ResolveAddressOfOverloadedFunction. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83495 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index e7cd4fb575..4de8366816 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -4117,6 +4117,9 @@ Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType, if (DeclRefExpr *DR = dyn_cast(OvlExpr)) { Ovl = dyn_cast(DR->getDecl()); FunctionTemplate = dyn_cast(DR->getDecl()); + } else if (MemberExpr *ME = dyn_cast(OvlExpr)) { + Ovl = dyn_cast(ME->getMemberDecl()); + FunctionTemplate = dyn_cast(ME->getMemberDecl()); } // If there's no overloaded function declaration or function template, diff --git a/test/SemaCXX/addr-of-overloaded-function.cpp b/test/SemaCXX/addr-of-overloaded-function.cpp index c2a6b50118..80ea02bafd 100644 --- a/test/SemaCXX/addr-of-overloaded-function.cpp +++ b/test/SemaCXX/addr-of-overloaded-function.cpp @@ -44,3 +44,13 @@ void h_test() { ha(h1); hb(h1); } + +struct A { }; +void f(void (*)(A *)); + +struct B +{ + void g() { f(d); } + void d(void *); + static void d(A *); +};