This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: malloc attributes and realloc
Robert Dewar <dewar@gnat.com> writes:
| Gabriel Dos Reis wrote:
|
| > Yes, that use is rather marginal in my experience and is rather
| > involved -- when done correctly. But nobody knows what C programmers
| > do.
|
| Well we only pay attention to "what C programmers do" to a limited
| extent. Our primary semantic guide for correct translation is indeed
| the standard, and not the expectations of all possible C programmers.
| This of course is not absolute, there are some cases where we know that
| expectations outside the standard are strong enough that it makes sense
| to meet them even though the standard says we don't have to.
|
| > And I don't know how that impacts on the aliasing algorithm.
|
| And that of course is indeed the critical focus of the discussion!
Sure. Marginal or not, it is covered by the standard and it can be
detected.
void *p = malloc(34933);
save_pointer_value_as_bits(p);
p = realloc(7489483454);
if (same_pointer_value_as_before(p))
printf("realloc returned same pointer\n");
That way, you can detect the behaviour of realloc.
Now, I suspect that in practice there are lots of code where the
predicate same_pointer_value_as_before takes the vulgar form "p == q"
and if you bantantly assume that test must be false, then you'll end
up deleting a piece of code that has observable behaviour even when it
is well-formed. If you say the test is true (just to make sure that
in the well-formed case you get it right) then you end up saying that
the return value of reallo may alias something already existing.
I suggest we don't apply the malloc attribute to realloc -- but we
correct (if possible) the comment in libiberty header.
-- Gaby