I’m fairly certain that last one is UB in C. The result of an assignment operator is not an lvalue, and even if it were it’s UB (at least in C99) to modify the stored value of an object more than once between two adjacent sequence points. It might work in C++, though.
It’s not as if there’s some natural law obligating you to pay for anyone else’s health issues. Your government is responsible for externalizing that private cost onto you and others, effectively subsidizing risk-taking and irresponsibility. If you don’t like it, insist that people pay for their own health care and insurance at market rates, without subsidies.