[Bug c++/90691] New: [GCC9 regression] -Wsign-compare false-positive with constant
lebedev.ri at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri May 31 10:27:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90691
Bug ID: 90691
Summary: [GCC9 regression] -Wsign-compare false-positive with
constant
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: lebedev.ri at gmail dot com
Target Milestone: ---
Manually reduced:
#include <cstdint>
struct S {
int a;
constexpr S();
explicit constexpr S(int a_) : a(a_) {}
};
constexpr S b = S(12);
template <const S& e>
bool c(unsigned int d) {
return d >= e.a;
}
bool test(unsigned int d);
bool test(unsigned int d) {
return c<b>(d);
}
GCC diagnoses:
<source>: In instantiation of 'bool c(unsigned int) [with const S& e = b]':
<source>:19:18: required from here
<source>:14:12: warning: comparison of integer expressions of different
signedness: 'unsigned int' and 'const int' [-Wsign-compare]
14 | return d >= e.a;
| ~~^~~~~~
Compiler returned: 0
clang doesn't.
https://godbolt.org/z/7xrWzz
But there can't ever be any issues here, the signed 'int a' is '12', which is
known-positive.
Indeed, if the constant is negative, clang warns:
https://godbolt.org/z/yQBXB8
More information about the Gcc-bugs
mailing list