struct A
{
unsigned short a1;
unsigned long a2;
};
struct B
{
int b1, b2, b3, b4, b5;
};
struct C
{
struct B c1[1];
int c2, c3;
};
static
int foo (int x)
{
return x < 0 ? -x : x;
}
int bar (struct C *x, struct A *y)
{
int a = x->c3;
const int b = y->a1 >> 9;
const unsigned long c = y->a2;
int d = a;
unsigned long e, f;
f = foo (c - x->c1[d].b4);
do
{
if (d <= 0)
d = x->c2;
d--;
e = foo (c-x->c1[d].b4);
if (e < f)
a = d;
}
while (d != x->c3);
x->c1[a].b4 = c + b;
return a;
}
int
main ()
{
struct A a;
struct C b;
int c;
a.a1 = 512;
a.a2 = 4242;
__builtin_memset (&b, 0, sizeof (b));
b.c1[0].b3 = 424242;
b.c2 = 1;
c = bar (&b, &a);
return 0;
}