| /* Testcase for PR 40323. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-fno-early-inlining" } */ |
| /* { dg-add-options bind_pic_locally } */ |
| |
| extern void do_something (const char *, int); |
| |
| class Parent |
| { |
| private: |
| const char *data; |
| |
| public: |
| Parent (const char *d) : data(d) |
| {} |
| |
| int funcOne (int delim) const; |
| }; |
| |
| class AnotherParent |
| { |
| private: |
| double d; |
| public: |
| AnotherParent (void) : d(0) |
| {} |
| }; |
| |
| |
| class Child : public AnotherParent, Parent |
| { |
| private: |
| int zzz; |
| public: |
| Child (const char *d) : Parent(d) |
| {} |
| }; |
| |
| |
| int Parent::funcOne (int delim) const |
| { |
| int i; |
| for (i = 0; i < delim; i++) |
| do_something(data, i); |
| |
| return 1; |
| } |
| |
| int docalling (int (Child::* f)(int delim) const) |
| { |
| Child S ("muhehehe"); |
| |
| return (S.*f)(4); |
| } |
| |
| typedef int (Parent::* my_mp_type)(int delim); |
| |
| int main (int argc, char *argv[]) |
| { |
| int i; |
| int (Parent::* f)(int ) const; |
| int (Child::* g)(int ) const; |
| |
| f = &Parent::funcOne; |
| g = (int (Child::* )(int) const) f; |
| i = docalling (g); |
| return i; |
| } |