https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85560
Bug ID: 85560 Summary: Missed optimization in bit-by-bit variable zeroing Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: vlad at ivanov dot email Target Milestone: --- The following C++ code loops until a variable is cleared bit-by-bit: #include <cstdint> uint32_t b; uint32_t test() { uint32_t a = b; uint32_t bits = 1; while (a != 0) { a &= ~bits; bits <<= 1; } return 0; } After looping, it returns 0. While the loop is useless, it still exists in the assembly even with -O3. GCC version: 9.0.0 20180427 Demo: https://godbolt.org/g/7gRMqu Notably, the loop is optimized away on ICC 18