Path: csiph.com!weretis.net!feeder6.news.weretis.net!news.misty.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: gah4 Newsgroups: comp.compilers Subject: Re: Undefined Behavior Optimizations in C Date: Wed, 18 Jan 2023 21:10:55 -0800 (PST) Organization: Compilers Central Sender: johnl@iecc.com Approved: comp.compilers@iecc.com Message-ID: <23-01-064@comp.compilers> References: <23-01-027@comp.compilers> <23-01-031@comp.compilers> <23-01-041@comp.compilers> <23-01-062@comp.compilers> <23-01-063@comp.compilers> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="12660"; mail-complaints-to="abuse@iecc.com" Keywords: analysis Posted-Date: 19 Jan 2023 12:25:23 EST X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com In-Reply-To: <23-01-063@comp.compilers> Xref: csiph.com comp.compilers:3332 On Wednesday, January 18, 2023 at 3:55:49 PM UTC-8, David Brown wrote: (snip) > From your example above, we can see that the compiler can transform (a) > into "y++;" - there is no need for the conditional. But the compiler > can /also/ transform (b) into ";" - it is allowed to reason that if x > /were/ equal to INT_MAX, statement (a) would be undefined behaviour > (even though it was transformed away) and there is no value for x which > would result in "y = 10" being executed without also executing UB. This is reminding me of some quantum mechanics rules described here: https://www.sciencenews.org/wp-content/uploads/2010/11/baseball.pdf It is interesting reading for those interested in the physics, but also for those who aren't. It doesn't take much physics thought. It has to do with what quantum mechanics allows when you don't actually measure something. And, similarly, compilers shouldn't try to make too many assumptions about things not measured.