diff options
author | Anders Carlsson <andersca@mac.com> | 2009-10-07 22:26:29 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-10-07 22:26:29 +0000 |
commit | 6c966c458aba61e965f58b4739a255cc82049b69 (patch) | |
tree | 97c08b63cf397905652d5d05210a9bdb35750091 | |
parent | 37cf79e5a6c1e51a47cbc4010a579b7948bf8560 (diff) | |
download | bcm5719-llvm-6c966c458aba61e965f58b4739a255cc82049b69.tar.gz bcm5719-llvm-6c966c458aba61e965f58b4739a255cc82049b69.zip |
Handle MemberExprs in ResolveAddressOfOverloadedFunction.
llvm-svn: 83495
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 3 | ||||
-rw-r--r-- | clang/test/SemaCXX/addr-of-overloaded-function.cpp | 10 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index e7cd4fb5757..4de8366816d 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -4117,6 +4117,9 @@ Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType, if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(OvlExpr)) { Ovl = dyn_cast<OverloadedFunctionDecl>(DR->getDecl()); FunctionTemplate = dyn_cast<FunctionTemplateDecl>(DR->getDecl()); + } else if (MemberExpr *ME = dyn_cast<MemberExpr>(OvlExpr)) { + Ovl = dyn_cast<OverloadedFunctionDecl>(ME->getMemberDecl()); + FunctionTemplate = dyn_cast<FunctionTemplateDecl>(ME->getMemberDecl()); } // If there's no overloaded function declaration or function template, diff --git a/clang/test/SemaCXX/addr-of-overloaded-function.cpp b/clang/test/SemaCXX/addr-of-overloaded-function.cpp index c2a6b50118a..80ea02bafd4 100644 --- a/clang/test/SemaCXX/addr-of-overloaded-function.cpp +++ b/clang/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 *); +}; |