For int main() { void *p = __builtin_malloc (4); if (p) { __builtin_free (p); p = 0; } __builtin_free (p); return 0; }
DOM does not propagate p == 0 on the else path leaving <bb 2>: p_2 = __builtin_malloc (4); if (p_2 != 0B) goto <bb 3>; else goto <bb 4>; <bb 3>: __builtin_free (p_2); <bb 4>: # p_1 = PHI <p_2(2), 0B(3)> __builtin_free (p_1); VRP can do this. -- Summary: DOM doesn't propagate constants properly Product: gcc Version: 4.6.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43940