diff options
Diffstat (limited to 'gcc_arm/testsuite/g++.old-deja/g++.gb/sig21.C')
-rwxr-xr-x | gcc_arm/testsuite/g++.old-deja/g++.gb/sig21.C | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gcc_arm/testsuite/g++.old-deja/g++.gb/sig21.C b/gcc_arm/testsuite/g++.old-deja/g++.gb/sig21.C new file mode 100755 index 0000000..faad45b --- /dev/null +++ b/gcc_arm/testsuite/g++.old-deja/g++.gb/sig21.C @@ -0,0 +1,56 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment virtual +// Test assignment of objects of different types to same signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + virtual char * f (void) = 0; +}; + +class D : public C +{ +public: + char * f (void) { return "P"; } +}; + +class E +{ +public: + char * f (void) { return "AS"; } +}; + +class F : public C +{ +public: + char * f (void) { return "S"; } +}; + +signature S +{ + char * f (void); +}; + +int main (void) +{ + E a; + C * p = new D; + S * q; + + q = p; + printf ("%s", q->f ()); + + q = &a; + printf ("%s", q->f ()); + + p = new F; + q = p; + printf ("%s\n", q->f ()); + + return 0; +} |