atmnpatel added a comment. In D86844#2484568 <https://reviews.llvm.org/D86844#2484568>, @fhahn wrote:
> In D86844#2481922 <https://reviews.llvm.org/D86844#2481922>, @xbolva00 wrote: > >> int a, b; >> >> int f(void) { >> while (1) { >> if (a != b) return 1; >> } >> return 0; >> } >> >> int g(int a, int b) { >> while (1) { >> if (a != b) return 1; >> } >> return 0; >> } >> >> LLVM does not catch these cases; gcc does. >> >> https://godbolt.org/z/jW7son > > Looks like `must progress` does not get added? If it gets added to the IR the > loops get removed: https://godbolt.org/z/77v17P I might be misunderstanding the standard here but since 1 is a non-zero constant expression, it can't be assumed to terminate by the implementation right? The relevant section from C11 at least is "An iteration statement whose controlling expression is not a constant expression that performs [explanation of what it deems as progress] may be assumed by the implementation to terminate" (C11 6.8.5 p6). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D86844/new/ https://reviews.llvm.org/D86844 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits