diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.gb/sig21.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.gb/sig21.C | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig21.C b/gcc/testsuite/g++.old-deja/g++.gb/sig21.C new file mode 100644 index 00000000000..faad45b6403 --- /dev/null +++ b/gcc/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; +} |