jdoerfert added a comment.

In D86844#2484679 <https://reviews.llvm.org/D86844#2484679>, @xbolva00 wrote:

> In D86844#2484639 <https://reviews.llvm.org/D86844#2484639>, @atmnpatel wrote:
>
>> 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). I think these cases fall 
>> outside of the scope of this particular change ...
>
> For C yes, but are there such rules for C++? GCC in c++ mode does not check 
> for non-zero constant expr and happily performs this optimization.

@xbolva00 want to provide a follow up patch then :) ?


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

Reply via email to