OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.old-deja/] [g++.abi/] [vtable.C] - Blame information for rev 724

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 699 jeremybenn
// { dg-do run  }
2
// { dg-options "-fno-strict-aliasing" }
3
// Test various aspects of vtable layout.
4
// Origin: Mark Mitchell 
5
 
6
#if defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
7
 
8
struct S0
9
{
10
  virtual void h ()
11
  {
12
  }
13
 
14
  int k;
15
};
16
 
17
 
18
struct S1
19
{
20
  virtual void f ()
21
  {
22
  }
23
 
24
  int i;
25
};
26
 
27
struct S2 : virtual public S0
28
{
29
  virtual void g ()
30
  {
31
  }
32
 
33
  int j;
34
};
35
 
36
struct S3
37
{
38
  virtual void k ()
39
  {
40
  }
41
 
42
  int l;
43
};
44
 
45
struct S4 : public virtual S1, public S2, public S3
46
{
47
};
48
 
49
inline void* vtable (void *object)
50
{
51
  // The vptr is always the first part of the object.
52
  return * (void **) object;
53
}
54
 
55
int main ()
56
{
57
  // The vtable layout order for S4 should consist of S4's primary
58
  // vtable (shared with S2), followed by the vtable for S3 (because
59
  // it is a non-virtual base).  Then, these should be followed by the
60
  // the vtables for S1 and S0, which are virtual.
61
  S4 s4;
62
  S0 *s0 = &s4;
63
  S1 *s1 = &s4;
64
  S2 *s2 = &s4;
65
  S3 *s3 = &s4;
66
 
67
  if (vtable (&s4) != vtable (s2))
68
    return 1;
69
  if (vtable (s2) >= vtable (s3))
70
    return 2;
71
  if (vtable (s3) >= vtable (s1))
72
    return 3;
73
  if (vtable (s1) >= vtable (s0))
74
    return 4;
75
}
76
 
77
#else /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */
78
 
79
int main ()
80
{
81
}
82
 
83
#endif /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.