[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: warnings compiling emacs28 with gcc 12.1
From: |
Óscar Fuentes |
Subject: |
Re: warnings compiling emacs28 with gcc 12.1 |
Date: |
Thu, 28 Jul 2022 20:35:55 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Óscar Fuentes <ofv@wanadoo.es>
>> Date: Thu, 28 Jul 2022 19:12:00 +0200
>>
>> Eli Zaretskii <eliz@gnu.org> writes:
>>
>> >> and there's another one about free that looks a bit scary:
>> >>
>> >> alloc.c: In function ‘lisp_free’:
>> >> alloc.c:1052:3: warning: pointer ‘block’ used after ‘free’
>> >> [-Wuse-after-free]
>> >> 1052 | mem_delete (mem_find (block));
>> >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> >> alloc.c:1050:3: note: call to ‘free’ here
>> >> 1050 | free (block);
>> >> | ^~~~~~~~~~~~
>> >
>> > Another nonsense. Look in mem_find, and you will see that it uses its
>> > argument as just a number, it never dereferences it.
>>
>> The warning is not about dereferencing the pointer.
>
> What other problems could be caused by using it after freeing it?
Lars mentioned the reason Paul gave when he fixed the warning.
Another reason is that using a pointer after freeing the pointed object
usually indicates the possibility of future problems, like a
dereference. In general, such a pointer is meaningless as a proper
pointer. If one is using it later as a key (which in itself is a
questionable practice) the right thing is to convert it to a suitable
integral type. Otherwise, it is advisable to forget about a pointer as
soon as its pointed memory becomes invalid.