Bug#484741: g++-4.3: [ia64] exceptions are not caught when they should be
A package of mine (monotone) failed to build on one of the ia64 build
daemons due to an "impossible" failure in its testsuite. The unit tests
for this package, in several places, deliberately break data structure
invariants and check that std::logic_error gets thrown when the broken
data structures are used. In two cases, the logic_error was thrown
but not caught by the test harness; instead std::terminate was called.
This does not happen on other platforms so I suspect a compiler bug.
The symptoms (quoting http://buildd.debian.org/fetch.cgi?pkg=monotone&arch=ia64&ver=0.40-4&stamp=1212239914&file=log&as=raw ):
/build/buildd/monotone-0.40/unit_tester: check_sane_roster_test: loop = 0 (of 9)
/build/buildd/monotone-0.40/unit_tester: UNIT_TEST_CHECK_THROW(r.check_sane(false), logic_error)
/build/buildd/monotone-0.40/unit_tester: roster.cc:1026: invariant 'I(has_root())' violated
.... debugging dump here ...
terminate called after throwing an instance of 'std::logic_error'
what(): roster.cc:1026: invariant 'I(has_root())' violated
Unfortunately I do not have interactive access to ia64 hardware, so I cannot
provide any more compact test case.