https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118602
--- Comment #3 from Peter Damianov <peter0x44 at disroot dot org> --- Clang is also able to figure it out for: bool test(char c) { return ((0xe0 & c) == 0x80); } And signed or unsigned doesn't make a difference.