Bug #9063 Compile problems using icc 8.1, 32 bit Linux
Submitted: 8 Mar 2005 23:07 Modified: 28 Apr 2005 2:32
Reporter: Kent Boortz Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Compiling Severity:S3 (Non-critical)
Version:4.1.10 OS:Linux (Linux/x86)
Assigned to: Jim Winstead CPU Architecture:Any

[8 Mar 2005 23:07] Kent Boortz
Description:
Two problems, one is a bug in the Linux headers, 
"/usr/include/sys/resources.h" when using non gcc compilers,
in effect doing

  #define setrlimit setrlimit64
  extern int setrlimit64 (__rlimit_resource_t __resource,
                    __const struct rlimit64 *__rlimits) __THROW;

that will not work when setrlimit() is called in "mysqld.cc".
The second problem, is that "acinclude.m4" accepts
'extern "C" void exit (int) throw ();'. This will include

   extern "C" void exit (int) throw ();
   #include <stdlib.h>

in all C++ configure compilation tests. But this is the
opposite order of lines from how it was decided the
exit declaration was ok, and the order is significant.

% uname -a
Linux xxx.mysql.com 2.6.10-1.9_FC2smp #1 
SMP Thu Jan 13 18:15:45 EST 2005 i686 i686 i386 GNU/Linux

% icc -V
Intel(R) C Compiler for 32-bit applications, Version 8.1
Build 20050207Z Package ID: l_cc_pc_8.1.028

How to repeat:
Compile the 4.1.10 sources using icc 8.1 on Linux x86.

Suggested fix:
--- acinclude.m4.ORIG   2005-02-12 21:37:30.000000000 +0100
+++ acinclude.m4        2005-03-08 23:22:41.000000000 +0100
@@ -1881,8 +1881,8 @@
    'void exit (int);' \
    '#include <stdlib.h>'
 do
-  _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([@%:@include <stdlib.h>
-$ac_declaration],
+  _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$ac_declaration
+@%:@include <stdlib.h>],
                                       [exit (42);])],
                      [],
                      [continue])

--- mysqld.cc.ORIG      2005-02-12 21:37:30.000000000 +0100
+++ mysqld.cc   2005-03-08 19:37:37.000000000 +0100
@@ -1947,7 +1947,11 @@
   if (test_flags & TEST_CORE_ON_SIGNAL)
   {
     /* Change limits so that we will get a core file */
+#if defined(__INTEL_COMPILER) && defined(setrlimit)
+    struct rlimit64 rl;
+#else
     struct rlimit rl;
+#endif
     rl.rlim_cur = rl.rlim_max = RLIM_INFINITY;
[17 Mar 2005 23:55] Lenz Grimmer
http://softwareforums.intel.com/ids/board/message?board.id=16&message.id=2083 also discusses this issue
[12 Apr 2005 8:51] Lenz Grimmer
Jim, AFAIK you are working on this one, correct?
[26 Apr 2005 1:02] 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/internals/24297
[26 Apr 2005 15:24] 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/internals/24321
[26 Apr 2005 19:02] Jim Winstead
Fixed in 4.1.12 and 5.0.4.

Not sure if we document this sort of thing.
[28 Apr 2005 2:32] Paul DuBois
No changelog note needed.