[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH 2/2] linux-user/mmap: Fix Clang 'type-limit-compare' warn
From: |
Thomas Huth |
Subject: |
Re: [RFC PATCH 2/2] linux-user/mmap: Fix Clang 'type-limit-compare' warning |
Date: |
Wed, 3 Jun 2020 20:09:38 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 |
On 03/06/2020 20.01, Richard Henderson wrote:
> On 6/3/20 9:06 AM, Eric Blake wrote:
>> Instead of using #if, the following suffices to shut up clang:
>>
>> diff --git c/linux-user/mmap.c w/linux-user/mmap.c
>> index e37803379747..8d9ba201625d 100644
>> --- c/linux-user/mmap.c
>> +++ w/linux-user/mmap.c
>> @@ -715,7 +715,7 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong
>> old_size,
>> host_addr = MAP_FAILED;
>> }
>> /* Check if address fits target address space */
>> - if ((unsigned long)host_addr + new_size > (abi_ulong)-1) {
>> + if ((unsigned long)host_addr > (abi_ulong)-1 - new_size) {
>> /* Revert mremap() changes */
>> host_addr = mremap(g2h(old_addr), new_size, old_size, flags);
>> errno = ENOMEM;
>>
>>
>> That is, it is no longer a tautological type compare if you commute the
>> operations so that neither side is a compile-time constant.
>
> To some extent the tautological compare is a hint to the compiler that the
> comparison may be optimized away. If sizeof(abi_ulong) >= sizeof(unsigned
> long), then the host *cannot* produce an out-of-range target address.
>
> We could add the sizeof test to the if, to preserve the optimization, but that
> by itself doesn't prevent the clang warning.
>
> Which is why I have repeatedly suggested that we disable this warning
> globally.
I guess most people (like me) don't have a strong opinion about this. So
maybe simply suggest a patch to disable the warning? I don't think that
anybody will object.
Thomas