> Hi, > In function ref_maybe_used_by_call_p_1, there is below code snippet > /* The following builtins do not read from memory. */ > case BUILT_IN_FREE: > ... > return false; > > I am confused because free function does read from (and even write to) > memory pointed to by passed argument?
Free is a black box and makes the memory pointed to disappear without actually worrying what values it holds. We rely on fact that we do not see free imlementation and does not worry about the details of its implementation (whcih probably has sort of linked list before address ptr points to) > I am thinking DSE optimizations like: > *ptr = value; > free(ptr); > *ptr = undef; > Does GCC take advantage of UB to eliminate the first store to ptr if > free is considered not reading memory? The aim here is to optimize out *ptr = value. Honza > > Thanks, > bin