Consider: extern unsigned int strlen (const char *) __attribute__ ((__pure__));
void foo (const char *str) { unsigned int a = strlen (str); unsigned int b = strlen (str); if (a != b) link_error (); } FRE does not eliminate the second call to strlen. -- Summary: FRE does not catch eliminate a redundant pute call. Product: gcc Version: unknown Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P2 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kazu at cs dot umass dot edu CC: dberlin at gcc dot gnu dot org,gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21705