[ https://issues.apache.org/jira/browse/STDCXX-600?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12535292#action_12535292 ]
sebor edited comment on STDCXX-600 at 1/7/09 10:24 AM: -------------------------------------------------------------- Enhancing the original test case to catch the exception and print out the what() string reveals either another problem or a different symptom of the same one. The following post might be a clue as to what's going on: http://www.nabble.com/RE%3A-4.2.0-rc-6%2C-final-candidate-p13234984.html {code} $ cat t.cpp && make t && gdb -q t #include <cstdio> #include <exception> #include <string> int main () { try { std::string s; s.replace (1, 1, "x"); } catch (std::exception &ex) { std::fprintf (stderr, "%s\n", ex.what ()); } } {code} {noformat} gcc -c -I/Users/sebor/stdcxx/include/ansi -D_RWSTDDEBUG -I/Users/sebor/stdcxx/include -I/build/sebor/stdcxx-gcc-4.0.1-15d/include -I/Users/sebor/stdcxx/examples/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align t.cpp gcc t.o -o t -L/build/sebor/stdcxx-gcc-4.0.1-15d/lib -lstd15d -lsupc++ -lgcc_eh -lm Reading symbols for shared libraries ... done (gdb) run Starting program: /build/sebor/stdcxx-gcc-4.0.1-15d/examples/t Reading symbols for shared libraries .+ done terminate called after throwing an instance of 'std::out_of_range' t(17938) malloc: *** Deallocation of a pointer not malloced: 0x11003c0; This could be a double free(), or free() called with the middle of an allocated block; Try setting environment variable MallocHelp to see tools to help debug what(): Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_PROTECTION_FAILURE at address: 0x00000016 0x900298db in fputs () (gdb) where #0 0x900298db in fputs () #1 0x00261b9b in __gnu_cxx::__verbose_terminate_handler () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #2 0x00260912 in __cxxabiv1::__terminate () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #3 0x00260950 in std::terminate () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #4 0x00260a64 in __cxa_throw () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #5 0x0020b774 in __rw::__rw_throw_exception (id=9, what=0x11001d0 "") at /Users/sebor/stdcxx/src/exception.cpp:694 #6 0x0020ac40 in __rw::__rw_throw (id=9) at /Users/sebor/stdcxx/src/exception.cpp:832 #7 0x00238149 in std::string::replace (this=0xbffffa74, __pos1=1, __n1=1, __s=0xbac4 "x", __n2=1) at /Users/sebor/stdcxx/include/string.cc:312 #8 0x0023852f in std::string::replace (this=0xbffffa74, __pos=1, __n=1, __s=0xbac4 "x") at /Users/sebor/stdcxx/include/string:545 #9 0x00001bde in main () at t.cpp:9 {noformat} was (Author: sebor): Enhancing the original test case to catch the exception and print out the what() string reveals either another problem or a different symptom of the same one. The following post might be a clue as to what's going on: http://www.nabble.com/RE%3A-4.2.0-rc-6%2C-final-candidate-p13234984.html $ cat t.cpp && make t && gdb -q t #include <cstdio> #include <exception> #include <string> int main () { try { std::string s; s.replace (1, 1, "x"); } catch (std::exception &ex) { std::fprintf (stderr, "%s\n", ex.what ()); } } gcc -c -I/Users/sebor/stdcxx/include/ansi -D_RWSTDDEBUG -I/Users/sebor/stdcxx/include -I/build/sebor/stdcxx-gcc-4.0.1-15d/include -I/Users/sebor/stdcxx/examples/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align t.cpp gcc t.o -o t -L/build/sebor/stdcxx-gcc-4.0.1-15d/lib -lstd15d -lsupc++ -lgcc_eh -lm Reading symbols for shared libraries ... done (gdb) run Starting program: /build/sebor/stdcxx-gcc-4.0.1-15d/examples/t Reading symbols for shared libraries .+ done terminate called after throwing an instance of 'std::out_of_range' t(17938) malloc: *** Deallocation of a pointer not malloced: 0x11003c0; This could be a double free(), or free() called with the middle of an allocated block; Try setting environment variable MallocHelp to see tools to help debug what(): Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_PROTECTION_FAILURE at address: 0x00000016 0x900298db in fputs () (gdb) where #0 0x900298db in fputs () #1 0x00261b9b in __gnu_cxx::__verbose_terminate_handler () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #2 0x00260912 in __cxxabiv1::__terminate () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #3 0x00260950 in std::terminate () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #4 0x00260a64 in __cxa_throw () at /Users/sebor/stdcxx/src/wctype.cpp:1058 #5 0x0020b774 in __rw::__rw_throw_exception (id=9, what=0x11001d0 "") at /Users/sebor/stdcxx/src/exception.cpp:694 #6 0x0020ac40 in __rw::__rw_throw (id=9) at /Users/sebor/stdcxx/src/exception.cpp:832 #7 0x00238149 in std::string::replace (this=0xbffffa74, __pos1=1, __n1=1, __s=0xbac4 "x", __n2=1) at /Users/sebor/stdcxx/include/string.cc:312 #8 0x0023852f in std::string::replace (this=0xbffffa74, __pos=1, __n=1, __s=0xbac4 "x") at /Users/sebor/stdcxx/include/string:545 #9 0x00001bde in main () at t.cpp:9 > [gcc 4.0.1/Mac OS X] SIGABRT throwing an exception > -------------------------------------------------- > > Key: STDCXX-600 > URL: https://issues.apache.org/jira/browse/STDCXX-600 > Project: C++ Standard Library > Issue Type: Bug > Components: 18. Language Support > Affects Versions: 4.2.0, 4.2.1 > Environment: gcc 4.0.1 on Darwin Kernel Version 8.10.1 > Reporter: Martin Sebor > Assignee: Eric Lemings > Priority: Critical > Fix For: 4.2.2 > > Original Estimate: 4h > Remaining Estimate: 4h > > Throwing an exception from the library causes a SIGABRT. Example programs > that demonstrate library exceptions abort, as does the program below: > $ cat t.cpp && make t && gdb -q t > #include <string> > int main () > { > try { > std::string s; > s.replace (1, 1, "x"); > } > catch (...) { > } > } > > gcc -c -I/Users/sebor/stdcxx/include/ansi -D_RWSTDDEBUG > -I/Users/sebor/stdcxx/include -I/build/sebor/stdcxx-gcc-4.0.1-15d/include > -I/Users/sebor/stdcxx/examples/include -pedantic -nostdinc++ -g -W -Wall > -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align > t.cpp > gcc t.o -o t -L/build/sebor/stdcxx-gcc-4.0.1-15d/lib -lstd15d -lsupc++ > -lgcc_eh -lm > Reading symbols for shared libraries ... done > (gdb) run > Starting program: /build/sebor/stdcxx-gcc-4.0.1-15d/examples/t > Reading symbols for shared libraries .+ done > Program received signal SIGABRT, Aborted. > 0x9003d66c in kill () > (gdb) where > #0 0x9003d66c in kill () > #1 0x9010e8cf in raise () > #2 0x9010d422 in abort () > #3 0x00002959 in _Unwind_SetGR () at t.cpp:11 > #4 0x000026a6 in __gxx_personality_v0 () at t.cpp:11 > #5 0x002681c4 in _Unwind_RaiseException_Phase2 () at > /Users/sebor/stdcxx/src/wctype.cpp:1058 > #6 0x002683f4 in _Unwind_RaiseException () at > /Users/sebor/stdcxx/src/wctype.cpp:1058 > #7 0x00260a57 in __cxa_throw () at /Users/sebor/stdcxx/src/wctype.cpp:1058 > #8 0x0020b774 in __rw::__rw_throw_exception (id=9, what=0x11001d0 "") at > /Users/sebor/stdcxx/src/exception.cpp:694 > #9 0x0020ac40 in __rw::__rw_throw (id=9) at > /Users/sebor/stdcxx/src/exception.cpp:832 > #10 0x00238149 in std::string::replace (this=0xbffffa88, __pos1=1, __n1=1, > __s=0xbac8 "x", __n2=1) at /Users/sebor/stdcxx/include/string.cc:312 > #11 0x0023852f in std::string::replace (this=0xbffffa88, __pos=1, __n=1, > __s=0xbac8 "x") at /Users/sebor/stdcxx/include/string:545 > #12 0x00001c4d in main () at t.cpp:7 -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.