http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46488
--- Comment #35 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2010-11-30
23:25:57 UTC ---
> I said in my comment that adding temporaries could correct the issue,
> but they do not. I had some different test trees, and reviewing them,
> what actually "corrected" in one of the builds was adding a volatile
> modifier to APR_RING_HEAD, as in:
>
> #define APR_RING_HEAD(head, elem) \
> struct head { \
> struct elem * volatile next; \
> struct elem * volatile prev; \
> }
>
> to better match APR_RING_ENTRY.
Probably a reasonable workaround. Having 2 different constructs APR_RING_ENTRY
and APR_RING_HEAD for the same object is strange in any case.