https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115695
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Reduced testcase: ``` int f() { short a = 0; return (unsigned)a * sizeof(short); } ``` The warning in GCC 9 and before was: ``` <source>:4:16: warning: conversion to 'long unsigned int' from 'short int' may change the sign of the result [-Wsign-conversion] ``` I think that is wrong too. Looks like the warning is happening after some optimization moving the multiply and then giving the wrong types incorrectly.