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:
None 
Category:MySQL Server: Compiling Severity:S1 (Critical)
Version:5.0 + 5.1 OS:Solaris (x86)
Assigned to: Alexey Kopytov CPU Architecture:Any

[4 May 2007 13:32] Joerg Bruehe
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.
[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.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.045 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.