ID: 32797 Updated by: [EMAIL PROTECTED] Reported By: JClawson at tamu dot edu -Status: Open +Status: Closed Bug Type: Compile Failure Operating System: * (with GCC 4 only) PHP Version: 5.0.4 New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. This is invalid C code; allowing cast-as-lvalue is an extension to C which has been deprecated (and has triggered warnings) since gcc 3.4. Fixed on HEAD, will backport shortly. Previous Comments: ------------------------------------------------------------------------ [2005-04-22 09:14:41] [EMAIL PROTECTED] Not everyone will use GCC..ever. ------------------------------------------------------------------------ [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] [EMAIL PROTECTED] 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] [EMAIL PROTECTED] 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. ------------------------------------------------------------------------ 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