[ https://issues.apache.org/jira/browse/STDCXX-600?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12535303
]
Martin Sebor commented on STDCXX-600:
-------------------------------------
Switching the order of std::exception dtor and std::exception::what() (i.e., back the way
it was before rev 583667 (http://svn.apache.org/viewcvs?view=rev&rev=583667) gets rid
of the malloc error but in shared library builds (archive builds are okay) the exception is
still not caught. The output then looks like this:
terminate called after throwing an instance of 'std::out_of_range'
what(): /Users/sebor/stdcxx/include/string.cc:316: std::basic_string<_CharT, _Traits,
_Allocator>& std::basic_string<_CharT, _Traits, _Allocator>::replace(typename
_Allocator::size_type, typename _Allocator::size_type, typename _Allocator::const_pointer,
typename _Allocator::size_type) [with _CharT = char, _Traits = std::char_traits<char>,
_Allocator = std::allocator<char>]: argument value 1 out of range [0, 1)
Abort trap
> [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: trunk
> Environment: gcc 4.0.1 on Darwin Kernel Version 8.10.1
> Reporter: Martin Sebor
> Priority: Critical
>
> 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.
|