| // { dg-do run } |
| // Test rtti hint flags |
| // Copyright (C) 2000, 2003 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, std::type_info const &info) |
| { |
| abi::__vmi_class_type_info const *ptr = |
| dynamic_cast <abi::__vmi_class_type_info const *> (&info); |
| if (!ptr) |
| return 0; |
| if (ptr->__flags != flags) |
| return 0; |
| return 1; |
| } |
| |
| int main () |
| { |
| if (! expect (0, typeid (C1))) |
| return 1; |
| if (! expect (2, typeid (D1))) |
| return 2; |
| if (! expect (1, typeid (E1))) |
| return 3; |
| if (! expect (1, typeid (E2))) |
| return 4; |
| if (! expect (3, typeid (F1))) |
| return 5; |
| |
| if (!expect (0, typeid (P1))) |
| return 6; |
| if (!expect (0, typeid (P2))) |
| return 7; |
| |
| return 0; |
| } |
| |
| #else |
| int main () |
| { |
| return 0; |
| } |
| #endif |