https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108341
Bug ID: 108341 Summary: argument to `__builtin_ctz` should be assumed non-zero Product: gcc Version: 12.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: lh_mouse at 126 dot com Target Milestone: --- Godbolt: https://gcc.godbolt.org/z/PrPP4v9z1 ``` extern int r; int bz(int value) { r = __builtin_ctz(value); return value != 0; // always true } ``` According to GCC manual, if the argument to `__builtin_ctz()` is zero then the behavior is undefined, but GCC fails to assume that this function always returns `1`. But I have read https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94801, not sure whether it's related.