https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91083
Bug ID: 91083 Summary: inconsistent -Wsign-compare warnings Product: gcc Version: 9.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: karol.wozniak at linuxmail dot org Target Milestone: --- following code sample template <typename T> struct numeric_limits; template<> struct numeric_limits<long> { static constexpr long max() noexcept { return 0x7fffffffffffffffL; } }; int main() { return 42ul > numeric_limits<long>::max(); } compiled with: g++-9 prog.cc -Wall -Wextra raises sign-compare warning (https://wandbox.org/permlink/zW28qdCjM3hHPtMd) but... - adding optimization: g++-9 prog.cc -Wall -Wextra -O2 -march=native removes the warning (https://wandbox.org/permlink/Z0GpP3JvunbpKqwO) - creating helper value to store numeric_limit turns on warning once again in optimized code (https://wandbox.org/permlink/94s4PEuJLlhKviye) int main() { auto m = numeric_limits<long>::max(); return 42ul > m; } - making helper value const... removes warning (https://wandbox.org/permlink/Z0GpP3JvunbpKqwO) warning was not raised in gcc-8 (https://wandbox.org/permlink/3yKmF2OVJ3FBIPye)