https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88111
--- Comment #7 from Jozef Lawrynowicz <jozef.l at mittosystems dot com> ---
(In reply to Jonathan Wakely from comment #6)
> This should be fixed now.
>
> If you're able to run the tests for these components that would be very much
> appreciated. To run just the <memory_resource> tests, run the following in
> the $objdir/$target/libstdc++-v3 directory:
>
> make check RUNTESTFLAGS=conformance.exp=20_util/*_resource/*
Most of the memory_resource tests are too large for the default MSP430
configuration and fail at link time due to memory region overflows.
> PASS: 20_util/memory_resource/1.cc (test for excess errors)
> PASS: 20_util/monotonic_buffer_resource/1.cc (test for excess errors)
>
> === libstdc++ Summary ===
>
> # of expected passes 2
> # of unexpected failures 11
> # of unresolved testcases 11
> # of unsupported tests 5
Running the tests with -mlarge doesn't currently work, as testsuite_abi.cc
won't compile. Since size_t is __int20, instances of "cout << (size_t)" cause
an error:
> util/testsuite_abi.cc:501: error: ambiguous overload for 'operator<<' in
> 'std::cout.std::basic_ostream<char>::operator<<(std::endl<char,
> std::char_traits<char> >) <<
> added_names.std::vector<std::__cxx11::basic_string<char> >::size()' (operand
> types are 'std::basic_ostream<char>::__ostream_type' {aka
> 'std::basic_ostream<char>'} and 'std::vector<std::__cxx11::basic_string<char>
> >::size_type' {aka '__int20 unsigned'})
A quick hack (attached) of casting usage of size_t with cout to (unsigned long)
gets testsuite_abi.cc building so the tests can be run.
The -mlarge/-mcode-region=either/-mdata-region=either configuration makes the
best use of the 20-bit address space, so most of the tests do actually link and
pass now.
> make check RUNTESTFLAGS="conformance.exp=20_util/*_resource/*
> --target_board=msp430-sim/-mlarge/-mdata-region=either/-mcode-region=either"
> === libstdc++ Summary ===
>
> # of expected passes 21
> # of unexpected failures 3
> # of unsupported tests 5
One failure is at compile time, due to a couple of warnings in
allocate-max-chunks.cc. This is also present in the default configuration, but
obscured among all the relocation overflows.
> Excess errors:
> libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate-max-chunks.cc:39:
> warning: integer overflow in expression of type 'int' results in '0'
> [-Woverflow]
> libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate-max-chunks.cc:67:
> warning: left shift count >= width of type [-Wshift-count-overflow]
The allocate-max-chunks execution tests subsequently fails:
> unsynchronized_pool_resource/allocate-max-chunks.cc:67: void test01():
> Assertion 'opts.max_blocks_per_chunk <= (1 << 19)' failed.
The third and final failure is at execution:
> terminate called after throwing an instance of 'std::bad_alloc'
> what(): std::bad_alloc
> FAIL: 20_util/unsynchronized_pool_resource/allocate.cc execution test
I've seen many "terminate called after..." failures in the G++ testsuite being
caused by stack overrunning into heap, so I'm not sure at this point if this is
a real failure.
Testsuite .log is attached.
Should I file separate PRs for these errors?
I'll look at the "cout << (__int20)" issue a bit more as well.