[PATCH v1 09/12] malloctest/init.c: Added pragmas to address gcc 12 warnings

Chris Johns chrisj at rtems.org
Wed Aug 17 03:55:36 UTC 2022


On 17/8/2022 12:16 pm, Joel Sherrill wrote:
> On Tue, Aug 16, 2022, 6:07 PM Chris Johns <chrisj at rtems.org
> <mailto:chrisj at rtems.org>> wrote:
>     On 17/8/2022 6:11 am, Ryan Long wrote:
>     > Fixed four warnings disabled were for "-Wuse-after-free" and one for a
>     > "-Wfree-nonheap-object."
> 
>     Is this a gcc warning bug? If p1 was used to access the memory the warning is
>     right but we are only referencing the address and not the data. It is no
>     different to:
> 
>       void* p = 0x111111111;
>       printf("P is %p\n", p);
> 
>     This is fine and has to be or we could never access any hardware.
> 
> 
> That example is different I think. Semantically after a call to free, the
> address is no longer valid for any use.

Ah yes sorry, I was looking at the wrong spot in the code. It is down at line 1531.

> Ensuring you don't call another member
> of the malloc family is a legitimate way to avoid double frees.

Yes using the pointer is invalid.

> If we have an issue with a specific use case pattern that GCC is tripping, then
> we discuss it with them. I'm sure all of these were well thought out.
> 
> Besides this code is pushing deliberate error conditions so we should not be
> surprised that the compiler is detecting issues with the code.

I am not sure the test is correct and should be there. Passing in and then
testing the same value is returned assumes undefined behaviour:

 If ptr does not match a pointer returned earlier by calloc(), malloc(),
 or realloc() or if the space has previously been deallocated by a call
 to free() or realloc(), the behavior is undefined.

https://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html

Chris


More information about the devel mailing list