bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MSVC fails to compile floor.c with -fp:strict


From: Bruno Haible
Subject: Re: MSVC fails to compile floor.c with -fp:strict
Date: Tue, 28 Feb 2012 11:52:14 +0100
User-agent: KMail/4.7.4 (Linux/3.1.0-1.2-desktop; KDE/4.7.4; x86_64; ; )

Michael Goffioul wrote:
> With the #pragma statement, the compilation error disappears, thanks.

Thanks for verifying that we were on the right track.

> I think the same
> problem will appear in round.c and trunc.c (those are also used by
> octave).

Yes, and there are a few more. I'm applying this patch.


2012-02-28  Bruno Haible  <address@hidden>

        Avoid compilation errors with MSVC option -fp:strict.
        * lib/floor.c: Use MSVC specific pragma fenv_access.
        * lib/ceil.c: Likewise.
        * lib/trunc.c: Likewise.
        * lib/round.c: Likewise.
        * lib/rint.c: Likewise.
        * lib/fma.c: Likewise.
        * lib/integer_length.c: Likewise.
        * m4/round.m4 (gl_FUNC_ROUND): Likewise.
        * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise.
        * tests/test-floor2.c: Likewise.
        * tests/test-floorf2.c: Likewise.
        * tests/test-ceil2.c: Likewise.
        * tests/test-ceilf2.c: Likewise.
        * tests/test-trunc2.c: Likewise.
        * tests/test-truncf2.c: Likewise.
        Reported by Michael Goffioul <address@hidden>.

--- lib/ceil.c.orig     Tue Feb 28 11:49:10 2012
+++ lib/ceil.c  Tue Feb 28 03:03:43 2012
@@ -54,6 +54,12 @@
 # define MINUS_ZERO L_(-0.0)
 #endif
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 /* 2^(MANT_DIG-1).  */
 static const DOUBLE TWO_MANT_DIG =
   /* Assume MANT_DIG <= 5 * 31.
--- lib/floor.c.orig    Tue Feb 28 11:49:10 2012
+++ lib/floor.c Tue Feb 28 03:03:43 2012
@@ -42,6 +42,12 @@
 # define L_(literal) literal##f
 #endif
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 /* 2^(MANT_DIG-1).  */
 static const DOUBLE TWO_MANT_DIG =
   /* Assume MANT_DIG <= 5 * 31.
--- lib/fma.c.orig      Tue Feb 28 11:49:10 2012
+++ lib/fma.c   Tue Feb 28 03:01:11 2012
@@ -66,6 +66,12 @@
 #undef MIN
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 /* It is possible to write an implementation of fused multiply-add with
    floating-point operations alone.  See
      Sylvie Boldo, Guillaume Melquiond:
--- lib/integer_length.c.orig   Tue Feb 28 11:49:10 2012
+++ lib/integer_length.c        Tue Feb 28 03:03:44 2012
@@ -25,6 +25,12 @@
 
 #include "float+.h"
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 #define NBITS (sizeof (unsigned int) * CHAR_BIT)
 
 int
--- lib/rint.c.orig     Tue Feb 28 11:49:10 2012
+++ lib/rint.c  Tue Feb 28 03:03:44 2012
@@ -53,6 +53,12 @@
 # define MINUS_ZERO L_(-0.0)
 #endif
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 DOUBLE
 RINT (DOUBLE x)
 {
--- lib/round.c.orig    Tue Feb 28 11:49:10 2012
+++ lib/round.c Tue Feb 28 03:03:43 2012
@@ -64,6 +64,12 @@
 # define MINUS_ZERO L_(-0.0)
 #endif
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 /* If we're being included from test-round2[f].c, it already defined names for
    our round implementations.  Otherwise, pick the preferred implementation for
    this machine. */
--- lib/trunc.c.orig    Tue Feb 28 11:49:10 2012
+++ lib/trunc.c Tue Feb 28 11:47:41 2012
@@ -54,6 +54,12 @@
 # define MINUS_ZERO L_(-0.0)
 #endif
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 /* 2^(MANT_DIG-1).  */
 static const DOUBLE TWO_MANT_DIG =
   /* Assume MANT_DIG <= 5 * 31.
--- m4/round.m4.orig    Tue Feb 28 11:49:10 2012
+++ m4/round.m4 Tue Feb 28 03:45:00 2012
@@ -1,4 +1,4 @@
-# round.m4 serial 13
+# round.m4 serial 14
 dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -25,6 +25,9 @@
           AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <float.h>
 #include <math.h>
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
 int main()
 {
   /* 2^DBL_MANT_DIG.  */
--- m4/roundf.m4.orig   Tue Feb 28 11:49:10 2012
+++ m4/roundf.m4        Tue Feb 28 03:45:00 2012
@@ -1,4 +1,4 @@
-# roundf.m4 serial 14
+# roundf.m4 serial 15
 dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -25,6 +25,9 @@
           AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <float.h>
 #include <math.h>
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
 int main()
 {
   /* 2^FLT_MANT_DIG.  */
--- tests/test-ceil2.c.orig     Tue Feb 28 11:49:10 2012
+++ tests/test-ceil2.c  Tue Feb 28 03:04:42 2012
@@ -32,6 +32,12 @@
 #include "minus-zero.h"
 #include "macros.h"
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 
 /* The reference implementation, taken from lib/ceil.c.  */
 
--- tests/test-ceilf2.c.orig    Tue Feb 28 11:49:10 2012
+++ tests/test-ceilf2.c Tue Feb 28 03:04:42 2012
@@ -32,6 +32,12 @@
 #include "minus-zero.h"
 #include "macros.h"
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 
 /* The reference implementation, taken from lib/ceil.c.  */
 
--- tests/test-floor2.c.orig    Tue Feb 28 11:49:10 2012
+++ tests/test-floor2.c Tue Feb 28 03:05:12 2012
@@ -31,6 +31,12 @@
 #include "isnand-nolibm.h"
 #include "macros.h"
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 
 /* The reference implementation, taken from lib/floor.c.  */
 
--- tests/test-floorf2.c.orig   Tue Feb 28 11:49:10 2012
+++ tests/test-floorf2.c        Tue Feb 28 03:05:13 2012
@@ -31,6 +31,12 @@
 #include "isnanf-nolibm.h"
 #include "macros.h"
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 
 /* The reference implementation, taken from lib/floor.c.  */
 
--- tests/test-trunc2.c.orig    Tue Feb 28 11:49:10 2012
+++ tests/test-trunc2.c Tue Feb 28 03:06:16 2012
@@ -32,6 +32,12 @@
 #include "minus-zero.h"
 #include "macros.h"
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 
 /* The reference implementation, taken from lib/trunc.c.  */
 
--- tests/test-truncf2.c.orig   Tue Feb 28 11:49:10 2012
+++ tests/test-truncf2.c        Tue Feb 28 03:06:16 2012
@@ -32,6 +32,12 @@
 #include "minus-zero.h"
 #include "macros.h"
 
+/* MSVC with option -fp:strict refuses to compile constant initializers that
+   contain floating-point operations.  Pacify this compiler.  */
+#ifdef _MSC_VER
+# pragma fenv_access (off)
+#endif
+
 
 /* The reference implementation, taken from lib/trunc.c.  */
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]