[cfe-commits] r86040 - in /cfe/trunk: lib/CodeGen/CGCXX.cpp test/CodeGenCXX/ptr-to-member-function.cpp
Fariborz Jahanian
fjahanian at apple.com
Wed Nov 4 11:13:37 PST 2009
Author: fjahanian
Date: Wed Nov 4 13:13:37 2009
New Revision: 86040
URL: http://llvm.org/viewvc/llvm-project?rev=86040&view=rev
Log:
Add code gen for pointer-to-member function in
ctor's initializer. Fixes pr5178.
Modified:
cfe/trunk/lib/CodeGen/CGCXX.cpp
cfe/trunk/test/CodeGenCXX/ptr-to-member-function.cpp
Modified: cfe/trunk/lib/CodeGen/CGCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCXX.cpp?rev=86040&r1=86039&r2=86040&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGCXX.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGCXX.cpp Wed Nov 4 13:13:37 2009
@@ -1421,6 +1421,8 @@
if (FieldType->isReferenceType())
RHS = EmitReferenceBindingToExpr(RhsExpr, FieldType,
/*IsInitializer=*/true);
+ else if (FieldType->isMemberFunctionPointerType())
+ RHS = RValue::get(CGM.EmitConstantExpr(RhsExpr, FieldType, this));
else
RHS = RValue::get(EmitScalarExpr(RhsExpr, true));
EmitStoreThroughLValue(RHS, LHS, FieldType);
Modified: cfe/trunk/test/CodeGenCXX/ptr-to-member-function.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/ptr-to-member-function.cpp?rev=86040&r1=86039&r2=86040&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/ptr-to-member-function.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/ptr-to-member-function.cpp Wed Nov 4 13:13:37 2009
@@ -9,8 +9,14 @@
struct A {
int Ai;
+bool foo(int* arg) const;
};
+bool A::foo(int* arg) const {
+ printf("A::foo(%d)\n", *arg);
+ return true;
+}
+
struct B : public A {
void bf() { printf("B::bf called\n"); }
};
@@ -40,10 +46,22 @@
g(x);
}
+struct B1 {
+ bool (A::*pmf)(int*) const;
+
+ B1(int i) : pmf(&A::foo), im(i) {
+ ((A*)this->*pmf)(&im);
+ }
+
+ int im;
+};
+
int main()
{
X x;
test2(x);
+ B1 b = B1(1);
+ B1 c = B1(2);
}
// CHECK-LP64: call __ZN1XcvM1BFvvEEv
More information about the cfe-commits
mailing list