#include <pic16f877a.h>
#include <stdint.h>
uint8_t tmp;
void main(void) {
tmp|=(1<<3);
tmp&=~(1<<3);
}
tmp&=~(1<<3) is badly optimized
_main ;Function start
; 2 exit points
; .line 7; "bug3.c" tmp|=(1<<3);
BANKSEL _tmp
BSF _tmp,3
; .line 8; "bug3.c" tmp&=~(1<<3);
MOVF _tmp,W
BANKSEL r0x1001
MOVWF r0x1001
MOVLW 0xf7
ANDWF r0x1001,W
BANKSEL _tmp
MOVWF _tmp
RETURN
; exit point of _main
$ sdcc --Werror -pp16f877a --opt-code-size -Ilibmain -DF_CPU=4000000 -mpic14 --use-non-free bug3.c
message: using default linker script "/usr/share/gputils/lkr/16f877a.lkr"
$ sdcc -v
SDCC : mcs51/gbz80/z80/z180/r2k/r3ka/ds390/pic16/pic14/TININative/ds400/hc08/s08 3.2.0 #8008 (Jul 6 2012) (Linux)