| Bug #28240 | "isinf()" cannot be used in C++ for lack of prototype | ||
|---|---|---|---|
| Submitted: | 4 May 2007 13:32 | Modified: | 27 May 2007 16:23 |
| Reporter: | Joerg Bruehe | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Compiling | Severity: | S1 (Critical) |
| Version: | 5.0 + 5.1 | OS: | Solaris (x86) |
| Assigned to: | Alexey Kopytov | CPU Architecture: | Any |
[8 May 2007 17:12]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26316 ChangeSet@1.2476, 2007-05-08 21:11:46+04:00, kaa@polly.local +4 -0 Fix for bug #28240: "isinf()" cannot be used in C++ for lack of prototype Since isinf() portability across various platforms and compilers is a complicated question, we should not use it directly. Instead, the my_isinf() macro should be used, which is defined as an alias to the system-defined isinf() if it is safe to use, or a workaround implementation otherwise.
[14 May 2007 13:15]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26606 ChangeSet@1.2485, 2007-05-14 15:11:29+02:00, df@pippilotta.erinye.com +4 -0 import of fix for bug#28240
[16 May 2007 8:10]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26776 ChangeSet@1.2479, 2007-05-16 10:10:02+02:00, msvensson@pilot.blaudden +4 -0 Fix for bug #28240: "isinf()" cannot be used in C++ for lack of prototype - Since isinf() portability across various platforms and compilers is a complicated question, we should not use it directly. Instead, the my_isinf() macro should be used, which is defined as an alias to the system-defined isinf() if it is safe to use, or a workaround implementation otherwise
[22 May 2007 17:00]
Bugs System
Pushed into 5.1.19-beta
[22 May 2007 17:03]
Bugs System
Pushed into 5.0.44
[24 May 2007 15:14]
Bugs System
Pushed into 5.1.19-beta
[24 May 2007 19:31]
Bugs System
Pushed into 5.0.44
[27 May 2007 16:23]
Paul DuBois
Noted in 5.0.44, 5.1.19 changelogs. Portability problems caused by use of isinf() were corrected.

Description: Compilation of 5.1.18 fails on Solaris/x86 because of a platform inconsistency regarding "isinf()": - During the configure phase, the test program succeeds, checking for isinf with <math.h>... yes and so "HAVE_ISINF" is set to 1. - However, there is no header file with a prototype for "isinf()". This causes warnings in C code "strtod.c", line 197: warning: implicit function declaration: isinf and fatal errors in C++ code "item_func.cc", line 2004: Error: The function "isinf" must have a prototype. I know this is related to bug#14862 and bug#20602; the current (= failing) code includes the fix for bug#14862. I filed a new report because: 1) This occurs with Sun compilers "Sun C 5.6 2004/06/02" and "Sun C++ 5.6 2004/06/02" whereas the other reports were about gcc. 2) We should have a new, clean history with this. How to repeat: Try to build 5.1 (or 5.0) on Solaris/x86 Suggested fix: I have no idea for a more strict check in configure that would detect the missing prototype - maybe we should use a C++ program ? Alternatively: Should we wrap the C++ call to "isinf()" into a C function ? I know this would be a runtime overhead. In any case, currently the "HAVE_ISINF" setting cannot be relied upon, and the new code in "my_global.h" (to replace a missing "isinf()") will not take effect.