http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46488
Paulo César Pereira de Andrade <pcpa at mandriva dot com.br> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pcpa at mandriva dot com.br --- Comment #34 from Paulo César Pereira de Andrade <pcpa at mandriva dot com.br> 2010-11-30 23:15:16 UTC --- (In reply to comment #32) > The problem appears to be deeply rooted in the Ring construct, more precisely > in the HEAD trick. IIUC the idea is to "attach" a doubly-linked list to > another structure by means of a "virtual" member overlaid on top of the > structure; the only thing they actually share is a special APR_RING_ENTRY (the > APR_RING_HEAD). But this overlay fundamentally violates the aliasing rules > even if one try to narrow the accesses to just the shared part. > > Richard, is that how the aliasing rules are implemented in the 4.5.x series? > Has this been changed in 4.6.0? 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.