Home | History | Annotate | Download | only in m4
      1 # intdiv0.m4 serial 1 (gettext-0.11.3)
      2 dnl Copyright (C) 2002 Free Software Foundation, Inc.
      3 dnl This file is free software; the Free Software Foundation
      4 dnl gives unlimited permission to copy and/or distribute it,
      5 dnl with or without modifications, as long as this notice is preserved.
      6 
      7 dnl From Bruno Haible.
      8 
      9 AC_DEFUN([gt_INTDIV0],
     10 [
     11   AC_REQUIRE([AC_PROG_CC])dnl
     12   AC_REQUIRE([AC_CANONICAL_HOST])dnl
     13 
     14   AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
     15     gt_cv_int_divbyzero_sigfpe,
     16     [
     17       AC_TRY_RUN([
     18 #include <stdlib.h>
     19 #include <signal.h>
     20 
     21 static void
     22 #ifdef __cplusplus
     23 sigfpe_handler (int sig)
     24 #else
     25 sigfpe_handler (sig) int sig;
     26 #endif
     27 {
     28   /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
     29   exit (sig != SIGFPE);
     30 }
     31 
     32 int x = 1;
     33 int y = 0;
     34 int z;
     35 int nan;
     36 
     37 int main ()
     38 {
     39   signal (SIGFPE, sigfpe_handler);
     40 /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
     41 #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
     42   signal (SIGTRAP, sigfpe_handler);
     43 #endif
     44 /* Linux/SPARC yields signal SIGILL.  */
     45 #if defined (__sparc__) && defined (__linux__)
     46   signal (SIGILL, sigfpe_handler);
     47 #endif
     48 
     49   z = x / y;
     50   nan = y / y;
     51   exit (1);
     52 }
     53 ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
     54         [
     55           # Guess based on the CPU.
     56           case "$host_cpu" in
     57             alpha* | i[34567]86 | m68k | s390*)
     58               gt_cv_int_divbyzero_sigfpe="guessing yes";;
     59             *)
     60               gt_cv_int_divbyzero_sigfpe="guessing no";;
     61           esac
     62         ])
     63     ])
     64   case "$gt_cv_int_divbyzero_sigfpe" in
     65     *yes) value=1;;
     66     *) value=0;;
     67   esac
     68   AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
     69     [Define if integer division by zero raises signal SIGFPE.])
     70 ])
     71