Consider this code:
if (Cond) { #ifdef X_SUPPORTED X(); #else return; #endif } else { Y(); } Z();
In this example, if X_SUPPORTED is not defined, currently we'll get a warning from the else-after-return check. However If we apply that fix, and then the code is recompiled with X_SUPPORTED defined, we have inadvertently changed the behaviour of the if statement due to the else being removed. Code flow when Cond is true will be:
X(); Y(); Z();
where as before the fix it was:
X(); Z();
This patch adds checks that guard against #endif directives appearing between the control flow interrupter and the else and not applying the fix if they are detected.
auto needs to be replaced/expanded.