// { dg-do run { target { ! default_packed } } } // { dg-options "-w" } // Copyright (C) 2003 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 15 Jul 2003 // 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); }