1 /* Test fesetexcept: exception traps enabled. 2 Copyright (C) 2016-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #include <fenv.h> 20 #include <stdio.h> 21 #include <math-tests.h> 22 23 static int do_test(void)24do_test (void) 25 { 26 int result = 0; 27 28 fedisableexcept (FE_ALL_EXCEPT); 29 int ret = feenableexcept (FE_ALL_EXCEPT); 30 if (!EXCEPTION_ENABLE_SUPPORTED (FE_ALL_EXCEPT) && (ret == -1)) 31 { 32 puts ("feenableexcept (FE_ALL_EXCEPT) not supported, cannot test"); 33 return 77; 34 } 35 else if (ret != 0) 36 { 37 puts ("feenableexcept (FE_ALL_EXCEPT) failed"); 38 result = 1; 39 return result; 40 } 41 42 if (EXCEPTION_SET_FORCES_TRAP) 43 { 44 puts ("setting exceptions traps, cannot test on this architecture"); 45 return 77; 46 } 47 /* Verify fesetexcept does not cause exception traps. */ 48 ret = fesetexcept (FE_ALL_EXCEPT); 49 if (ret == 0) 50 puts ("fesetexcept (FE_ALL_EXCEPT) succeeded"); 51 else 52 { 53 puts ("fesetexcept (FE_ALL_EXCEPT) failed"); 54 if (EXCEPTION_TESTS (float)) 55 { 56 puts ("failure of fesetexcept was unexpected"); 57 result = 1; 58 } 59 else 60 puts ("failure of fesetexcept OK"); 61 } 62 feclearexcept (FE_ALL_EXCEPT); 63 64 return result; 65 } 66 67 #define TEST_FUNCTION do_test () 68 #include "../test-skeleton.c" 69