// { 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
