Improve and stabilise sort of member functions

The functor virtual_member_function_less_than did not take into
account linkage name which can be the only difference when multiple
destructors with differing mangled names are present.

This change adds a check for linkage names and also flattens the
control flow in the comparison method to make the logic clearer.

Lastly, this change also uses std::stable_sort, in case all that
remains is insertion order.

	* src/abg-ir.cc
	(virtual_member_function_less_than::operator()): Name
	temporaries like offsets and symbols to reduce repetition;
	test each pair of elements (including symbol presence) and
	return immediately if there's a difference; add a comparison
	of linkage name just after comparing symbol names.
	(sort_virtual_member_functions): Use stable_sort instead of
	sort.
	* tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi:
	Update with new ordering of member functions.
	* tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi:
	Likewise.

Signed-off-by: Giuliano Procida <gprocida@google.com>
Signed-off-by: Matthias Maennich <maennich@google.com>
This commit is contained in:
Giuliano Procida 2020-10-29 12:20:58 +00:00 committed by Dodji Seketeli
parent b4ec62929c
commit 32343f8091
3 changed files with 80 additions and 88 deletions

View File

@ -20487,53 +20487,45 @@ struct virtual_member_function_less_than
ABG_ASSERT(get_member_function_is_virtual(f));
ABG_ASSERT(get_member_function_is_virtual(s));
if (get_member_function_vtable_offset(f)
== get_member_function_vtable_offset(s))
ssize_t f_offset = get_member_function_vtable_offset(f);
ssize_t s_offset = get_member_function_vtable_offset(s);
if (f_offset != s_offset) return f_offset < s_offset;
string fn, sn;
// If the functions have symbols, then compare their symbol-id
// string.
elf_symbol_sptr f_sym = f.get_symbol();
elf_symbol_sptr s_sym = s.get_symbol();
if ((!f_sym) != (!s_sym)) return !f_sym;
if (f_sym && s_sym)
{
string fn, sn;
// If the functions have symbols, then compare their symbol-id
// string.
if (f.get_symbol() && s.get_symbol())
{
fn = f.get_symbol()->get_id_string();
sn = s.get_symbol()->get_id_string();
}
else if (f.get_symbol())
return false;
else if (s.get_symbol())
return true;
else
{
// None of the functions have symbols, so compare their
// pretty representation.
if (fn.empty())
{
fn = f.get_pretty_representation();
sn = s.get_pretty_representation();
}
}
/// If it's just the file paths that are different then sort
/// them too.
if (fn == sn)
{
string fn_filepath, sn_filepath;
unsigned line = 0, column = 0;
location fn_loc = f.get_location(), sn_loc = s.get_location();
if (fn_loc)
fn_loc.expand(fn_filepath, line, column);
if (sn_loc)
sn_loc.expand(sn_filepath, line, column);
if (!fn_filepath.empty() && !sn_filepath.empty())
return fn_filepath < sn_filepath;
}
return fn < sn;
fn = f_sym->get_id_string();
sn = s_sym->get_id_string();
if (fn != sn) return fn < sn;
}
return (get_member_function_vtable_offset(f)
< get_member_function_vtable_offset(s));
// Try the linkage names (important for destructors).
fn = f.get_linkage_name();
sn = s.get_linkage_name();
if (fn != sn) return fn < sn;
// None of the functions have symbols or linkage names that
// distinguish them, so compare their pretty representation.
fn = f.get_pretty_representation();
sn = s.get_pretty_representation();
if (fn != sn) return fn < sn;
/// If it's just the file paths that are different then sort them
/// too.
string fn_filepath, sn_filepath;
unsigned line = 0, column = 0;
location fn_loc = f.get_location(), sn_loc = s.get_location();
if (fn_loc)
fn_loc.expand(fn_filepath, line, column);
if (sn_loc)
sn_loc.expand(sn_filepath, line, column);
return fn_filepath < sn_filepath;
}
/// The less than operator. First, it sorts the methods by their
@ -20560,7 +20552,7 @@ static void
sort_virtual_member_functions(class_decl::member_functions& mem_fns)
{
virtual_member_function_less_than lt;
std::sort(mem_fns.begin(), mem_fns.end(), lt);
std::stable_sort(mem_fns.begin(), mem_fns.end(), lt);
}
/// Add a member function to the current instance of @ref class_or_union.

View File

@ -1031,13 +1031,13 @@
</function-decl>
</member-function>
<member-function access='public' destructor='yes' vtable-offset='0'>
<function-decl name='~clone_impl' mangled-name='_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINSt8ios_base7failureB5cxx11EEEED1Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='462' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~clone_impl' mangled-name='_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINSt8ios_base7failureB5cxx11EEEED0Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='462' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-76' is-artificial='yes'/>
<return type-id='type-id-18'/>
</function-decl>
</member-function>
<member-function access='public' destructor='yes' vtable-offset='0'>
<function-decl name='~clone_impl' mangled-name='_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINSt8ios_base7failureB5cxx11EEEED0Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='462' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~clone_impl' mangled-name='_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINSt8ios_base7failureB5cxx11EEEED1Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='462' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-76' is-artificial='yes'/>
<return type-id='type-id-18'/>
</function-decl>
@ -1072,13 +1072,13 @@
</function-decl>
</member-function>
<member-function access='public' destructor='yes' vtable-offset='0'>
<function-decl name='~error_info_injector' mangled-name='_ZN5boost16exception_detail19error_info_injectorINSt8ios_base7failureB5cxx11EED2Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='336' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~error_info_injector' mangled-name='_ZN5boost16exception_detail19error_info_injectorINSt8ios_base7failureB5cxx11EED0Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='336' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-80' is-artificial='yes'/>
<return type-id='type-id-18'/>
</function-decl>
</member-function>
<member-function access='public' destructor='yes' vtable-offset='0'>
<function-decl name='~error_info_injector' mangled-name='_ZN5boost16exception_detail19error_info_injectorINSt8ios_base7failureB5cxx11EED0Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='336' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~error_info_injector' mangled-name='_ZN5boost16exception_detail19error_info_injectorINSt8ios_base7failureB5cxx11EED2Ev' filepath='src/third_party/boost-1.60.0/boost/exception/exception.hpp' line='336' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-80' is-artificial='yes'/>
<return type-id='type-id-18'/>
</function-decl>

View File

@ -4481,14 +4481,14 @@
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~__forced_unwind' mangled-name='_ZN10__cxxabiv115__forced_unwindD2Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__forced_unwind' mangled-name='_ZN10__cxxabiv115__forced_unwindD0Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-97' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~__forced_unwind' mangled-name='_ZN10__cxxabiv115__forced_unwindD0Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__forced_unwind' mangled-name='_ZN10__cxxabiv115__forced_unwindD2Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-97' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -4510,14 +4510,14 @@
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~__foreign_exception' mangled-name='_ZN10__cxxabiv119__foreign_exceptionD2Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='37' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__foreign_exception' mangled-name='_ZN10__cxxabiv119__foreign_exceptionD0Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='37' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-99' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~__foreign_exception' mangled-name='_ZN10__cxxabiv119__foreign_exceptionD0Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='37' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__foreign_exception' mangled-name='_ZN10__cxxabiv119__foreign_exceptionD2Ev' filepath='../../.././libstdc++-v3/libsupc++/eh_exception.cc' line='37' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-99' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -5044,14 +5044,14 @@
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~recursive_init_error' mangled-name='_ZN9__gnu_cxx20recursive_init_errorD2Ev' filepath='../../.././libstdc++-v3/libsupc++/guard_error.cc' line='29' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~recursive_init_error' mangled-name='_ZN9__gnu_cxx20recursive_init_errorD0Ev' filepath='../../.././libstdc++-v3/libsupc++/guard_error.cc' line='29' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-131' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~recursive_init_error' mangled-name='_ZN9__gnu_cxx20recursive_init_errorD0Ev' filepath='../../.././libstdc++-v3/libsupc++/guard_error.cc' line='29' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~recursive_init_error' mangled-name='_ZN9__gnu_cxx20recursive_init_errorD2Ev' filepath='../../.././libstdc++-v3/libsupc++/guard_error.cc' line='29' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-131' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -28513,14 +28513,14 @@
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIcc11__mbstate_tED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIcc11__mbstate_tED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2058' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIcc11__mbstate_tED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIcc11__mbstate_tED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2058' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -28685,14 +28685,14 @@
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIwc11__mbstate_tED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIwc11__mbstate_tED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2060' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIwc11__mbstate_tED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__codecvt_abstract_base' mangled-name='_ZNSt23__codecvt_abstract_baseIwc11__mbstate_tED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/codecvt.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2060' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -30852,14 +30852,14 @@
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIwED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIwED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2263' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIwED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIwED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2263' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -32571,13 +32571,6 @@
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='2'>
<function-decl name='do_toupper' mangled-name='_ZNKSt5ctypeIcE10do_toupperEc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1007' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_toupperEc@@GLIBCXX_3.4'>
<parameter type-id='type-id-2350' is-artificial='yes'/>
<parameter type-id='type-id-2351'/>
<return type-id='type-id-2351'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='2'>
<function-decl name='do_toupper' mangled-name='_ZNKSt5ctypeIcE10do_toupperEc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/src/c++98/ctype_configure_char.cc' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_toupperEc@@GLIBCXX_3.4'>
<parameter type-id='type-id-2350' is-artificial='yes'/>
@ -32585,12 +32578,11 @@
<return type-id='type-id-186'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='3'>
<function-decl name='do_toupper' mangled-name='_ZNKSt5ctypeIcE10do_toupperEPcPKc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_toupperEPcPKc@@GLIBCXX_3.4'>
<member-function access='protected' const='yes' vtable-offset='2'>
<function-decl name='do_toupper' mangled-name='_ZNKSt5ctypeIcE10do_toupperEc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1007' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_toupperEc@@GLIBCXX_3.4'>
<parameter type-id='type-id-2350' is-artificial='yes'/>
<parameter type-id='type-id-2357'/>
<parameter type-id='type-id-2353'/>
<return type-id='type-id-2353'/>
<parameter type-id='type-id-2351'/>
<return type-id='type-id-2351'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='3'>
@ -32601,11 +32593,12 @@
<return type-id='type-id-4'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='4'>
<function-decl name='do_tolower' mangled-name='_ZNKSt5ctypeIcE10do_tolowerEc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1040' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_tolowerEc@@GLIBCXX_3.4'>
<member-function access='protected' const='yes' vtable-offset='3'>
<function-decl name='do_toupper' mangled-name='_ZNKSt5ctypeIcE10do_toupperEPcPKc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_toupperEPcPKc@@GLIBCXX_3.4'>
<parameter type-id='type-id-2350' is-artificial='yes'/>
<parameter type-id='type-id-2351'/>
<return type-id='type-id-2351'/>
<parameter type-id='type-id-2357'/>
<parameter type-id='type-id-2353'/>
<return type-id='type-id-2353'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='4'>
@ -32615,12 +32608,11 @@
<return type-id='type-id-186'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='5'>
<function-decl name='do_tolower' mangled-name='_ZNKSt5ctypeIcE10do_tolowerEPcPKc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_tolowerEPcPKc@@GLIBCXX_3.4'>
<member-function access='protected' const='yes' vtable-offset='4'>
<function-decl name='do_tolower' mangled-name='_ZNKSt5ctypeIcE10do_tolowerEc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1040' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_tolowerEc@@GLIBCXX_3.4'>
<parameter type-id='type-id-2350' is-artificial='yes'/>
<parameter type-id='type-id-2357'/>
<parameter type-id='type-id-2353'/>
<return type-id='type-id-2353'/>
<parameter type-id='type-id-2351'/>
<return type-id='type-id-2351'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='5'>
@ -32631,6 +32623,14 @@
<return type-id='type-id-4'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='5'>
<function-decl name='do_tolower' mangled-name='_ZNKSt5ctypeIcE10do_tolowerEPcPKc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE10do_tolowerEPcPKc@@GLIBCXX_3.4'>
<parameter type-id='type-id-2350' is-artificial='yes'/>
<parameter type-id='type-id-2357'/>
<parameter type-id='type-id-2353'/>
<return type-id='type-id-2353'/>
</function-decl>
</member-function>
<member-function access='protected' const='yes' vtable-offset='6'>
<function-decl name='do_widen' mangled-name='_ZNKSt5ctypeIcE8do_widenEc' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='1077' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNKSt5ctypeIcE8do_widenEc@@GLIBCXX_3.4'>
<parameter type-id='type-id-2350' is-artificial='yes'/>
@ -32918,14 +32918,14 @@
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2428' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2428' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -33005,14 +33005,14 @@
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2426' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='private' destructor='yes' vtable-offset='-1'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~stdio_filebuf' mangled-name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/stdio_filebuf.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2426' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
@ -35340,14 +35340,14 @@
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIcED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIcED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2718' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>
</function-decl>
</member-function>
<member-function access='protected' destructor='yes' vtable-offset='-1'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIcED0Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<function-decl name='~__ctype_abstract_base' mangled-name='_ZNSt21__ctype_abstract_baseIcED2Ev' filepath='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-2718' is-artificial='yes'/>
<parameter type-id='type-id-6' is-artificial='yes'/>
<return type-id='type-id-5'/>