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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [g++.old-deja/] [g++.abi/] [aggregates.C] - Blame information for rev 823

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

Line No. Rev Author Line
1 149 jeremybenn
// { dg-do run { target i?86-*-linux* x86_64-*-linux* i?86-*-freebsd* } }
2
// { dg-require-effective-target ilp32 }
3
// { dg-options "-malign-double" }
4
// Origin: Alex Samuel 
5
 
6
/* Test the data layout of C aggregates by checking aggregate size and
7
   alignment and field offsets for compliance with the IA-64 ABI.  */
8
 
9
template
10
inline unsigned
11
alignmentof ()
12
{
13
  struct S
14
  {
15
    char start_;
16
    T object_;
17
  };
18
 
19
  return (unsigned) & ((S *) 0)->object_;
20
}
21
 
22
/* Computes the alignment, in bytes, of TYPE.  */
23
 
24
#define alignof(type) (alignmentof ())
25
 
26
/* Computes the offset of FIELD in AGGREGATE.  */
27
 
28
#define offsetof(aggregate, field) \
29
  ((unsigned) (& ((aggregate*) 0)->field))
30
 
31
 
32
/* Structs S1, S2, S3, S4, and union U5 are taken from Intel, "IA-64
33
   Software Conventions and Runtime Architecture Guide", version of
34
   August 1999.  */
35
 
36
struct S1
37
{
38
  char c;
39
};
40
 
41
struct S2
42
{
43
  char c;
44
  char d;
45
  short s;
46
  int n;
47
};
48
 
49
struct S3
50
{
51
  char c;
52
  short s;
53
};
54
 
55
struct S4
56
{
57
  char c;
58
  double d;
59
  short s;
60
};
61
 
62
union U5
63
{
64
  char c;
65
  short s;
66
  int j;
67
};
68
 
69
 
70
 
71
int
72
main ()
73
{
74
  if (sizeof (struct S1)                !=  1)
75
    return 1;
76
  if (alignof (struct S1)               !=  1)
77
    return 2;
78
  if (offsetof (struct S1, c)           !=  0)
79
    return 3;
80
 
81
  if (sizeof (struct S2)                !=  8)
82
    return 4;
83
  if (alignof (struct S2)               !=  4)
84
    return 5;
85
  if (offsetof (struct S2, c)           !=  0)
86
    return 6;
87
  if (offsetof (struct S2, d)           !=  1)
88
    return 7;
89
  if (offsetof (struct S2, s)           !=  2)
90
    return 8;
91
  if (offsetof (struct S2, n)           !=  4)
92
    return 9;
93
 
94
  if (sizeof (struct S3)                !=  4)
95
    return 10;
96
  if (alignof (struct S3)               !=  2)
97
    return 11;
98
  if (offsetof (struct S3, c)           !=  0)
99
    return 12;
100
  if (offsetof (struct S3, s)           !=  2)
101
    return 13;
102
 
103
  if (sizeof (struct S4)                != 24)
104
    return 14;
105
  if (alignof (struct S4)               !=  8)
106
    return 15;
107
  if (offsetof (struct S4, c)           !=  0)
108
    return 16;
109
  if (offsetof (struct S4, d)           !=  8)
110
    return 17;
111
  if (offsetof (struct S4, s)           != 16)
112
    return 18;
113
 
114
  if (sizeof (union U5)                 !=  4)
115
    return 19;
116
  if (alignof (union U5)                !=  4)
117
    return 20;
118
  if (offsetof (union U5, c)            !=  0)
119
    return 21;
120
  if (offsetof (union U5, s)            !=  0)
121
    return 22;
122
  if (offsetof (union U5, j)            !=  0)
123
    return 23;
124
 
125
  return 0;
126
}

powered by: WebSVN 2.1.0

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