IIRC a barrier only clobbers memory. gcc must reload a variable from
memory unless it can prove the variable's address has not escaped anywhere.
So:
void f()
{
int v;
v = g();
barrier();
do_domething_with(v);
}
Need not reload v from memory (indeed, v can be in a register for its
entire lifetime), but
void f()
{
int v;
v = g();
h(&v);
barrier();
do_domething_with(v);
}
Will force v into memory, and reload it after the barrier.
--
error compiling committee.c: too many arguments to function
--