Fix issue#1939: Cast character to unsigned for comparison #2144
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Addresses #1939
Hi,
I ran into #1939 today with GCC 10.1 on arm. I didn't want to cause any duplicate issues so I appologize if recycling that issue is causing any inconveniences.
The issue is reproducible with the following example with GCC 10.1 on x86 using
tag 3.7.3
as well asdevelop
:GCC 9.2 does not issue a warning for this on my machine.
User @jaredgrubb already proposed this fix in #1940 and it is indeed most likely the best solution:
Looking at the assembly generated by GCC, Clang and MSVC,
c
gets compared with unsigned ops on x86. On platforms where char is already unsigned,c
gets compared with unsigned ops as well (duh). Castingc
to unsigned would change nothing code-gen wise and it is still clear what is being tested for.Alternatively a three-way-comparison function could be implemented. This would silence the warning:
(I am not really a fan of that idea but I thought I'd at least mention it.)