For more detail what happens and why this conditional handling is necessary:
The sample code is: int foo (int a, int b) { return (a ? b != 3 : 0); } leads for variant without condition boolifying of arms to: ;; Function foo (foo) foo (int a, int b) { int D.1991; int D.1990; int D.1989; <bb 2>: D.1990_2 = a_1(D) != 0; D.1991_4 = b_3(D) != 3; D.1989_5 = D.1991_4 & D.1990_2; return D.1989_5; } with this code we see ;; Function foo (foo) foo (int a, int b) { _Bool D.1992; _Bool D.1991; _Bool D.1990; int D.1989; <bb 2>: D.1990_2 = a_1(D) != 0; D.1991_4 = b_3(D) != 3; D.1992_5 = D.1991_4 & D.1990_2; D.1989_6 = (int) D.1992_5; return D.1989_6; } So you see that by this, the SSA variable having _Bool type, as to be wished, and not being handled as int. Regards, Kai