------- Comment #71 from rguenth at gcc dot gnu dot org 2007-05-16 13:05 ------- But it doesn't fix the POOMA miscompilations if I change its Pool allocator to use placement new instead of this
// Release a block to the pool. inline void free(void *b) { // Record a free. outstandingAllocs_m -= 1; // Cast the pointer to the right type. Link *p = (Link*)b; // Make it point to the current head of the free list. p->next_m = head_m; // Make the next one the new head of the list. // We can't do head_m = p->next_m since p will soon be treated // as something other than a Link. By doing this assignment // with memcpy, we ensure that p->next_m will be read before // it is clobbered. memcpy(&p->next_m, &head_m, sizeof(head_m)); // Make it the head of the free list. head_m = p; } memcpy hack. I'll try to investigate... -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29286