]> granicus.if.org Git - clang/commitdiff
Allow function calls to dereferenced member pointers of
authorDouglas Gregor <dgregor@apple.com>
Wed, 16 Mar 2011 17:42:23 +0000 (17:42 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 16 Mar 2011 17:42:23 +0000 (17:42 +0000)
pointer-to-function type. Fixes <rdar://problem/9065289>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127739 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/SemaCXX/member-pointers-2.cpp

index 7ef3348bdc2cfa6761eddbd025226ffa47cd3a90..c208ed2fcab3e4050abd56c3ea5c59f7afe5c797 100644 (file)
@@ -4574,9 +4574,6 @@ Sema::ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
 
           return MaybeBindToTemporary(TheCall);
         }
-        return ExprError(Diag(Fn->getLocStart(),
-                              diag::err_typecheck_call_not_function)
-                              << Fn->getType() << Fn->getSourceRange());
       }
     }
   }
index 4b3b82c0297539bd71176607abc85109c411662b..6c39282e5a31bbfa0b18b57a1285db4ff9e9b794 100644 (file)
@@ -34,3 +34,18 @@ void test0() {
   Test0 mytest;
   mytest.test();
 }
+
+namespace rdar9065289 {
+  typedef void (*FuncPtr)();
+  struct X0 { };
+
+  struct X1
+  {
+    X0* x0;
+    FuncPtr X0::*fptr;
+  };
+
+  void f(X1 p) {
+    (p.x0->*(p.fptr))();
+  }
+}