]> granicus.if.org Git - clang/commitdiff
Handle MemberExprs in ResolveAddressOfOverloadedFunction.
authorAnders Carlsson <andersca@mac.com>
Wed, 7 Oct 2009 22:26:29 +0000 (22:26 +0000)
committerAnders Carlsson <andersca@mac.com>
Wed, 7 Oct 2009 22:26:29 +0000 (22:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83495 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaOverload.cpp
test/SemaCXX/addr-of-overloaded-function.cpp

index e7cd4fb5757811483ec9679db9617ed574d11a7b..4de8366816db9cf572b998e6eba8fdc88aa6a39f 100644 (file)
@@ -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,
index c2a6b50118acfd6f9f894133523e0ce4ff29c15d..80ea02bafd41223a2b9ea541624f38510987420d 100644 (file)
@@ -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 *);
+};