Если указатель в массиве - volatile, то каждый раз, когда выбирается элемент массива по этому указателю адрес этого элемента должен быть вычислен заново. Т.е. всегда возьмем свежий элемент из памяти. Другое дело, если бы было написано rx_buf0[5] - тут компилятор имеет полное право не лазить в память.