For some reason this post bounced. It's probably my fault for using two
email accounts. I should use the same one.

-- Mark

---------- Forwarded message ----------
From: mark.g.brown <[EMAIL PROTECTED]>
Date: Aug 14, 2007 11:09 PM
Subject: Re: Re: svn commit: r564059 - in /incubator/stdcxx/trunk:
include/limits src/limits_bits.cpp
To: stdcxx-dev@incubator.apache.org

Martin Sebor wrote:
> Andrew Black wrote:
>> Greetings Martin
>>
>> I'm not completely certain, but I believe this change is leading to
>> failures on most or all operating systems.  In particular, linker
>> warnings of
>
> Drat! The patch is incomplete. I forgot to commit a change
> to another library file that forward declares the symbol.
> This should fix it:
> http://svn.apache.org/viewvc?view=rev&rev=564664

I'm curious, is this change meant to be binary compatible? I ask because
some of my programs have started to fail to link since I updated to the
latest stdcxx sources.

-- Mark

>
> Thanks for letting me know!
> Martin
>
>>> ld: (Warning) Unsatisfied symbol "__rw::__rw_flt_infinity" in file
>>> $(BUILDDIR)/lib/libstd.sl
>>> ld: (Warning) Unsatisfied symbol "__rw::__rw_dbl_infinity" in file
>>> $(BUILDDIR)/lib/libstd.sl
>>> ld: (Warning) Unsatisfied symbol "__rw::__rw_ldbl_infinity" in file
>>> $(BUILDDIR)/lib/libstd.sl
>> are observed in static builds (on HPUX), and the same message is
>> observed when running the exec utility in dynamic builds.
>>
>> --Andrew Black
>>
>> [EMAIL PROTECTED] wrote:
>>> 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  <[EMAIL PROTECTED]>
>>>
>>>     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.
>>>
>>> Modified:
>>>     incubator/stdcxx/trunk/include/limits
>>>     incubator/stdcxx/trunk/src/limits_bits.cpp
>>>
>>> Modified: incubator/stdcxx/trunk/include/limits
>>> URL:
>>>
http://svn.apache.org/viewvc/incubator/stdcxx/trunk/include/limits?view=diff&rev=564059&r1=564058&r2=564059
>>>
>>>
==============================================================================
>>>
>>> --- incubator/stdcxx/trunk/include/limits (original)
>>> +++ incubator/stdcxx/trunk/include/limits Wed Aug  8 17:47:54 2007
>>> @@ -23,7 +23,7 @@
>>>   * implied.   See  the License  for  the  specific language  governing
>>>   * permissions and limitations under the License.
>>>   *
>>> - * Copyright 1994-2006 Rogue Wave Software.
>>> + * Copyright 1994-2007 Rogue Wave Software, Inc.
>>>   *
>>>
**************************************************************************/
>>>
>>>
>>> @@ -86,7 +86,9 @@
>>>  #endif   // _RWSTD_IS_IEC559
>>>
>>>
>>> -_RWSTD_NAMESPACE (__rw) { +_RWSTD_NAMESPACE (__rw) {
>>> +
>>> +extern "C" {
>>>
>>>  _RWSTD_EXPORT extern const float       __rw_flt_infinity;
>>>  _RWSTD_EXPORT extern const double      __rw_dbl_infinity;
>>> @@ -108,6 +110,8 @@
>>>  _RWSTD_EXPORT extern const long double __rw_ldbl_denorm_min;
>>>
>>>  #endif   // _RWSTD_NO_LONG_DOUBLE
>>> +
>>> +}   // extern "C"
>>>
>>>  }   // namespace __rw
>>>
>>>
>>> Modified: incubator/stdcxx/trunk/src/limits_bits.cpp
>>> URL:
>>>
http://svn.apache.org/viewvc/incubator/stdcxx/trunk/src/limits_bits.cpp?view=diff&rev=564059&r1=564058&r2=564059
>>>
>>>
==============================================================================
>>>
>>> --- incubator/stdcxx/trunk/src/limits_bits.cpp (original)
>>> +++ incubator/stdcxx/trunk/src/limits_bits.cpp Wed Aug  8 17:47:54 2007
>>> @@ -22,7 +22,7 @@
>>>   * implied.   See  the License  for  the  specific language  governing
>>>   * permissions and limitations under the License.
>>>   *
>>> - * Copyright 1994-2006 Rogue Wave Software.
>>> + * Copyright 1994-2007 Rogue Wave Software, Inc.
>>>   *
>>>
**************************************************************************/
>>>
>>>
>>> @@ -30,6 +30,11 @@
>>>
>>>  #include <float.h>    // for INFINITY, NAN
>>>  #include <stdlib.h>   // for atof()
>>> +
>>> +// must not #include <limits> to avoid colliding with symbols
>>> +// declared there with a different type than what they are
>>> +// defined with here
>>> +// #include <limits>
>>>                          #include <rw/_defs.h>
>>>                         @@ -42,126 +47,106 @@
>>>  #    error one of _RWSTD_NO_INFINITY and _RWSTD_DBL_INF_BITS must be
>>> #defined
>>>  #  endif
>>>
>>> -// infinity computed at config time
>>> -static const union {
>>> -    char _C_bits [sizeof (double)];
>>> -    double _C_val;
>>> -} __rw_dbl_inf_bits = { _RWSTD_DBL_INF_BITS };
>>>
>>> -_RWSTD_EXPORT extern const double __rw_dbl_infinity =
>>> __rw_dbl_inf_bits._C_val;
>>> -
>>> -static const union {
>>> -    char _C_bits [sizeof (float)];
>>> +union _FltBits {
>>> +    char  _C_bits [sizeof (float)];
>>>      float _C_val;
>>> -} __rw_flt_inf_bits = { _RWSTD_FLT_INF_BITS };
>>> +};
>>>
>>> -_RWSTD_EXPORT extern const float __rw_flt_infinity =
>>> __rw_flt_inf_bits._C_val;
>>> +
>>> +union _DblBits {
>>> +    char   _C_bits [sizeof (double)];
>>> +    double _C_val;
>>> +};
>>>
>>>
>>>  #  ifndef _RWSTD_NO_LONG_DOUBLE
>>>
>>> -static const union {
>>> -    char _C_bits [sizeof (long double)];
>>> +union _LDblBits {
>>> +    char        _C_bits [sizeof (long double)];
>>>      long double _C_val;
>>> -} __rw_ldbl_inf_bits = { _RWSTD_LDBL_INF_BITS };
>>> +};
>>> +
>>> +#  endif   // _RWSTD_NO_LONG_DOUBLE
>>> +
>>> +extern "C" {
>>> +
>>> +// The constants below are declared in <limits> but with a different
>>> +// type. C linkage is used to defeat MSVC and other "clever" compilers
>>> +// that mangle the type of objects into their names.
>>> +
>>> +// infinity computed at config time
>>> +_RWSTD_EXPORT extern const _DblBits
>>> +__rw_dbl_infinity = { _RWSTD_DBL_INF_BITS };
>>> +
>>> +
>>> +_RWSTD_EXPORT extern const _FltBits
>>> +__rw_flt_infinity = { _RWSTD_FLT_INF_BITS };
>>> +
>>> +
>>> +#  ifndef _RWSTD_NO_LONG_DOUBLE
>>>
>>> +_RWSTD_EXPORT extern const _LDblBits
>>> +__rw_ldbl_infinity = { _RWSTD_LDBL_INF_BITS };
>>>
>>> -_RWSTD_EXPORT extern const long double
>>> -__rw_ldbl_infinity = __rw_ldbl_inf_bits._C_val;
>>>
>>>  #  endif   // _RWSTD_NO_LONG_DOUBLE
>>>
>>>
>>>  // quiet NaN computed at config time
>>> -static const union {
>>> -    char _C_bits [sizeof (double)];
>>> -    double _C_val;
>>> -} __rw_dbl_qNaN_bits = { _RWSTD_DBL_QNAN_BITS };
>>> -
>>> -_RWSTD_EXPORT extern const double __rw_dbl_qNaN  =
>>> __rw_dbl_qNaN_bits._C_val;
>>> +_RWSTD_EXPORT extern const _DblBits
>>> +__rw_dbl_qNaN = { _RWSTD_DBL_QNAN_BITS };
>>>
>>> -static const union {
>>> -    char _C_bits [sizeof (float)];
>>> -    float _C_val;
>>> -} __rw_flt_qNaN_bits = { _RWSTD_FLT_QNAN_BITS };
>>>
>>> -_RWSTD_EXPORT extern const float __rw_flt_qNaN  =
>>> __rw_flt_qNaN_bits._C_val;
>>> +_RWSTD_EXPORT extern const _FltBits
>>> +__rw_flt_qNaN = { _RWSTD_FLT_QNAN_BITS };
>>>
>>>
>>>  #  ifndef _RWSTD_NO_LONG_DOUBLE
>>>
>>> -static const union {
>>> -    char _C_bits [sizeof (long double)];
>>> -    long double _C_val;
>>> -} __rw_ldbl_qNaN_bits = { _RWSTD_LDBL_QNAN_BITS };
>>> -
>>> +_RWSTD_EXPORT extern const _LDblBits
>>> +__rw_ldbl_qNaN = { _RWSTD_LDBL_QNAN_BITS };
>>>
>>> -_RWSTD_EXPORT extern const long double
>>> -__rw_ldbl_qNaN = __rw_ldbl_qNaN_bits._C_val;
>>>
>>>  #  endif   // _RWSTD_NO_LONG_DOUBLE
>>>
>>>
>>>  // signaling NaN computed at config time
>>> -static const union {
>>> -    char _C_bits [sizeof (double)];
>>> -    double _C_val;
>>> -} __rw_dbl_sNaN_bits = { _RWSTD_DBL_SNAN_BITS };
>>> +_RWSTD_EXPORT extern const _DblBits
>>> +__rw_dbl_sNaN = { _RWSTD_DBL_SNAN_BITS };
>>>
>>> -_RWSTD_EXPORT extern const double __rw_dbl_sNaN  =
>>> __rw_dbl_sNaN_bits._C_val;
>>> -
>>> -static const union {
>>> -    char _C_bits [sizeof (float)];
>>> -    float _C_val;
>>> -} __rw_flt_sNaN_bits = { _RWSTD_FLT_SNAN_BITS };
>>>
>>> -_RWSTD_EXPORT extern const float __rw_flt_sNaN  =
>>> __rw_flt_sNaN_bits._C_val;
>>> +_RWSTD_EXPORT extern const _FltBits
>>> +__rw_flt_sNaN = { _RWSTD_FLT_SNAN_BITS };
>>>
>>>
>>>  #  ifndef _RWSTD_NO_LONG_DOUBLE
>>>
>>> -static const union {
>>> -    char _C_bits [sizeof (long double)];
>>> -    long double _C_val;
>>> -} __rw_ldbl_sNaN_bits = { _RWSTD_LDBL_SNAN_BITS };
>>> -
>>> +_RWSTD_EXPORT extern const _LDblBits
>>> +__rw_ldbl_sNaN = { _RWSTD_LDBL_SNAN_BITS };
>>>
>>> -_RWSTD_EXPORT extern const long double
>>> -__rw_ldbl_sNaN = __rw_ldbl_sNaN_bits._C_val;
>>>
>>>  #  endif   // _RWSTD_NO_LONG_DOUBLE
>>>
>>>
>>>  // denormalized minima computed at config time
>>> -static const union {
>>> -    char _C_bits [sizeof (double)];
>>> -    double _C_val;
>>> -} __rw_dbl_denorm_min_bits = { _RWSTD_DBL_DENORM_MIN_BITS };
>>> -
>>> -_RWSTD_EXPORT extern const double
>>> -__rw_dbl_denorm_min = __rw_dbl_denorm_min_bits._C_val;
>>> +_RWSTD_EXPORT extern const _DblBits
>>> +__rw_dbl_denorm_min = { _RWSTD_DBL_DENORM_MIN_BITS };
>>>
>>> -static const union {
>>> -    char _C_bits [sizeof (float)];
>>> -    float _C_val;
>>> -} __rw_flt_denorm_min_bits = { _RWSTD_FLT_DENORM_MIN_BITS };
>>>
>>> -_RWSTD_EXPORT extern const float
>>> -__rw_flt_denorm_min = __rw_flt_denorm_min_bits._C_val;
>>> +_RWSTD_EXPORT extern const _FltBits
>>> +__rw_flt_denorm_min = { _RWSTD_FLT_DENORM_MIN_BITS };
>>>
>>>
>>>  #  ifndef _RWSTD_NO_LONG_DOUBLE
>>>
>>> -static const union {
>>> -    char _C_bits [sizeof (long double)];
>>> -    long double _C_val;
>>> -} __rw_ldbl_denorm_min_bits = { _RWSTD_LDBL_DENORM_MIN_BITS };
>>> -
>>> +_RWSTD_EXPORT extern const _LDblBits
>>> +__rw_ldbl_denorm_min = { _RWSTD_LDBL_DENORM_MIN_BITS };
>>>
>>> -_RWSTD_EXPORT extern const long double
>>> -__rw_ldbl_denorm_min = __rw_ldbl_denorm_min_bits._C_val;
>>>
>>>  #  endif   // _RWSTD_NO_LONG_DOUBLE
>>> +
>>> +}   // extern "C"
>>>
>>>  #else   // if defined (_RWSTD_NO_INFINITY)
>>>
>>>
>>>
>>>
>
>

Reply via email to