Wouter Vermaelen <wouter.vermaelen@xxxxxxxxxx> writes: > I believe I found a wrong-code bug. The problem triggers when using > gcc-4.5.1, 4.5.2 or 4.5.3, but not when using 4.4.5 or 4.7.0 (snapshot > 20110419). It also only triggers with certain optimization levels/flags. > I wonder if this is a known problem and already fixed in 4.7.0, or that > the problem still exists but for some reason doesn't trigger in 4.7.0 > (I couldn't easily find something in bugzilla). > > Below is a reduced test-case that shows the problem. I tried, but I > couldn't get it smaller than these 4 files (combined about 60 lines). > > While reducing this problem I realized that it *might* not be a compiler > bug, but undefined behaviour with the usage of __restrict in > Buffer::read(). What I wanted to express there is that the memory write > done by memcpy() can never overwrite the member variable 'p'. At the > moment I still believe it's a compiler bug, but I'm not 100% sure > anymore. > > So is this a compiler bug or undefined behaviour in my program? In case > of the latter I would appreciate if someone could explain what the > problem is and maybe suggest a way to fix it. I don't see anything wrong with your use of __restrict here. If this programs works without __restrict and fails with __restrict then I think this is a compiler bug. Ian