https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101368
Bug ID: 101368
Summary: -Wlogical-op and string comparison
Product: gcc
Version: 11.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: arnaud02 at users dot sourceforge.net
Target Milestone: ---
Considering
#include <string_view>
bool f(int num) {
return num != 2 || num != 3;
}
bool g(std::string_view s) {
using namespace std::literals;
return s != "AA"sv || s != "BB"sv;
}
"g++ -std=c++17 -Wlogical-op -O2" emits:
<source>: In function 'bool f(int)':
<source>:3:21: warning: logical 'or' of collectively exhaustive tests is always
true [-Wlogical-op]
3 | return num != 2 || num != 3;
| ~~~~~~~~~^~~~~~~~~~~
g++ spots the defect in "f". It would be incredibly useful if the similar
defect was reported in "g".
In this case, the gcc x64 backend emits identical code for f and g:
f(int):
mov eax, 1
ret
g(std::basic_string_view<char, std::char_traits<char> >):
mov eax, 1
ret