I reproduced the crash in a small compiler-only test case
(specific to XLC++) and filed a PMR with IBM. Here are the
details: http://issues.apache.org/jira/browse/STDCXX-199.
It looks to me like exceptions are essentially unusable
in this configuration.
Martin
Martin Sebor wrote:
Scott Zhong wrote:
There are several stdlib test that uses mynew.h and the placement new is
causing it to seg fault.
Affected tests:
tests/stdlib/containers/deque_modifiers
tests/stdlib/diagnostics/exceptions
tests/stdlib/test/new
This test exercises the correctness of the replaced operators
themselves (i.e., those defined by the test suite to exercise
the rest of the library). The other tests most likely all crash
because there's something wrong with the operator. The test runs
with the expected results when compiled with gcc so it seems that
this might be specific to XLC++.
The stack trace from the core dump (below) shows that it occurs
in the replacement operator new which is just a forwarding
function with hardly any body:
166 void* operator new (_RWSTD_SIZE_T n) _THROWS ((_RWSTD_BAD_ALLOC))
167 {
168 return operator_new (n, false);
169 }
That seems to suggest some kind of runtime library problem.
Let me try to reproduce it in a smaller test case.
Here's the backtrace:
(gdb) where
#0 0x0000000010003e78 in operator new (n=0) at rw_new.h:167
#1 0x00000000100044fc in test_bad_alloc ()
at /amd/devco/sebor/dev/stdlib/tests/test/00_new.cpp:138
#2 0x00000000100083f8 in run_test ()
at /amd/devco/sebor/dev/stdlib/tests/test/00_new.cpp:470
#3 0x000000001000a080 in rw_vtest (argc=1, argv=0x1ffffffeff8,
file_name=0x100a719c
"/amd/devco/sebor/dev/stdlib/tests/test/00_new.cpp",
clause=0x0, comment=0x0,
[EMAIL PROTECTED]: 0x10008398 <run_test(int, char**)>,
optstr=0x100a72ec "|-no-new-delete# |-no-bad_alloc# |-no-mismatch#
|-no-bad-delete# |-no-double-delete# |-no-corruption# |-no-leaks#
|-no-stress-test#",
va=0x1ffffffea48 "")
at /amd/devco/sebor/dev/stdlib/tests/src/driver.cpp:1043
#4 0x000000001000b1fc in rw_test (argc=1, argv=0x1ffffffeff8,
fname=0x100a719c "/amd/devco/sebor/dev/stdlib/tests/test/00_new.cpp",
clause=0x0, comment=0x0,
[EMAIL PROTECTED]: 0x10008398 <run_test(int, char**)>,
optstr=0x100a72ec "|-no-new-delete# |-no-bad_alloc# |-no-mismatch#
|-no-bad-delete# |-no-double-delete# |-no-corruption# |-no-leaks#
|-no-stress-test#")
at /amd/devco/sebor/dev/stdlib/tests/src/driver.cpp:1140
#5 0x0000000010005f7c in main (argc=1, argv=0x1ffffffeff8)
at /amd/devco/sebor/dev/stdlib/tests/test/00_new.cpp:485