https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70378
--- Comment #3 from Manuel López-Ibáñez <manu at gcc dot gnu.org> --- (In reply to Manuel López-Ibáñez from comment #2) > Simpler testcase: > > typedef unsigned int uint32_t; > void foo(char a, uint32_t b) > { > b = (uint32_t)((b * 10) + (uint32_t)a); > } > > Something must be removing the explicit cast or messing up the expression. Perhaps a duplicate of PR70336. It seems that the move to match.pd just added more early folding that removes explicit casts.