6.8.5 Iteration statements
6. An iteration statement may be assumed by the implementation to terminate if its controlling expression is not a constant expression,
(1)) and none of the following operations are performed in its body, controlling expression or (in the case of a
for statement) its
expression-3:
(2))
- input/output operations
- accessing a volatile object
- synchronization or atomic operations
(1) An omitted controlling expression is replaced by a nonzero constant, which is a constant expression
(2) This is intended to allow compiler transformations such as removal of empty loops even when termination cannot be proven.