diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/g++.old-deja/g++.mike/pmf1.C | |
download | cbb-gcc-4.6.4-upstream.tar.bz2 cbb-gcc-4.6.4-upstream.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.mike/pmf1.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.mike/pmf1.C | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C new file mode 100644 index 000000000..15460ebaa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C @@ -0,0 +1,91 @@ +// { dg-do run } +// extern "C" printf(const char *, ...); + +class X +{ +public: + int a; + int f(int); +}; + +class Y +{ +public: + int b; + int c; + int g(int); +}; + +class MD : public X, public Y +{ +public: + int c; + int hf(int); +}; + +int MD::* pmi0 = &MD::a; +int MD::* pmi1 = &MD::b; +int MD::* pmi2 = &MD::c; + +int (MD::* pmf0)(int) = &MD::f; +int (MD::* pmf1)(int) = &MD::g; +int (MD::* pmf2)(int) = &MD::hf; + +int main() +{ + MD obj; + int fail = 0; + + obj.a = 1; + obj.b = 2; + obj.c = 3; + + obj.*pmi0 = 7; + obj.*pmi1 = 8; + obj.*pmi2 = 9; + + fail += (obj.*pmf0)(7); + fail += (obj.*pmf1)(8); + fail += (obj.*pmf2)(9); + +#if 0 + if (fail != 0) + printf ("failed %d tests\n", fail); + else + printf ("passed\n"); + + printf ("sizeof(X) = %d, sizeof(Y) = %d, sizeof(MD) = %d\n", + sizeof(X), sizeof(Y), sizeof(MD)); +#endif + return fail; +} + +int X::f(int v) +{ + if (v != a) + { +// printf ("failed in X::f, a = %d\n", a); + return 1; + } + return 0; +} + +int Y::g(int v) +{ + if (v != b) + { +// printf ("failed in Y::g, b = %d\n", b); + return 1; + } + return 0; +} + +int MD::hf(int v) +{ + if (v != c) + { +// printf ("failed in MD::hf, c = %d\n", c); + return 1; + } + return 0; +} |