Viewing file: packed4.C (1.16 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// { dg-do run { target { ! default_packed } } } // { dg-options "-w" }
// Copyright (C) 2003 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 15 Jul 2003 <nathan@codesourcery.com>
// Packed fields are unsuitable for direct reference binding.
struct Unpacked { int i; };
int ConstRef (int const &p, int const *ptr, int v) { if (p != v) return 1; if (&p == ptr) return 2; return 0; }
int ConstRef (Unpacked const &p, Unpacked const *ptr, int v) { if (p.i != v) return 1; if (&p == ptr) return 2; return 0; }
int Val (int p, int v) { if (p != v) return 1; return 0; } int Val (Unpacked p, int v) { if (p.i != v) return 1; return 0; }
struct __attribute__ ((packed)) Packed { char c; int i; Unpacked u; char t; };
int Foo (Packed &p, int i, int ui) { int r; if ((r = Val (p.i, i))) return r; if ((r = Val (p.u.i, ui))) return r + 2; if ((r = Val (p.u, ui))) return r + 4; if ((r = ConstRef (p.i, &p.i, i))) return r + 6;
return 0; }
int main () { Packed p;
p.c = 0x12; p.i = 0x3456789a; p.u.i = 0xbcdef00f; p.t = 0xed;
return Foo (p, 0x3456789a, 0xbcdef00f); }
|