Example error message: “ap-main.c:189:: warning: (759) expression generates no code”
Example that will cause it:
#define POWER_CONTROL_0(state) (state ? (LATCbits.LATC0 = 0) : (LATCbits.LATC0 = 1)) //1:0, 0=on POWER_CONTROL_0(1);
This error is not usually generated by compilers, but is for XC8 and Microchip supported it with:
The compiler detects that the condition is true, eliminates the code generation for the condition and produces a warning to this effect.
No code is generated for the true condition.
However code is generated for all the statements inside the true condition.
This optimization reduces the code size, as it removes checking for condition and branching, which might otherwise take a couple of instructions.
The code for checking True or false is not generated in ternary operator in this case and hence the warning. Compiler has optimized to eliminate the checking of true or false.
Follow on after arguing this was an extremely confusing / misleading warning to be generated:
I discussed with the compiler developers.
The compiler will try to issue as many warnings as possible for the code so that the programmer is aware.
It is possible that in many of the cases, a simple typo has resulted in this situation, where the code does nothing and which is what the warning is asking the programmer to confirm. Sometimes there are situations (and many of them) where expressions like these don’t generate any code, and it helps the programmer to decide whether they want to rewrite their code, to avert the warnings or continue with these warnings.
This warning can be disabled, by changing the warning level to 0.