1*10d565efSmrg# intdiv0.m4 serial 1 (gettext-0.11.3) 2*10d565efSmrgdnl Copyright (C) 2002 Free Software Foundation, Inc. 3*10d565efSmrgdnl This file is free software, distributed under the terms of the GNU 4*10d565efSmrgdnl General Public License. As a special exception to the GNU General 5*10d565efSmrgdnl Public License, this file may be distributed as part of a program 6*10d565efSmrgdnl that contains a configuration script generated by Autoconf, under 7*10d565efSmrgdnl the same distribution terms as the rest of that program. 8*10d565efSmrg 9*10d565efSmrgdnl From Bruno Haible. 10*10d565efSmrg 11*10d565efSmrgAC_DEFUN([gt_INTDIV0], 12*10d565efSmrg[ 13*10d565efSmrg AC_REQUIRE([AC_PROG_CC])dnl 14*10d565efSmrg AC_REQUIRE([AC_CANONICAL_HOST])dnl 15*10d565efSmrg 16*10d565efSmrg AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], 17*10d565efSmrg gt_cv_int_divbyzero_sigfpe, 18*10d565efSmrg [ 19*10d565efSmrg AC_TRY_RUN([ 20*10d565efSmrg#include <stdlib.h> 21*10d565efSmrg#include <signal.h> 22*10d565efSmrg 23*10d565efSmrgstatic void 24*10d565efSmrg#ifdef __cplusplus 25*10d565efSmrgsigfpe_handler (int sig) 26*10d565efSmrg#else 27*10d565efSmrgsigfpe_handler (sig) int sig; 28*10d565efSmrg#endif 29*10d565efSmrg{ 30*10d565efSmrg /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ 31*10d565efSmrg exit (sig != SIGFPE); 32*10d565efSmrg} 33*10d565efSmrg 34*10d565efSmrgint x = 1; 35*10d565efSmrgint y = 0; 36*10d565efSmrgint z; 37*10d565efSmrgint nan; 38*10d565efSmrg 39*10d565efSmrgint main () 40*10d565efSmrg{ 41*10d565efSmrg signal (SIGFPE, sigfpe_handler); 42*10d565efSmrg/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ 43*10d565efSmrg#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) 44*10d565efSmrg signal (SIGTRAP, sigfpe_handler); 45*10d565efSmrg#endif 46*10d565efSmrg/* Linux/SPARC yields signal SIGILL. */ 47*10d565efSmrg#if defined (__sparc__) && defined (__linux__) 48*10d565efSmrg signal (SIGILL, sigfpe_handler); 49*10d565efSmrg#endif 50*10d565efSmrg 51*10d565efSmrg z = x / y; 52*10d565efSmrg nan = y / y; 53*10d565efSmrg exit (1); 54*10d565efSmrg} 55*10d565efSmrg], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, 56*10d565efSmrg [ 57*10d565efSmrg # Guess based on the CPU. 58*10d565efSmrg case "$host_cpu" in 59*10d565efSmrg alpha* | i[34567]86 | m68k | s390*) 60*10d565efSmrg gt_cv_int_divbyzero_sigfpe="guessing yes";; 61*10d565efSmrg *) 62*10d565efSmrg gt_cv_int_divbyzero_sigfpe="guessing no";; 63*10d565efSmrg esac 64*10d565efSmrg ]) 65*10d565efSmrg ]) 66*10d565efSmrg case "$gt_cv_int_divbyzero_sigfpe" in 67*10d565efSmrg *yes) value=1;; 68*10d565efSmrg *) value=0;; 69*10d565efSmrg esac 70*10d565efSmrg AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, 71*10d565efSmrg [Define if integer division by zero raises signal SIGFPE.]) 72*10d565efSmrg]) 73