https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115695
Bug ID: 115695 Summary: spurious warning for -Wsign-compare with c++ Product: gcc Version: 14.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mtasaka at fedoraproject dot org Target Milestone: --- With Fedora's gcc: ``` gcc --version gcc (GCC) 14.1.1 20240620 (Red Hat 14.1.1-6) Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` ``` $ cat foo.cc #include <iostream> #include <cstdint> int main() { int16_t a = 0; std::cout << ((uint32_t)a * sizeof(int16_t)) << std::endl; } $ g++ -Wall -Wextra -Wsign-conversion -o foo foo.cc foo.cc: In function ‘int main()’: foo.cc:6:23: warning: conversion to ‘long unsigned int’ from ‘uint32_t’ {aka ‘unsigned int’} may change the sign of the result [-Wsign-conversion] 6 | std::cout << ((uint32_t)a * sizeof(int16_t)) << std::endl; | ^~~~~~~~~~~ ``` What is apparently confusing that the signness does not change, yet the warning says this "may change the sign".