summaryrefslogtreecommitdiff
path: root/gcc_arm/testsuite/g++.old-deja/g++.gb/sig31.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc_arm/testsuite/g++.old-deja/g++.gb/sig31.C')
-rwxr-xr-xgcc_arm/testsuite/g++.old-deja/g++.gb/sig31.C52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc_arm/testsuite/g++.old-deja/g++.gb/sig31.C b/gcc_arm/testsuite/g++.old-deja/g++.gb/sig31.C
new file mode 100755
index 0000000..90fa9e9
--- /dev/null
+++ b/gcc_arm/testsuite/g++.old-deja/g++.gb/sig31.C
@@ -0,0 +1,52 @@
+// Special g++ Options: -fhandle-signatures
+// GROUPS passed gb sigptr assignment sigsigtable
+// Test use of multiple signature-signature tables for same signature pair.
+
+extern "C"
+{
+ int printf (char *, ...);
+}
+
+class C
+{
+public:
+ virtual int f (void) { return 1; }
+ int g (int) { return 2; }
+};
+
+class D : public C
+{
+public:
+ int f (void) { return 3; }
+ int g (int) { return 4; }
+};
+
+signature S
+{
+ int f (void);
+ int g (int);
+};
+
+signature T
+{
+ int g (int);
+ int f (void);
+};
+
+int main (void)
+{
+ S * p = new C;
+ T * q = p;
+ T * r;
+
+ p = new D;
+ r = p;
+
+ if (q->f () == 1 && q->g (0) == 2
+ && r->f () == 3 && r->g (0) == 4)
+ printf ("PASS\n");
+ else
+ printf ("FAIL\n");
+
+ return 0;
+}