No to chodzi o efekty uboczne, np śmierć procesu. Kompilator raczej nie może sobie takich rzeczy optymalizować. Wyraźnie jest wyspecyfikowane np, że || jest leniwym, a | jest zachłannym operatorem.
W PHP stosuje sie konstrukcje:
blablabla or die;
To jest wyrażenie logiczne. Jeżeli lewa strona jest prawdą to kompilator nie może liczyć prawej. Jeżeli zachowanie byłoby zależne od kompilacji to generalnie program by się wysypywał w losowych momentach.
Przypadków kiedy kompilator nie może dokonywać optymalizacji jest więcej, np jeżeli masz kod:
int * a;
int * b;
int * c;
*a += *b;
*c += *b;
To kompilator musi odczytać wartość *b dwukrotnie, gdyż nie wie czy a prowadzi do tego samego miejsca co b.
Im więcej zachowań kompilatora jest przewidywalnych, tym lepiej dla programistów.