https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109123

--- Comment #6 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
(In reply to Manuel López-Ibáñez from comment #5)
> Is this code motion valid? Is there any point in the middle-end that checks
> the validity of the pointer beyond a free/realloc?
> 
> If there is a point where such check happens, perhaps it would be a good
> place to apply no_warning attribute to the pointer.

Answering to myself: It seems the dispute is over the meaning of "use".
According to the middle-end and for the purposes of realloc/free, "use" means
dereference, while for the warning "use" is any read of the value.

By only warning for dereferences, the warning may miss some obvious cases like:

        tmp = realloc(v->_begin, sizeof(double) * n);
        v->_end = v->_begin + old_size;
        v->_begin = tmp;

However, given that the assumption of the middle-end has worked for decades,
and it will be not possible to fix it, warning only for dereferences (or moving
warning for value-uses to a level not enabled by -Wall) would seem more
user-friendly.

Reply via email to