Они там про линукс писали -- так это ТИПОВАЯ, ШИРОКО ПРИМЕНЯЕМАЯ ПРАКТИКА. Более того, является указатель одним объектом или нет банально неизвестно, когда в публичную функцию передаются пара указателей и она их сравнивает. Что-то здесь не договаривается, а статья написана в рекламных целях (PVS-studio). Как минимум, нет гарантии, что "if two pointers point to different elements of the same array, the one pointing at the element with the larger index compares greater". Может там есть какой-то неизвестный массив, снаружи функции, и оба указателя к нему относятся. Если про указатели абсолютно всё известно, то увы, стандарт может быть прав. Но как быть с широко применимой практикой относительно extern указателей?
Почитал, нашёл два бага:
https://gcc.gnu.or …/show_bug.cgi?id=77964 -- про который говорилось, что он в линуксе;
https://gcc.gnu.or …/show_bug.cgi?id=77813 -- похожий.
Метод лечения через ассемблер описаны здесь:
https://gcc.gnu.or …/gcc/Extended-Asm.html
Если вкратце, то по сути добиваются указанием компилятору "эта переменная используется в ассемблере, поэтому не оптимизируй её", круче чем volatile:
https://yangzhang. …cc-optimize-away-code/
[ZX]