------- Comment #11 from rguenth at gcc dot gnu dot org 2010-03-27 19:12 ------- The middle-end ends up with the following optimized:
D.1776_95 = D.1775_94 - D.1591_90; if (D.1776_95 <= 0) goto <bb 34>; else goto <bb 33>; <bb 33>: D.1620_204 = __builtin_malloc (D.1795_11); D.1796_281 = iy.dim[1].stride; ... goto <bb 35>; <bb 34>: D.1620_135 = __builtin_malloc (1); goto <bb 38>; <bb 35>: the loop code <bb 38>: Invalid sum of incoming frequencies 1062, should be 900 # D.1620_374 = PHI <D.1620_204(37), D.1620_135(34)> if (D.1620_374 != 0B) goto <bb 39>; else goto <bb 40>; <bb 39>: __builtin_free (D.1620_374); so we are able to prove that if we end up allocating 1 byte only then the loop isn't executed and we just free it (another missed middle-end optimization, p = malloc(1); free (p); isn't optimized away). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42958