On (23/03/10 10:01), Ricardo Ribalda wrote: > If head is 0, we will be addressing clock->samples[-1], which will > result in undefined behaviour. [..] > first = &clock->samples[clock->head]; > - last = &clock->samples[(clock->head - 1) % clock->size]; > + last = &clock->samples[(clock->head - 1 + clock->size) % clock->size]; Just for visibility: Per offline discussion with Ricardo, this should not cause a samples[-1] access, as all arithmetic operations there `unsigned` 75ef: 41 8d 46 ff lea -0x1(%r14),%eax 75f3: 31 d2 xor %edx,%edx 75f5: f7 f1 div %ecx 75f7: 41 89 d5 mov %edx,%r13d Regardless of that, Ricardo still has a point, there is a bug in the code.