diff options
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 5 | ||||
-rw-r--r-- | libgfortran/config/fpu-387.h | 13 | ||||
-rw-r--r-- | libgfortran/config/fpu-aix.h | 11 | ||||
-rw-r--r-- | libgfortran/config/fpu-glibc.h | 13 | ||||
-rw-r--r-- | libgfortran/config/fpu-sysv.h | 13 |
5 files changed, 25 insertions, 30 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 9f03a5ce368..03f6f2ac60a 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2014-07-07 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + * config/fpu-387.h, config/fpu-aix.h, config/fpu-sysv.h, + config/fpu-glibc.h: Use static assertions. + 2014-07-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * configure, config.h.in: Regenerate. diff --git a/libgfortran/config/fpu-387.h b/libgfortran/config/fpu-387.h index 66e2dbeecea..2c5a5fcc6fa 100644 --- a/libgfortran/config/fpu-387.h +++ b/libgfortran/config/fpu-387.h @@ -23,8 +23,6 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ -#include <assert.h> - #ifndef __SSE_MATH__ #include "cpuid.h" #endif @@ -85,6 +83,11 @@ typedef struct my_fenv_t; +/* Check we can actually store the FPU state in the allocated size. */ +_Static_assert (sizeof(my_fenv_t) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE, + "GFC_FPE_STATE_BUFFER_SIZE is too small"); + + /* Raise the supported floating-point exceptions from EXCEPTS. Other bits in EXCEPTS are ignored. Code originally borrowed from libatomic/config/x86/fenv.c. */ @@ -429,9 +432,6 @@ get_fpu_state (void *state) { my_fenv_t *envp = state; - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(my_fenv_t) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE); - __asm__ __volatile__ ("fnstenv\t%0" : "=m" (*envp)); /* fnstenv has the side effect of masking all exceptions, so we need @@ -447,9 +447,6 @@ set_fpu_state (void *state) { my_fenv_t *envp = state; - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(my_fenv_t) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE); - /* glibc sources (sysdeps/x86_64/fpu/fesetenv.c) do something more complex than this, but I think it suffices in our case. */ __asm__ __volatile__ ("fldenv\t%0" : : "m" (*envp)); diff --git a/libgfortran/config/fpu-aix.h b/libgfortran/config/fpu-aix.h index c1079fcc1a3..c2970452bc1 100644 --- a/libgfortran/config/fpu-aix.h +++ b/libgfortran/config/fpu-aix.h @@ -38,6 +38,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif +/* Check we can actually store the FPU state in the allocated size. */ +_Static_assert (sizeof(fenv_t) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE, + "GFC_FPE_STATE_BUFFER_SIZE is too small"); + + void set_fpu_trap_exceptions (int trap, int notrap) { @@ -403,18 +408,12 @@ support_fpu_rounding_mode (int mode) void get_fpu_state (void *state) { - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(fenv_t) <= GFC_FPE_STATE_BUFFER_SIZE); - fegetenv (state); } void set_fpu_state (void *state) { - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(fenv_t) <= GFC_FPE_STATE_BUFFER_SIZE); - fesetenv (state); } diff --git a/libgfortran/config/fpu-glibc.h b/libgfortran/config/fpu-glibc.h index d7c9d86da43..b6ea1203a62 100644 --- a/libgfortran/config/fpu-glibc.h +++ b/libgfortran/config/fpu-glibc.h @@ -27,13 +27,16 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see feenableexcept function in fenv.h to set individual exceptions (there's nothing to do that in C99). */ -#include <assert.h> - #ifdef HAVE_FENV_H #include <fenv.h> #endif +/* Check we can actually store the FPU state in the allocated size. */ +_Static_assert (sizeof(fenv_t) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE, + "GFC_FPE_STATE_BUFFER_SIZE is too small"); + + void set_fpu_trap_exceptions (int trap, int notrap) { #ifdef FE_INVALID @@ -416,9 +419,6 @@ support_fpu_rounding_mode (int mode) void get_fpu_state (void *state) { - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(fenv_t) <= GFC_FPE_STATE_BUFFER_SIZE); - fegetenv (state); } @@ -426,9 +426,6 @@ get_fpu_state (void *state) void set_fpu_state (void *state) { - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(fenv_t) <= GFC_FPE_STATE_BUFFER_SIZE); - fesetenv (state); } diff --git a/libgfortran/config/fpu-sysv.h b/libgfortran/config/fpu-sysv.h index 8d8ff329f1f..97eed2833c6 100644 --- a/libgfortran/config/fpu-sysv.h +++ b/libgfortran/config/fpu-sysv.h @@ -25,8 +25,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see /* FPU-related code for SysV platforms with fpsetmask(). */ -#include <assert.h> - /* BSD and Solaris systems have slightly different types and functions naming. We deal with these here, to simplify the code below. */ @@ -444,14 +442,16 @@ typedef struct } fpu_state_t; +/* Check we can actually store the FPU state in the allocated size. */ +_Static_assert (sizeof(fpu_state_t) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE, + "GFC_FPE_STATE_BUFFER_SIZE is too small"); + + void get_fpu_state (void *s) { fpu_state_t *state = s; - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(fpu_state_t) <= GFC_FPE_STATE_BUFFER_SIZE); - state->mask = fpgetmask (); state->sticky = fpgetsticky (); state->round = fpgetround (); @@ -462,9 +462,6 @@ set_fpu_state (void *s) { fpu_state_t *state = s; - /* Check we can actually store the FPU state in the allocated size. */ - assert (sizeof(fpu_state_t) <= GFC_FPE_STATE_BUFFER_SIZE); - fpsetmask (state->mask); FPSETSTICKY (state->sticky); fpsetround (state->round); |