Project

General

Profile

Actions

Bug #9044

closed

Too many warnings with VC 2013

Added by phasis68 (Heesob Park) over 10 years ago. Updated over 10 years ago.

Status:
Closed
Assignee:
Target version:
-
ruby -v:
ruby 2.1.0dev (2013-10-23 trunk 43392) [i386-mswin32_120]
[ruby-core:57981]

Description

While building with Visual Studio Express 2013 on Windows 7, I can see many warnings like inconsistent dll linkage and overflow in constant arithmetic.

Here is a part of warnings.

C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(73) : warning C4273: 'acosh' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(475) : see previous definition of 'acosh'
C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(74) : warning C4273: 'asinh' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(477) : see previous definition of 'asinh'
C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(75) : warning C4273: 'atanh' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(479) : see previous definition of 'atanh'
C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(91) : warning C4273: 'round' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(516) : see previous definition of 'round'
C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(113) : warning C4273: 'erf' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(486) : see previous definition of 'erf'
C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(114) : warning C4273: 'erfc' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(487) : see previous definition of 'erfc'
C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(118) : warning C4273: 'tgamma' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(524) : see previous definition of 'tgamma'
C:\work\ruby-2.1.0-r43392\include\ruby/missing.h(126) : warning C4273: 'cbrt' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(482) : see previous definition of 'cbrt'
math.c(381) : warning C4056: overflow in floating-point constant arithmetic
math.c(463) : warning C4056: overflow in floating-point constant arithmetic
math.c(478) : warning C4273: 'log2' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(504) : see previous definition of 'log2'
math.c(523) : warning C4056: overflow in floating-point constant arithmetic
math.c(565) : warning C4056: overflow in floating-point constant arithmetic
c:\work\ruby-2.1.0-r43392\math.c(381) : warning C4756: overflow in constant arithmetic
c:\work\ruby-2.1.0-r43392\math.c(382) : warning C4756: overflow in constant arithmetic
c:\work\ruby-2.1.0-r43392\math.c(463) : warning C4756: overflow in constant arithmetic
c:\work\ruby-2.1.0-r43392\math.c(565) : warning C4756: overflow in constant arithmetic
c:\work\ruby-2.1.0-r43392\math.c(867) : warning C4756: overflow in constant arithmetic
c:\work\ruby-2.1.0-r43392\math.c(523) : warning C4756: overflow in constant arithmetic

I attached the whole nmake log.


Files

make.log (192 KB) make.log phasis68 (Heesob Park), 10/23/2013 02:57 PM

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

Those mathematics functions and a constant have been added?

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

Thank you.

I'm not sure how INFINITY is defined, any negative INFINITY constant is defined?

Updated by phasis68 (Heesob Park) over 10 years ago

Here is a part of math.h

#ifndef _HUGE_ENUF
#define _HUGE_ENUF 1e+300 /* _HUGE_ENUF*_HUGE_ENUF must overflow /
#endif /
_HUGE_ENUF */

#define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF)) /* causes warning C4756: overflow in constant arithmetic (by design) */
#define HUGE_VALD ((double)INFINITY)
#define HUGE_VALF ((float)INFINITY)
#define HUGE_VALL ((long double)INFINITY)
#define NAN ((float)(INFINITY * 0.0F))

Actions #5

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r43398.
Heesob, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


Makefile.sub: C99 mathematics functions

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Category set to core
  • Status changed from Closed to Assigned
  • Assignee set to windows
  • Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 1.9.3: REQUIRED, 2.0.0: REQUIRED

"by design"!?

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • % Done changed from 100 to 50

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

=begin
Does this suppress (({INFINITY})) warnings?

diff --git a/include/ruby/win32.h b/include/ruby/win32.h
index 979e73b..5d04e9c 100644
--- a/include/ruby/win32.h
+++ b/include/ruby/win32.h
@@ -355,6 +355,20 @@ extern FILE *rb_w32_fsopen(const char *, const char *, int);
#endif

#include <float.h>
+
+#if defined _MSC_VER && _MSC_VER >= 1800 && defined INFINITY
+#pragma warning(push)
+#pragma warning(disable:4756)
+static inline float
+rb_infinity(void)
+{

  • return INFINITY;
    +}
    +#pragma warning(pop)
    +#undef INFINITY
    +#define INFINITY rb_infinity
    +#endif

#if !defined MINGW32 || defined __NO_ISOCEXT
#ifndef isnan
#define isnan(x) _isnan(x)
=end

Updated by phasis68 (Heesob Park) over 10 years ago

The revision 43398 has a bug.

!if $(RT_VER) >= 1200
should be
!if $(RT_VER) >= 120

And the above path has a bug.

#define INFINITY rb_infinity
should be
#define INFINITY rb_infinity()

After applying revision 43398 and the above patch, only one warning remains.

math.c(482) : warning C4273: 'log2' : inconsistent dll linkage
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(504) : see previous definition of 'log2'

The line 504 of math.h is
_CRTIMP double __cdecl log2(In double _X);

Actions #10

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 50 to 100

This issue was solved with changeset r43407.
Heesob, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


Makefile.sub: C99 mathematics functions

  • win32/Makefile.sub (config.h): fix version number of runtime
    library. log2 needs to be defined, not only HAVE_LOG2.
    [ruby-core:57992] [Bug #9044]

Updated by nagachika (Tomoyuki Chikanaga) over 10 years ago

  • Backport changed from 1.9.3: REQUIRED, 2.0.0: REQUIRED to 1.9.3: REQUIRED, 2.0.0: DONE

r43398, r43407, r43408, r43417 are backported to ruby_2_0_0 at r43648.

Updated by usa (Usaku NAKAMURA) over 10 years ago

  • Backport changed from 1.9.3: REQUIRED, 2.0.0: DONE to 1.9.3: DONE, 2.0.0: DONE

backported into ruby_1_9_3 at r44743.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0