Yes I understand why it's done in the generic case.
The case I'm talking about is an optimization for when the last operation in an expression is a constant and of 1.
It isn't hard to detect that in ...
That's exactly it.
I've tested this in PCM Compiler v5.030, compiling at optimisation level 9 and it generates the same extra bit clears, tests and sets.
I notice in my code that this compiles to:
.................... int1 b = (crc & 1);
17E4: MOVF 27,W
17E5: ANDLW 01
17E6: MOVWF 77
17E7: CLRF 7A
17E8: BCF 29.0
17E9 ...