‹ BackHN Continuity

Thread

C++26: Trivial infinite loops are no longer undefined behaviour

173 points · 290 comments · ibobev

  1. adzm · · focus · HN ↗
    i have never before thought that a function could 'fall through' to another function. why does this behavior even exist?
    1. kzrdude · · focus · HN ↗
      Well you leave the C++ realm (execution model), as you should with UB and it depends on implementation. The implementation of the compiler was such that the two functions are placed after each other in the machine code; and if the first function doesn't return, then you continue executing into the code for the next function.
      1. raverbashing · · focus · HN ↗
        This makes no sense to me

        If I think about asm:

        function1:

            (do stuff)
        
            jp function1
        
            ret
        
        
        function2:

            (other stuff)
        
            ret
        
        
        main:

            call function1
        
            call function2
        
        
        the 2nd call might happen internally due to branch prediction but in practice it shouldn't and the processor fixes this

        Oh yeah and TFA also goes with:

        > The funny bit is that C got this right.(...) but C included one more rule: loops whose controlling expression is a constant expression may not be assumed to terminate.

        Well, duh! A broken clock is right twice a day it seems

        1. rcxdude · · focus · HN ↗
          With UB the compiler has no particular requirement to emit the 'ret'. (or, in the example, anything at all for the function)
        2. [deleted] · · focus · HN ↗

          [deleted]

Open on Hacker News to reply ↗

Unofficial Hacker News client; not affiliated with Y Combinator.