[Top][All Lists]

[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.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]