From 6341ceedc5f36b51633392c6cdef567ac2877060 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 16 Mar 2011 17:42:23 +0000 Subject: [PATCH] Allow function calls to dereferenced member pointers of pointer-to-function type. Fixes . llvm-svn: 127739 --- clang/lib/Sema/SemaExpr.cpp | 3 --- clang/test/SemaCXX/member-pointers-2.cpp | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 7ef3348bdc2c..c208ed2fcab3 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/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/clang/test/SemaCXX/member-pointers-2.cpp b/clang/test/SemaCXX/member-pointers-2.cpp index 4b3b82c02975..6c39282e5a31 100644 --- a/clang/test/SemaCXX/member-pointers-2.cpp +++ b/clang/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))(); + } +}