You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Farid Zaripov <Fa...@epam.com> on 2007/08/09 19:12:14 UTC

RE: svn commit: r564059 - in /incubator/stdcxx/trunk: include/limits src/limits_bits.cpp

> -----Original Message-----
> From: sebor@apache.org [mailto:sebor@apache.org] 
> Sent: Thursday, August 09, 2007 3:48 AM
> To: stdcxx-commits@incubator.apache.org
> Subject: svn commit: r564059 - in /incubator/stdcxx/trunk: 
> include/limits src/limits_bits.cpp
> 
> Author: sebor
> Date: Wed Aug  8 17:47:54 2007
> New Revision: 564059
> 
> URL: http://svn.apache.org/viewvc?view=rev&rev=564059
> Log:
> 2007-08-09  Martin Sebor  <se...@roguewave.com>
> 
> 	STDCXX-509
> 	* limits (__rw_flt_denorm_min, __rw_flt_infinity, __rw_flt_qNaN,
> 	__rw_flt_sNaN, __rw_dbl_denorm_min, __rw_dbl_infinity, 
> __rw_dbl_qNaN,
> 	__rw_dbl_sNaN, __rw_ldbl_denorm_min, 
> __rw_ldbl_infinity, __rw_ldbl_qNaN,
> 	__rw_ldbl_sNaN): Declared floating point constants with 
> "C" language
> 	linkage to prevent "clever" compilers such as MSVC from 
> mangling their
> 	type into their names and to permit them to be defined 
> with different
> 	types.
> 	* limits_bits.cpp (__rw_flt_denorm_min, __rw_flt_infinity,
> 	__rw_flt_qNaN, __rw_flt_sNaN, __rw_dbl_denorm_min, 
> __rw_dbl_infinity,
> 	__rw_dbl_qNaN, __rw_dbl_sNaN, __rw_ldbl_denorm_min, 
> __rw_ldbl_infinity,
> 	__rw_ldbl_qNaN, __rw_ldbl_sNaN): Defined as statically 
> (i.e., at load
> 	time as opposed to dynamically, at runtime) initialized 
> unions, backed
> 	by the appropriate byte patterns, with "C" language 
> linkage to permit
> 	the defintions to have a different type than the declarations.
> 	(__rw_flt_denorm_min_bits, __rw_flt_infinity_bits, 
> __rw_flt_qNaN_bits,
> 	__rw_flt_sNaN_bits, __rw_dbl_denorm_min_bits, 
> __rw_dbl_infinity_bits,
> 	__rw_dbl_qNaN_bits, __rw_dbl_sNaN_bits, 
> __rw_ldbl_denorm_min_bits,
> 	__rw_ldbl_infinity_bits, __rw_ldbl_qNaN_bits,  
> __rw_ldbl_sNaN_bits):
> 	Removed.
> 

  The __rw_xxx_infinity variables also declared in num_get.cpp
(without extern "C" at this time). So some tests are failed
to link:
libstd15s.lib(num_get.obj) : error LNK2001: unresolved external symbol
"double const __rw::__rw_dbl_infinity" (?__rw_dbl_infinity@__rw@@3NB)
libstd15s.lib(num_get.obj) : error LNK2001: unresolved external symbol
"float const __rw::__rw_flt_infinity" (?__rw_flt_infinity@__rw@@3MB)

  The proposed patch below:

  ChangeLog:
  STDCXX-509
  * num_get.cpp: Declared floating constants with "C" linkage
  for consistency with r564059 patch

Index: num_get.cpp
===================================================================
--- num_get.cpp	(revision 564143)
+++ num_get.cpp	(working copy)
@@ -82,11 +82,16 @@
 
 typedef unsigned char UChar;
 
+extern "C" {
 
 extern const float       __rw_flt_infinity;
 extern const double      __rw_dbl_infinity;
+
+#ifndef _RWSTD_NO_LONG_DOUBLE
 extern const long double __rw_ldbl_infinity;
+#endif   // _RWSTD_NO_LONG_DOUBLE
 
+}   // extern "C"
 
 const char*
 __rw_get_stdio_fmat (char buf [32], int type, unsigned fmtflags, int
prec);

Farid.

Re: svn commit: r564059 - in /incubator/stdcxx/trunk: include/limits src/limits_bits.cpp

Posted by Martin Sebor <se...@roguewave.com>.
Yes, thanks. I haven't seen your post until now, otherwise I would
have committed it instead of mine since it also adds the missing
guard for _RWSTD_NO_LONG_DOUBLE. I checked that in just now:
http://svn.apache.org/viewvc?view=rev&rev=564676

Martin

Farid Zaripov wrote:
>> -----Original Message-----
>> From: sebor@apache.org [mailto:sebor@apache.org] 
>> Sent: Thursday, August 09, 2007 3:48 AM
>> To: stdcxx-commits@incubator.apache.org
>> Subject: svn commit: r564059 - in /incubator/stdcxx/trunk: 
>> include/limits src/limits_bits.cpp
>>
>> Author: sebor
>> Date: Wed Aug  8 17:47:54 2007
>> New Revision: 564059
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=564059
>> Log:
>> 2007-08-09  Martin Sebor  <se...@roguewave.com>
>>
>> 	STDCXX-509
>> 	* limits (__rw_flt_denorm_min, __rw_flt_infinity, __rw_flt_qNaN,
>> 	__rw_flt_sNaN, __rw_dbl_denorm_min, __rw_dbl_infinity, 
>> __rw_dbl_qNaN,
>> 	__rw_dbl_sNaN, __rw_ldbl_denorm_min, 
>> __rw_ldbl_infinity, __rw_ldbl_qNaN,
>> 	__rw_ldbl_sNaN): Declared floating point constants with 
>> "C" language
>> 	linkage to prevent "clever" compilers such as MSVC from 
>> mangling their
>> 	type into their names and to permit them to be defined 
>> with different
>> 	types.
>> 	* limits_bits.cpp (__rw_flt_denorm_min, __rw_flt_infinity,
>> 	__rw_flt_qNaN, __rw_flt_sNaN, __rw_dbl_denorm_min, 
>> __rw_dbl_infinity,
>> 	__rw_dbl_qNaN, __rw_dbl_sNaN, __rw_ldbl_denorm_min, 
>> __rw_ldbl_infinity,
>> 	__rw_ldbl_qNaN, __rw_ldbl_sNaN): Defined as statically 
>> (i.e., at load
>> 	time as opposed to dynamically, at runtime) initialized 
>> unions, backed
>> 	by the appropriate byte patterns, with "C" language 
>> linkage to permit
>> 	the defintions to have a different type than the declarations.
>> 	(__rw_flt_denorm_min_bits, __rw_flt_infinity_bits, 
>> __rw_flt_qNaN_bits,
>> 	__rw_flt_sNaN_bits, __rw_dbl_denorm_min_bits, 
>> __rw_dbl_infinity_bits,
>> 	__rw_dbl_qNaN_bits, __rw_dbl_sNaN_bits, 
>> __rw_ldbl_denorm_min_bits,
>> 	__rw_ldbl_infinity_bits, __rw_ldbl_qNaN_bits,  
>> __rw_ldbl_sNaN_bits):
>> 	Removed.
>>
> 
>   The __rw_xxx_infinity variables also declared in num_get.cpp
> (without extern "C" at this time). So some tests are failed
> to link:
> libstd15s.lib(num_get.obj) : error LNK2001: unresolved external symbol
> "double const __rw::__rw_dbl_infinity" (?__rw_dbl_infinity@__rw@@3NB)
> libstd15s.lib(num_get.obj) : error LNK2001: unresolved external symbol
> "float const __rw::__rw_flt_infinity" (?__rw_flt_infinity@__rw@@3MB)
> 
>   The proposed patch below:
> 
>   ChangeLog:
>   STDCXX-509
>   * num_get.cpp: Declared floating constants with "C" linkage
>   for consistency with r564059 patch
> 
> Index: num_get.cpp
> ===================================================================
> --- num_get.cpp	(revision 564143)
> +++ num_get.cpp	(working copy)
> @@ -82,11 +82,16 @@
>  
>  typedef unsigned char UChar;
>  
> +extern "C" {
>  
>  extern const float       __rw_flt_infinity;
>  extern const double      __rw_dbl_infinity;
> +
> +#ifndef _RWSTD_NO_LONG_DOUBLE
>  extern const long double __rw_ldbl_infinity;
> +#endif   // _RWSTD_NO_LONG_DOUBLE
>  
> +}   // extern "C"
>  
>  const char*
>  __rw_get_stdio_fmat (char buf [32], int type, unsigned fmtflags, int
> prec);
> 
> Farid.