| version 1.1, 2000/09/09 14:12:15 |
version 1.1.1.2, 2003/08/25 16:06:00 |
|
|
| /* gmp_errno -- The largest and most complex file in GMP. |
/* gmp_errno, __gmp_exception -- exception handling and reporting. |
| |
|
| Copyright (C) 2000 Free Software Foundation, Inc. |
Copyright 2000, 2001 Free Software Foundation, Inc. |
| |
|
| This file is part of the GNU MP Library. |
This file is part of the GNU MP Library. |
| |
|
| Line 19 along with the GNU MP Library; see the file COPYING.LI |
|
| Line 19 along with the GNU MP Library; see the file COPYING.LI |
|
| the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
| MA 02111-1307, USA. */ |
MA 02111-1307, USA. */ |
| |
|
| |
#include <stdlib.h> |
| #include "gmp.h" |
#include "gmp.h" |
| #include "gmp-impl.h" |
#include "gmp-impl.h" |
| |
|
| int gmp_errno = 0; |
int gmp_errno = 0; |
| |
|
| |
|
| |
/* The deliberate divide by zero triggers an exception on most systems. On |
| |
those where it doesn't, for example power and powerpc, use abort instead. |
| |
|
| |
Enhancement: Perhaps raise(SIGFPE) (or the same with kill()) would be |
| |
better than abort. Perhaps it'd be possible to get the BSD style |
| |
FPE_INTDIV_TRAP parameter in there too. */ |
| |
|
| |
void |
| |
__gmp_exception (int error_bit) |
| |
{ |
| |
gmp_errno |= error_bit; |
| |
__gmp_junk = 10 / __gmp_0; |
| |
abort (); |
| |
} |
| |
|
| |
|
| |
/* These functions minimize the amount of code required in functions raising |
| |
exceptions. Since they're "noreturn" and don't take any parameters, a |
| |
test and call might even come out as a simple conditional jump. */ |
| |
void |
| |
__gmp_sqrt_of_negative (void) |
| |
{ |
| |
__gmp_exception (GMP_ERROR_SQRT_OF_NEGATIVE); |
| |
} |
| |
void |
| |
__gmp_divide_by_zero (void) |
| |
{ |
| |
__gmp_exception (GMP_ERROR_DIVISION_BY_ZERO); |
| |
} |