Bug #9044
closedToo many warnings with VC 2013
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
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
Those mathematics functions and a constant have been added?
Updated by phasis68 (Heesob Park) over 10 years ago
Yes, Visual C++ in Visual Studio 2013 have been added some C99 library support.
Refer to
http://msdn.microsoft.com/en-US/library/hh409293.aspx
http://blogs.msdn.com/b/vcblog/archive/2013/07/19/c99-library-support-in-visual-studio-2013.aspx
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))
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
- win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics
functions. [ruby-core:57981] [Bug #9044]
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);
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.