2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / g++.dg / ext / packed4.C
blobc32a0fa6993e30fadefdab4cab47ae1a75b0569d
1 // { dg-do run }
3 // Copyright (C) 2003 Free Software Foundation, Inc.
4 // Contributed by Nathan Sidwell 15 Jul 2003 <nathan@codesourcery.com>
6 // Packed fields are unsuitable for direct reference binding.
8 struct Unpacked { int i; };
10 int ConstRef (int const &p, int const *ptr, int v)
12   if (p != v)
13     return 1;
14   if (&p == ptr)
15     return 2;
16   return 0;
19 int ConstRef (Unpacked const &p, Unpacked const *ptr, int v)
21   if (p.i != v)
22     return 1;
23   if (&p == ptr)
24     return 2;
25   return 0;
28 int Val (int p, int v)
30   if (p != v)
31     return 1;
32   return 0;
34 int Val (Unpacked p, int v)
36   if (p.i != v)
37     return 1;
38   return 0;
41 struct  __attribute__ ((packed)) Packed
43   char c;
44   int i;
45   Unpacked u;
46   char t;
49 int Foo (Packed &p, int i, int ui)
51   int r;
52   
53   if ((r = Val (p.i, i)))
54     return r;
55   if ((r = Val (p.u.i, ui)))
56     return r + 2;
57   if ((r = Val (p.u, ui)))
58     return r + 4;
59   
60   if ((r = ConstRef (p.i, &p.i, i)))
61     return r + 6;
62   if ((r = ConstRef (p.u.i, &p.u.i, ui)))
63     return r + 8;
64   if ((r = ConstRef (p.u, &p.u, ui)))
65     return r + 10;
67   return 0;
70 int main ()
72   Packed p;
74   p.c = 0x12;
75   p.i = 0x3456789a;
76   p.u.i = 0xbcdef00f;
77   p.t = 0xed;
79   return Foo (p, 0x3456789a, 0xbcdef00f);