Da steht deswegen kein Fehler, weil es eben kein Fehler ist.
Ein grosszügiger Compiler könnte natürlich anmerken, dass die for-Schleife ein "Statement with no effect" ist.
Wenn du es unbedingt so machen willst, kannst du i auch als volatile deklarieren. Dann wird der Compiler die for-Schleife trotzdem durchzählen, auch wenn nix gemacht wird.

So spontan wüsst ich jetzt auch garnicht, ob

Code:
uint8_t i;
for (i=0; i<20; i++)
{
       asm volatile ("nop");
}
das gleiche ist wie:

Code:
volatile uint8_t i;
for (i=0; i<20; i++)
{
}
Wobei ich glaub, dass die volatile-for schneller geht, da der NOP nicht gemacht wird.