Not returning from a non-void function invokes undefined behavior. The result could be anything, including a program that appears to work all the time.
While reasoning about why UB does something is not useful in general, this is possibly an artifact of a particular calling convention. The value of the 1st local variable c
may be converted to an int and stored in the same register which is supposed to store the return value. Since that is the value that you meant to return, this could be the reason that the code appears to work.
Of course, whether the explanation is right or wrong, the program is still broken according to the language rules, and you can't rely on this behavior.