[jira] [Created] (STDCXX-1062) std::vectorbool::at() throws the wrong exception
std::vectorbool::at() throws the wrong exception -- Key: STDCXX-1062 URL: https://issues.apache.org/jira/browse/STDCXX-1062 Project: C++ Standard Library Issue Type: Bug Components: 23. Containers Affects Versions: 4.2.1, 4.2.x, 4.3.x Environment: Solaris 10 and 11 RedHat Linux, OpenSuSE Linux Defect is independent of platform and/or compiler Reporter: Stefan Teleman Fix For: 4.2.2, 4.2.x, 4.3.x, 5.0.0 The std::vectorbool::at() specialization throws the wrong exception: {code:title=test.cc|borderStyle=solid} #include iostream #include vector #include stdexcept static const size_t maxlen = 10; int main() { size_t i; bool b; int r; int ret = 0; int x = 0; std::vectorint vi(maxlen, 1); std::vectorbool vb(maxlen, false); try { r = vi.at (12); } catch (std::out_of_range e) { std::cerr std::vectorint::at(12): OK std::endl; ++x; } catch (std::exception e) { std::cerr std::vectorint::at(12): wrong exception: e.what() std::endl; ++ret; ++x; } catch ( ... ) { std::cerr std::vectorint::at(12): wrong exception! std::endl; ++ret; ++x; } try { b = vb.at(12); } catch (std::out_of_range e) { std::cerr std::vectorbool::at(12): OK std::endl; ++x; } catch (std::exception e) { std::cerr std::vectorbool::at(12): wrong exception: e.what() std::endl; ++ret; ++x; } catch ( ... ) { std::cerr std::vectorboolt::at(12): wrong exception! std::endl; ++ret; ++x; } if (x == 0) { std::cerr no exception was thrown std::endl; ++ret; } return ret; } {code} 1. Output from GCC 4.5.0 on OpenSuSE Linux 11.3: {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:04][1028] ./test-gcc std::vectorint::at(12): OK std::vectorbool::at(12): OK [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:16][1029] echo $status 0 {noformat} 2. Output from SunPro C++ 12.2 with libCstd (default): {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:25][1032] ./test-cstd std::vectorint::at(12): OK std::vectorbool::at(12): OK [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:29][1033] echo $status 0 {noformat} 3. Output from Intel C++ 12.10: {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:39:33][1053] ./test-icc std::vectorint::at(12): OK std::vectorbool::at(12): OK [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:39:36][1054] echo $status 0 {noformat} 4. Output from SunPro C++ 12.2 with our patched stdcxx: {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:31][1034] ./test-stdcxx std::vectorint::at(12): OK std::vectorbool::at(12): OK [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:35][1035] echo $status 0 {noformat} 5. Output from Pathscale 4.0.12.1 (which didn't patch stdcxx): {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:37][1036] ./test-pathscale std::vectorint::at(12): OK std::vectorbool::at(12): wrong exception: /opt/pathscale/ekopath-4.0.12.1/include/4.0.12.1/stl/vector:1236: std::vectorbool, _Allocator::reference std::vectorbool, _Allocator::at(typename _Allocator::size_type) [with _Allocator = std::allocatorbool]: length error: size 12 out of range [0, 10) [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/vector.bool][02/16/2012 15:37:42][1037] echo $status 1 {noformat} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Created] (STDCXX-1061) std::valarray::operator () produces wrong result
std::valarray::operator () produces wrong result Key: STDCXX-1061 URL: https://issues.apache.org/jira/browse/STDCXX-1061 Project: C++ Standard Library Issue Type: Bug Components: 23. Containers Affects Versions: 4.2.1 Environment: Solaris 10 and 11 Red Hat Linux OpenSuSE Linux SunPro C++ 12.1, 12.2, 12.3 Defect is independent of platform and/or compiler. Reporter: Stefan Teleman Fix For: 4.2.x, 4.3.x, 5.0.0 Attachments: stdcxx-1061.patch std::valarray::operator () produces wrong result: {code:title=test.cc|borderStyle=solid} #include iostream #include valarray static const size_t maxlen = 10; void print(const std::valarraybool v) { for (size_t i = 0; i maxlen; ++i) std::cerr v[i] ; std::cerr std::endl; } int main() { int nonzero[maxlen] = { 0, 1, 0, 3, 0, -5, 0, -7, 0, -11 }; int one = 1; int ret = 0; size_t i; std::valarrayint v0 (nonzero, maxlen); std::valarraybool v3 (maxlen); for (i = 0; i maxlen; i++) v3[i] = nonzero[i] one; std::valarraybool v1 = std::operator (v0, one); for (i = 0; i maxlen; i++) { if ((nonzero[i] one) != v1[i]) ret = 1; } if (ret) { std::cerr expected: ; print (v3); std::cerr got: ; print (v1); } return ret; } {code} 1. Output from GCC 4.5.0: {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:22:47][2463] ./v-gcc [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:23:01][2464] echo $status 0 {noformat} 2. Output from SunPro C++ 12.2 with stlport4: {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:23:02][2465] ./v-ss122-stlport [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:23:08][2466] echo $status 0 {noformat} 3. Output from SunPro C++ 12.2 with our patched stdcxx: {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:23:10][2467] ./v-ss122-stdcxx [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:23:18][2468] echo $status 0 {noformat} 4. Output from Pathscale 4.0.12.1 (which didn't patch stdcxx): {noformat} [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:23:20][2469] ./v-pathscale expected: 0 1 0 1 0 1 0 1 0 1 got: 0 1 0 0 0 0 0 0 0 0 [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012 13:23:24][2470] echo $status 1 {noformat} Patch for stdcxx 4.2.1 to follow shortly. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Created] (STDCXX-1055) some of the localization class declarations do not follow the ISO/IEC:14882:2003 specification
some of the localization class declarations do not follow the ISO/IEC:14882:2003 specification -- Key: STDCXX-1055 URL: https://issues.apache.org/jira/browse/STDCXX-1055 Project: C++ Standard Library Issue Type: Bug Components: 22. Localization Affects Versions: 4.2.1, 4.2.2, 4.2.x, 4.3.x, 5.0.0 Environment: Solaris 10 and 11, Linux (RedHat and OpenSUSE), Sun C++ Compiler 12.1, 12.2, 12.3, GCC4. The defect is independent of platform or compiler. Reporter: Stefan Teleman Fix For: 4.2.x, 4.3.x, 5.0.0 For the following classes: std::codecvt and its specializations std::collate and its specializations std::ctype and its specializations std::ctype_byname and its specializations std::messages and its specializations std::messages_byname and its specializations std::money_get and its specializations std::moneypunct and is specializations std::moneypunct_byname and its specializations std::money_put and its specializations std::num_get and its specializations std::numpunct and its specializations std::numpunct_byname and its specializations std::num_put and its specializations std::time_get and its specializations std::time_get_byname and its specializations std::time_put and its specializations 1. all these type declarations must be of class type (and not of struct type) 2. all these classes must have protected virtual destructors 3. all the corresponding *_base (time_base, money_base, etc), must have virtual destructors The current implementation of these types as structs (with default public access specifier on their non-virtual destructors) causes failures in Perennial CPPVS V8.1. Changing the access specifier for these destructors requires some changes in the stdcxx tests for localization. Patch based on 4.2.1 to follow shortly. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Created] (STDCXX-1056) std::moneypunct and std::numpunct implementations are not thread-safe
std::moneypunct and std::numpunct implementations are not thread-safe - Key: STDCXX-1056 URL: https://issues.apache.org/jira/browse/STDCXX-1056 Project: C++ Standard Library Issue Type: Bug Components: 22. Localization Affects Versions: 4.2.1, 4.2.x, 4.3.x, 5.0.0 Environment: Solaris 10 and 11, RedHat and OpenSuSE Linux, Sun C++ Compilers 12.1, 12.2, 12.3 Issue is independent of platform and/or compiler. Reporter: Stefan Teleman Fix For: 4.2.x, 4.3.x, 5.0.0 several member functions in std::moneypunct and std::numpunct return a std::string by value (as required by the Standard). The implication of return-by-value being that the caller owns the returned object. In the stdcxx implementation, the std::basic_string copy constructor uses a shared underlying buffer implementation. This shared buffer creates the first problem for these classes: although the std::string object returned by value *appears* to be owned by the caller, it is, in fact, not. In a mult-threaded environment, this underlying shared buffer can be subsequently modified by a different thread than the one who made the initial call. Furthermore, two or more different threads can access the same shared buffer at the same time, and modify it, resulting in undefined run-time behavior. The cure for this defect has two parts: 1. the member functions in question must truly return a copy by avoiding a call to the copy constructor, and using a constructor which creates a deep copy of the std::string. 2. access to these member functions must be serialized, in order to guarantee atomicity of the creation of the std::string being returned by value. Patch for 4.2.1 to follow. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Created] (STDCXX-1057) attempting to create a std::string of size 65535 or greater fails with Perennial CPPVS V8.1
attempting to create a std::string of size 65535 or greater fails with Perennial CPPVS V8.1 --- Key: STDCXX-1057 URL: https://issues.apache.org/jira/browse/STDCXX-1057 Project: C++ Standard Library Issue Type: Bug Components: 21. Strings Affects Versions: 4.2.1, 4.2.x, 4.3.x, 5.0.0 Environment: Solaris 10 and 11, RedHat Linux, OpenSuSE Linux SUN C++ Compilers 12.1, 12.2, 12.3 Defect is independent of compiler and platform Reporter: Stefan Teleman Fix For: 4.2.x, 4.3.x, 5.0.0 in member function: size_type basic_string_CharT, _Traits, _Allocator::max_size(); the maximum size of a basic_string is restricted to less than 65535 bytes. The Standard is ambiguous as to what the max_size() of a std::string should actually be (see LWG Core Issue 197). However, less than 65535 bytes for the max_size of a std::string is rather small. GNU libstdc++ and stlport4 set std::string::max_size to (SIZE_MAX / 4) (i.e. 1GB). Solaris sets it to SIZE_MAX. Perennial CPPVS explicitly tests for the creation of a std::string of size greater than 65535. In the current stdcxx implementation, this test fails. The max_size of a std::string should be significantly greater than 65535 bytes. Patch for 4.2.1 to follow shortly. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Created] (STDCXX-1058) std::basic_ios::copyfmt() with registered callback (via std::ios_base::register_callback()) run-time SIGABRT
std::basic_ios::copyfmt() with registered callback (via std::ios_base::register_callback()) run-time SIGABRT --- Key: STDCXX-1058 URL: https://issues.apache.org/jira/browse/STDCXX-1058 Project: C++ Standard Library Issue Type: Bug Components: 27. Input/Output Affects Versions: 4.2.1, 4.2.x, 4.3.x, 5.0.0 Environment: Solaris 10 and 11, Red Hat Linux, OpenSuSE Linux Sun C++ Compilers 12.1, 12.2, 12.3 Defect is independent of platform or compiler. Reporter: Stefan Teleman Fix For: 4.2.x, 4.3.x, 5.0.0 A stream with a registered callback via register_callback() SIGABRTs at run-time: #include iostream #include fstream int x; void testfun (std::ios_base::event ev, std::ios_base iosobj, int index) { x = index; switch (ev) { case std::ios_base::copyfmt_event: std::cerr copyfmt_event std::endl; break; case std::ios_base::imbue_event: std::cerr imbue_event std::endl; break; case std::ios_base::erase_event: std::cerr erase_event std::endl; break; default: std::cerr unknown std::endl; break; } } int main () { std::fstream f0; std::fstream f1; int i = 101; std::ios_base::event_callback e1 = testfun; f0.register_callback (e1, i); x = 0; f0.imbue (std::cerr.getloc()); if (x != i) std::cerr x: expected i got x std::endl; x = 0; f0.copyfmt (f1); if (x != i) std::cerr x: expected i got x std::endl; return 0; } Output from GCC 4.5.0: [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/fstream.copyfmt][02/05/2012 0:32:42][1340] ./test-gcc imbue_event erase_event Output from Sun C++ 12.2 with stlport4: [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/fstream.copyfmt][02/05/2012 0:32:44][1341] ./test-ss12-stlport imbue_event erase_event copyfmt_event erase_event Output from Sun C++ 12.2 with our stdcxx (patched): [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/fstream.copyfmt][02/05/2012 0:32:58][1342] ./test-ss12-stdcxx imbue_event erase_event Output from Pathscale 4.0.12.1 (which didn't patch stdcxx): [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/fstream.copyfmt][02/05/2012 0:33:03][1343] ./test-pathscale imbue_event erase_event *** glibc detected *** ./test-pathscale: double free or corruption (fasttop): 0x 0605480 *** === Backtrace: = /lib64/libc.so.6(+0x73286)[0x7f78cbb7f286] /lib64/libc.so.6(cfree+0x6c)[0x7f78cbb8402c] /opt/pathscale/ekopath-4.0.12.1/lib/4.0.12.1/x8664/64/libcxxrt.so(_ZdlPv+0xd)[0x f78cc097d63] /opt/pathscale/ekopath-4.0.12.1/lib/4.0.12.1/x8664/64/libstl.so(_ZNSt8ios_base11 C_usr_data10_C_deallocEPS0_+0x2d)[0x7f78cc300b5b] === Memory map: 0040-00404000 r-xp 103:00 9582413 /src/steleman/programming/stdcxx-ss122/bugfixes-sunw/fstream.copyfmt/test-pathscale 00603000-00604000 r--p 3000 103:00 9582413 /src/steleman/programming/stdcxx-ss122/bugfixes-sunw/fstream.copyfmt/test-pathscale 00604000-00605000 rw-p 4000 103:00 9582413 /src/steleman/programming/stdcxx-ss122/bugfixes-sunw/fstream.copyfmt/test-pathscale 00605000-00626000 rw-p 00:00 0 [heap] [ ... ] I no longer have an unpatched stdcxx handy for the Sun C++ compilers available to reproduce the defect with the Sun C++ compiler. Defect is in file src/iostore.cpp, starting at line 275: _C_usr-_C_iarray, _C_usr-_C_parray and _C_usr-_C_cbarray are not set to NULL after deletion: _TRY { if (_C_usr) { // fire erase events (27.4.4.2, p17) - may throw if (_C_usr-_C_fire) (this-*_C_usr-_C_fire)(erase_event, true /* reentrant */); // delete existing arrays, if any; _C_usr will only be deleted // if `rhs' contains no user data (see below) operator delete (_C_usr-_C_iarray); _C_usr-_C_iarray = 0UL; // - !! operator delete (_C_usr-_C_parray); _C_usr-_C_parray = 0UL; // - !! operator delete (_C_usr-_C_cbarray); _C_usr-_C_cbarray = 0UL; // - !! } Patch for 4.2.1 to follow shortly. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira