• Joerg Bruehe's avatar
    Our autoconf function "MYSQL_STACK_DIRECTION" will not work · 9ff93233
    Joerg Bruehe authored
    correctly if the compiler optimizes too clever.
    
    This has happaned on HP-UX 11.23 (IA64) at optimization
    level "+O2", causing bug#42213:
       Check for "stack overrun" doesn't work, server crashes
    
    Fix it by adding a pragma that prevents this optimization.
    As a result, it should be safe to use "+O2" on this platform
    (unless there is some other, optimizer-related, bug which
    is just currently masked because we use resudec optimization).
    
    
    config/ac-macros/misc.m4:
      Our autoconf function "MYSQL_STACK_DIRECTION" is meant to
      determine whether the stack grows towards higher or towards
      lower addresses.
      It does this by comparing the addresses of a variable
      (which is local to a recursive function) on different
      nesting levels.
      
      This approach requires that the function is really
      implemented as a recursive function, with each nested call
      allocating a new stack frame containing the local variable.
      If, however, the compiler is optimizing so clever that the
      recursive function is implemented by a loop, then this
      test will not produce correct results.
      
      This has happened on HP-UX 11.23 (IA64) when HP's compiler
      was called with optimization "+O2" (not with "+O1"),
      reported as bug#42213.
      
      Rather than starting a race with the compiler and making
      the function so complicated that this optimization does
      not happen, the idea is to prevent the optimization
      by adding a pragma. For HP, this is "#pragma noinline".
      
      If we encounter other compilers which also optimize
      too clever, we may add their pragmas here.
      
      It is a debatable issue whether such pragmas should be
      guarded by conditional compiling or not, the reviewers
      voted to do it.
      It seems HP has different compilers, "ANSI C" and "aCC",
      on the affected platform "__HP_cc" ("ANSI C") is predefined.
      To be on the safe side, the pragma will also take effect
      if HP's "aCC" compiler is used, or any other compiler on HP-UX.
    9ff93233
misc.m4 22.9 KB