[MSVC 8-x64] 21.string.cons.cpp test fails in optimized builds due to bad 
codegeneration by the compiler
--------------------------------------------------------------------------------------------------------

                 Key: STDCXX-666
                 URL: https://issues.apache.org/jira/browse/STDCXX-666
             Project: C++ Standard Library
          Issue Type: Bug
          Components: Tests
    Affects Versions: 4.2.0
         Environment: MSVC 8.0-x64, builds 8{d|s}, 12{d|s}
            Reporter: Farid Zaripov
             Fix For: 4.2.1


The 21.string.cons.cpp test fails with 16 assertions on 64-bit MSVC in 
optimized builds.
The reason is the bad codegeneration in __rw_new_capacity() inlined in 
std::basic_string ctors. Because of this bug the __rw_new_capacity(0, const 
std::basic_string<> *) returns value greater that size_max() and ctor throws 
exception.

The temporary workaround might be definition of the __rw_new_capacity() as 
__declspec (noinline).

------------------------------
Index: include/string
===================================================================
--- include/string      (revision 593511)
+++ include/string      (working copy)
@@ -1528,8 +1528,13 @@
 // more specialized version for basic_string<>; may be further specialized  // 
in user code for example on a user-defined allocator
 
+#if !defined (_WIN64) || !defined (_MSC_VER) || defined
(__INTEL_COMPILER)
 template <class _CharT, class _Traits, class _Allocator>  inline 
_RWSTD_STRING_SIZE_TYPE
+#else    // _WIN64 && _MSC_VER && !__INTEL_COMPILER
+template <class _CharT, class _Traits, class _Allocator> __declspec 
+(noinline) _RWSTD_STRING_SIZE_TYPE
+#endif   // !_WIN64 || !_MSC_VER || __INTEL_COMPILER
 __rw_new_capacity (_RWSTD_STRING_SIZE_TYPE __size,
                    const _STD::basic_string<_CharT, _Traits,
_Allocator>*)
 {
------------------------------


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to