Yunzezhu abandoned this revision.
Yunzezhu added a comment.

In D151867#4401987 <https://reviews.llvm.org/D151867#4401987>, @craig.topper 
wrote:

> In D151867#4401952 <https://reviews.llvm.org/D151867#4401952>, @Yunzezhu 
> wrote:
>
>> In D151867#4400255 <https://reviews.llvm.org/D151867#4400255>, @craig.topper 
>> wrote:
>>
>>> From the C language perspective with this change, __builtin_clz/ctz is 
>>> still considered undefined for 0 and code that uses it is ill-formed. 
>>> `isCLZForZeroUndef` is only intended to prevent the middle end from 
>>> optimizing based on the undefinedness and creating surprises. See also 
>>> https://discourse.llvm.org/t/should-ubsan-detect-0-input-to-builtin-clz-ctz-regardless-of-target/71060
>>
>> I see __builtin_clz/ctz returning an undefined value for 0 input matches 
>> gcc's document, but when I test __builtin_clz/ctz with 0 input on gcc, it 
>> returns a valid value rather than an undefined value. It looks gcc does not 
>> follow gcc's document. I'm not sure which one is better that match document 
>> to return undefined for 0, or match gcc's behavior to return defined value?
>
> From what I can see in the assembly here https://godbolt.org/z/s4qqz83EK, 
> gcc's undefined behavior sanitizer does consider an input of 0 to be 
> undefined.

Got it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151867/new/

https://reviews.llvm.org/D151867

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to