https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93098
Bug ID: 93098 Summary: [10 Regression] ICE with negative shifter Product: gcc Version: 10.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Even though it is undefined code, we should not ICE on this code. Try with -O2: typedef unsigned long long uint64_t; int popcount64c_1 (uint64_t x) { x -= (x >> -1) & 0x5555555555555555ULL; x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL); x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0fULL; return (x * 0x0101010101010101ULL) >> 56; } Found this via inspection of match.pd after I was working on something else and had the testcase for PR 50193 fails.