aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>2014-07-07 07:47:41 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2014-07-07 07:47:41 +0000
commita709346f066f6cfdb34c4fe70fa4b3bf81487bb9 (patch)
treeb8e4282de31de91e2dd8eec2555c0544331c84ec
parent1b38fe0e93229eefa1259e45f90c5d936b288a3d (diff)
downloadgcc-a709346f066f6cfdb34c4fe70fa4b3bf81487bb9.zip
gcc-a709346f066f6cfdb34c4fe70fa4b3bf81487bb9.tar.gz
gcc-a709346f066f6cfdb34c4fe70fa4b3bf81487bb9.tar.bz2
fpu-387.h, [...]: Use static assertions.
* config/fpu-387.h, config/fpu-aix.h, config/fpu-sysv.h, config/fpu-glibc.h: Use static assertions. From-SVN: r212323
-rw-r--r--libgfortran/ChangeLog5
-rw-r--r--libgfortran/config/fpu-387.h13
-rw-r--r--libgfortran/config/fpu-aix.h11
-rw-r--r--libgfortran/config/fpu-glibc.h13
-rw-r--r--libgfortran/config/fpu-sysv.h13
5 files changed, 25 insertions, 30 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 9f03a5c..03f6f2ac 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 66e2dbe..2c5a5fc 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 c1079fc..c297045 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 d7c9d86..b6ea120 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 8d8ff32..97eed28 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);