#32797 [Opn]: Compile fails with xml_element.c: my_free using gcc 4
ID: 32797
Updated by: sniper@php.net
Reported By: JClawson at tamu dot edu
Status: Open
Bug Type: Compile Failure
Operating System: * (with GCC 4 only)
PHP Version: 5.0.4
New Comment:
Not everyone will use GCC..ever.
Previous Comments:
------------------------------------------------------------------------
[2005-04-22 08:14:33] JClawson at tamu dot edu
Hmmm... I thought free was supposed to ignore the null pointer. At
least that was my understanding:
Here is a nice table:
http://developer.apple.com/qa/qa2001/qa1259.html
I guess its better to be safe than sorry.
------------------------------------------------------------------------
[2005-04-22 07:24:46] abies@php.net
1) Relying on free() to ignore NULL pointers is not portable: we do
have to support other compilers beside GCC 4
2) Using cast expressions as lvalues has always been supported in C,
but apparently GCC 4 suddenly doesn't support it anymore. In this
particular case, however, we might change the macro so it only does the
cast for the argument to free() , and only for compilers that require
it, i.e. compilers/libc's that define free like free(char*)
------------------------------------------------------------------------
[2005-04-22 04:44:12] wez@php.net
Please lose the attitude; we don't have time for that.
As for PHP; you appear to have the knowledge--submit a working patch
that doesn't break the code.
------------------------------------------------------------------------
[2005-04-22 04:10:00] JClawson at tamu dot edu
Oh... Everyone will not be using GCC 3 forever. Don't you think it
would be prudent to correct obvious errors now?
After all if you have the following code:
if((char*)root->name)
{
free((char*)root->name);
(char*)root->name = 0;
}
why would you assign a pointer to 0?
And for whatever reason... why the stupid if statement????
Why not just simplify everything with:
free((char*)root->name);
Bam... correct C code. If root->name is NULL thats ok... because free
can take NULL as a paramater!
You don't free somthing and then try to assign an integer to it...
seriously.
------------------------------------------------------------------------
[2005-04-22 03:59:04] JClawson at tamu dot edu
Sorry... the code I posted should be this
if (root->name) {
free((char *)root->name);
root->name = NULL;
}
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/32797
--
Edit this bug report at http://bugs.php.net/?id=32797&edit=1
Thread (9 messages)