https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114421

Xi Ruoyao <xry111 at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |xry111 at gcc dot gnu.org

--- Comment #3 from Xi Ruoyao <xry111 at gcc dot gnu.org> ---
(In reply to Earle F. Philhower, III from comment #2)
> Thanks very much for the fast explanation.  For reference of others who
> might hit this, I see references to C11 6.8.5 pp 6 online (but of course
> it's an ISO document so not freely available).
> 
> "An iteration statement whose controlling expression is not a constant
> expression, that performs no input/output operations, does not access
> volatile objects, and performs no synchronization or atomic operations in
> its body, controlling expression, or (in the case of a for statement) its
> expression-3, may be assumed by the implementation to terminate."

For this topic C++ is actually more strict than C so referring the C standard
may be still misleading.

In C++ there is no "the controlling expression is a constant expression"
exempt, so even while (true); can be optimized out.  AFAIK GCC does not
optimize away while (true); in C++, but Clang is actively doing this.  There is
a WG21 paper to add the constant expression exemption for C++ like C (I cannot
remember its Nxxxx ID though).

Reply via email to