OSDN Git Service

New test case.
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Mar 2000 17:25:56 +0000 (17:25 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Mar 2000 17:25:56 +0000 (17:25 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32686 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/g++.old-deja/g++.abi/primary.C [new file with mode: 0644]

diff --git a/gcc/testsuite/g++.old-deja/g++.abi/primary.C b/gcc/testsuite/g++.old-deja/g++.abi/primary.C
new file mode 100644 (file)
index 0000000..3108fbd
--- /dev/null
@@ -0,0 +1,72 @@
+// Test to see that primary bases are selected correctly.
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+#if defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
+
+// S1 is a nearly-empty base.
+
+struct S1
+{
+  virtual void f ()
+  {
+  }
+};
+
+// S2 is a dynamic, but not nearly-empty, base.
+
+struct S2
+{
+  virtual void g ()
+  {
+  }
+    
+  int i;
+};
+
+// S1 should be the primary base.
+
+struct T1 : public S1, public S2
+{
+};
+
+// S2 should be the primary base.
+
+struct T2 : public S2, public S1
+{
+};
+
+// S2 should be the primary base.
+
+struct T3 : virtual public S1, public S2
+{
+};
+
+// S1 should be the primary base.
+
+struct T4 : virtual public S1, virtual public S2
+{
+};
+
+// Check that Y is the primary base for X.  Otherwise, return N.
+#define CHECK_PRIMARY_BASE(X, Y, N)            \
+  {                                            \
+    X x;                                       \
+    if ((void*) &x != (void *) (Y*) (&x))      \
+      return N;                                        \
+  }
+
+int main ()
+{
+  CHECK_PRIMARY_BASE (T1, S1, 1);
+  CHECK_PRIMARY_BASE (T2, S2, 2);
+  CHECK_PRIMARY_BASE (T3, S2, 3);
+  CHECK_PRIMARY_BASE (T4, S1, 4);
+}
+
+#else /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */
+
+int main () 
+{
+}
+
+#endif /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */