* g++.old-deja/g++.abi/vmihint.C: New test.
authorNathan Sidwell <nathan@codesourcery.com>
Thu, 6 Apr 2000 14:12:34 +0000 (14:12 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 6 Apr 2000 14:12:34 +0000 (14:12 +0000)
From-SVN: r32970

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

index 53f510087a8ce12f02a86a096e849360754eb0b9..4b9eb7058177c769b80b11e9f4667f3197774042 100644 (file)
@@ -1,3 +1,7 @@
+2000-04-06  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * g++.old-deja/g++.abi/vmihint.C: New test.
+
 2000-04-06  Neil Booth  <NeilB@earthling.net>
 
        * cpp-ifparen.c, cpp-missingop.c, cpp-missingparen.c,
diff --git a/gcc/testsuite/g++.old-deja/g++.abi/vmihint.C b/gcc/testsuite/g++.old-deja/g++.abi/vmihint.C
new file mode 100644 (file)
index 0000000..672af2c
--- /dev/null
@@ -0,0 +1,70 @@
+// Test rtti hint flags
+// Copyright (C) 2000 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 3 Apr 2000 <nathan@nathan@codesourcery.com>
+
+#include <typeinfo>
+
+#if defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
+#include <cxxabi.h>
+
+struct A {int m;};
+struct A1vA : virtual A {int m;};
+struct A2vA : virtual A {int m;};
+struct A1A : A {int m;};
+struct A2A : A {int m;};
+struct B {int m;};
+
+struct C1 : B, virtual A {int m;};
+
+struct D1 : A1vA, A2vA {int m;};
+
+struct E1 : A1A, A2A {int m;};
+
+struct E2 : A1A, A2vA {int m;};
+
+struct F1 : A1A, A1vA, A2vA {int m;};
+
+struct P1 : protected A {int m;};
+
+struct P2 : B, P1 {int m;};
+
+using namespace abi;
+
+int expect (int flags, type_info const &info)
+{
+  __vmi_class_type_info const *ptr =
+      dynamic_cast <__vmi_class_type_info const *> (&info);
+  if (!ptr)
+    return 0;
+  if (ptr->details != flags)
+    return 0;
+  return 1;
+}
+
+int main ()
+{
+  if (! expect (0 | 8, typeid (C1)))
+    return 1;
+  if (! expect (2 | 8, typeid (D1)))
+    return 2;
+  if (! expect (1 | 8, typeid (E1)))
+    return 3;
+  if (! expect (1 | 8, typeid (E2)))
+    return 4;
+  if (! expect (3 | 8, typeid (F1)))
+    return 5;
+  
+  if (!expect (4, typeid (P1)))
+    return 6;
+  if (!expect (12, typeid (P2)))
+    return 7;
+  
+  return 0;
+}
+
+#else
+int main ()
+{
+  return 0;
+}
+#endif