1 /* Test fegetexceptflag and fesetexceptflag: 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 = feraiseexcept (FE_ALL_EXCEPT); 30 if (ret != 0) 31 { 32 if (EXCEPTION_TESTS (float)) 33 { 34 puts ("feraiseexcept (FE_ALL_EXCEPT) failed"); 35 result = 1; 36 return result; 37 } 38 else 39 { 40 puts ("feraiseexcept (FE_ALL_EXCEPT) unsupported, cannot test"); 41 return 77; 42 } 43 } 44 fexcept_t saved; 45 ret = fegetexceptflag (&saved, FE_ALL_EXCEPT); 46 if (ret != 0) 47 { 48 puts ("fegetexceptflag failed"); 49 result = 1; 50 return result; 51 } 52 feclearexcept (FE_ALL_EXCEPT); 53 54 ret = feenableexcept (FE_ALL_EXCEPT); 55 if (!EXCEPTION_ENABLE_SUPPORTED (FE_ALL_EXCEPT) && (ret == -1)) 56 { 57 puts ("feenableexcept (FE_ALL_EXCEPT) not supported, cannot test"); 58 return 77; 59 } 60 else if (ret != 0) 61 { 62 puts ("feenableexcept (FE_ALL_EXCEPT) failed"); 63 result = 1; 64 } 65 66 if (EXCEPTION_SET_FORCES_TRAP) 67 { 68 puts ("setting exceptions traps, cannot test on this architecture"); 69 return 77; 70 } 71 /* The test is that this does not cause exception traps. */ 72 ret = fesetexceptflag (&saved, FE_ALL_EXCEPT); 73 if (ret != 0) 74 { 75 puts ("fesetexceptflag failed"); 76 result = 1; 77 } 78 feclearexcept (FE_ALL_EXCEPT); 79 80 return result; 81 } 82 83 #define TEST_FUNCTION do_test () 84 #include "../test-skeleton.c" 85