This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: New AIX libstdc++ testsuite regression 20_util/allocator_members
- From: David Edelsohn <dje at watson dot ibm dot com>
- To: "Mark Mitchell" <mark at codesourcery dot com>, bkoz at redhat dot com
- Cc: libstdc++ at gcc dot gnu dot org
- Date: Mon, 22 Apr 2002 18:27:28 -0400
- Subject: Re: New AIX libstdc++ testsuite regression 20_util/allocator_members
I have done a little more investigating and the cause of the
problem is the single line in stl_alloc.h:
extern template class __default_alloc_template<true, 0>;
If I remove that line from stl_alloc.h, the testcase succeeds. If I add
that line, the testcase fails.
Comparing the assembly files, the working version has a lot of
additional code, but no other "differences".
The broken executable references:
std::__default_alloc_template<(bool)1, (int)0>::allocate(unsigned long)
std::__default_alloc_template<(bool)1, (int)0>::deallocate(void*, unsigned long)
The working version externally references:
std::__default_alloc_template<(bool)1, (int)0>::_S_start_free
std::__default_alloc_template<(bool)1, (int)0>::_S_end_free
std::__default_alloc_template<(bool)1, (int)0>::_S_heap_size
std::__default_alloc_template<(bool)1, (int)0>::_S_node_allocator_lock
and provides its own definitions of
std::__default_alloc_template<(bool)1, (int)0>::allocate(unsigned long)
std::__default_alloc_template<(bool)1, (int)0>::deallocate(void*, unsigned long)
std::__default_alloc_template<(bool)1, (int)0>::_S_freelist_index(unsigned long)
std::__default_alloc_template<(bool)1, (int)0>::_Lock::_Lock[in-charge]()
std::__default_alloc_template<(bool)1, (int)0>::_Lock::~_Lock [in-charge]()
std::__default_alloc_template<(bool)1, (int)0>::_S_round_up(unsigned long)
std::__default_alloc_template<(bool)1, (int)0>::_S_refill(unsigned long)
std::__default_alloc_template<(bool)1, (int)0>::_S_chunk_alloc(unsigned long, int&)
std::_STL_mutex_lock::_M_acquire_lock()
std::_STL_mutex_lock::_M_release_lock()
std::__new_alloc::allocate(unsigned long)
std::__new_alloc::deallocate(void*, unsigned long)
which get tightly bound.
David