https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87060
Bug ID: 87060 Summary: Condition check is optimized out for volatile unsigned char / short Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: yso at melexis dot com Target Milestone: --- Compilers from http://gcc.godbolt.org/ are used to reproduce the issue. Compiler: x86-64 gcc (trunk); gcc (GCC-Explorer-Build) 9.0.0 20180821 (experimental) Options: -Os Test code: ``` volatile unsigned char u8; void test_u8 (void) { if (u8 + 1) { u8 = 1; } } ``` Disassembly: ``` test_u8: mov al, BYTE PTR u8[rip] mov BYTE PTR u8[rip], 1 ret ``` Condition check is optimized out, while unsigned overflow is perfectly legitimate operation. - also can be reproduced in gcc 8/7/6/5 and 4 (after 4.1.2) - also with unsigned short type