diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-02-04 21:23:32 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-02-04 21:23:32 +0000 |
commit | 18f8ff62a3adb44da0f52133e259439a882d5618 (patch) | |
tree | ef8ec87a9be1f0642d0299d7dd10f68cfc55a388 /clang/test | |
parent | ed9309ef46f317668740309a5e0c3594bf34597d (diff) | |
download | bcm5719-llvm-18f8ff62a3adb44da0f52133e259439a882d5618.tar.gz bcm5719-llvm-18f8ff62a3adb44da0f52133e259439a882d5618.zip |
Implement taking address of member functions, including overloaded ones.
llvm-svn: 63779
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/member-pointer.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/clang/test/SemaCXX/member-pointer.cpp b/clang/test/SemaCXX/member-pointer.cpp index 450fdba367f..64cfc68c012 100644 --- a/clang/test/SemaCXX/member-pointer.cpp +++ b/clang/test/SemaCXX/member-pointer.cpp @@ -41,10 +41,19 @@ void f() { pdi1 = pdid; // expected-error {{incompatible type assigning 'int struct D::*', expected 'int struct A::*'}} } -struct HasMembers +struct TheBase +{ + void d(); +}; + +struct HasMembers : TheBase { int i; void f(); + + void g(); + void g(int); + static void g(double); }; namespace Fake @@ -54,9 +63,19 @@ namespace Fake } void g() { + HasMembers hm; + int HasMembers::*pmi = &HasMembers::i; int *pni = &Fake::i; + int *pmii = &hm.i; - // FIXME: Test the member function, too. + void (HasMembers::*pmf)() = &HasMembers::f; void (*pnf)() = &Fake::f; + &hm.f; // expected-error {{address expression must be an lvalue or a function designator}} + + void (HasMembers::*pmgv)() = &HasMembers::g; + void (HasMembers::*pmgi)(int) = &HasMembers::g; + void (*pmgd)(double) = &HasMembers::g; + + void (HasMembers::*pmd)() = &HasMembers::d; } |