> Am 15.09.2023 um 17:37 schrieb Qing Zhao <qing.z...@oracle.com>:
> 
> 
> 
>>> On Sep 15, 2023, at 11:29 AM, Richard Biener <richard.guent...@gmail.com> 
>>> wrote:
>>> 
>>> 
>>> 
>>>> Am 15.09.2023 um 17:25 schrieb Qing Zhao <qing.z...@oracle.com>:
>>> 
>>> 
>>> 
>>>> On Sep 15, 2023, at 8:41 AM, Arsen Arsenović <ar...@aarsen.me> wrote:
>>>> 
>>>> 
>>>> Qing Zhao <qing.z...@oracle.com> writes:
>>>> 
>>>>> Even though unsigned integer overflow is well defined, it might be
>>>>> unintentional, shall we warn user about this?
>>>> 
>>>> This would be better addressed by providing operators or functions that
>>>> do overflow checking in the language, so that they can be explicitly
>>>> used where overflow is unexpected.
>>> 
>>> Yes, that will be very helpful to prevent unexpected overflow in the 
>>> program in general.
>>> However, this will mainly benefit new codes.
>>> 
>>> For the existing C codes, especially large applications, we still need to 
>>> identify all the places 
>>> Where the overflow is unexpected, and fix them. 
>>> 
>>> One good example is linux kernel. 
>>> 
>>>> One could easily imagine a scenario
>>>> where overflow is not expected in some region of code but is in the
>>>> larger application.
>>> 
>>> Yes, that’s exactly the same situation Linux kernel faces now, the 
>>> unexpected Overflow and 
>>> expected wrap-around are mixed together inside one module. 
>>> It’s hard to detect the unexpected overflow under such situation based on 
>>> the current GCC. 
>> 
>> But that’s hardly GCCs fault nor can GCC fix that in any way.  Only the 
>> programmer can distinguish both cases.
> 
> Right, compiler cannot fix this. 
> But can provide some tools to help the user to detect this more conveniently. 
> 
> Right now, GCC provides two set of options for different types:
> 
> A. Turn the overflow to expected wrap-around (remove UB);
> B. Detect overflow;
> 
>            A                B
>           remove UB        -fsanitize=…
> signed       -fwrapv            signed-integer-overflow
> pointer       -fwrapv-pointer    pointer-overflow (broken in Clang)
> 
> However, Options in A and B excluded with each other. They cannot mix 
> together for a single file.
> 
> What’s requested from Kernel is:
> 
> compiler needs to provide a functionality that can mix these two together for 
> a file. 
> 
> i.e, apply A (convert UB to defined behavior WRAP-AROUND) only to part of the 
> program.  And then add -fsnaitize=*overflow to detect all other
> Unexpected overflows in the program.
> 
> This is currently missing from GCC, I guess?

How can GCC know which part of the program wants wrapping and which sanitizing?

Richard 

> Qing
> 
> 
> 
> 
> 
>> 
>> Richard 
>> 
>>> Thanks.
>>> 
>>> Qing
>>>> -- 
>>>> Arsen Arsenović
> 

Reply via email to