From: Douglas Gregor Date: Wed, 16 Mar 2011 17:42:23 +0000 (+0000) Subject: Allow function calls to dereferenced member pointers of X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eed5ddc25539e14de11888ec69007217e777c02a;p=clang Allow function calls to dereferenced member pointers of pointer-to-function type. Fixes . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127739 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 7ef3348bdc..c208ed2fca 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -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()); } } } diff --git a/test/SemaCXX/member-pointers-2.cpp b/test/SemaCXX/member-pointers-2.cpp index 4b3b82c029..6c39282e5a 100644 --- a/test/SemaCXX/member-pointers-2.cpp +++ b/test/SemaCXX/member-pointers-2.cpp @@ -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))(); + } +}