Project

General

Profile

Bug #9044

Too many warnings with VC 2013

Added by phasis68 (Heesob Park) almost 4 years ago. Updated over 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
cruby-windows
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.

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

Associated revisions

Revision 43398
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

Makefile.sub: C99 mathematics functions

* win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics
functions. [Bug #9044]

Revision 43398
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

Makefile.sub: C99 mathematics functions

* win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics
functions. [Bug #9044]

Revision 43398
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

Makefile.sub: C99 mathematics functions

* win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics
functions. [Bug #9044]

Revision 43398
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

Makefile.sub: C99 mathematics functions

* win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics
functions. [Bug #9044]

Revision 43407
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

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.
[Bug #9044]

Revision 43407
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

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.
[Bug #9044]

Revision 43407
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

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.
[Bug #9044]

Revision 43407
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

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.
[Bug #9044]

Revision 43408
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

win32.h: suppress INFINITY warnings

* include/ruby/win32.h (rb_infinity_float): suppress overflow in
constant arithmetic warnings. [Bug #9044]

Revision 43408
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

win32.h: suppress INFINITY warnings

* include/ruby/win32.h (rb_infinity_float): suppress overflow in
constant arithmetic warnings. [Bug #9044]

Revision 43408
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

win32.h: suppress INFINITY warnings

* include/ruby/win32.h (rb_infinity_float): suppress overflow in
constant arithmetic warnings. [Bug #9044]

Revision 43408
Added by nobu (Nobuyoshi Nakada) almost 4 years ago

win32.h: suppress INFINITY warnings

* include/ruby/win32.h (rb_infinity_float): suppress overflow in
constant arithmetic warnings. [Bug #9044]

History

#1 [ruby-core:57982] Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

Those mathematics functions and a constant have been added?

#3 [ruby-core:57984] Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

Thank you.

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

#4 [ruby-core:57985] Updated by phasis68 (Heesob Park) almost 4 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))

#5 Updated by nobu (Nobuyoshi Nakada) almost 4 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

  • win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics functions. [Bug #9044]

#6 [ruby-core:57989] Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

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

"by design"!?

#7 [ruby-core:57990] Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

  • % Done changed from 100 to 50

#8 [ruby-core:57991] Updated by nobu (Nobuyoshi Nakada) almost 4 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
+
+#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

#9 [ruby-core:57992] Updated by phasis68 (Heesob Park) almost 4 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);

#10 Updated by nobu (Nobuyoshi Nakada) almost 4 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. [Bug #9044]

#11 [ruby-core:58279] Updated by nagachika (Tomoyuki Chikanaga) over 3 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.

#12 [ruby-core:60199] Updated by usa (Usaku NAKAMURA) over 3 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.

Also available in: Atom PDF